OCR(Optical Character Recognition,光学字符识别),指识别图像中亮暗差别或其他特征,构建文字形状并翻译为计算机文字。有文章说这是人工智能的一个应用,也算吧,得益于近些年人工智能的火热,文字识别目前现成的工具和API已经相当多也相当成熟了,百度等厂商给个人用户提供的接口几乎是免费的,本文对几个工具和库进行了介绍和测试。

EASYOCR

通过pip install easyocr即可安装,正常下载较慢,还可能经常失败,最好切换为国内镜像源,下载后可以通过python调用,通过以下代码即可实现对图像的文字识别:

# 导入easyocr
import easyocr
# 创建reader对象
reader = easyocr.Reader(['ch_sim','en'])
# 读取图像
result = reader.readtext('test.png')
print(result)

此时执行会提示库不完整需要安装,这是因为缺失了必要的文字识别模块,如果要识别中文还需安装中文模块(那我也不知道他install的时候都装了啥)。虽然pycharm会自动安装需要的模块,但因为源的问题,基本成功不了,需要我们手动下载。提取和中文识别模块资源如下:
链接:https://pan.baidu.com/s/1ZIXiFgoUNU2bZS8dhee0rA
提取码:gq3e

下载后解压到user/.EasyOCR/model中,此时再执行,还是会提示缺少模块,看其他文章说好像还需要pytorch啥的,但到这里pycharm已经能自己应付了,我们只需等待二十多分钟,就会看到程序运行的效果了。

我们先使用一张小图片,即时的兰亭集序的原文截图作为测试

输出的result为

[([[5, 27], [993, 27], [993, 63], [5, 63]], '丞九年。岁在癸丑,薹誊之初。会于会毽山阴之兰亭。修禊塾也。毽贤坐至  些咸集。此地有尝山峻岭; 茂林1=', 2.1187540205093774e-05),
([[8, 60], [884, 60], [884, 92], [8, 92]], '又有清流邀湍。映x左右;引以为 鲢#《;列坐基迩。虽无丝竹笪弦之盛;二簖二呸。亦足以畅叙幽荞。', 2.5544067672846725e-05),
([[8, 98], [656, 98], [656, 128], [8, 128]], '是旦也;天朗气清。惠囚和畅。仰观宇宙之大,俯察显类之盛。眍丛游目疆怀,', 0.020493449975682223), ([[664, 100], [902, 100], [902, 130], [664, 130]], '足以极视听之娱。痘可乐也。', 0.060241337434198246),
([[6, 136], [1010, 136], [1010, 166], [6, 166]], '夫人之相与,俯仰一世。或取诸怀抱。悟言一室之内;  或因寄所托。放浪形骸之外。虽趣舍互-;  蠡躁不同。当其欣于所', 0.008887333711973039), ([[5, 161], [1009, 161], [1009, 200], [5, 200]], "遇。暂得于己。快'旦足  丕%之n至;  及其蚯之1倦。懵迂  感慨奁之矣。回之所欣,俯仰之间。已为隧逑;  犹", 2.612633213926596e-05),
([[6, 198], [548, 198], [548, 228], [6, 228]], '不能不之兴坯;况修短随化; 终于尽!古人云: "_生大矣。', 0.023256806485528827),
([[558, 198], [654, 198], [654, 226], [558, 226]], '"岂不痛哉!', 0.9569520820485391), ([[6, 236], [544, 236], [544, 268], [6, 268]], '每览昔人兴感之由,若合-契。 未尝不临文嗟悼。不能逾之于怀。', 0.06817358355181431),
([[552, 236], [1006, 236], [1006, 266], [552, 266]], '固知一死生为虚诞。齐彭殇为妄作。后之视今,亦犹今', 0.7797203168095715), ([[6, 265], [242, 265], [242, 296], [6, 296]], '之视昔。悲夫! *列叙人', 0.015149273343856025),
([[250, 266], [878, 266], [878, 296], [250, 296]], '灵基眍逑;  虽世殊事异。所以兴怀。基-也。匠之览者。亦将有感于蚯立。', 0.0005736060510282244)]

输出是一个包含n个元素的列表,列表的每个元素是一个元组,元组中包含边界框位置,文本内容和自信级别(网上查的,那应该是越高越好)。如果不想要这么多信息可以使用
for i in result: print(i[1])筛选文本展示,也可以使用reader.readtext('chinese.jpg', detail = 0)简化输出,两种不同方法输出形式展示如下:

