使用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 ...
随机推荐
- python之logging
1.简单使用 # CRITICAL, ERROR, WARNING, INFO, DEBUG) cewid import logging logging.basicConfig(level=loggi ...
- Python学习(七) —— 装饰器、迭代器、生成器
一.装饰器(decorator) 1.装饰器的本质是闭包函数,作用:在不改变函数的调用方式的情况下,给函数的前后添加新的功能 #装饰器的固定结构 def warpper(func): #定义装饰器函数 ...
- Docker 二进制安装docker
https://blog.csdn.net/bruce_yds/article/details/80035714
- 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...
- python josn包
Python josn包中的编码与解码方法 对于Python数据类型进行编码解码 json.dumps 对python的数据类型进行json格式编码 :(将dict转为json格式) eg: imp ...
- 数仓1.4 |业务数仓搭建| 拉链表| Presto
电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...
- poj 3067 Japan 【树状数组】
<题目链接> 题目大意: 有两个点集,这两个点集从上至下分别从1~n,1~m编号,现在给出n组数据,(x,y),表示左边点集编号为x的点与右边点集编号为y的点相连,现在要求计算这些线段的交 ...
- js函数和变量的声明与执行顺序
一.函数执行顺序 1.正常顺序 function f(){ alert(2); } f(); //alert 2 所有浏览器都能测试通过. 2.倒序调用 f(); //alert 2 function ...
- ubantu 14.04中安装npm+node.js+react antd
今天折腾了半天,各种安装问题,最终还是装上了: 1.安装npm $ sudo apt install npm 2.升级npm $ sudo npm install npm@latest -g 输入np ...
- SpringBoot使用AOP
本文介绍SpringBoot中使用Spring AOP. 简介 AOP简介 AOP可能对于广大开发者耳熟能详,它是Aspect Oriented Programming的缩写,翻译成中文就是:面向切面 ...