PRivate static void TesseractSample() { var testImagePath = "phototest.tif"; try { using (var engine = new TesseractEngine(@"../../tessdata", "eng", EngineMode.Default)) { using (var img = Pix.LoadFromFile(testImagePath)) { using (var page = engine.Process(img)) { var text = page.GetText(); Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence()); Console.WriteLine("Text (GetText): /r/n{0}", text); Console.WriteLine("Text (iterator):"); using (var iter = page.GetIterator()) { iter.Begin(); do { do { do { do { if (iter.IsAtBeginningOf(PageIteratorLevel.Block)) { Console.WriteLine("<BLOCK>"); } Console.Write(iter.GetText(PageIteratorLevel.Word)); Console.Write(" "); if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word)) { Console.WriteLine(); } } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word)); if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine)) { Console.WriteLine(); } } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine)); } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para)); } while (iter.Next(PageIteratorLevel.Block)); } } } } } catch (Exception e) { Console.WriteLine("Unexpected Error: " + e.Message); Console.WriteLine("Details: "); Console.WriteLine(e.ToString()); } Console.WriteLine("Press anykey to end"); Console.ReadKey(); }使用MS cognitive做OCR1. 有一個Cognitive 的賬號。2. 準備一個測試圖片3. 測試代碼:
... MS_OCRApi("phototest.tif");... static async void MS_OCRApi(string pathOfImage) { var client = new HttpClient(); var queryString = HttpUtility.ParseQueryString(string.Empty); const string API_KEY = "{your key}"; // Request headers client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", API_KEY); // Request parameters queryString["language"] = "unk"; queryString["detectOrientation "] = "true"; var uri = "https://westus.api.cognitive.microsoft.com/vision/v1.0/ocr?" + queryString; HttpResponseMessage response; // Request body byte[] byteData = File.ReadAllBytes(pathOfImage); using (var content = new ByteArrayContent(byteData)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); response = await client.PostAsync(uri, content); var s = new MemoryStream(); await response.Content.CopyToAsync(s); var str = Encoding.UTF8.GetString(s.ToArray()); var results = JsonConvert.DeserializeObject<MsOCRResult>(str); Console.WriteLine("Results :"); var lines = results.regions.SelectMany(x => x.lines); foreach (var ocrLine in lines) { Console.WriteLine(ocrLine); } Console.ReadKey(); } }對比兩種OCR:1. MS Cognitive Service是RESTful api based,支持多種客戶端而且不用關心機器學習過程,但是收費(每月5000個call,1分鐘20個call免費)。不過可考慮使用緩存來降低成本。2. Tesseract是dll based。因此需要不斷更新訓練數據,如果需要支持多客戶端,需要自己wrap一個RESTful。好處就是免費。
新聞熱點
疑難解答