丞九年。岁在癸丑,薹誊之初。会于会毽山阴之兰亭。修禊塾也。毽贤坐至  些咸集。此地有尝山峻岭; 茂林1=
又有清流邀湍。映x左右;引以为 鲢#《;列坐基迩。虽无丝竹笪弦之盛;二簖二呸。亦足以畅叙幽荞。
是旦也;天朗气清。惠囚和畅。仰观宇宙之大,俯察显类之盛。眍丛游目疆怀,
足以极视听之娱。痘可乐也。
夫人之相与,俯仰一世。或取诸怀抱。悟言一室之内;  或因寄所托。放浪形骸之外。虽趣舍互-;  蠡躁不同。当其欣于所
遇。暂得于己。快'旦足  丕%之n至;  及其蚯之1倦。懵迂  感慨奁之矣。回之所欣,俯仰之间。已为隧逑;  犹
不能不之兴坯;况修短随化; 终于尽!古人云: "_生大矣。
"岂不痛哉!
每览昔人兴感之由,若合-契。 未尝不临文嗟悼。不能逾之于怀。
固知一死生为虚诞。齐彭殇为妄作。后之视今,亦犹今
之视昔。悲夫! *列叙人
灵基眍逑;  虽世殊事异。所以兴怀。基-也。匠之览者。亦将有感于蚯立。

['丞九年。岁在癸丑,薹誊之初。会于会毽山阴之兰亭。修禊塾也。毽贤坐至 些咸集。此地有尝山峻岭; 茂林1=', '又有清流邀湍。映x左右;引以为 鲢#《;列坐基迩。虽无丝竹笪弦之盛;二簖二呸。亦足以畅叙幽荞。', '是旦也;天朗气清。惠囚和畅。仰观宇宙之大,俯察显类之盛。眍丛游目疆怀,', '足以极视听之娱。痘可乐也。', '夫人之相与,俯仰一世。或取诸怀抱。悟言一室之内; 或因寄所托。放浪形骸之外。虽趣舍互-; 蠡躁不同。当其欣于所', "遇。暂得于己。快'旦足 丕%之n至; 及其蚯之1倦。懵迂 感慨奁之矣。回之所欣,俯仰之间。已为隧逑; 犹", '不能不之兴坯;况修短随化; 终于尽!古人云: "_生大矣。', '"岂不痛哉!', '每览昔人兴感之由,若合-契。 未尝不临文嗟悼。不能逾之于怀。', '固知一死生为虚诞。齐彭殇为妄作。后之视今,亦犹今', '之视昔。悲夫! *列叙人', '灵基眍逑; 虽世殊事异。所以兴怀。基-也。匠之览者。亦将有感于蚯立。']
识别有一些错别字,效果只能说一般。

分析以下格式不难看出该库识别模式是按行进行,提取一行的文本保存再一个元组中,使用排版相对没那么整齐也更大的图片进行测试,测试图像如下

识别文本如下:
['兰亭集序', '热门推荐', '[作者] 王羲之', '[朝代]巍晋', '译文对照', '乡愁', '余光中 (现代)', '丞九年。岁在癸丑,薹誊之初。会于会毽山阴之兰亭。修禊塾也。毽贤坐至;', '少咸集。此地有尝山峻岭; 茂林;', '七子之歌:威溽卫', '闻一多 (现代)', '又有清流邀遄。映x左右引以为流觞#《;列坐基迩。虽无丝竹簟之盛;二鲢二呸;', '亦足以畅叙幽懂。', '望庐山瀑布', '李白(唐)', '下载百度汉语App', '是旦也; 天朗气清。惠 和畅。仰观宇宙之大,俯察显类之盛, 蚯丛游目骋怀,足以枢视听之娱,宣可乐也。', '名师好课免赉看', '夫人之相与。俯仰一世。或亟诸怀抱。^一室之内; 或因寄所托。放浪形骸之外。虽趣舍五殛。蠡蹊不同。当其欣于所', '花', '白深富 (现代]', '遇暂得于己。快怨自;', '丕酱之t至; 及其蚯之-倦。懂随蕙迂', '感慨系之矣。', '回之所欣。俯仰之间,', '已为阵迹; 犹', '长江之歌', '胡宏伟 (现代]', '不能不之兴坯况修短随化; 终期于尽!古人云: "死生巫太矣。"岂不痛哉!', '每览昔人兴感之由。若合-契。末尝不临立嗟惶;不能逾之于怀。', '固知一死生为虚诞。齐彭殇为妄作。后之视今,亦犹今', '之视昔。悲夫!*列叙时人 灵基蚯逑; 虽世殊事异。所以兴怀。基-也。匠之览者。亦将有感于魃文。', '古文观止', '情感', '宴饮', '感伤', '离别', '人生', '感叹', '场景', '高中文言文', '文言文']
当文本错乱不齐时,列表中元组数量会大量上升,文字较多时也出现了较多识错,效果只能说是较好。

