C#版Tesseract库的使用技巧
上一篇介绍了Tesseract库的使用(OCR库Tesseract初探),文末提到了Tesseract是用c/c++开发的,也有C#的开源版本,本篇介绍一下如何使用C#版的Tesseract。
C#版本源码下载地址:https://github.com/charlesw/tesseract
其实在vs中可以直接用NuGet工具进行下载:
打开nuget,搜索tesseract,点安装即可。
源码是vs2015编译的,需要安装vs2015以上版本。
打开项目后如:
我们再添加一个winform项目,画界面如:
实现点击“选择需要识别的图片”,打开一张图片,调用算法并显示结果。比较简单。源码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Tesseract; namespace TesseractDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //选图片并调用ocr识别方法 private void btnRec_Click(object sender, EventArgs e) { //openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { var imgPath = openFileDialog1.FileName; pictureBox1.Image=Image.FromFile(imgPath); string strResult = ImageToText(imgPath); if (string.IsNullOrEmpty(strResult)) { txtResult.Text = "无法识别"; } else { txtResult.Text = strResult; } } } //调用tesseract实现OCR识别 public string ImageToText(string imgPath) { using (var engine = new TesseractEngine("tessdata", "eng", EngineMode.Default)) { using (var img = Pix.LoadFromFile(imgPath)) { using (var page = engine.Process(img)) { return page.GetText(); } } } } } }
有一点要注意的是,tesseract的识别语言包要自己下载后包含到项目里面,并设置为始终复制,或者直接把这个文件包放到运行程序目录(bin\debug)下:
eng是英文字符的意思,要识别其他语言字符,需要自己下载:
Tesseract hasunicode (UTF-8) support, and canrecognize more than 100 languages"out of the box".
这个库支持100种语言的识别
字库下载地址为:https://github.com/tesseract-ocr/tessdata
用OpencvSharp先降噪再调OCR识别:
//用opencv进行降噪处理再ocr识别 private void button3_Click(object sender, EventArgs e) { //从网上读取一张图片 string imgUrl = "https://service.cheshi.com/user/validate/validatev3.php"; MemoryStream ms = ReadImgFromWeb(imgUrl); Image img = Image.FromStream(ms); pictureBox1.Image = img; //降噪 Mat simg = Mat.FromStream(ms, ImreadModes.Grayscale); Cv2.ImShow("Input Image", simg); //阈值操作 阈值参数可以用一些可视化工具来调试得到 Mat ThresholdImg = simg.Threshold(29, 255, ThresholdTypes.Binary); Cv2.ImShow("Threshold", ThresholdImg); Cv2.ImWrite("d:\\img.png", ThresholdImg); textBox1.Text= ImageToText("d:\\img.png"); } /// <summary> /// 从网上读取一张图片 /// </summary> /// <param name="Url"></param> public MemoryStream ReadImgFromWeb(string Url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Credentials = CredentialCache.DefaultCredentials; // 添加授权证书 request.UserAgent = "Microsoft Internet Explorer"; WebResponse response = request.GetResponse(); Stream s = response.GetResponseStream(); byte[] data = new byte[1024]; int length = 0; MemoryStream ms = new MemoryStream(); while ((length = s.Read(data, 0, data.Length)) > 0) { ms.Write(data, 0, length); } ms.Seek(0, SeekOrigin.Begin); //pictureBox1.Image = Image.FromStream(ms); return ms; }
请自行用NuGet程序下载opencvsharp3.0库,参考https://www.cnblogs.com/tuyile006/p/10819570.html
另外专门有篇文章介绍中文识别:Tesseract-OCR识别中文与训练字库实例
以上就是C#版Tesseract库的使用技巧的详细内容,更多关于C# Tesseract库的资料请关注猪先飞其它相关文章!
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25