离线 OCR 小工具 2024.01.06

分享一个基于百度OCR与阿里OCR模型的离线OCR命令行工具,主要特色:
1、批量识别文件夹中的所有图片
2、两个OCR模型同时识别同一张图片,以方便交叉验证
3、支持JSON格式输出文本位置、文本内容、单字可信度

主要参数说明:
-m 指定识别模型
-f 需要识别的图片文件或图片文件夹路径
-o 识别结果保存文件路径,为空时如果是单文件直接输出结果,如果为文件夹则保存到图片文件夹的tmp目录中
-O 输出结果类型, 支持 txt json, 默认为 txt

单图片JSON输出使用实例:
ocr.exe -m ch_pp_ocr_server_v4_onnx -f 2.png -o t1.json -O json
输出结果实例:

{
	"width": 427,
	"height": 43,
	"dbNetTime": 127.157,                          // 文本检测时间
	"angleTime": 4.88721,                          // 文字方向检测处理时间
	"detectTime": 213.825,                         // 文字识别时间
	"image": "2.png",                              // 输入图片文件名
	"text": [{                                     // 每个文字块的识别结果
		"angleIndex": 0,                           // 文字方向分类类型
		"angleScore": 1,                           // 文字方向可信度
		"boxScore": 0.848114,                      // 文字检测可信度
		"angleTime": 2.96191,                      // 文字方向分类时间
		"text": "丙方(签字并按指印)",              // 第一个模型识别的文字内容
		"lines": [{                                // 单字识别结果与可信度,每个模型一个对象
			"time": 65.9409,                       // 文字识别时间
			"chars": [{                            // 每个文字对应的可信度
				"score": 0.997489,
				"text": "丙"
			}, {
				"score": 0.999176,
				"text": "方"
			}, {
				"score": 0.97086,
				"text": "("
			}, {
				"score": 0.999422,
				"text": "签"
			}, {
				"score": 0.997928,
				"text": "字"
			}, {
				"score": 0.99966,
				"text": "并"
			}, {
				"score": 0.999627,
				"text": "按"
			}, {
				"score": 0.999781,
				"text": "指"
			}, {
				"score": 0.996935,
				"text": "印"
			}, {
				"score": 0.9952,
				"text": ")"
			}]
		}],
		"boxPoint": [                                                           // 文本位置 坐标,此处有BUG
			[-4, -4],
			[436, 1],
			[436, 49],
			[-4, 44]
		]
	}]
}

单图片两模型识别实例:
ocr.exe -m ch_pp_ocr_server_v4_onnx,ch_damo_document_onnx -f 2.png -o t1.json -O json
输出结果实例(结构同上):

{
	"width": 427,
	"height": 43,
	"dbNetTime": 134.438,
	"angleTime": 5.53687,
	"detectTime": 298.456,
	"image": "2.png",
	"text": [{
		"angleIndex": 0,
		"angleScore": 1,
		"boxScore": 0.848114,
		"angleTime": 3.32397,
		"text": "丙方(签字并按指印)",
		"lines": [{   // 第一模型的单字识别结果
			"time": 62.9211,
			"chars": [{
				"score": 0.997489,
				"text": "丙"
			}, {
				"score": 0.999176,
				"text": "方"
			}, {
				"score": 0.97086,
				"text": "("
			}, {
				"score": 0.999422,
				"text": "签"
			}, {
				"score": 0.997928,
				"text": "字"
			}, {
				"score": 0.99966,
				"text": "并"
			}, {
				"score": 0.999627,
				"text": "按"
			}, {
				"score": 0.999781,
				"text": "指"
			}, {
				"score": 0.996935,
				"text": "印"
			}, {
				"score": 0.9952,
				"text": ")"
			}]
		}, {       // 第二个模型的单字识别结果
			"time": 80.2739,
			"chars": [{
				"score": 23.8372,
				"text": "丙"
			}, {
				"score": 26.5253,
				"text": "方"
			}, {
				"score": 21.9118,
				"text": "("
			}, {
				"score": 26.6864,
				"text": "签"
			}, {
				"score": 24.6797,
				"text": "字"
			}, {
				"score": 27.9038,
				"text": "并"
			}, {
				"score": 27.2161,
				"text": "按"
			}, {
				"score": 29.2181,
				"text": "指"
			}, {
				"score": 27.8648,
				"text": "印"
			}, {
				"score": 20.2918,
				"text": ")"
			}]
		}],
		"boxPoint": [
			[-4, -4],
			[436, 1],
			[436, 49],
			[-4, 44]
		]
	}]
}

批量识别文件中图片实例:
ocr.exe -m ch_pp_ocr_server_v4_onnx,ch_damo_document_onnx -f img -O json
输出结果:文件内容结构同上,此处省略

