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

本文涉及的产品
文档理解,结构化解析 100页
票证核验,票证核验 50次/账号
企业资质识别,企业资质识别 200次/月
简介: 本文将介绍使用.NET开发的一款桌面截图 OCR 工具,软件已开源,地址:[https://github.com/sangyuxiaowu/Snipping_OCR](https://github.com/sangyuxiaowu/Snipping_OCR)

背景

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

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

QQ截图OCR

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

软件的实现

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

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

OCR 识别已经非常成熟了,百度开源的 PaddleOCR 框架相对 Tesseract 中文识别的效果好太多太多了。得益于开源项目 PaddleOCRSharp 对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; }
}

软件使用

Snipping_OCR

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

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

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

识别剪贴板

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

相关文章
|
9天前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
|
11天前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
|
16天前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
35 1
|
28天前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
28天前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
28天前
|
消息中间件 开发框架 前端开发
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
|
1月前
|
开发框架 JavaScript 前端开发
|
28天前
|
网络协议 C#
NSmartProxy:一款.NET开源、跨平台的内网穿透工具
NSmartProxy:一款.NET开源、跨平台的内网穿透工具
下一篇
无影云桌面