C#識別圖上的文字


因為編程是業余的,所以寫的東西不規范,大家湊合看:

一、准備工作

      1、dll下載:用的是百度雲API,到官網上下載C#SDK http://ai.baidu.com/sdk#ocr,文字識別對應版本:3.6.11 ;解壓對應.net版本,在項目引用 以下兩個dll;

  2、百度雲上,利用百度帳號登錄Web控制台后,創建生成Access Key ID / Secret Access Key密鑰對,下面程序要用到,生成方法可查看官方幫助文檔:https://cloud.baidu.com/doc/Reference/s/9jwvz2egb

二、程序開始

  1、新建一個窗體,拉入一個pictureBox和textbox分別用來存放圖片和識別后的文字,其它不說了,直接看后台主代碼:

//引用
using Newtonsoft.Json;     /// <summary> ///定義 apikey,secret key /// APP_ID = "你的 App ID"; /// API_KEY = "你的 Api Key"; /// SECRET_KEY = "你的 Secret Key"; /// </summary> public class ApiMessage { public const string API_ID = " 省略 "; public const string API_KEY = "省略"; public const string SECRET_KEY ="省略"; }      /// <summary> /// 圖片上文字識別方式 /// </summary> /// <param name="imgUrl">圖片路徑</param> /// <param name="way">GeneralBasic(普通識別);AccurateBasic(高精度識別)</param> private void RecognitionWay(string imgUrl,string way) { var image = File.ReadAllBytes(imgUrl); var client = new Baidu.Aip.Ocr.Ocr(ApiMessage.API_KEY, ApiMessage.SECRET_KEY); client.Timeout = 60000; // 修改超時時間 var result=client.AccurateBasic(image); // 如果有可選參數 var options = new Dictionary<string, object>{ {"language_type", "CHN_ENG"},//語言 {"detect_direction", "true"},//圖片方向 {"probability", "true"}//圖片識別成功可能性 }; // 帶參數調用通用文字識別,識別方式有很多種,我只是取了其中常用的兩種,其它方式可以查看官網幫助文檔 switch(way) { case"AccurateBasic": result = client.AccurateBasic(image, options); break; case"GeneralBasic": result = client.GeneralBasic(image, options); break; } string getJson = result.ToString();
       //關鍵:result返回的是一個一串Json格式的數據,具體大家可以單獨輸出查看;
       //所以要解析這個JSON,還需一個幫助類JsonImage,然后用JSON反序列化,最后StringBuilder拼接 JsonImage.Root rt = JsonConvert.DeserializeObject<JsonImage.Root>(getJson);//JSON反序列化 StringBuilder sb = new StringBuilder(); for (int i = 0; i < rt.words_result.Count; i++) { textBox1.Text = sb.AppendLine(rt.words_result[i].words).ToString(); } }
  
  
2、建一個用來解析JSON的輔助類JsonImage.cs

class JsonImage { public class Probability { /// <summary> /// /// </summary> public double variance { get; set; } /// <summary> /// /// </summary> public double average { get; set; } /// <summary> /// /// </summary> public double min { get; set; } } public class Words_resultItem { /// <summary> /// 精確識別圖片上的文字 /// </summary> public string words { get; set; } /// <summary> /// /// </summary> public Probability probability { get; set; } } public class Root { /// <summary> /// /// </summary> public Int64 log_id { get; set; } /// <summary> /// /// </summary> public int direction { get; set; } /// <summary> /// /// </summary> public int words_result_num { get; set; } /// <summary> /// /// </summary> public List<Words_resultItem> words_result { get; set; } } }

  

三、一個簡單的識別圖片文字程序就完成了,看看效果(標點和文字都能正確識別)

    注:用AppendLine初步解決了分段問題,但是段落開頭未控行,估計還是得用正則,有能力的大神完善下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM