[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/
【源码下载】
【测试环境】

vs2019

netframework4.7.2

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

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

相关文章

api网关-kong

选型 api网关相关功能 服务的路由 动态路由负载均衡 服务发现 限流 熔断、降级 流量管理 黑白名单反爬策略 控制台:通过清晰的UI界面对网关集群进行各项配置。 集群管理:Goku网关节点是无状态的,配置信息自动同步,支持节点水…

7.云原生之jenkins集成SonarQube

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 文章目录 搭建 …

JS 深克隆(深克隆不考虑函数)深拷贝deepClone

js封装方法实现深拷贝 1.新建名为tools.js的文件,添加内容: export const deepClone (obj, result) > { var result result || {}; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { if (typeof obj[prop] object && obj[prop] …

二维0-1背包问题

题目来源:8. 二维费用的背包问题 - AcWing题库 题目: 有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。 每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。 求解将哪些物品装入背包,可…

SpringSecurity 密码加密登录

SpringSecurity 密码加密登录 1.前端所需文件2.后端所用工具类3.登录代码4.灵魂一问 1.前端所需文件 import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密钥对生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqz…

BGP公认任意属性——MED(二)

BGP公认任意属性有两个,分别是:Local-preference 和 MED,本期介绍MED。 点赞关注,持续更新!!! MED 特点 MED (多出口鉴别器),也称为BGP COST,…

usb静电防护芯片选择

方案1 USBLC6-2SC6 优缺点 优点:进出使用不同的焊盘,如果没有焊接好信号必定不能通过。有效的避免了虚焊导致故障。 缺点:不能省略,调试时也不能省略。 原理图 参考价格 参考来源 USB切换方案,多电脑共用USB方案…

高级路由学习试题

文章目录 高级路由学习试题一.高级路由题目答案 二.OSPF 相关答案 三.基础知识答案 高级路由学习试题 一.高级路由题目 1.以下属于ITOIP特性的有() A、智能 B、开放 C、融合 D、标准 2.层级化网络模型将网络划分为() A、汇…

“掌握家庭收支,轻松规划未来,记录日常开销的利器!“

你是否经常对家庭开支感到困惑,不知道钱都花在哪里了?或者想要更好地规划家庭的财务,却无从下手?现在,有了我们的收支明细工具,这些问题都将迎刃而解! 第一步:首先我们要进入晨曦记账…

Mxnet导出onnx模型

Mxnet导出onnx模型 requirements mxnet1.9.1python3.8onnxsim 导出模型 import os import mxnet as mx import numpy as np import onnx from onnx import checker from mxnet.onnx import export_model from mxnet.gluon.model_zoo import vision from onnxsim import sim…

java 常⽤的线程池模式CachedThreadPool

线程池中的线程数量是可变的。 当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。 如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新的线程来处理新任务。 使用场景&#x…

遗传算法 (Genetic Algorithm, GA) 详解与实现

文章目录 基本思想基本概念基本操作算法基本步骤代码实现参考文献基本思想 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则,它最初由美国Michigan大学的J. Holland教授于1967年提出。 遗传算法是从代表问题…

02.构建和使用的大型语言模型(LLMs)阶段

我们为什么要建立自己的LLMs?LLM从头开始编码是了解其机制和局限性的绝佳练习。此外,它还为我们提供了必要的知识,可以保留或微调现有的开源LLM架构,以适应我们自己的特定领域的数据集或任务。 研究表明,在建模性能方面,定制(LLMs为特定任务或领域量身定制的)可以胜过…

如何在 Flutter 中使用 Tree Shaking 功能优化应用程序的性能

Tree Shaking 是 Fl​​utter 中的一项关键优化技术,可最大限度地减少应用程序 JavaScript 包的大小。它有助于减少应用程序的初始加载时间,提高运行时性能,并确保您的应用程序仅包含实际需要的代码。在本文中,我们将探讨什么是 T…

#华为nova12#系列带你解锁新年第一拍

这一次,华为nova 12 Ultra及nova 12 Pro为可变光圈赋予全新定义,让你无论是记录日常生活,自拍、还是捕捉萌宠、大合影、拍风景或者夜景光源都能轻松驾驭。 智能物理可变光圈让每一个场景都有适宜的光圈选择。可变光圈,全方位出圈…

民安智库(第三方公众满意度调查):物业满意度调查问卷调查实施中,关键问题不容忽视

在开展物业满意度调查问卷调查时,实施过程中需要注意一些关键问题,以确保调查的可靠性和有效性。本文将分享民安智库在物业满意度调查方面的实践经验,探讨在问卷调查实施中需要注意的问题。 在实施问卷调查之前,要明确调查的目标…

Python流程控制语句

目录 一、分支结构 (一)单分支语句 (二)双分支语句 (三)多分支语句 (四)嵌套的分支语句 二、循环结构 循环结构概述 (一)for循环 (二&am…

产品经理须知 | 电商API接口接入知识小结

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

【网络】网络层ICMP协议

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

数据结构02附录02:哈希表[C++]

图源:文心一言 上机题目练习整理~🥝🥝 本篇作为线性表的代码补充,每道题提供了优解和暴力解算法,供小伙伴们参考~🥝🥝 第1版:在力扣新手村刷题的记录,优解是Bard老师提…