测试Ocr工具IronOCR(续2:编写圈选图片识别文本的程序)

news2024/9/20 12:41:40

  上篇文章介绍了加载图片并圈选图片中文字区域的程序实现方式,本文基于此实现识别圈选区域文字内容的程序。主要识别语言包括英文和中文。IronOCR包中自带英文语言包,项目还需安装中文语言包,建议直接安装IronOcr.Languages.Chinese语言包,该包中支持以下类型的语言设置,也即设置IronOCR的识别语言时,安装了上述包即可指定以下截图中的OcrLanguage枚举选项。
在这里插入图片描述
  圈选图片识别文本的程序的大致思路是加载并显示图片,用户圈选要是识别的文本,选择文本语言,然后调用IronOCR识别文本并显示结果。上一篇文章中,用户圈选图片后,会自动将圈选区域另存为一bitmap对象实例。本文中直接使用该实例识别文本。
  OcrInput类的构造函数如下图所示,从其中可以看到可以指定本地图片路径,也可以传入流对象或图片对象等,其中Image类和AnyBitmap类并不是System.Drawing命名空间下的类,而是IronSoftware.Drawing和SixLabors.ImageSharp下的类。
在这里插入图片描述
  采用传入流对象的方式创建OcrInput对象实例,主要代码如下所示。但是在运行过程中会报如下截图的错误。从错误信息来看,应该是将传入的流对象内容当成了PDF文本,进而导致程序异常。

 var Ocr = new IronTesseract();
 Ocr.Language = (comboLanguage.SelectedIndex == 0) ? OcrLanguage.ChineseSimplifiedBest : OcrLanguage.EnglishBest;
 using (MemoryStream ms = new MemoryStream())
 {
 	 m_selectImage.Save(ms, ImageFormat.Bmp);
     using (var input = new OcrInput(ms))
     {
         var Result = Ocr.Read(input);
         txtOcrResult.Text = Result.Text;
     }
 }            

在这里插入图片描述

  将流对象转存入IronSoftware.Drawing.AnyBitmap对象内容,然后再基于AnyBitmap对象创建OcrInput对象实例,程序即可正常运行及识别文本。主要代码及程序运行效果如下所示:

	var Ocr = new IronTesseract();
    Ocr.Language = (comboLanguage.SelectedIndex == 0) ? OcrLanguage.ChineseSimplifiedBest : OcrLanguage.EnglishBest;
     using (MemoryStream ms = new MemoryStream())
     {
         m_selectImage.Save(ms, ImageFormat.Bmp);
         IronSoftware.Drawing.AnyBitmap bitmap = new IronSoftware.Drawing.AnyBitmap(ms);
         using (var input = new OcrInput(ms))
         {
             var Result = Ocr.Read(input);
             txtOcrResult.Text = Result.Text;
         }
     }            

在这里插入图片描述
在这里插入图片描述
  后续还会继续增加功能,比如支持屏幕截图后识别文本,或者是识别文本后翻译文本内容(如识别英文并翻译为中文)。

参考文献:
[1]https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesseract/

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

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

相关文章

【Java EE】-CSS详解

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 且视他人如盏盏鬼火,大胆地去走你的道路。——史铁生《病隙碎笔》 主要内容:CSS引入html的三种方式,CSS八大选择器&#xff…

YOLOv8 Tensorrt Python/C++部署教程

B站教学视频 https://www.bilibili.com/video/BV1Pa4y1N7HS Github仓库地址 https://github.com/Monday-Leo/YOLOv8_Tensorrt Introduction 基于Tensorrt加速Yolov8,本项目采用ONNX转Tensorrt方案支持Windows10和Linux支持Python/C YOLOv8 Environment Tenso…

Git cherry-pick详解

文章目录 基本用法引入多个提交代码冲突解决引入分支所有提交引入另一个代码库提交常用配置常见问题 对于多分支的代码库,将代码从一个分支引入到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就…

Linux命令rsync增量同步目录下的文件

业务场景描述 最近遇到一个问题,需要编写相应的Linux命令,增量同步/var/mysql里的所有文件到另外一个目录/opt/mysql,但是里面相关的日志文件xx.log是不同步的,这个场景,可以使用rsync来实现 什么是rsync命令&#x…

【Linux】冯诺依曼体系及操作系统

本期博客我们将深入学习操作系统的架构 目录 一、冯诺依曼体系结构 二、操作系统(Operator System) 2.1 操作系统的引入 2.2 操作系统的概念 2.3 操作系统的定位 2.4 深度理解操作系统的管理 2.5 系统调用和库函数概念 一、冯诺依曼体系结构 冯诺依曼体系这个名词相信…

webpack5搭建react框架-配置优化

