使用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 has unicode (UTF-8) support, and can recognize 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(, , 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[];
int length = ;
MemoryStream ms = new MemoryStream();
while ((length = s.Read(data, , data.Length)) > )
{
ms.Write(data, , length);
}
ms.Seek(, 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#版gdal库的一个注意事项
作者:朱金灿 来源:http://blog.csdn.net/clever101 在编译完C#版gdal库(x86平台)下,写了一个C#的控制台测试程序,出现下面的错误: 解决办法是将工程的目标平台设 ...
- tesseract库
1.简介 # -*-coding:utf8 -*- #图形验证码识别技术 ''' 阻碍我们爬虫的,有时候是在登录或者请求一些数据时候的图形验证码.因此这里我们讲解 一种能将图片翻译成文字的技术.将图片 ...
- python的tesseract库几个重要的命令
在调用tesseract时,最重要的三个参数是 -l, -oem 和 -psm -l 参数控制识别文本的语言.可以通过命令 tesseract --list-langs 查看已经安装的字库. 支持中 ...
- windos10环境下编译python3版pjsua库
环境:windows10_x64python3.9_x64pjsua-2.10vs2015 pjsua编译参考这里: https://www.cnblogs.com/MikeZhang/p/pjsip ...
- 相似度分析,循环读入文件(加入了HanLP,算法第四版的库)
相似度分析的,其中的分词可以采用HanLP即可: http://www.open-open.com/lib/view/open1421978002609.htm /****************** ...
- 找不到Qt5Cored.dll(Release和Debug版连接了不同的库)
Qt5Cored.dll和Qt5Core.dll文件分别用于Qt软件的Debug版和Release版. 通常会有两个Qt5Core.dll文件,分别位于Qti安装目录下的“Qt5.1.0\5.1.0\ ...
- OCR库Tesseract初探
1.Tesseract 安装及使用 一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Off ...
- 文字识别的google的库 tesseract
https://github.com/tesseract-ocr/tesseract https://github.com/tesseract-ocr/tessdata 字体识 ...
- Tesseract 3.04 + VS2013 配置心得(包括静态库版本号和Release版本号)
研究Tesseract也有几个星期了 走了一些弯路 网上有非常多VS2010的配置心得 但没有VS2013的, 找到一篇之后, 又发现会有一些小问题, 这里记录下来, 也为新人提供一些帮助. Tess ...
随机推荐
- mysql中cast() 和convert()的用法讲解
一.在mysql操作中我们经常需要对数据进行类型转换.此时我们应该使用的是cast()或convert(). 二.两者的对比 相同点:都是进行数据类型转换,实现的功能基本等同 不同点:两者的语法不同, ...
- [转]pyCharm最新2018激活码
https://blog.csdn.net/u014044812/article/details/78727496 因公司的需求,需要做一个爬取最近上映的电影.列车号.航班号.机场.车站等信息,所以需 ...
- P1040 加分二叉树 区间dp
题目描述 设一个nn个节点的二叉树tree的中序遍历为(1,2,3,…,n1,2,3,…,n),其中数字1,2,3,…,n1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第ii个节 ...
- Python线程同步
线程执行 join与setDaemon 子线程在主线程运行结束后,会继续执行完,如果给子线程设置为守护线程(setDaemon=True),主线程运行结束子线程即结束: 如果join()线程,那么主线 ...
- LINQ技术
转载http://www.cnblogs.com/Dlonghow/p/1413830.html Linq (Language Integrated Query,语言集成查询),是微软公司提供的一项新 ...
- sql的连接查询
http://www.cnblogs.com/LeoTerry/archive/2010/03/26/1696988.html
- 3、Qt Project之Socket网络编程
Socket网络编程 Step1:首先完成整个界面的设计 <?xml version="1.0" encoding="UTF-8"?> <u ...
- Spring中 PROPAGATION_REQUIRED 解释 事物是在一个方法里调用其他的方法,一起成功或者一起失败,是方法之间的关系,而不是某一个方法内部的问题。而且要以抛异常的方式来表明方法的失败,以此来导致事物起作用,大家全失败。
事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 事务传播 ...
- Java常用API——时间类
前言:Java.util.*工具包中,包含了集合框架,旧集合类,事件模型,日期和时间设施,国际化和其他使用程序类 (字符串.随机数生成器和位数组) 一.日期类Date 1.概述 Date是一个薄包装类 ...
- 用Java进行大数处理(BigInteger)-hdu1042
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目描述: 代码实现: import java.util.Scanner; import jav ...