赞
踩
微信公众号“dotNET跨平台”的文章《c#实现图片文体提取》(参考文献3)介绍了C#图像文本识别模块Tesseract,后者是tesseract-ocr(参考文献2) 的C#封装版本,目前版本为5.2,关于Tesseract的详细介绍请见参考文献1和5,本文主要测试Tesseract模块的基本用法。
之前测试过IronOCR和PaddleSharp,本文复用IronOCR的测试代码,在NuGet包管理器中安装Tesseract包,如下图所示:
主要调用TesseractEngine类加载语言包、设置识别语言等,其构造函数原型如下所示。其中输入参数中的datapath指定语言包路径,安装NuGet包时不会安装语言包,需要单独下载,可以在参考文献2或者Tesseract官网中下载,language参数指定识别语言,语言名称对应语言包中文件名的开头部分(如chi_sim.traineddata对应的简体中文语言为chi_sim,eng.traineddata对应的英文为eng),engineMode参数对应的是识别引擎类型,其可选值如下所示。
public TesseractEngine(string datapath, string language, EngineMode engineMode) public enum EngineMode { // // 摘要: // Only the legacy tesseract OCR engine is used. TesseractOnly, // // 摘要: // Only the new LSTM-based OCR engine is used. LstmOnly, // // 摘要: // Both the legacy and new LSTM based OCR engine is used. TesseractAndLstm, // // 摘要: // The default OCR engine is used (currently LSTM-ased OCR engine). Default }
调用TesseractEngine类中的Process函数识别图片内容,其函数原型如下,第一个参数指定待识别的图片(Pix类为Tesseract模块自带类,可以调用Pix.LoadFromFile函数生成实例对象),第二个参数为图片处理方式,取值见下面代码所示。Process函数返回Page类实例对象,从中可以获取识别结果。
public Page Process(Pix image, PageSegMode? pageSegMode = null) public enum PageSegMode { // // 摘要: // Orientation and script detection (OSD) only. OsdOnly, // // 摘要: // Automatic page sementation with orientantion and script detection (OSD). AutoOsd, // // 摘要: // Automatic page segmentation, but no OSD, or OCR. AutoOnly, // // 摘要: // Fully automatic page segmentation, but no OSD. Auto, // // 摘要: // Assume a single column of text of variable sizes. SingleColumn, // // 摘要: // Assume a single uniform block of vertically aligned text. SingleBlockVertText, // // 摘要: // Assume a single uniform block of text. SingleBlock, // // 摘要: // Treat the image as a single text line. SingleLine, // // 摘要: // Treat the image as a single word. SingleWord, // // 摘要: // Treat the image as a single word in a circle. CircleWord, // // 摘要: // Treat the image as a single character. SingleChar, SparseText, // // 摘要: // Sparse text with orientation and script detection. SparseTextOsd, // // 摘要: // Treat the image as a single text line, bypassing hacks that are specific to Tesseract. RawLine, // // 摘要: // Number of enum entries. Count }
Page类中通过调用GetText函数获取图片中所有识别出的汇总的文本,其还支持如下函数获取文本内容或文本区域信息,后续会继续学习其用法。
采用Tesseract模块的基本用法得到的图片文字识别效果如下所示。大部分可以识别出来,但是识别带车牌的图片不管是Tesseract,还是之前的IronOCR和PaddleSharp,效果都比较差,不清楚是设置的问题,还是语言包用得不对。
参考文献
[1]https://github.com/charlesw/tesseract/
[2]https://github.com/tesseract-ocr/tesseract/tree/main/src
[3]https://www.sohu.com/a/722507167_121124363
[4]https://github.com/tesseract-ocr/tessdata/
[5]https://zhuanlan.zhihu.com/p/578700314
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。