使用.NET开发一个屏幕OCR工具

本文将介绍使用.NET开发的一款桌面截图 OCR 工具,软件已开源,地址:https://github.com/sangyuxiaowu/Snipping_OCR

背景

因为不同地方人们的使用习惯不同,国内可能截图更多的是使用QQ,微信等即时聊天工具提供的截图功能。所以我们竟然可能会遇到这样的场景:按了截图快捷键却发现并没有任何反应,尝试了多次才意识到 —— 没有开聊天软件。

当我们需要OCR识别时也是经常通过这些社交软件,QQ可以在电脑端使用,微信的文字识别却是需要在手机端识别后发给电脑端。

e7d796043b09e095129efa513c75eead.png
QQ截图OCR

作为一个老年人,QQ 已经不怎么用了,而且 QQ 文字识别的结果复制编辑不是很方便。并且针对保密级别比较高的工作,我们还是更倾向于离线的 OCR 工具。

软件的实现

软件的设计非常简单,通过调用 Windows 系统本身的截图功能,在用户截图后,从剪贴板获取到图片后通过 PaddleOCRSharp 来进行 OCR 的识别,然后将结果输出。

软件的难点之一其实调用系统的截图,中间的波折可以查看今天推送的另一篇文章《为应用添加截图功能》。

OCR 识别已经非常成熟了,百度开源的 PaddleOCR 框架相对 Tesseract 中文识别的效果好太多太多了。得益于开源项目 PaddleOCRSharp[1] 对C++代码修改并封装的.NET的工具类库,我们可以方便的在 .NET 项目中实现 OCR 功能。

var ocrResult = new OCRResult();
using PaddleOCREngine engine = new PaddleOCREngine(null, new OCRParameter());
ocrResult = engine.DetectText(imgfile);

ocrResult 的返回结果是带坐标位置的,我们可以通过对其进行进一步的处理实现比如身份证的 OCR 识别。

若想使用其开发 WebAPI ,之前版本可以直接返回 ocrResult,最近某次更新版本后直接返回数据都是空的,可做如下数据处理:

List<Json_TextBlock> res = new List<Json_TextBlock>();
foreach(var item in ocrResult.TextBlocks)
{var points = new List<object>();foreach (var p in item.BoxPoints){points.Add(new { p.X, p.Y });}res.Add(new Json_TextBlock{Score = item.Score,BoxPoints = points,Text = item.Text});
}// 处理适配新版本的 json 问题
/// <summary>
/// 识别的文本块
/// </summary>
public class Json_TextBlock
{public List<object> BoxPoints { get; set; } = new List<object>();public string Text { get; set; }/// <summary>/// 置信度/// </summary>public float Score { get; set; }
}

软件使用

c69395a07f3ab092deccb9ed99466eea.png
Snipping_OCR

可以前往 Github 或 Gitee 下载 https://gitee.com/sang93/Snipping_OCR/releases/

双击 Snipping_OCR.exe 启动软件,最小化按钮可将其最小化到系统托盘,关闭则为退出软件,最小化后双击托盘可显示主界面。

软件启动会尝试注册全局热键 Ctrl + Alt + A 可以使用该热键来启动截图识别,暂时不支持修改设置,若快捷无法正常使用,可以使用其他软件或者系统自带的截图工具 “Win + Shift + S”截图后,在托盘使用右键菜单 “识别剪贴板”来进行 OCR 识别。

bb272b7db1ac1a5702d1587ef9f104db.png
识别剪贴板

可以将图片拖放到左边空白区域来识别,复制图片文件后也可以在托盘使用右键菜单 “识别剪贴板”来进行 OCR 识别。

References

[1] PaddleOCRSharp: https://github.com/raoyutian/PaddleOCRSharp

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

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

相关文章

Linux开启fileinfo扩展

在项目初始部署环境的时候&#xff0c;可能考虑的并不全面&#xff0c;就会少装一些扩展&#xff0c;这里讲解如何添加fileinfo扩展1、找到php安装的压缩包2、将压缩包cp到 /data目录下&#xff0c;并解压 cp php-7.0.30.tar.gz /data cd /data tar -zxvf php-7.0.30.tar.gz…

Layui版本的WPF开源控件库-Layui-WPF

大家好&#xff0c;我是沙漠尽头的狼。今天介绍一款Layui风格的WPF开源控件库&#xff0c;仓库信息如下&#xff1a;仓库地址&#xff1a;https://github.com/Layui-WPF-Team/Layui-WPF仓库截图&#xff1a;Layui-WPF关于Layui请点击此链接[1]了解&#xff0c;本文不做介绍&…

Mycat 之 通过Keepalived 实现高可用

一、系统拓扑图 一、操作方法 参考本博客的Nginx Keepalived 实现高可用转载于:https://blog.51cto.com/12965094/2164485

微软产品 .NET 6 迁移之旅

“.NET性能不行&#xff01;”“.NET有什么像样的产品吗&#xff01;&#xff1f;”“升级到.NET 6有什么好处&#xff01;&#xff1f;”……听人扯淡还不如看看微软自己是怎么做的。本文将汇总一下微软的开发博客——这些博客均涉及微软将产品和服务迁移到.NET 6的成果。博客…

Navicat 连接 RDS数据库

场景介绍&#xff1a; 随着业务量的逐渐增加&#xff0c;公司的数据库压力也会逐渐增大&#xff0c;使用自己购买的esc创建的mysql的话&#xff0c;还得考虑相应的dba维护&#xff0c;也比较繁琐&#xff0c;说不定还做的并不完美&#xff0c;这时&#xff0c;RDS就派上用场了&…

为.NET应用添加截图功能

