飞道的博客

【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码

409人阅读  评论(0)

在日常办公或者学习中,往往存在这样一个工作场景,比如,“老王,我这里有一张图片,你把里面的文字信息给我整理出来”,都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇秘籍,这里本渣渣总结了三种方法,教你如何将图片上的文字信息提取出来,图片转成文字信息的方法。

方法一:QQ/微信聊天工具

对,你没看错,就是QQ聊天工具,新版本的微信也已经支持图片提取文字信息了,同时也支持翻译,相信大部分人应该已经使用过,而且效果也非常出色!

该方法更适合移动端操作,识别效果也很给力,推荐操作使用!

方法二:网上在线图文识别工具

直接百度搜索可以找到不少图文识别工具,大部分应该是调用接口封装而成的网页工具,操作相比第一种会繁琐一些,毕竟你需要上传文件,然后再下载文件。

比如:http://www.pdfdo.com/image-to-txt.aspx

该方法大家可以尝试一下,网上有不少这样的工具,图片识别量小可以免费使用,小心被割韭菜即可,当然识别率并非百分百,不妨参考尝试使用!

方法三:应用Python写图片识别文字工具(骚操作,仅供装比使用)

骚操作来了,我们可以应用python来自己写一个工具脚本,一个图片识别文字工具脚本,可以批量操作,解放双手,当然仅供装比使用,当然本渣渣这么菜,肯定是直接调用接口啦!

方法一:EasyOCR库

Python中有一个不错的OCR库-EasyOCR,在GitHub已有9700star。它可以在python中调用,用来识别图像中的文字,并输出为文本。

https://github.com/JaidedAI/EasyOCR

EasyOCR支持超过80种语言的识别,包括英语、中文(简繁)、阿拉伯文、日文等,并且该库在不断更新中,未来会支持更多的语言。

  • 1.步骤一:安装 EasyOCR库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple easyocr

注意:EasyOCR库比较大,一定要更改为国内源,要不然等到天荒地老!

  • 2.步骤二:使用方法介绍

EasyOCR的用法非常简单,分为三步:

1.创建识别对象;2.读取并识别图像;3.导出文本。

  • 3.步骤三:实例使用参考

参考源码:


   
  1. # 导入easyocr
  2. import easyocr
  3. # 创建reader对象
  4. reader = easyocr.Reader([ 'ch_sim', 'en']) 
  5. # 读取图像
  6. result = reader.readtext( 'test.jpg')
  7. # 结果
  8. print(result)

可惜未调试成功,暂不清楚问题所在,贴出问题所在,知晓的老哥可以指点一二!