BaiDu API

目前百 度给个人用户提供了一些免费接口(说不定是把我们当免费测试集),到该连接中登录百度ai,领取免费额度后选择文字识别,创建应用,可见如下界面:

创建完成后可在应用列表中查看,需要记住我们的appid,api key 和secret key,

通过API 调用
先要pip install baidu-aip安装百度库,如下代码即可实现图像文字识别:

from aip import AipOcrAPP_ID = 'xxxx'
API_KEY ='xxxxxx'
SECRECT_KEY = 'xxxxx'
client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)img = open('./test.png','rb').read()
message=client.basicGeneral(img)
words_result = message['words_result']
for i in words_result:print(i['words'])
和九年,岁在癸丑,暮春之初,会于会稽山阱
修禊事也。群贤毕至,少长咸集。此地有崇山峻岭,茂林修竹
又有清流激湍,映带左右,引以为流觞曲水,列坐其次。虽无丝竹管弦之盛,一觞
以畅叙幽
也,天朗气清,惠风和畅。仰观宇宙之大,俯察品类之甍,所以游目骋怀,足以极视听之娱,信可乐也
夫人之相与,俯仰世。或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所
遇,暂
快然自足,不知老之将至;及其所之既倦,情随事迁,感慨系之矣。
俯仰
怀,况修短随化,终期于尽
云:“死生亦大矣。”岂不痛哉
感夫
未尝不临文嗟
能喻之于怀。固知一死生为虚
殇为妄作。后之视今,亦
录其所述,虽世殊事异,所以兴怀,其致
后之览者,亦将有感于斯文

文字识别比easyocr略微准确,但结构破坏和字符缺失却更多了。还有一种方法需要通过网页解析等postget手段实现,比较麻烦,效果也一样就没有介绍。作为一款商用文字识别接口,拿来卖钱的就是这个效果,还是有些难以差强人意。

Tesseract

据说该库与谷歌和微软有些渊源,是目前最强的图像识别库(知乎看的),我们也来试试效果。

安装

该库安装较为繁琐,需要pip安装,安装包安装,环境变量配置三个阶段。
首先通过pip install pytesseract安装必须文件,此时还不能使用,还需到Tesseract-ocr中手动下载安装包,该包自行安装即可,但要记下安装位置。安装好后找到自己pip安装的pytesseract目录下,找到pytesseract.py文件。

将文件内的tesseract_cmd改为安装tesseract-ocr的路径,我的是D:\Tool\Tesseract-OCR/tesseract.exe。

然后手动将tesseract添加进环境变量,右键我的电脑->高级系统设置

环境变量

系统变量中新建,设置如下变量名称,并将tessdata添加进变量值中

随后在path中添加%TESSDATA_PREFIX%

添加完成后需重启才能使配置生效。

使用

使用起来就和其他的库一样简单,通过如下代码即可使用

import pytesseract
mes=pytesseract.image_to_string('D:/test.png')
print(mes)

目前还没有安装中文模块,只能识别英文,测试图像如下:

文本提取结果如下:

Home | Powerball
https://www.powerball.com +Powerball® costs $2 per play. Select five numbers from 1 to 69 for the white balls; then select one
number from 1 to 26 for the red Powerball. Choose your numbers on a play slip or let the lottery terminal
randomly pick your numbers. The Powerball jackpot grows until itis won. Players win a prize by matchingone of the 9 Ways to Win.Watch The DrawingView the latest Powerball drawings. The Show
Me feature allows you to view the winning ..Lotto AmericaThe winning numbers in that night's $17.71
million jackpot drawing were: 9-13-26-38-48 ..Winner Stories
LANSING, Mich. - Buying a subscription for ..
MJ Lottery - Thrilled, Happy and BlessedFAQs
Powerball numbers are drawn from two sets of
numbers, so the odds of winning a prize are ..Winning Numbers Pop OutWinning Numbers Pop Out - Home | PowerballImportant Notice
Previously, Powerball® Jackpots started at $40
million (annuity) and increased by a .2By2
TOPEKA, KAN. - Louis V. Kronawitter, Jr. is an
avid Kansas Lottery player, who has always ..Mavis Wanezyk
BRAINTREE, MA - Mavis Wanezyk of Chicopee,
MA is the sole winner of a $758.7 millon ..