工具下载:

说明:
1、此工具为命令行版,没有好看的图形界面
2、两个模型对字母与标点符号的输出有差异
3、仅支持 Windows 系统,当前只在 windows10 x64 系统上测试过

12 个赞

「现代英语语法」赵俊英 典藏版, 2000页巨本 第二页为例,识别效果:

纯文字效果:

3.3.13.7“以形状表示个数的单位词
-不可数名词”表示“一轴、
一卷、一绞、一团、一、
缕"|48
3.3.13.8“一套”的表示法丨48
3.3.13.9“表示行为、状态等的单位
词+可数/不可数名词”表
示“一阵、一线、一股、二
道、一起、一副"|48
3.3.13.10“一笔”的表示法丨49
3.3.13.11“一局、-场、一轮、一番”
的表示法丨50
3.3.13.12“一点”表示法丨50
3.4名词的格|50
3.4.1名词格的分类丨50
3.4.2 名词所有格丨51
3.4.2.1名词所有格形式的构成和读
音|51
3.4.2.2 -'s所有格的用法及其所表示
的意义|53
3.4.2.3of所有格的用法丨55
3.4.2.4-s 所有格与 of 所有格的用法
比较|58
3.4.2.5双重所有格丨62
3.5 名词的性丨64
3.5.1概述|64
3.5.2名词性别表示法丨64
3.5.2.1自然性别表示法丨64
3.5.2.2在阳性名词上加后缀构成阴
性名词|65
3.5.2.3在通性名词前加 boy,he
male,man 等构成阳性;加
girl, she, female, maid,
woman 等构成阴性丨66
3.5.2.4 名词性别的其他表示法丨67
3.6 名词词组的句法作用|68
3.6.1名词词组作主语丨68
3.6.2 名词词组作宾语|68
3.6.2.1名词词组作直接宾语丨68
3.6.2.2名词词组作间接宾语丨68
3.6.2.3 名词词组作介词宾语丨68
3.6.2.4 名词词组作保留宾语丨68
3.6.2.5 名词词组作同源宾语丨68
3.6.3 名词词组作表语丨68
3.6.4 名词词组作定语|68
3.6.4.1名词作定语的11种用法丨68
3.6.4.2 名词定语的语法作用丨69
3.6.4.3复数名词作定语丨70
3.6.4.4“数词+名词”构成的名词词
组作定语丨70
3.6.4.5名词作定语与其同根形容词
作定语的区别丨70
3.6.4.6 名词作定语与其所有格的区
别丨71
3.6.5 名词词组作同位语丨71
3.6.6 名词词组作宾语补足语丨71
3.6.7名词词组作主语补足语丨71
3.6.8 名词词组作状语丨71
3.7名词与介词的搭配丨71
3.8典型错误解析丨72
4.限定词」74
4.1限定词的分类丨74
4.1.1按限定词的词汇意义分类|74
4.1.2 按限定词之间的搭配关系分类
75
4.1.2.1前位限定词丨75
4.1.2.1.1前位限定词的形式
|75
4.1.2.1.2前位限定词的用法说明
|76
4.1.2.1.3前位限定词 all,both,
half 的用法丨76
4.1.2.1.4 all 与 whole 的用法比较
丨79
4.1.2.1.5 all 与 every 的用法比较
180
4.1.2.2 中位限定词丨81
4.1.2.2.1中位限定词的形式丨81
4.1.2.2.2中位限定词 some,any
和 no 的用法丨82
4.1.2.2.3中位限定词every 和
each 的用法|84
4.1.2.2.4中位限定词either 和
neither 的用法丨85
4.1.2.2.5 关于中位限定词用法说
明|85
4.1.2.3后位限定词丨87
4.1.2.3.1后位限定词的形式丨87
4.1.2.3.2 基数词 one 的用法|89
4.1.2.3.3 many 和 much 的用法
89
4.1.2.3.4 more 和 most 的用法丨90
4.1.2.3.5后位限定词的用法说明
90
4.1.2.4三种限定词之间的搭配关系
91
4.2限定词与名词的搭配关系丨92

JSON效果:
json.zip (12.0 KB)

1 个赞

下载了,但不能使用,点击exe文件没有反应。win11系统。

这个显然得用command prompt,怎么去点击呢?看看楼主所列的指令。

1 个赞
ocr.exe -m ch_pp_ocr_server_v4_onnx -f test_img\00000026.jpg -o test_out\00000026.txt -O txt

测试了一张,识别率不错,有些地方比过 ABBYY 了,比如:

OCR结果中也没有乱文,不过倒是有漏字的情况(可能是可信度低的结果直接丢弃了?)

