【全代碼攻略】用百度大腦手寫文字識別助力企業降本增效

1、需求描述:html

信息智能化時代,大部分中小企業都用上了ERP等辦公軟件,數字化紙質內容,軟件化管理數據,作到無紙化辦公。但仔細觀察,中小企業仍是有一些工做流程能夠進行改進的。web

例如,公司進行人員應聘時,都是先打印應聘表格,而後讓應聘人員填寫內容,最後由文員將應聘表格的內容輸入到ERP系統內。其中,文員將應聘內容輸入到ERP系統內,這個步驟是至關耗時費力的,若是當天應聘人員比較多,那將花費文員大量的時間去輸入應聘信息。正則表達式

若是可以利用百度的手寫文字識別功能,結合【IOCR自定義模板文字識別】,智能識別應聘表格內容,並將識別結果填入對應的軟件、或是生成相應的EXCEL等電子文檔,那麼文員只須要校對一下識別的內容是否正確,就能一鍵保存/導入,很快的作好應聘信息錄入工做,大量減輕文員的錄入工做。json

以此類推,像請假條、辦公採購單,員工日工資明細等一些表格均可以經過百度手寫文字識別的方法來進行智能識別,極大下降文員的工做量,提升文員的工做效率。windows

此外,在我的應用方面,能夠將我的的會議紀要,演講稿等使用【手寫文字識別】功能,數字化內容存儲起來,能夠結合【百度網盤】實現永久保存。像文字工做者,有些習慣用筆記錄的、不習慣用電腦打字的,到時候均可以採用【手寫文字識別】功能,將文字數據化,稍微整理再上傳到相應的平臺上去。服務器

另外,在學校應用方面,教師批改學生做文,是一件耗時耗力的事情,學生的筆跡各不相同,有時候單單識別學生文字內容就很耗心力,這樣的話,教師每每花費了很大的精力在識別學生文字上去。若是採用【手寫文字識別】功能,將做文數字化,統一成標準文字,再用採起一些【護眼模式】等方法顯示,就大大方便教師閱讀修改,減輕教師的閱讀做文所消耗精力,更加專一於做文思想內容、發現好文章,若是可行,甚至能夠嘗試將這個方法運用到全國的高考做文改卷中去。網絡


2、應用價值:async

一、利用百度【手寫文字識別】功能,結合【IOCR自定義模板文字識別】,AI先後文判斷智能糾錯等功能,可大大下降文員文字錄入工做量,提升文員工做效率,適合大部分中小企業。工具

二、若是能將【手寫文字識別】功能離線化,或者能夠單獨部署到企業本身的服務器上去,那將具備更大的應用前景。佈局

三、利於百度【手寫文字識別】功能,數字化我的/專業文字工做者的演講稿、筆記等,並結合【百度網盤】等實現永久保存。

四、能夠嘗試將【手寫文字識別】運用到學生的做文批改中去,讓教師更加專一於做文的思想內容、發現好文章,甚至推廣到全國的高考做文改卷中去,這樣不只減輕了教師的做文批改工做壓力,同時也能發現更多有思想、有內涵的好文章。


3、使用攻略

說明:本文采用C# 語言,開發環境爲.Net Core 2.1。

一、平臺接入

具體接入方式比較簡單,能夠參考度友愛小妞寶的帖子,可參考到【建立應用程序】這一步驟(主要獲取APPID等信息,調用時會用的),後面的使用因爲我是採用.Net Core 平臺的C#、SDK方案,故有些不一樣,有時間的話,我會另寫一個教程出來:https://ai.baidu.com/forum/topic/show/867951   (感謝度友愛小妞寶)

二、接口調用說明