报错信息:


   
  1. E:\Python\venv\Scripts\python.exe E:/Python/twsb/ff2.py
  2. E:\Python\venv\lib\site-packages\skimage\io\manage_plugins.py: 23: UserWarning: Your installed pillow version is <  7.1 .0. Several security issues (CVE -2020 -11538, CVE -2020 -10379, CVE -2020 -10994, CVE -2020 -10177) have been fixed in pillow  7.1 .0 or higher. We recommend to upgrade this library.
  3.   from .collection  import imread_collection_wrapper
  4. CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU.
  5. Downloading detection model, please wait
  6. Traceback (most recent call last):
  7.   File  "E:/Python/twsb/ff2.py", line  4, in <module>
  8.     reader = easyocr.Reader([ 'ch_sim', 'en'])
  9.   File  "E:\Python\venv\lib\site-packages\easyocr\easyocr.py", line  170, in __init__
  10.     urllib.request.urlretrieve(model_url[ 'detector'][ 0] , DETECTOR_PATH)
  11.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  247, in urlretrieve
  12.     with contextlib.closing(urlopen(url, data)) as fp:
  13.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  222, in urlopen
  14.      return opener.open(url, data, timeout)
  15.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  531, in open
  16.     response = meth(req, response)
  17.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  640, in http_response
  18.     response = self.parent.error(
  19.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  569, in error
  20.      return self._call_chain(*args)
  21.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  502, in _call_chain
  22.     result =  func(*args)
  23.   File  "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line  649, in http_error_default
  24.     raise HTTPError(req.full_url, code, msg, hdrs, fp)
  25. urllib.error.HTTPError: HTTP Error  403: Forbidden
  26. Process finished with exit code  1
方法二:ORC(tesseract-ocr)识别

安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google的ocr识别引擎。

  • 1.步骤一:配置ORC本地环境

安装tesseract-ocr,这个没有什么好说的,下载好程序,点击下一步,安装步骤安装即可!

但是需要配置系统环境变量,或者在调用程序的时候需要注明工具的路径,即安装后tesseract.exe的路径!

关于配置系统环境变量可自行百度配置,这里本渣渣没有配置,直接注明应用路径地址:

pytesseract.pytesseract.tesseract_cmd = r'D:/Program Files/Tesseract-OCR/tesseract.exe'

注意:

下载chi_sim.traindata字库。要有这个才能识别中文。

下好后,放到Tesseract-OCR项目的tessdata文件夹里面。

为了便于大家测试使用,这里本渣渣打包了工具程序包!

关注本渣渣微信公众号:二爷记

后台回复 ocr

即可获取tesseract-ocr及中文识别库(本渣渣系统是win7 64位,亲测可用)!

  • 2.步骤二:安装库

安装pytesseract(换源)和安装PIL(换源)


   
  1. pip install -i https: //pypi.tuna.tsinghua.edu.cn/simple pytesseract
  2. pip install -i https: //pypi.tuna.tsinghua.edu.cn/simple pillow
  • 3.步骤三:调用接口识别图片文字信息

参考源码:


   
  1. # 图像识别初识
  2. #author:微信:huguo00289
  3. #微信公众号:二爷记
  4. # -*- coding: utf -8 -*-
  5. import pytesseract
  6. from PIL  import Image
  7. pytesseract.pytesseract.tesseract_cmd = r 'D:/Program Files/Tesseract-OCR/tesseract.exe'
  8. image = Image.open( 'cs.png')
  9. #code = pytesseract.image_to_string(image)
  10. code = pytesseract.image_to_string(image, lang= "chi_sim+eng")
  11. print(code)

本方法对于识别一些简单纯净的中文、数字、字母和标点符号的效果还是不错的,如果是经过处理的图片,比如验证码等图片的识别,需要借助jTessBoxEditor训练字库才能提高识别的准确率哦!

方法三:调用百度官方OCR接口

调用百度官方OCR接口,付费,识别率高!

官方介绍:多场景、多语种、高精度的文字检测与识别服务,多项ICDAR指标居世界第一;广泛适用于远程身份认证、财税报销、文档电子化等场景,为企业降本增效;提供稳定易用的在线API、离线SDK、软件部署包多种服务形式,最高可享每天50000次免费调用。

官方调用接口参考源码:

  • 1.获取Access Token权限


   
  1. # encoding:utf -8
  2. # 获取Access Token权限
  3. import requests 
  4. # client_id 为官网获取的AK, client_secret 为官网获取的SK
  5. host =  'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
  6. response = requests.get(host)
  7. if response:
  8.      print(response.json())
  • 2.调用接口识别图片文字信息


   
  1. # encoding:utf -8
  2. import requests
  3. import base64
  4. '' '
  5. 通用文字识别
  6. ' ''
  7. request_url =  "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
  8. # 二进制方式打开图片文件
  9. f = open( '[本地文件]''rb')
  10. img = base64.b64encode(f.read())
  11. params = { "image":img}
  12. access_token =  '[调用鉴权接口获取的token]'
  13. request_url = request_url +  "?access_token=" + access_token
  14. headers = { 'content-type''application/x-www-form-urlencoded'}
  15. response = requests.post(request_url, data=params, headers=headers)
  16. if response:
  17.      print (response.json())

本渣渣亲自上手撸一发,仅供参考代码:


   
  1. # encoding:utf -8
  2. #author:微信:huguo00289
  3. #微信公众号:二爷记
  4. #百度通用文字识别(标准版)
  5. #https: //cloud.baidu.com/doc/OCR/s/zk3h7xz52
  6. import requests
  7. import base64
  8. def bdocr(AK,SK,imgname):
  9.     host = f 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={AK}&client_secret={SK}'
  10.     response = requests.get(host)
  11.     access_token=response.json()[ 'access_token']
  12.     request_url =  "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
  13.     # 二进制方式打开图片文件
  14.     f = open(imgname,  'rb')
  15.     img = base64.b64encode(f.read())
  16.     params = { "image":img}
  17.     request_url = request_url +  "?access_token=" + access_token
  18.     headers = { 'content-type''application/x-www-form-urlencoded'}
  19.     response = requests.post(request_url, data=params, headers=headers)
  20.     datas_json=response.json()[ 'words_result']
  21.      for data_json in datas_json:
  22.         data=data_json[ 'words']
  23.          print(data)
  24. if __name__== '__main__':
  25.     AK= "API Key"   #client_id 为官网获取的AK
  26.     SK= "Secret Key"   #client_secret 为官网获取的SK
  27.     imgname= 'cs.png'  #图片路径名
  28.     bdocr(AK, SK,imgname)

最后,我们来实现批量识别图片文字信息的工具,应用python也是非常容易实现的,就是读取文件夹里的所有图片,然后通过循环遍历来反复调用接口即可获取到所有图片的文字信息,这里接口,本渣渣直接调用的是百度的OCR接口,推荐使用。

附上参考源码,仅供参考使用:


   
  1. # encoding:utf -8
  2. #author:微信:huguo00289
  3. #微信公众号:二爷记
  4. #批量百度通用文字识别(标准版)
  5. #https: //cloud.baidu.com/doc/OCR/s/zk3h7xz52
  6. import requests
  7. import base64
  8. import os
  9. #读取文件夹里所有的图片
  10. def read_imgs(path):
  11.     imgs = []
  12.      for filename in os.listdir(path):
  13.         img = f '{path}\\{filename}'
  14.          if  'jpg' in str(os.path.splitext(img)[ -1]):
  15.              print(img)
  16.             imgs. append(img)
  17.          if  'png' in str(os.path.splitext(img)[ -1]):
  18.              print(img)
  19.             imgs. append(img)
  20.      print(f '共有 {len(imgs)} 张图片!')
  21.      return imgs
  22. #获取百度access_token权限
  23. def get_access_token(AK, SK):
  24.     host = f 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={AK}&client_secret={SK}'
  25.     response = requests.get(host)
  26.     access_token=response.json()[ 'access_token']
  27.      return access_token
  28. #调用百度ocr接口识别图文文字信息
  29. def bdocr(access_token,imgname):
  30.     request_url =  "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
  31.     # 二进制方式打开图片文件
  32.     f = open(imgname,  'rb')
  33.     img = base64.b64encode(f.read())
  34.     params = { "image":img}
  35.     request_url = request_url +  "?access_token=" + access_token
  36.     headers = { 'content-type''application/x-www-form-urlencoded'}
  37.     response = requests.post(request_url, data=params, headers=headers)
  38.     datas_json=response.json()[ 'words_result']
  39.      for data_json in datas_json:
  40.         data=data_json[ 'words']
  41.          print(data)
  42. if __name__== '__main__':
  43.     AK= "API Key"   #client_id 为官网获取的AK
  44.     SK= "Secret Key"   #client_secret 为官网获取的SK
  45.     path=r 'path'   #文件夹路径
  46.     imgs=read_imgs(path)
  47.     access_token=get_access_token(AK, SK)
  48.      for img in imgs:
  49.          print(f "正在识别:{img}")
  50.         bdocr(access_token,img)

总结

  • 1.一般的验证码识别,大小写字母,数字,中文混合验证码都可以考虑使用,没错可实现论坛回帖,发帖验证码自动打码的功能,比如应用百度ocr接口,可自行处理豆瓣回帖自动打码功能。

  • 2.当然还有就是seo内容的来源问题解决,比如抄书神器,把图片文字信息内容整合为你网站的纯干货文章内容,当然你需要注意规避版权!

  • 3.可以自行整合为exe工具,或者是网页在线工具,方便他人使用 ,也就是本渣渣这里介绍的方法二的网上在线图文识别工具,用来引流,做一个工具类型的网站。

参考来源:

1.如何提取图片中的文字?这款Python 库 4行代码搞定!

https://mp.weixin.qq.com/s/RpZzYg3cMynWHVWQT3fk1g

2.Python 图片文字识别

https://www.cnblogs.com/zhurong/p/11685013.html

3.pillow、pytesseract-ocr、pytesseract的安装和中文的识别

https://blog.csdn.net/qq_38190041/article/details/102903464

4.python库学习 - pytesseract 识别图片中文字

https://www.jianshu.com/p/40ed39f3efbd

5.通用文字识别(标准版)

https://cloud.baidu.com/doc/OCR/s/zk3h7xz52

      

微信公众号:二爷记

不定时分享python源码及工具


转载:https://blog.csdn.net/minge89/article/details/112792459
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场