C# 10分鐘完成百度圖片提取文字(文字識別)——入門篇

學習中的苦與樂發表於2019-08-01

  現在圖片文字識別已經很成熟了,比如qq長按圖片,點選圖片識別就可以識別圖片的文字,將不認識的、文字數量大的、或者不能賦值的值進行二次可複製功能。

我們現在就基於百度Ai開放平臺進行個人文字識別,demo使用的是C#控制檯應用程式,後續有需要的可以嫁接到指定專案中使用,比如提供選擇圖片,點選識別,

獲取返回的值。廢話不多說,上乾貨:


 

總體為:

  1. 註冊百度賬號api,建立自己的應用;
  2. 建立vs控制檯應用程式,引入動態連結庫;
  3. 編寫程式碼除錯,效果圖檢視;
  4. 總結。

 

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、總結

   具體業務使用看場景使用不同的介面即可。

這只是一個簡單的識別,針對不能賦值、文字繁多、不認識的字都可以做一個簡單的文字識別,更多內容需要大家去摸索入坑

拜拜,下次再見咯!

 

相關文章