本文介绍了 .NET 实现截图功能的思路和过程&#xff0c;如果你仅想了解最后的解决方案&#xff0c;可以直接查看文章末尾。截图的功能我们应该都经常使用&#xff0c;在开发软件时&#xff0c;我们有时也或多或少需要提供这方面的功能&#xff0c;无论是为用户更方便提供远程诊…

K8S集群Master高可用实践

本文将在前文基础上介绍k8s集群的高可用实践&#xff0c;一般来讲&#xff0c;k8s集群高可用主要包含以下几个内容&#xff1a;1、etcd集群高可用2、集群dns服务高可用3、kube-apiserver、kube-controller-manager、kube-scheduler等master组件的高可用 其中etcd实现的办法较为…

[转载]智能科普:VR、AR、MR的区别

智能科普&#xff1a;VR、AR、MR的区别 http://news.zol.com.cn/553/5534833.html news.zol.com.cn 2015-11-23 16:00近日&#xff0c; 获得谷歌5亿美元融资的技术公司Magic Leap在WSJD展会中放出了一段实录视频&#xff0c;引起不小骚动。如今&#xff0c;也有媒体称他们为MR公…

PHP项目中,记录错误日志

一、场景介绍&#xff1a; 环境&#xff1a;LNMP 我们通常是通过nginx的错误日志来分析分错的&#xff0c;也就是我们在各个server中定义的error_log。 比如下面这样&#xff0c;就是将错误日志定义在/etc/nginx/logs/error/www.xiaobudiu.top.log&#xff0c;发生错误&#xf…

持续集成指南:GitLab 的 CI/CD 工具配置与使用

1前言写代码这项工作&#xff0c;本质就是将工作自动化&#xff0c;减少手工操作提供效率&#xff0c;因为人的本质都是懒狗&#xff0c;程序员也不能例外&#xff0c;为了各种意义的效率提升&#xff08;懒&#xff09;&#xff0c;我们需要持续集成工具&#xff0c;将代码测试…

php 错误日志 redis' already loaded in Unknown on line 0

环境介绍&#xff1a;LNMP 报错信息&#xff1a;注&#xff1a;这个php_errors.log 是我在php.ini 中定义的错误日志路径 问题原因&#xff1a; 报错信息给出的意思是&#xff1a;redis和memcache 模块已经加载过问题解决&#xff1a; php加载模块有两种方式&#xff0c;一种是…

第一周作业

我的Git账号&#xff1a;AI1452349541 和代码图 这是我在电脑和手机上下的网易有道词典 &#xff0c; C也下了。 ***学习内容总结*** 感觉任务并不是很难&#xff0c;有些任务没完成是 因为还没买电脑不好弄&#xff0c;下周电脑一定到位。 ***遇到的问题…

升级MariaDB为10.1版本

2019独角兽企业重金招聘Python工程师标准>>> CentOS中升级mariadb为10.1GA版本。 1、如果有&#xff0c;停止服务 systemctl stop mariadb 2、卸载原来的数据库服务 yum -y remove mari* 3、删除数据库文件 rm -rf /var/lib/mysql/* 4.创建/etc/yum.repos.d/MariaDB…

第一篇文章

第一次写博客。欢迎各位大牛捧场转载于:https://www.cnblogs.com/clnchanpin/p/6753665.html

羊了个羊的Ignite大会又来啦

据说最近羊了个羊非常火啊&#xff5e;可惜没有时间精力研究。不过&#xff0c;薅微软羊毛的机会我是一定不会错过的&#xff0c;这不&#xff0c;薅羊毛的机会来了&#xff0c;哈哈哈。作为经常薅微软羊毛的老司机&#xff0c;今天收到了微软的邮件&#xff0c;告知有新的羊毛…

清除谷歌浏览器的dns缓存

谷歌地址栏输入&#xff1a; chrome://net-internals/#dns出现下面界面&#xff1a;找到DNS选项&#xff0c;选择clear host cache即可效果&#xff1a;这样&#xff0c;谷歌浏览器上的dns缓存就清理掉了。应用场景&#xff1a; 本地环境和线上环境用的是一个host&#xff0c;这…

什么样的代码称得上是好代码?

“软件自有其美感所在” --《重构》图片&#xff1a;崇礼瀚海梁的山花 拍摄于2022年8月13日 摄影师&#xff1a;刘先生这篇内容写作于4年前&#xff08;2018年&#xff09;&#xff0c;是自己多年软件开发工作的一点感悟&#xff0c;现在看来虽有偏颇&#xff0c;但总体思想方…

Coding and Paper Letter(十四)

2019独角兽企业重金招聘Python工程师标准>>> 资源整理。 1 Coding: 1.R语言包ungeviz&#xff0c;ggplot2的拓展包&#xff0c;专门用来作不确定性的可视化。 ungeviz 2.计算机图形学相关开源项目。 计算机图形学光线追踪开源项目C源码。 computer graphics ray tra…

eclipse安装反编译插件

一、下载插件 1、官方地址&#xff1a;http://jd.benow.ca/ 2、百度网盘&#xff1a;http://pan.baidu.com/s/1eSJ7Tiq 密码&#xff1a;sr6p 二、打开eclipse&#xff0c;点击“Help > Install New Software” 三、Name填&#xff1a;JD-Eclipse Update Site&#xff08;可…

PHP 项目中缓存的多种应用实现

一、CDN缓存原理和介绍 1、各地部署多套静态存储服务&#xff0c;本质上是空间成本换时间 2、CDN是域名和真实服务器中间的一个环节&#xff0c;添加cdn节点后&#xff0c;用户访问时&#xff0c;自动选择最近的节点内容&#xff0c;不存在再请求原始服务器 3、CDN本质上是一种…