文字識別接入官方說明文檔(C#,SDK方案):https://ai.baidu.com/docs#/OCR-Csharp-SDK/top

(1)接口描述

對手寫中文漢字、數字進行識別。

 

(2)安裝文字識別 C# SDK

方法一:使用Nuget管理依賴 (推薦)

在NuGet中搜索 Baidu.AI,安裝最新版便可。

packet地址 https://www.nuget.org/packages/Baidu.AI/


方法二:下載安裝 

文字識別 C# SDK目錄結構

Baidu.Aip
├── net35
│   ├── AipSdk.dll // 百度AI服務 windows 動態庫
│   ├── AipSdk.xml // 註釋文件
│   └── Newtonsoft.Json.dll // 第三方依賴
├── net40
├── net45
└── netstandard2.0
├── AipSdk.deps.json
└── AipSdk.dll
1.在官方網站下載C# SDK壓縮工具包:http://ai.baidu.com/sdk#ocr

2.解壓後,將 AipSdk.dll 和 Newtonsoft.Json.dll 中添加爲引用。


(3)新建交互類

// 設置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";

var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
client.Timeout = 60000;  // 修改超時時間


(4)調用代碼

public void HandwritingDemo() {
    var image = File.ReadAllBytes("圖片文件路徑");
    // 調用手寫文字識別,可能會拋出網絡等異常,請使用try/catch捕獲
    var result = client.Handwriting(image);
    Console.WriteLine(result);
    // 若是有可選參數
    var options = new Dictionary{
        {"recognize_granularity", "big"}
    };
    // 帶參數調用手寫文字識別
    result = client.Handwriting(image, options);
    Console.WriteLine(result);
}


(5)返回示例


{
"log_id": 620759800,
"words_result": [
{
"location": {
"left": 56,
"top": 0,
"width": 21,
"height": 210
},
"words": "3"
}
],
"words_result_num": 1
}


4、示例關鍵代碼

一、前臺.cshtml 頁面佈局關鍵代碼

因爲html代碼沒法原生顯示,只能簡單說明一下:

主要是一個form表單,須要設置屬性enctype="multipart/form-data",不然沒法上傳圖片;

form表單裏面有兩個控件:

一個Input,type="file",上傳圖片用;

一個Input,type="submit",提交併返回識別結果。


二、後臺.cshtml.cs調用關鍵代碼

      [BindProperty]
      [Required]
        public IFormFile FileUpload { get; set; }
        private readonly IHostingEnvironment HostingEnvironment;
        public List msg = new List();
        public string curPath { get; set; }

        public async Task OnPostHandwritingAsync()
        {
            msg = new List();
            // Perform an initial check to catch FileUpload class attribute violations.
            if (!ModelState.IsValid)
            {
                return Page();
            }

            string webRootPath = HostingEnvironment.WebRootPath;//wwwroot目錄
           var fileDir = Path.Combine(webRootPath, "服務器圖片保存相對位置,如://BaiduPicture//");
            if (!Directory.Exists(fileDir))
            {
                Directory.CreateDirectory(fileDir);
            }
           string extension = Path.GetExtension(FileUpload.FileName);
           string imgName = Guid.NewGuid().ToString("N") + extension;
           var filePath = Path.Combine(webRootPath, "服務器圖片保存相對位置,如://BaiduPicture//", imgName);

           curPath = Path.Combine("服務器圖片相對位置(須要在 Startup.cs 文件中的 Configure()中先進行設置,開啓虛擬目錄映射功能),如:/BaiduPicture/", imgName);

            using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                await FileUpload.CopyToAsync(fileStream);
            }

            // 設置APPID/AK/SK
           var client = new Baidu.Aip.Ocr.Ocr("你的 Api Key", "你的 SECRET Key");
            var image = System.IO.File.ReadAllBytes(filePath);
            // 調用手寫文字識別, 圖片參數爲本地圖片,可能會拋出網絡等異常,請使用try/catch捕獲
            var result = client.Handwriting(image);//手寫文字識別

            List msgList = result["words_result"].ToList();
            msg.Add("手寫文字識別結果:\n");
            foreach (JToken ms in msgList)
            {
                msg.Add(ms["words"].ToString());
            }
            return Page();
        }
5、效果測試

一、頁面:

二、識別結果:

(1)

(2)

說明:由於攻略主要介紹如何使用手寫文字識別功能,因此對文字處理這塊不進行深刻操做。若是想進一步提升識別結果,能夠採起將識別結果輸出爲字符串,而後使用正則表達式提取相應的文字內容,或者進一步導出爲EXCEL文件等。

6、改進建議

一、存在的問題:

(1)部份內容,正常狀況下,應該將其識別爲兩條記錄的,結果最後變成了一條記錄,特別是【文字-數字-文字-數字】這樣的行信息組合的時候,若是文字、數字的距離較近,很容易將數字和文字識別在一塊兒了,須要改進。

(2)再如像「娘」這樣偏旁部首是單獨的字組成的字時,會識識別成「女良」兩個字,這點也須要改進。(感謝度友134******14的提醒)

(3)目前對稍微潦草的字跡識別率還不是很高,須要改進。

因爲計算機、手機等電子設備的普及,大部分人都習慣了打字,手寫狀況大大減小,由此致使很大一部分人寫的字龍飛鳳舞,比較難以識別(我寫的字就很潦草,有時候連本身都沒法認出來。。。),並且目前來講,中小企業應聘人員的綜合教育水平廣泛較低(普工招的比較多),有的甚至不會寫字,因此致使手寫文字各類各樣。通過測試,百度手寫文字識別能力雖然比較優秀了,可是離真正應用到實際工做中去仍是有必定的距離的。

二、改進建議

(1)結合【IOCR自定義模板文字識別】功能,智能識別模板內容,格式化提取內容,方便開發人員調用(目前好像已支持手寫數字識別,但願能更快增長支持手寫文字識別)。

(2)若是能格式化輸出內容,或一鍵導出EXCEL電子文檔等功能,則更加方便跟EPR等軟件的對接。

(3)能夠運用AI技術,結合先後文智能識別錯別字,修正錯誤或語句問題,提升識別結果。

(4)若能將【手寫文字識別】功能離線話,或能夠部署到企業本身的服務器上去,會有更多的企業願意嘗試,也能將【手寫文字識別】功能運用到【財務報表】等保密性要求較強的方向中去。

(5)將【手寫文字識別】和【百度網盤】、【護眼模式】等工具結合起來,實現我的/專業文字工做者的筆記、演講稿、做文等內容的數字化存儲,方便觀看閱讀。

做者: 讓天涯

相關文章
相關標籤/搜索