目前看出该库的极大优点是摆脱了前两种方案按行识别的局限性,会自动识别将临近的字符划为一段,结构上极大优于easyocr和百度 API,且效率较高,识别了这么多文字只需三四秒,如果中文识别率也这么高的话会是比较完美的识别手段。

中文包下载

githb中文训练包
进入界面不要直接点download下载,可能会导致网页崩溃,右键复制链接到迅雷下载,还更快。
下载后移动到tessdata目录下即可使用。
通过mes=pytesseract.image_to_string('test.png','chi_sim')加chi_sim告诉tesseract需要识别中文文本即可。
同样是神州十二号,识别效果如下:

永 和 九 年 , 岁 在 癸 丑 , 藏 春 之 分 , 会 于 会 穆 山 阴 之 兰 亭 , 修 棋 事 也 。 群 贤 毕 至 , 少 长 咸 集 , 此 地 有 崇 山 峻 屹 , 茂 林 修 竹
又 有 清 流 激 渔 , 眨 带 左 右 , 引 以 为 流 觞 蛇 水 , 列 坐 其 次 。 虹 无 丝 竹 管 弦 之 盛 , 一 解 一 咏 , 交 足 以 畅 叙 丁 情是 日 也 , 天 朗 气 清 , 惠 风 和 畅 。 仰 观 宇 宙 之 大 , 俯 家 味 类 之 盛 , 所 以 活 目 骋 怀 , 足 以 投 视 听 之 娱 , 信 可 乐 也 .夫 人 之 相 与 , 俯 仰 一 世 、 或 取道 伟 担 , 悟 言 一 室 之 内 ; 或 因 寄 所 托 , 放 浪 形 敌 之 外 、 君 超 舍 万 殊 , 静 躁 不 同 , 当 哗 欣 于 所
通 , 智 得 于 己 , 快 然 自 足 , 不 知 老 之 将 至 ; 及 其 所 之 既 借 , 情 随 事 迁 , 感 意 系 之 伟 。 向 之 所 欣 , 倦 仰 之 间 , 已 为 陈 迹 , 狂
不 能 不 以 之 兴 怀 , 况 修 短 随 化 , 终 期 于 尽 ! 古 人 云 : " 死 生 亢 大 奂 。" 岂 不 痛 哉 !每 览 昔 人 兴 感 之 由 , 若 合 一 契 , 未 尝 不 临 文 啼 惧 , 不 能 喻 之 于 怀 . 固 f 生 为 虚 涎 , 齐 彭 房 为 妄 作 。 后 之 视 今 , 亦 犹 今
之 视 萌 , 悲 夫 ! 故 列 叙 时 人 , 录 其 所 迦 , 蚀 世 殊 事 异 , 所 以 兴 怀 , 其 致 一 也 。 后 之 览 者 , 亢 将 有 感 于 斧 文 .

结构还可以,但是识别准确度相当一般,已经影响到文章意思。

总结

easyocr顾名思义,使用起来确实很easy,效果也比较平衡,有一定局限,但是准确率和效率都尚可,足以满足小规模一定情境下的使用。

百度API 可能是我使用方法不对,这种效果作为商用的话着实有些不敢相信,暂不敢评价。

Tesseract 识别过程中结构划分效果惊艳,英文识别准确,但是中文就拉跨了,不过该库我认为是真正意义上的基于机器学习库,识别的准确率甚至语种都可以由后续的训练来提升和实现。作为学术研究或者商用的基础模板还是不错,直接拿来就用还差点意思。

PS

自己开发可以使用上述库,方便提供接口等,但真正使用,还不如找个现成工具,天若文字识别结果如下:

除了几个极其生僻的字,其余的识别可谓完美,甚至段落结构也十分清晰,更不必提他的可移植性、用户界面和批量识别等优点,小规模使用或者的还是就用工具吧。

此外,这些文字识别虽然大部分都能达到转化文字的效果,但目前还没有一款在手写测试下能成功存活,手写的兰亭集序我也拿来测试了下,没有一个能识别出其中的甚至一句话,可能跟排版有关系,竖着写就不认识了?这么看来目前的图像识别的进步空间还是比较大的。也可能是我要求太高了,人眼可能都看不懂书法,怎么好要求机器看懂呢hhh。

