当前位置: 首页 > news >正文

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面

前言

前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。

普通用户使用

参照上一篇教程,在本地安装好TesseractOCR之后,在GitHub的Release页面进行下载。

GitHub地址:https://github.com/Ming-jiayou/TesseractOCR-GUI

image-20241207134914277

推荐选择依赖框架的压缩包,体积比较小:

image-20241207135004215

解压如下所示:

image-20241207135159013

双击打开即可使用,如果显示你没有安装框架,点击链接,下载安装一下框架,即可打开使用。

识别中文:

image-20241207135447692

识别英文:

image-20241207135519142

使用非常简单方便。

WPF/C#程序员使用

经过简单的调研,发现构建TesseractOCR-GUI主要可以通过两种方式。一种就是对命令行的使用进行封装,另一种就是对TesseractOCR的C++ API进行封装。

对命令行的使用进行封装比较简单,而且目前暂时也满足了我的使用需求,因此目前只实现了这种方式,pytesseract好像也是使用的这种方式。第二种调用Tesseract C++ API的方式,可能得等第一种对命令行的使用进行封装无法满足需求的时候,才会去探索了。

项目结构:

image-20241207140458038

开发工具:Visual Studio 2022

.NET版本:.NET 8

使用的包:Prism + WPF UI

核心代码:

  private void ExecuteOCRCommand(){string command;switch(SelectedLanguage){case "中文":command = $"tesseract {SelectedFilePath} stdout -l chi_sim quiet";break;case "英文":command = $"tesseract {SelectedFilePath} stdout -l eng quiet";break;default:command = $"tesseract {SelectedFilePath} stdout -l chi_sim quiet";break;}  // 创建一个新的 ProcessStartInfo 对象ProcessStartInfo processStartInfo = new ProcessStartInfo{FileName = "cmd.exe", // 使用 cmd.exe 作为命令解释器Arguments = $"/c {command}", // 传递命令作为参数,/c 表示执行命令后退出RedirectStandardOutput = true, // 重定向标准输出RedirectStandardError = true, // 重定向标准错误UseShellExecute = false, // 不使用 Shell 执行CreateNoWindow = true, // 不创建新窗口StandardOutputEncoding = Encoding.GetEncoding("UTF-8"), // 设置标准输出的编码StandardErrorEncoding = Encoding.GetEncoding("UTF-8") // 设置标准错误的编码};// 创建一个新的 Process 对象Process process = new Process{StartInfo = processStartInfo};// 启动进程process.Start();// 读取输出OCRText = process.StandardOutput.ReadToEnd();// 读取错误(如果有)string error = process.StandardError.ReadToEnd();// 等待进程退出process.WaitForExit();}

最后

本项目可以帮助人们更简单方便地使用TesseractOCR,对WPF/C#新手程序员,也可以当作一个简单的练手小项目。

如果对你有所帮助,点颗star,就是最大的支持!!

http://www.lryc.cn/news/501883.html

相关文章:

  • Elasticsearch高性能实践
  • 软件测试--录制与回放脚本
  • nodejs 06.npm的使用以及package.json详解
  • 如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档
  • 颜色的基本处理
  • 跟李笑来学美式俚语(Most Common American Idioms): Part 66
  • 爬虫技术简介
  • 如何打开Windows10的设备管理器
  • scala列表
  • c++检查某一文件是否存在
  • Scala的隐式类,隐式参数和值,隐式对象
  • LabVIEW实现HTTP通信
  • 【EXCEL】 获取多列中 不为空的那一个数据
  • VBA API 概述 | 宏编程
  • pythonOpenCV篇:0基础带你python入门之常用函数
  • 第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③
  • 【每日一题 基础题】验证回文串
  • 【Hadoop】-- hadoop3.x default port
  • SQL Server:只有MDF文件,如何附加数据库
  • 深入理解代理模式(Proxy):静态代理、动态代理与AOP
  • 项目中如何选择JVM垃圾回收器?
  • 如何借助5G网关实现油罐车安全在线监测
  • Edge SCDN的独特优势有哪些?
  • 在Goland中对goroutine协程断点调试
  • 解密分布式锁:保障系统一致性的关键
  • Redis 击穿、穿透与雪崩:深度解析与应对策略
  • 8086处理器的寻址方式
  • Mask实现裁剪的原理浅析
  • 每隔一秒单片机向电脑发送一个16进制递增数据
  • 逆向攻防世界CTF系列56-easy_Maze