使用百度AI進(jìn)行手寫文字識別

一、需求描述:

信息智能化時代,大部分中小企業(yè)都用上了ERP等辦公軟件,數(shù)字化紙質(zhì)內(nèi)容,軟件化管理數(shù)據(jù),做到無紙化辦公。但仔細(xì)觀察,中小企業(yè)還是有一些工作流程可以進(jìn)行改進(jìn)的。

例如,公司進(jìn)行人員應(yīng)聘時,都是先打印應(yīng)聘表格,然后讓應(yīng)聘人員填寫內(nèi)容,最后由文員將應(yīng)聘表格的內(nèi)容輸入到ERP系統(tǒng)內(nèi)。其中,文員將應(yīng)聘內(nèi)容輸入到ERP系統(tǒng)內(nèi),這個步驟是相當(dāng)耗時費(fèi)力的,如果當(dāng)天應(yīng)聘人員比較多,那將花費(fèi)文員大量的時間去輸入應(yīng)聘信息。

如果能夠利用百度的手寫文字識別功能,結(jié)合【IOCR自定義模板文字識別】,智能識別應(yīng)聘表格內(nèi)容,并將識別結(jié)果填入對應(yīng)的軟件、或是生成相應(yīng)的EXCEL等電子文檔,那么文員只需要校對一下識別的內(nèi)容是否正確,就能一鍵保存/導(dǎo)入,很快的做好應(yīng)聘信息錄入工作,大量減輕文員的錄入工作。

以此類推,像請假條、辦公采購單,員工日工資明細(xì)等一些表格都可以通過百度手寫文字識別的方法來進(jìn)行智能識別,極大降低文員的工作量,提高文員的工作效率。


二、應(yīng)用價值:

利用百度【手寫文字識別】功能,結(jié)合【IOCR自定義模板文字識別】,AI前后文判斷智能糾錯等功能,可大大降低文員文字錄入工作量,提高文員工作效率,適合大部分中小企業(yè)。

如果能將【手寫文字識別】功能離線化,或者可以單獨(dú)部署到企業(yè)自己的服務(wù)器上去,那將具有更大的應(yīng)用前景。


三、使用攻略

說明:本文采用C# 語言,開發(fā)環(huán)境為.Net Core 2.1。

1、平臺接入

具體接入方式比較簡單,可以參考度友愛小妞寶的帖子,可參考到【創(chuàng)建應(yīng)用程序】這一步驟(主要獲取APPID等信息,調(diào)用時會用的),后面的使用由于我是采用.Net Core 平臺的C#、SDK方案,故有些不同,有時間的話,我會另寫一個教程出來:https://ai.baidu.com/forum/topic/show/867951(感謝度友愛小妞寶

2、接口調(diào)用說明

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

(1)接口描述

對手寫中文漢字、數(shù)字進(jìn)行識別。


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

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

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

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


方法二:下載安裝

文字識別 C# SDK目錄結(jié)構(gòu)

Baidu.Aip

├── net35

│?? ├── AipSdk.dll // 百度AI服務(wù) windows 動態(tài)庫

│?? ├── AipSdk.xml // 注釋文件

│?? └── Newtonsoft.Json.dll // 第三方依賴

├── net40

├── net45

└── netstandard2.0

├── AipSdk.deps.json

└── AipSdk.dll

1.在官方網(wǎng)站下載C# SDK壓縮工具包:http://ai.baidu.com/sdk#ocr

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


(3)新建交互類

// 設(shè)置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)調(diào)用代碼

public void HandwritingDemo() {

var image = File.ReadAllBytes("圖片文件路徑");

// 調(diào)用手寫文字識別,可能會拋出網(wǎng)絡(luò)等異常,請使用try/catch捕獲

var result = client.Handwriting(image);

Console.WriteLine(result);

// 如果有可選參數(shù)

var options = new Dictionary{

{"recognize_granularity", "big"}

};

// 帶參數(shù)調(diào)用手寫文字識別

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

}

四、示例關(guān)鍵代碼

