[C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

【框架地址】

https://github.com/charlesw/tesseract
【算法介绍】

Tesseract OCR是一个开源的光学字符识别引擎,它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发,并在2005年被Google收购后成为了开源项目。自那时起,它一直在不断的更新和改进,成为了世界上最流行的OCR引擎之一。

核心技术

Tesseract利用了机器学习的方法,特别是在其后期版本中引入了基于长短时记忆(LSTM)网络的深度学习模型,这显著提高了其对文字的识别能力。Tesseract的OCR过程大致可以分为几个阶段:预处理、文字检测、文字分割、文字识别和后处理。

特点

多语言支持

Tesseract支持100多种语言的文字识别,包括多种字母和符号系统。用户可以根据需要下载和使用特定语言的训练数据。

灵活的预处理

虽然Tesseract本身提供了一些基本的图像预处理功能,但它也允许用户使用其他图像处理工具进行高级预处理,从而提高识别准确率。

可定制性

Tesseract允许用户通过训练自己的模型来优化识别结果,这对于专门的应用或不常见的字体类型尤其有用。

开源和免费

作为一个开源项目,Tesseract不仅免费使用,而且还鼓励开发者参与贡献,这使得它得到了广泛的社区支持和持续的改进。

应用场景

Tesseract OCR可以应用于多种文本识别场景,如:

  • 文档数字化:将纸质文档转化为电子文档,便于存储、检索和编辑。
  • 自动化数据录入:在行业如银行、保险等领域自动化处理表格、发票等文档。
  • 车牌识别:在交通管理和自动化停车系统中用于车牌号的识别。
  • 辅助阅读:帮助视力障碍人士读取各种印刷材料。

技术优势

成熟稳定

作为一个长期存在且经过广泛测试的项目,Tesseract的稳定性和可靠性得到了公认。

社区活跃

Tesseract有一个非常活跃的开源社区,不断提供bug修复、功能更新和支持。

可扩展性

Tesseract的设计使其可以轻松集成到其他应用程序中,并且可以通过插件或脚本扩展功能。

尽管Tesseract在某些复杂场景下的识别准确率可能不及专业的商业OCR软件,但其开源免费的特性以及不断进步的技术,使其在许多情况下仍然是首选的OCR工具。

【效果展示】


【官方实现部分代码】

Basic Text from Image from filepath
from Tesseract.ConsoleDemo/Program.cs
using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)){using (var img = Pix.LoadFromFile(testImagePath)){using (var page = engine.Process(img)){var text = page.GetText();Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());Console.WriteLine("Text (GetText): \r\n{0}", text);Console.WriteLine("Text (iterator):");}}}
Basic Text from Image bytes
FileStream fs = new FileStream(filename, FileMode.Open, file_access);
var ms = new MemoryStream();
fs.CopyTo(ms);
fs.Close();
bytes[] fileBytes = ms.ToArray();
ms.Close();
using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)){using (var img = Pix.LoadFromMemory(fileBytes)){using (var page = engine.Process(img)){var txt = page.GetText();}}}
Image to txt searchable pdf using paths
using (IResultRenderer renderer = Tesseract.PdfResultRenderer.CreatePdfRenderer(@"test.pdf", @"./tessdata", false)){// PDF Titleusing (renderer.BeginDocument("Serachablepdftest")){string configurationFilePath = @"C:\tessdata";using (TesseractEngine engine = new TesseractEngine(configurationFilePath, "eng", EngineMode.TesseractAndLstm)){using (var img = Pix.LoadFromFile(@"C:\file-page1.jpg")){using (var page = engine.Process(img, "Serachablepdftest")){renderer.AddPage(page);}}}}}
Image to pdf returning file bytesvar tmpPdfLocation = "./tessdata/pdf";var sep = Path.PathSeparator;var tmpFile = tmpPdfLocation + sep + Path.GetTempFileName();bytes[] fileBytes = null;using (IResultRenderer renderer = Tesseract.PdfResultRenderer.CreatePdfRenderer(tmpFile, @"./tessdata", false)){// PDF Titleusing (renderer.BeginDocument("Serachablepdftest")){// string configurationFilePath = @"C:\tessdata";using (TesseractEngine engine2 = new TesseractEngine(configurationFilePath, "eng", EngineMode.TesseractAndLstm)){using (var img = Pix.LoadFromFile(@"C:\file-page1.jpg")){using (var page = engine.Process(img, "Searchablepdftest")){renderer.AddPage(page);}}}}}// on dispose file should be createdvar stream = new FileStream(tmpFile, FileMode.Open, FileAccess.Read);MemoryStream ms = new MemoryStream();stream.CopyTo(ms);fileBytes = ms.ToArray();stream.Dispose();ms.Close();// delete tmp fileFile.Delete(tmpFile);


【视频演示】

https://www.bilibili.com/video/BV1uT4y1n7SK/
【源码下载】

https://download.csdn.net/download/FL1623863129/88728947
【测试环境】

vs2019

netframework4.7.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题目:七段码(蓝桥OJ 595)

问题描述: 解题思路: 枚举每一种可能组合(可以使用二进制数表示,每一个二进制就是一种组合),在判断是否符合题目要求的每一个发光灯管相邻(使用并查集方法确定,当每一个发光…

首个云原生、分布式、全栈国产化银行核心业务系统投产上线丨TiDB × 杭州银行

日前,杭州银行新一代核心业务系统成功投产上线。 新核心系统是业内首个实际投产的云原生、分布式、全栈国产化的银行核心系统,是金融科技领域突破关键核心技术应用的重大实践。 新核心系统自上线以来运行安全稳定,大幅提升了业务处理效率&am…

ptaR7-6/zzuli2106 有去有回

题目 输入n个整数,第一趟按从左到右间隔k个数取数据,然后第二趟再从右到左间隔k-1个数取余下的数,如果数据没有取完,下一趟再间隔k-2个从左到右取数据,如此反复,直到所有的数据取完为止。注意:…

【算法】增减序列(贪心,差分)

题目 给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种…

03 - 系统调用

---- 整理自 王利涛老师 课程 实验环境:宅学部落 www.zhaixue.cc 文章目录 1. 系统调用基本概念1.1 一个系统调用的例子1.2 什么是系统调用?软件复用的角度 2. 软中断:系统调用的入口2.1 权限管理2.2 系统调用号2.4 man 2 syscall2.5 实验&am…

t2vec code

文章目录 执行过程preprocess.jl 解释h5 文件结构 执行过程 (base) zzqserver1:~/project/t2vec/preprocessing$ julia porto2h5.jl Processing 1710660 trips… 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 15…

HiDataPlus 3.3.2-005 搭建(个人的一点心得体会 x86 平台)

HDP 集群搭建 前置安装 yum -y install createrepo yum install -y lrzsz yum install -y wget yum install -y vim修改当前集群机器的主机名 hostnamectl set-hostname XXX​ 这里的 XXX 就是要设置的当前机器的主机名称。主机名称是集群唯一的,一定不要重复&am…

解决“百度网盘启动缓慢”问题

最近在使用百度网盘,双击桌面的《百度网盘》图标,发现有等好几分钟,软件才会启动。百度网盘启动太慢了,后面发现百度网盘,使用dll注入技术,附加到很多不相干的进程里,比如附加explorer进程、附加…

使用阿里云镜像创建一个Spring Boot项目

由于现在的idea在创建项目时已经不支持Java8版本了,如果我们还想用8版本,可以使用阿里云镜像创建。所以得改变原有的地址为:https://start.aliyun.com springboot版本选择2开头的任意版本的。 1.配置6个依赖 2.改变下载依赖地址 下载依赖默认…

强化学习求解TSP(八):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…

UE 引擎工具笔记

2023虚幻技术分享会视频 1.2023年虚幻引擎最新功能和技巧 [UFSH2023]2023年虚幻引擎最新功能和技巧 | Chris Murphy Epic Games_哔哩哔哩_bilibili 推荐细看下.总结了UE5的功能大概 2.调试技巧 [UFSH2023]总有一个你不知道的虚幻引擎调试技巧 | 陈拓 Epic Games_哔哩哔哩_…

WPF XAML(一)

一、XAML的含义 问:XAML的含义是什么?为什么WPF中会使用XAML?而不是别的? 答:在XAML是基于XML的格式,XML的优点在于设计目标是具有逻辑性易读而且简单内容也没有被压缩。 其中需要提一下XAML文件在 Visu…