Loading... ## C#使用Tesseract ### 前言 上篇文章讲述了 Tesseract-orc的安装和使用,这片文章讲一讲在net平台上面如何使用 Tesseract-orc 没有那么复杂的安装教程。 我在使用的时间还是基于Framework ,在网上下载了好多dll文件,浪费我的cdsn积分,最后还是没有成功,最终自己摸索到方法了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b572a6a56cd7415f840700b28c6f6d2e.png) ### 什么是tesseract? Tesseract 最初由惠普实验室支持,用于电子版文字识别,1996年被移植到Windows上,1998年进行了C++化,在2005年Tesseract由惠普公司宣布开源。 2006年到现在,由Google公司维护开发。 ### Net5中的使用 在'Netget'包中直接引用`Tesseract`,就会生成`leptonica-1.80.0.dll'`和`tesseract41.dll` ![](https://img-blog.csdnimg.cn/e7cc7dc44b6e49688cf144cf908f1a03.png) 一般项目适合orc一起使用的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/46eecd02f50a40c7a76dba6c104867f1.png) 问题: ![](https://img-blog.csdnimg.cn/5327da24dcfa45e2bd8963af2d6c447b.png) 解决办法 安装运行时`Emgu.CV.runtime.windows` ![han](https://img-blog.csdnimg.cn/c801baad2133442daf29f231525dae6b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNzMyMzM2,size_16,color_FFFFFF,t_70) 主要依靠 直接返回文字。 ``` //调用tesseract实现OCR识别 public static string ImageToText(string imgPath) { using (var engine = new TesseractEngine("tessdata", "chi_sim", EngineMode.Default)) { using (var img = Pix.LoadFromFile(imgPath)) { using (var page = engine.Process(img)) { return page.GetText(); } } } } ``` 完整代码: ``` public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog of = new OpenFileDialog(); of.Title = "请选择图片"; if (of.ShowDialog() == DialogResult.OK) { string file = of.FileName; Image img = Image.FromFile(file); pictureBox1.Image = img; } Bitmap bitmap = (Bitmap)this.pictureBox1.Image; var path = $"{ DateTime.Now.ToString("yyyyMM")}.jpg"; bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Bmp); Image<Bgr, Byte> imageSource = new Image<Bgr, byte>(path); Image<Gray, Byte> imageGrayscale = imageSource.Convert<Gray, Byte>(); imageGrayscale = randon(imageGrayscale); imageThreshold = imageGrayscale.ThresholdBinary(new Gray(100), new Gray(255)); this.pictureBox2.Image = imageThreshold.ToBitmap(); this.pictureBox2.Image.Save(path); //识别照片 this.label1.Text = ImageToText(path); } Image<Gray, Byte> imageThreshold; //调用tesseract实现OCR识别 public static string ImageToText(string imgPath) { using (var engine = new TesseractEngine("tessdata", "chi_sim", EngineMode.Default)) { using (var img = Pix.LoadFromFile(imgPath)) { using (var page = engine.Process(img)) { return page.GetText(); } } } } /// <summary> /// 旋转校正 /// </summary> /// <param name="imageInput"></param> /// <returns></returns> private Image<Gray, Byte> randon(Image<Gray, Byte> imageInput)//图像投影旋转法倾斜校正子函数定义 { int nwidth = imageInput.Width; int nheight = imageInput.Height; int sum; int SumOfCha; int SumOfChatemp = 0; int[] sumhang = new int[nheight]; Image<Gray, Byte> resultImage = imageInput; Image<Gray, Byte> ImrotaImage; //20度范围内的调整 for (int ang = -20; ang < 20; ang = ang + 1) { ImrotaImage = imageInput.Rotate(ang, new Gray(1)); for (int i = 0; i < nheight; i++) { sum = 0; for (int j = 0; j < nwidth; j++) { sum += ImrotaImage.Data[i, j, 0]; } sumhang[i] = sum; } SumOfCha = 0; for (int k = 0; k < nheight - 1; k++) { SumOfCha = SumOfCha + (Math.Abs(sumhang[k] - sumhang[k + 1])); } if (SumOfCha > SumOfChatemp) { resultImage = ImrotaImage; SumOfChatemp = SumOfCha; } } return resultImage; } } ``` 最后修改:2021 年 08 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏
1 条评论
不会用还真不容易呢