1、前臺.cshtml 頁面布局關(guān)鍵代碼

由于html代碼無法原生顯示,只能簡單說明一下:

主要是一個form表單,需要設(shè)置屬性enctype="multipart/form-data",否則無法上傳圖片;

form表單里面有兩個控件:

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

一個Input,type="submit",提交并返回識別結(jié)果。

2、后臺.cshtml.cs調(diào)用關(guān)鍵代碼

[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, "服務(wù)器圖片保存相對位置,如://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, "服務(wù)器圖片保存相對位置,如://BaiduPicture//", imgName);

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

using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))

{

await FileUpload.CopyToAsync(fileStream);

}

// 設(shè)置APPID/AK/SK

var client = new Baidu.Aip.Ocr.Ocr("你的 Api Key", "你的 SECRET Key");

var image = System.IO.File.ReadAllBytes(filePath);

// 調(diào)用手寫文字識別, 圖片參數(shù)為本地圖片,可能會拋出網(wǎng)絡(luò)等異常,請使用try/catch捕獲

var result = client.Handwriting(image);//手寫文字識別

List msgList = result["words_result"].ToList();

msg.Add("手寫文字識別結(jié)果:");

foreach (JToken ms in msgList)

{

msg.Add(ms["words"].ToString());

}

return Page();

}

五、效果測試

1、頁面:

2、識別結(jié)果:

(1)

(2)

說明:因為攻略主要介紹如何使用手寫文字識別功能,所以對文字處理這塊不進(jìn)行深入操作。如果想進(jìn)一步提高識別結(jié)果,可以采取將識別結(jié)果輸出為字符串,然后使用正則表達(dá)式提取相應(yīng)的文字內(nèi)容,或者進(jìn)一步導(dǎo)出為EXCEL文件等。

六、改進(jìn)建議

1、存在的問題:

(1)部分內(nèi)容,正常情況下,應(yīng)該將其識別為兩條記錄的,結(jié)果最后變成了一條記錄,特別是【文字-數(shù)字-文字-數(shù)字】這樣的行信息組合的時候,如果文字、數(shù)字的距離較近,很容易將數(shù)字和文字識別在一起了,需要改進(jìn)。

(2)再如像“娘”這樣偏旁部首是單獨(dú)的字組成的字時,會識識別成“女良”兩個字,這點(diǎn)也需要改進(jìn)。(感謝度友134******14的提醒)

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

由于計算機(jī)、手機(jī)等電子設(shè)備的普及,大部分人都習(xí)慣了打字,手寫情況大大減少,由此導(dǎo)致很大一部分人寫的字龍飛鳳舞,比較難以識別(我寫的字就很潦草,有時候連自己都無法認(rèn)出來。。。),而且目前來說,中小企業(yè)應(yīng)聘人員的綜合教育水平普遍較低(普工招的比較多),有的甚至不會寫字,所以導(dǎo)致手寫文字各種各樣。經(jīng)過測試,百度手寫文字識別能力雖然比較優(yōu)秀了,但是離真正應(yīng)用到實(shí)際工作中去還是有一定的距離的。

2、改進(jìn)建議

(1)結(jié)合【IOCR自定義模板文字識別】功能,智能識別模板內(nèi)容,格式化提取內(nèi)容,方便開發(fā)人員調(diào)用(目前好像已支持手寫數(shù)字識別,希望能更快增加支持手寫文字識別)。

(2)如果能格式化輸出內(nèi)容,或一鍵導(dǎo)出EXCEL電子文檔等功能,則更加方便跟EPR等軟件的對接。

(3)可以運(yùn)用AI技術(shù),結(jié)合前后文智能識別錯別字,修正錯誤或語句問題,提高識別結(jié)果。

(4)若能將【手寫文字識別】功能離線話,或可以部署到企業(yè)自己的服務(wù)器上去,會有更多的企業(yè)愿意嘗試,也能將【手寫文字識別】功能運(yùn)用到【財務(wù)報表】等保密性要求較強(qiáng)的方向中去。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容