現在圖片文字識別已經很成熟了,比如qq長按圖片,點選圖片識別就可以識別圖片的文字,將不認識的、文字數量大的、或者不能賦值的值進行二次可複製功能。
我們現在就基於百度Ai開放平臺進行個人文字識別,demo使用的是C#控制檯應用程式,後續有需要的可以嫁接到指定專案中使用,比如提供選擇圖片,點選識別,
獲取返回的值。廢話不多說,上乾貨:
總體為:
- 註冊百度賬號api,建立自己的應用;
- 建立vs控制檯應用程式,引入動態連結庫;
- 編寫程式碼除錯,效果圖檢視;
- 總結。
1、建立百度AI文字識別應用
在百度AI開放平臺中,登入自己的百度賬號,點選“文字識別”服務中的“通用場景文字識別”,選擇“建立應用”,填好應用名稱,選擇應用型別,填好應用描述,這樣就建立好了“通用場景文字識別”服務。
具體不廢話,不知道的小夥伴可以移步看這裡:C# 10分鐘完成百度人臉識別——入門篇。
建立完成後會生成APPID、APP Key、Secret Key,這些是關鍵內容,後面要用。
2、建立VS控制檯應用程式,引入動態連結庫
首先我們建立一個VS控制檯應用程式,這裡就不詳細說明。
然後引入百度Baidu.AI動態連結庫,步驟如下,小編使用2017,所以直接在NuGet中搜尋Baidu.AI安裝即可。
安裝文字識別 C# SDK
C# SDK 現已開源! https://github.com/Baidu-AIP/dotnet-sdk
** 支援平臺:.Net Framework 3.5 4.0 4.5, .Net Core 2.0 **
方法一:使用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
如果需要在 Unity 平臺使用,可引用工程原始碼自行編譯。
安裝
1.在官方網站下載C# SDK壓縮工具包。
2.解壓後,將 AipSdk.dll
和 Newtonsoft.Json.dll
中新增為引用。
3、編寫程式碼除錯,效果圖檢視
建立一個空資料夾,命名為Image,存一個張有文字的圖片,做除錯。
在Program.cs中編寫程式碼,程式碼編寫如下,可以直接拷貝進行除錯。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace Recognition { public class Program { static void Main(string[] args) { //AK/SK var API_KEY = "FGPi0QpCbZxZxBaN6dvqt87X"; var SECRET_KEY = "HunNq6XsLjF3a7aCAuirVaVQO7CKBuwW"; var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY); client.Timeout = 60000; // 修改超時時間 var image = File.ReadAllBytes("E:\\Work Demo\\圖片提取文字\\Recognition\\Recognition\\Image\\img.jpg"); var url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1564654456007&di=7832dd6f515e654bdf5074e47b6803b1&imgtype=0&src=http%3A%2F%2Fpic.962.net%2Fup%2F2018-5%2F2018527102938219310.jpg"; // 呼叫通用文字識別, 圖片引數為本地圖片,可能會丟擲網路等異常,請使用try/catch捕獲 //使用者向服務請求識別某張圖中的所有文字 var result = client.GeneralBasic(image); //本地圖圖片 //var result = client.GeneralBasicUrl(url); //網路圖片 //var result = client.Accurate(image); //本地圖片:相對於通用文字識別該產品精度更高,但是識別耗時會稍長。 //var result = client.General(image); //本地圖片:通用文字識別(含位置資訊版) //var result = client.GeneralUrl(url); //網路圖片:通用文字識別(含位置資訊版) //var result = client.GeneralEnhanced(image); //本地圖片:呼叫通用文字識別(含生僻字版) //var result = client.GeneralEnhancedUrl(url); //網路圖片:呼叫通用文字識別(含生僻字版) //var result = client.WebImage(image); //本地圖片:使用者向服務請求識別一些背景複雜,特殊字型的文字。 //var result = client.WebImageUrl(url); //網路圖片:使用者向服務請求識別一些背景複雜,特殊字型的文字。 Console.WriteLine(result); } } }
下面註釋了的每一行都是一種識別,更多識別請看官網:https://ai.baidu.com/docs#/OCR-Csharp-SDK/top
呼叫兩個,一個精準,一個不精準,先看精準的:
呼叫的是:var result = client.GeneralBasic(image);,最後一個字沒識別出來
我的圖片文字是“做個快樂讀書人”,最後的“人”沒識別出來,我們換一個能後識別複雜背景的,
呼叫的是:var result = client.GeneralEnhanced(image);
4、總結
具體業務使用看場景使用不同的介面即可。
這只是一個簡單的識別,針對不能賦值、文字繁多、不認識的字都可以做一個簡單的文字識別,更多內容需要大家去摸索入坑
拜拜,下次再見咯!