信息内容安全-图像文字识别OCR相关推荐

  1. 如何使用Python实现图像文字识别OCR

    要使用Python实现图像文字识别OCR,可以使用以下步骤: 安装Tesseract OCR引擎 Tesseract是一种开源OCR引擎,可以处理多种语言和字体.要使用Python进行OCR,需要安装 ...

  2. 基于Python实现的图像文字识别OCR工具

    引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作.生活中常常会用到,比如票据.漫画.扫描件.照片的文本提取. 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面 ...

  3. 基于Python实现的图像文字识别OCR工具,包含GUI界面附完整版代码可直接运行

    引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作.生活中常常会用到,比如票据.漫画.扫描件.照片的文本提取. 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面 ...

  4. 图像文字识别(OCR)用什么算法小结

    说明:主要考虑深度学习的方法,传统的方法不在考虑范围之内. 1.文字识别步骤 1.1detection:找到有文字的区域(proposal). 1.2classification:识别区域中的文字. ...

  5. 用Python写了一个图像文字识别OCR工具

    大家好,我是辰哥~ 点击下方名片关注和星标『Python研究者』!

  6. Prizmo Pro for Mac(OCR图像文字识别工具)

    Prizmo Pro mac版可以自动扫描相机中的图片,可根据用户选择的文档类型进行特殊处理,支持常用的扫描仪.数码相机.iPhone.iPad 等,也支持自动截图桌面部分区域然后识别出文字,非常的有 ...

  7. 吴恩达《Machine Learning》精炼笔记 12:大规模机器学习和图片文字识别 OCR

    作者 | Peter 编辑 | AI有道 系列文章: 吴恩达<Machine Learning>精炼笔记 1:监督学习与非监督学习 吴恩达<Machine Learning>精 ...

  8. APISpace 通用文字识别OCR API

    APISpace 的 通用文字识别OCR API,基于业界领先的深度学技术,对图片中的文字进行检测和识别,支持多种语言.并且包含文字在图片中的位置信息,方便进行版式的二次处理. 应用场景 拍照/截图识 ...

  9. 百度文字识别OCR接口使用

    原文:https://www.meiwen.com.cn/subject/cyjvectx.html 动机&成品展示 最近,家里老人有需要把图片里的文字识别读取的功能,想要教他们用市面上功能齐 ...

  10. 开源免费图片文字识别 OCR 工具 tesseract v4.1.0 的 Docker 镜像制作与使用

    开源免费图片文字识别 OCR 工具 tesseract v4.1.0 的 Docker 镜像制作与使用 一 背景 在日常的一些工作中,偶尔也需要我们把图片转换为文字.目前大部分办公软件还无法实现类似的 ...

最新文章

  1. java实现layui分页_基于LayUI分页和LayUI laypage分页的使用示例
  2. c语言sum出错,ACM:Sum Problem 求和问题C语言源码
  3. java移动端接口测试_走进Java接口测试之测试框架TestNG数据驱动(入门篇)
  4. 旋转成分矩阵结果分析_PCA(主成分分析) 和 SVD (奇异值分解)
  5. 【Kafka】kafka消费报错 no brokers found in zk
  6. 看我如何发现(并修复)Python 源代码中的漏洞
  7. Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT)
  8. 策略模式详解(用java语言实现策略模式)
  9. 家用台式计算机安装的软件,爱福窝家庭装修设计软件
  10. Program Slicing
  11. AXURE RP 9 ——【中继器】
  12. 新浪股权分散是把双刃剑
  13. 打开word出现自动化automation错误、Microsoft visual basic 运行时错误
  14. 高级路由交换题库 答案与解释
  15. 香港虚拟主机租用价格
  16. 计算机网络路由器和交换机之间该如何配置,交换机怎么配置?交换机和路由器有什么区别?...
  17. 人工功能计算机,语音人工计算器
  18. 如何计算CRC校验码(循环冗余检验码)
  19. 一般纳税人什么意思(为什么一般纳税人认定500万)
  20. android 您的手机上未安装应用程序的解决方法

热门文章

  1. 2021年10月数学一及第十三届大数赛部分复习
  2. ST-LINK烧录stm32程序步骤
  3. rlm sql mysql.so_安装freeradius
  4. WPF基础系列六:MVVM框架
  5. 魅族Android版本,魅族Flyme安卓版本
  6. 二进制、十进制、八进制、十六进制转换方法
  7. 【论文阅读笔记】Securing software by enforcing data-flow integrity
  8. 二叉树模型期权定价c语言程序,二叉树期权定价模型
  9. PDF加密如何批量解除
  10. JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?