应用背景:在正式开始文章之前,先阐述一下项目的应用背景——项目需要对已有的电子档案数据进行“大数据”处理和呈现,但是由于之前进行档案电子化时都是以扫描文件的图像格式存储在硬盘上(准确来说是电子化的档案,不是数字化的档案),且文档的命名是00100001.jpg等完全与档案内容无关的数字格式。为了对这些档案文件进行数字化,首先就需要对档案内容进行OCR识别,这样才能为将来的档案大数据处理奠定基础,例如基于内容的检索、分词和词频统计、添加标签、档案数据的可视化呈现等操作。同时,由于档案的敏感性和保密性原因,不能利用百度或腾讯之类的在线上传类OCR应用,只能选择不联网的离线实现的OCR方式。另外,为了与现有的大数据系统便于集成,需要将上述的OCR功能做成命令行的方式;最后,现有的大数据系统是基于centOS7系统,所以需要基于Linux平台实现OCR功能。

言归正传,经过简单的调研,发现基于Python可以实现上述目标,共有3种途径:一个是大名鼎鼎Google的tesseract-ocr(资源我都放在百度网盘上了,需要的可以自取,链接:https://pan.baidu.com/s/1Z2Lq2nEfqIrNjvfn4ziB3A?pwd=7777 ),但是很不幸,与Google的声名在外相比,tesseract的中文OCR识别效果在我测试的几种开源库中是最差的,基本上相当于是Adobe Acrobat上面自带的OCR那种水平,而且需要先安装tesseract-ocr-w64-setup-v5.0.0.20211201.exe,然后再pip install pytesseract才能使用,而项目需要在Linux平台上实现,所以Pass!另一个是百度的飞桨PaddleOCR,百度的人工智能做的不错,飞桨的OCR功能也很强大,但是感觉相对于一个简单的OCR文字识别来说,百度的飞桨系统好像太大了(其实就是我有点儿懒不想预热太久而想快速上手),有点儿杀鸡用牛刀的感觉。最终我还是选择了一个在GitHub上星星最多的easyOCR(资源我都放在百度网盘上了,需要的可以自取,链接:百度网盘 请输入提取码 ),简约而不简单,上手极快,大约只花了半个小时就可以快速实现自己的离线OCR识别了!很快就写出了第一个版本的OCR命令行式程序,也就是下面的第一个版本,包括注释在内仅三十多行:

#!/home/super/miniconda3/bin/python
#encoding=utf-8#命令行模式下全文ocr识别,命令格式为:python imgs2txts.py 文件1.jpg 文件2.jpg 文件3.jpg ... ---> 文件.txt
#语言库目录为home下的固定目录: /home/langdata
import sys
import os
import easyocrocrreader=easyocr.Reader(['ch_sim', 'en'], model_storage_directory=r'/home/langdata')#Linux
#ocrreader=easyocr.Reader(['ch_sim', 'en'], model_storage_directory=r'E:\WorkDir\ocr\EasyOCR\langdata')#Windowsthreshold=0.1#默认阈值
for i in range(1,len(sys.argv)):#获取命令行参数:argv[0]表示可执行文件本身imgfile=sys.argv[i]#待识别文件名imgfilext=os.path.splitext(imgfile)[-1]#文件后缀名if imgfilext.upper() not in ['.JPG','.JPEG','.PNG','.BMP']:#转换为大写后再比对print('\t', imgfile, ' 不是有效图片格式(jpg/jpeg/png/bmp)!')continueresult = ocrreader.readtext(imgfile)paper=''for w in result:if w[2]>threshold:#设置一定的置信度阈值paper = paper+w[1]paper.replace(' ','').replace('_','').replace('^','').replace('~','').replace('`','').replace('&','')#删除无效数据#记录当前文件的识别结果,保存为同名的txt文件newfname=os.path.splitext(imgfile)[0]+'.txt'#与原文件同名的txt文件(包括目录)#newfname=os.path.splitext(imgfile)[0].split('/')[-1].split('\\')[-1]+'.txt'#与原文件同名的txt文件(不包括目录,仅文件名)try:with open(newfname, 'w') as txtfile:txtfile.write(paper)except(Exception) as e:print('\t', newfname, ' OCR Error: ', e)#输出异常错误continue

简单说明一下:

第1行的

#!/home/super/miniconda3/bin/python

不是注释,而是在Linux系统中起作用的命令行,有了这一句,在命令行中运行这个OCR时就可以省略掉python这个“单词”!假如把上述的python程序存储为img2txt.py文件,而待识别的图片为001.jpg和002.jpg,那么就可以在命令行中输入:

python ./img2txt.py 001.jpg 002.jpg

即可在同目录下得到001.txt和002.txt文件了。在第1句添加#!开头的那句话以后,在命令行中仅仅输入:

./img2txt.py 001.jpg 002.jpg

即可达到相同的效果!注意:img2txt.py文件前面表述路径的./不可省略,不然,系统会提示img2txt.py不是系统命令而出错。

当然,在利用conda产生多个虚拟python环境后,系统中可能存在多个python,甚至版本各不相同,这时就要输入正确的python解释器路径了,可以利用

whereis python

命令来查看所有的python解释器供参考!

第2行是编码声明,再后面就是导入包和导入语言包,语言包如果没有利用model_storage_directory选项显式的给出其路径,将会进行联网查询,由于我这里需要实现的是离线的OCR识别,所以需要事先将语言包下载下来,下载语言包还比较困难,我都在百度网盘链接中给出了,可供直接下载使用;这里我采用固定路径的方式,将语言包放在home根目录下的langdata文件夹下,拷贝时需要sudo权限,大家也可以放在其他路径下。

可以看见,目前这个版本十分的简单,也基本实现了所需的功能!但是,后面我还是进行了四五个版本的升级改进,下一个版本就是命令行中支持文件夹,当判断是文件夹后就对文件夹中的文件进行遍历,当是图像类型文件时就进行OCR识别,预知后事如何,且看下回分解!

基于Python的离线OCR图片文字识别(一)——命令行方式对图像文件处理生成同名txt文件相关推荐

  1. 基于Python的离线OCR图片文字识别(三)——支持PDF文件

    前面第一个版本实现了基本的ocr功能,可以对某图像文件进行处理,将ocr结果以同名txt文件的方式保存在图像文件同路径下: 然后在第二个版本中又实现了对文件夹参数的支持,也即可以对某个包含大量图像文件 ...

  2. 基于Python的离线OCR图片文字识别(五)——终极版本

    至此,终于迎来了离线ocr的终极大结局,命令行后面参数既支持图像文件.图像文件夹,还支持PDF图像类型的文件,既支持通过json文件进行参数配置,又支持帮助文档,easyOCR包既支持允许字符集(也即 ...

  3. 基于Python的离线OCR图片文字识别(四)——支持txt文件指定路径保存

    虽然在前面在第二次升级时就已经通过json配置文件支持将ocr识别结果txt保存到指定的文件夹里了,但由于指定待识别文件夹时文件夹里面可能包含多个不同的子文件夹.不同的子文件夹里面可能包含同名的图像文 ...

  4. 阿里云 OCR 图片文字识别接口使用案例(java)

    阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...

  5. OCR图片文字识别,人工手动图片标注软件安装过程

    OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda  下载慢的问题: 使用国内镜像地址下载: https://mirro ...

  6. 一篇文章搞定百度OCR图片文字识别API

    一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104 转载于:https://www.cnblogs.com/chongdongxia ...

  7. TOOLFK工具-在线OCR图片文字识别工具

    本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...

  8. python:pytesseract库实现图片文字识别

    import pytesseract from PIL import Imagetext = pytesseract.image_to_string(Image.open(r"E:\repo ...

  9. 一款免费的ocr图片文字识别提取工具网站

    市场上ocr很成熟,但是都有各种限制,比如强制登陆,转换限制,收费过高等!有时候我们只是简单的提取一下图片中的数据.或者暂时的图片文字识别和提取.这个我感觉还可以,大家要就拿去不谢!https://o ...

最新文章

  1. html5游戏加载动画,HTML5 战场3游戏的加载指示动画
  2. 初识slam 即时定位与地图构建
  3. SHADER 用 step替代 if-else
  4. Redis开发:hash存储自定义Java对象及value的序列化器设置
  5. boost::erase相关的测试程序
  6. 读书笔记之Unix命令
  7. js实现代码类似w3School演示效果
  8. OPPORTUNITIES_GET_ENTITY not implemented in data provider class
  9. 7-47 打印选课学生名单 (25 分)(两种做法)(思路加详解+map+vector做法+最后一个点超时解决)+兄弟们冲丫丫
  10. DVWA通关教程(中)
  11. KMP 算法 学习 整理
  12. VBA中使用EXCEL工作表函数
  13. Android面试算法题之拆分元素
  14. 科学和工程中的信号处理
  15. UCenter 来自网络
  16. 人类会被人工智能打败吗?
  17. 浙工大c语言期中考试试题答案,浙工大c语言程序设计期末试卷2
  18. scrum立会报告+燃尽图(第二周第三次)
  19. C++语法(二十一)友元的三种实现
  20. Vue实现图形化积木式编程(十一)

热门文章

  1. SQL Server 数据库性能优化
  2. Facebook等群聊天工具要加密
  3. 容器,容器技术,云容器相关入门知识
  4. pylandstats 计算景观指数,python
  5. PHP调试中常用的几种输出方法
  6. windows 系统的copy命令
  7. Incredible S 应用小教程(HTC G11)
  8. vba保存文件为xlsx格式_另存为xlsx格式疑问
  9. Android 开发学习资料
  10. Win8/8.1安装和使用Virtual PC 2007虚拟机的方法以及注意事项(32位和64位)