webpack5搭建react框架-配置优化 一、前言 使用webpack5已经搭建好了基础的开发环境和生产环境,但是有些功能在使用的时候还可以进一步优化,所以今天就来将之前的配置做一下最终的优化。 二、配置优化 1、设置扩展名和别名 目前的配置中我们在引入一…

Java泛型之通配符类型

1. 案例分析 class Animal {Overridepublic String toString() {return "animal";} }class Cat extends Animal {Overridepublic String toString() {return "cat";} }class Dog extends Animal {Overridepublic String toString() {return "dog&quo…

2023/4/25

今天主要重新复习了一下树的基础知识,对于树的遍历和深度的求解进行了一些训练(复习了一下写过的题) 刷了两个关于树的简单题 104. 二叉树的最大深度 难度简单1586收藏分享切换为英文接收动态反馈 给定一个二叉树,找出其最大深度…

mysql的读提交与可重复读

前景介绍 隔离级别脏读可能性不可重复读可能性幻读可能性加读锁READ UNCOMMITTEDYESYESYESNOREAD COMMITTEDNOYESYESNOREPEATABLE READNONOYESNOSERALIZABLENONONONO mysql事务 READ COMMITTED 时间事务1事务2事务3T1beginbeginbeginT2update wx_va set value “TT1” wher…

数据库基础篇 《13.约束》

1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成…

Windows10下安装Ubuntu22.04(打造双系统)步骤 + 安装Nvidia显卡驱动

文章目录 下载Ubuntu22.04制作Ubuntu安装盘对硬盘分区查看磁盘分区形式 安装Ubuntu关于无法定位软件包错误安装显卡驱动 训练神经网络常用Lunix系统,这里使用Ubuntu22.04。 记录一下Windows10Ubuntu双系统安装方法。 下载Ubuntu22.04 下载链接:Ubuntu …

【Linux】一文读懂HTTP协议:从原理到应用

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉HTTP协议…

如何提高项目估算精准度 关键有3方面

软件规模可以用多种方式进行估算,但是用功能点估算方式更准确,而自动估算让估算更快速,我们以CoCode需求分析工具为例来说明,如何提高项目估算精准度? 一、调整功能点数 要提高项目估算精准度,首先应该提高…

Pytorch 入门资源(一) annaconda3下安装pytorch2.0.0和python3.11,使用Pycharm编辑器环境配置

一、环境安装 用annaconda3-2023.03-windows_x86_64,安装上python3.11和pytorch2.0.0环境。 下载pycharm community版本,将pycharm环境选择到pytorch,就可以开始上手Pytorch了。 指路几个安装博客: 【ok】Anaconda3的安装配置…

springcloud的项目使用一个tomcat部署

背景 我们项目使用springcloud、redis(缓存)、rocketMQ(消息中间件)、tinyid(分布式id)、minio(文件存储)、nacos(配置注册中心)这些组件开发了一个mes系统&…

YOLOv7+单目实现三维跟踪(python)

YOLOv7单目跟踪 1. 目标跟踪2. 测距模块2.1 设置测距模块2.2 添加测距 3. 主代码4. 实验效果 相关链接 1. YOLOv5单目测距(python) 2. YOLOv7单目测距(python) 3. YOLOv5单目跟踪(python) 4. 具体效果已在B…

中期国际:值得信赖的外汇MT4开户平台应该具备那些特点

在外汇市场中,有许多外汇平台供投资者选择。然而,由于市场存在许多复杂因素,选择平台时必须谨慎。投资者必须选择具有可靠资质的正规外汇MT4开户平台,以提高投资的安全性。选择外汇MT4开户平台非常重要,因此&#xff0…

LVS负载均衡群集—NAT

目录 一、群集的概述1、群集的含义2、出现高并发的解决方法3、群集的三种分类3.1负载均衡群集3.2高可用群集3.3高性能运算群集 4、负载均衡的结构 三、LVS调度器用的调度方法四、LVS的工作模式及其工作过程1.NAT模式(VS-NAT)2.直接路由模式(V…

springboot整合juit和springboot整合mybatis

springboot整合juit 先看一眼包路径,发现main程序的路径和测试类的路径是一样的 启用新注解:SpringBootTest代替了之前sm整合juit时的 RunWith(SpringJUnit4ClassRunner.class) //spring配置类 ContextConfiguration(classes config.class)新的如此…

protoc 插件-protoc-gen-grpc-gateway-gosdk

👇我在这儿 基本介绍 protoc-gen-grpc-gateway-gosdk 是一个 protoc 插件, 能根据 proto 文件一键生成 go http sdk 客户端代码,通过借助 grpc-gateway 插件将 grpc 接口转化为 http 的方式, 进而可以通过本插件生成 http sdk 代码。 特性 1.一键自动生…