TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言
前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。
普通用户使用
参照上一篇教程,在本地安装好TesseractOCR之后,在GitHub的Release页面进行下载。
GitHub地址:https://github.com/Ming-jiayou/TesseractOCR-GUI

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

解压如下所示:

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

识别英文:

使用非常简单方便。
WPF/C#程序员使用
经过简单的调研,发现构建TesseractOCR-GUI主要可以通过两种方式。一种就是对命令行的使用进行封装,另一种就是对TesseractOCR的C++ API进行封装。
对命令行的使用进行封装比较简单,而且目前暂时也满足了我的使用需求,因此目前只实现了这种方式,pytesseract好像也是使用的这种方式。第二种调用Tesseract C++ API的方式,可能得等第一种对命令行的使用进行封装无法满足需求的时候,才会去探索了。
项目结构:

开发工具: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,就是最大的支持!!
还有任何问题,欢迎通过微信公众号与我联系:

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面的更多相关文章
- Android 基于Retrofit+Rxjava搭建的简单易用的网络架构
装逼開始之前,为大家推荐两篇文章,用来更好的学习Retrofit和Rxjava. 在这里我们要感谢互联网装逼行业勇于献身,甘于奉献的的大婶们. 我仅代表个人,给您们跪舔了. Retrofit:Retr ...
- struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb
在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...
- 构建一个简单的基于MVC模式的JavaWeb
零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...
- 基于WPF的酷炫GUI窗口的实现全过程
title: 基于WPF的酷炫GUI窗口的实现全过程 date: 2020-08-14 permalink: /build/wpfgui sidebarDepth: 2 tags: wpf gui 软 ...
- 基于laravel框架构建最小内容管理系统
校园失物招领平台开发 --基于laravel框架构建最小内容管理系统 摘要 针对目前大学校园人口密度大.人群活动频繁.师生学习生活等物品容易遗失的基本现状,在分析传统失物招领过程中的工作效率低下. ...
- 基于Dubbo框架构建分布式服务(一)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- 基于Dubbo框架构建分布式服务
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- 基于 Apache Mahout 构建社会化推荐引擎
基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...
- 【Android Developers Training】 3. 构建一个简单UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- CSP-S 2023 游记
CSP-S 2023 游记 Day 0 明天便是 CSP-S 第一轮了,考试前一天万万不能学什么太复杂,太深奥的东西,最好甚至不要过于强度的用脑,保持放空的轻松地状态,心中不要有压力才是最好的考前状态 ...
- 【赵渝强老师】Oracle的PGA与数据库连接建立的过程
首先,我们来了解一下Oracle的内存结构,如下: 关于Oracle的内存结构,详情请查看:[赵强老师]Oracle数据库的内存结构 (一)PGA的组成结构 PGA主要由以下三部分组成: 私有SQL区 ...
- Java实现随机抽奖的方法有哪些
在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者.以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取.从列表中抽取以及基 ...
- wpf样式模板的使用
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...
- yarn : 无法加载文件 C:\Users\zhulo\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Li nkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + yarn serve
powershell的执行策略问题: 解决办法: 管理员身份打开powershell 输入 set-ExecutionPolicy RemoteSigned 然后选择 a or Y :
- MYSQL存储过程-练习1
MYSQL存储过程-练习1 创建book表 CREATE TABLE `book` ( `boodid` int unsigned NOT NULL AUTO_INCREMENT, `bookname ...
- 如何使用 GoGoCode 一键 Vue2 转换 Vue3
前言 从今年年初开始,项目开始升级优化,将之前的 Vue2 旧版本整体升级到 Vue3 版本.在重写了几个 Vue 文件后,我发现做的都是一些机械性的工作,效率低且重复性大.于是就试着搜索了一下有没有 ...
- Nuxt.js 应用中的 builder:generateApp 事件钩子详解
title: Nuxt.js 应用中的 builder:generateApp 事件钩子详解 date: 2024/10/23 updated: 2024/10/23 author: cmdragon ...
- 从零开始学逆向CTF比赛,免费参加,欢迎来玩!
大家好,我是轩辕. 告诉大家一个好消息:我准备了一次逆向CTF比赛,面向所有人开放,无需购买课程,优秀的小伙伴还有奖励,参赛方式在文末会介绍,欢迎大家一起来玩. 举办这次CTF比赛,是为了检验大家从零 ...
- 5道大厂的JAVA经典面试题
前言 本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式? 有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什 ...