整体挺好的,只不过速度有点慢,识别这一张花了3分钟。

可以看一下 models\ch_pp_ocr_server_v4_onnx\ppocr_keys_v1.txt 这个文件,如果有上面说的字就可能是可信度低导致的。也可以两个模型一起识别,看另一个模型有没有识别出来,还可以做交叉验证。如果觉得效果还可以,速度慢,可以在空的时候让它批量识别。目前还在摸索学习深度学习课程中,边学习边优化,什么时候可以解决速度问题还不知道。

1 个赞

还在下载中,先请教一下:需要先订阅百度OCR与阿里OCR的相关API吗?

不需要订阅,纯离线使用,程序也不会连网。

2 个赞

请问能否出一个详细的使用过程么,点击exe文件一个窗口一闪而过

其实还可以调用Windows或macOS自带的OCR组件,识别率也相当高。

不能点击,得在Windows Command Prompt中跑指令。

先转到楼主程式所在的文件夹,然后在Windows Command Prompt中跑指令。楼主已经列出了指令。

How to Run an EXE File at the Windows Command Prompt

How to Run Program from CMD (Command Prompt) Windows 10

为了省事,可以在Context Menu加一个指令——没把握的请别玩。搞坏了系统,我不负责。

Add “Open Command Window Here as Administrator” to Context Menu

A) Click/tap on the download button below to download the file below, and go to step 5 below.

Add_Open_Command_Window_Here_as_Administrator.reg

觉得这个搞不来的,建议用finereader比较省事。

也可以试用:
看典古籍
免费开放了OCR

楼主这种AI OCR程式,我觉得是潜力股。速度假如能加快,就有潜力成为好用的ocr程式。

测试了一下,如果是一个长截图,它无法识别;但如果将该图截短,它可以识别;总体识别很不错,但对于其中中英混合的部分,英文单词之间的空格都丢失了;相比Umi-OCR,确实速度感人。

可以先记录着,后面看看能不能完善一下

本人现在遇到想ocr的文字,先用手机拍摄(当然扫描也可以),然后用微信打开,识别图像,感觉识别的效果超过所有软件(包括abbyy)。虽然稍麻烦些,但确实很好用。看来还是大公司在线ocr的识别功能远超离线的。

Umi-OCR比微信OCR效果好不少,快、准、免费、开源。
但微信OCR对微信里的图片确实方便。

多谢,这个得顶。希望在楼主调教下,越来越好用。

OCR软件,一般可以接触测试的,以微信OCR的准确率为最高,但是,微信OCR有两个版本,一种是本地模型识别,一种是发送到服务器api识别,识别精度高的是连线到服务器识别的(要搞监控嘛,不能马虎),但是微信靠什么机制判断使用那种识别模式,并不清楚。

其他目前开源的OCR软件,在识别汉语方面都是比较差劲的,速度慢,内置字库有限,生僻字不认识,没法准确还原格式等,那些号称用了ai的,在速度和识别率上,其实有时可能连近20年前的汉王文本王都不如,就连人人厌弃的CAJViewer,在汉字识别速度和正确率上也是比较出色的。

迄今如果想OCR中文图书,理想的选择仍然是ABBYY FineReader,速度、正确率、版式还原,以及校对功能等诸方面比较均衡,但要当心的是,新出的版本(比如16版)使用了较小的汉字字库,一些生僻字识别不出来,OCR一些大路货小说之类没什么差别,但要ocr比较专业的汉语文献时,建议用11或者12版。

但是,通用OCR在技术上实际上是已经基本解决了的问题,因为绝大多数语言没有汉语这么复杂的基本字符构成,又因为中国并不是Google、微软、Adobe、Abbyy等厂商的主要目标市场,它们对中文OCR之类也无所用心,马虎能用即可。

中文字符复杂,训练更大更好的识别模型就行了,不过,如果模型很大,计算量就很大,在手机和个人电脑上是无法(流畅)运行的,于是百度、腾讯、阿里的高精度文字识别,都是提交给厂商的服务器api识别,没有离线使用的。也许它们也有可以在高性能pc上运行的高精度OCR模型,但商家逐利,一般不会积极开源让你免费使用,开源的都是些破烂货鸡肋。

——我放上两张稍微有点挑战性的图书页面(生僻字之类),供感兴趣者测试比较。


4 个赞

我的猜测是:软件评估无法准确辨识的,超过一定比率,就送到服务器辨识。

服务器辨识,可以结合大数据,假如在数据库内找到相似的文本,评估是同样的东西,就搬过来。

假如辨识度还是太低,服务器保留抽样的样本,后续再评估如何改进。

日语识别怎么样?

OCR模型目前只支持中英识别,其它语言不支持