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

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

2f8ab1113a46c44b2c80456e3910d40f.png

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

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

c55bc78929679727156274fcc314f386.png

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

5e46f09b69a5e29be3913baf1bfd4a9e.png

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

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

a5e2c1503759bb99afee3dc089004ca4.png

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

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

8b78a8f39e6883dbe73ef4fa0773acb1.png

70e1b3f72f83a8a892c6e3355170f708.png

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

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

方法一:EasyOCR库

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

https://github.com/JaidedAI/EasyOCR

6d72c1eddb4be0622bb8814a9f5613ac.png

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

  • 1.步骤一:安装 EasyOCR库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple easyocr

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

2dbc8f6b0eddd6a50b1b4447acfb57e6.png

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

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

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

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

参考源码:

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

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

daeceb98b1a5695a68279e88b01d73d6.png

报错信息:

E:\Python\venv\Scripts\python.exe E:/Python/twsb/ff2.py
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.
  from .collection import imread_collection_wrapper
CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU.
Downloading detection model, please wait
Traceback (most recent call last):
  File "E:/Python/twsb/ff2.py", line 4, in 
    reader = easyocr.Reader(['ch_sim','en'])
  File "E:\Python\venv\lib\site-packages\easyocr\easyocr.py", line 170, in __init__
    urllib.request.urlretrieve(model_url['detector'][0] , DETECTOR_PATH)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 247, in urlretrievewith contextlib.closing(urlopen(url, data)) as fp:
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 222, in urlopenreturn opener.open(url, data, timeout)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 640, in http_response
    response = self.parent.error(
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 569, in errorreturn self._call_chain(*args)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 502, in _call_chain
    result = func(*args)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\urllib\request.py", line 649, in http_error_defaultraise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
Process finished with exit code 1
方法二:ORC(tesseract-ocr)识别

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

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

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

0e6204519d1dfec9e35f6be02ba95bba.png

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

f87bc363fcc7d6a42e8961f7b76cbbc1.png

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

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

注意:

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

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

3286e5a7fb25b12e4f3e3429b8899fcc.png

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

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

d7f7d35c2454b4627d7284560414a76b.png

后台回复 ocr

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

  • 2.步骤二:安装库

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

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

6f0154eccf040787dbfef13ac433c7c4.png

855fa723f99a7684625f29177a77ac52.png

697a62a08f0d6a1345293ecebe753fe8.gif

参考源码:

# 图像识别初识
#author:微信:huguo00289
#微信公众号:二爷记
# -*- coding: utf-8 -*-

import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r'D:/Program Files/Tesseract-OCR/tesseract.exe'
image = Image.open('cs.png')
#code = pytesseract.image_to_string(image)
code = pytesseract.image_to_string(image, lang="chi_sim+eng")
print(code)

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

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

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

1c6823000cfc479d8a6df4f2dab47e83.png

af7fceb5522d0d360201d2ba6b037325.png

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

570c9b4f893a625d607494d26289c04a.png

官方调用接口参考源码:

  • 1.获取Access Token权限
# encoding:utf-8
# 获取Access Token权限
import requests 

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

import requests
import base64

'''
通用文字识别
'''

request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())

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

# encoding:utf-8
#author:微信:huguo00289
#微信公众号:二爷记
#百度通用文字识别(标准版)
#https://cloud.baidu.com/doc/OCR/s/zk3h7xz52
import requests
import base64

def bdocr(AK,SK,imgname):
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={AK}&client_secret={SK}'
    response = requests.get(host)
    access_token=response.json()['access_token']

    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
    # 二进制方式打开图片文件
    f = open(imgname, 'rb')
    img = base64.b64encode(f.read())

    params = {"image":img}

    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    datas_json=response.json()['words_result']
    for data_json in datas_json:
        data=data_json['words']
        print(data)



if __name__=='__main__':
    AK="API Key"   #client_id 为官网获取的AK
    SK="Secret Key"   #client_secret 为官网获取的SK
    imgname='cs.png'  #图片路径名
    bdocr(AK, SK,imgname)

d746454b8b0bd9fccc12b1e245c7ad1b.gif

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

2762ab5f638da212bfffaa6bce4b1c5a.gif

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

# encoding:utf-8
#author:微信:huguo00289
#微信公众号:二爷记
#批量百度通用文字识别(标准版)
#https://cloud.baidu.com/doc/OCR/s/zk3h7xz52
import requests
import base64
import os


#读取文件夹里所有的图片
def read_imgs(path):
    imgs = []
    for filename in os.listdir(path):
        img = f'{path}\\{filename}'
        if 'jpg' in str(os.path.splitext(img)[-1]):
            print(img)
            imgs.append(img)
        if 'png' in str(os.path.splitext(img)[-1]):
            print(img)
            imgs.append(img)


    print(f'共有 {len(imgs)} 张图片!')
    return imgs


#获取百度access_token权限
def get_access_token(AK, SK):
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={AK}&client_secret={SK}'
    response = requests.get(host)
    access_token=response.json()['access_token']

    return access_token


#调用百度ocr接口识别图文文字信息
def bdocr(access_token,imgname):
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
    # 二进制方式打开图片文件
    f = open(imgname, 'rb')
    img = base64.b64encode(f.read())

    params = {"image":img}

    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    datas_json=response.json()['words_result']
    for data_json in datas_json:
        data=data_json['words']
        print(data)





if __name__=='__main__':
    AK="API Key"   #client_id 为官网获取的AK
    SK="Secret Key"   #client_secret 为官网获取的SK
    path=r'path'   #文件夹路径
    imgs=read_imgs(path)
    access_token=get_access_token(AK, SK)
    for img in imgs:
        print(f"正在识别:{img}")
        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

e200530b04bc7133437946b34308f37f.png      

微信公众号:二爷记

不定时分享python源码及工具

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

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

相关文章

mysql 写磁盘_图解MySQL | [原理解析] MySQL insert 语句的磁盘写入之旅

作者及简介:黄 炎,爱可生首席技术官;王 悦,爱可生研发团队成员,负责数据库管理平台相关项目的开发和故障排查,好奇 MySQL 技术原理及各类数据库实现方案。本文来源:转载自公众号-图解 MySQL*爱可…

监控mysql主从复制监控_shell脚本监控mysql主从同步状态

mysql做了主从同步之后,偶尔出现过几次主从同步报错或延迟,由于没有任何监控和报警机制,只有在应用程序报错的时候才能发现数据同步出问题了。所以写了个shell脚本用来检测mysql数据库的同步状态#!/bin/bash#monitor_mysql_slave statusUSERN…

apscheduler mysql_APScheduler (重点)

定时校正需求: mysql和redis两个系统, mysql增加数据成功, redis未必添加成功, 这样两个系统的数据可能出现偏差, 所以需要定期对mysql和redis的数据进行同步解决方案: 每天执行一次定时任务, 让mysql数据和redis数据进行同步crontab是linux系统一个内置命令, 依赖于linux系统,…

qpsk 锁相环_本科毕业设计课题—QPSK相干解调的MATLAB仿真(4)

继续看参考资料!现在常用的数字调制方式有二相移相键控(BPSK)、正交移相键控(QPSK)、偏移四项移相键控(OQPSK)、最小移频键控(MSK)等。它们具有相同的功率效率。BPSK 频谱利用率差,抗非线性能力差,实现简单;QPSK频谱利用率好&…

c语言程序后退_c语言中向后退一格是啥符号?

展开全部是 \b,也就是backspace,这是一个转义32313133353236313431303231363533e4b893e5b19e31333337393466字符,详解如下:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示…

mysql数据库行业应用_腾讯云发布MySQL 8.0数据库 可应用至更多行业场景

7月8日,腾讯云正式发布了MySQL 8.0数据库。据悉,该数据库相比MySQL官方版本,无论是单机模式、异步模式还是同步模式下,读写性能都取得了大幅提升。据腾讯云数据库相关负责人介绍,采用MySQL 8.0内核的实例最高QPS(每秒查…

中控ecs700 mysql_浙大中控ECS700工程指导手册.pdf

浙大中控ECS700工程指导手册VisualFieldWARNING: Indicates information that a potentially hazardous situation which, if not avoided,could result in serious injury or death.Risk of electrical shock: Indicates information that Potential shock hazard whereHAZARD…

postgresql是如何求年龄的_Postgresql 通过出生日期获取年龄的操作

三个基础的时间表示函数 current_date/current_time/now()select current_date ;返回当前日期以 年-月-日(yyyy-mm-dd)的形式:2019-01-10select current_time;返回当日时间以 时:分:秒时区(hh:mm:ss )的形式:17:49:11.58530808select now();返回当前时间…

python关闭浏览器删除session_Django操作session 的方法

session是存放在服务端的,在django中使用session必须要先在数据库中创建django_session表,session相关信息都要依赖此表获取sessionrequest.session[status]request.session.get(status)#一般用get,无此键返回None不报错设置session#在使用se…

python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)

#压缩文件def Zip_files(): datapath filepath# 证据路径file_newname datapath .zip# 压缩文件的名字log.debug(file_newname) z zipfile.ZipFile(file_newname,w,zipfile.ZIP_DEFLATED) for dirpath,dirmanes,filenames in os.walk(datapath): fpath dirpath.replace(da…

python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图

Python保存网页图片这个是个比较简单的例子,网页中的图片地址都是使用http://。。。。.jpg这种方式直接定义的。使用前,可以先建立好一个文件夹用于保存图片,本例子中使用的文件夹是 d:\\pythonPath这个文件夹代码如下:# -*- codi…

libnss mysql_Ubuntu通过LDAP集成AD域账号登录(libnss-ldap方式)

Ubuntu通过LDAP集成AD域账号登录(libnss-ldap方式):# apt-get install libnss-ldap (中间直接回车,忽略)# vi /etc/nsswitch.confpasswd: files ldapgroup: files ldapshadow: files ldap:wq# vi /etc/ldap.confbase dcming,dccomuri ldap://10.0.0.2…

mysql分页查询减轻压力_mysql分页查询优化

在实际的项目中,分页查询是在寻常不过的,甚至说不可避免的。通常数据量较少的时候,很难遇到效率的影响。但是当数据量较大时,一个普通的分页sql能让你恶心到家。我们常用的分页sql如下:1 SELECT * FROM table_name LIM…

python csv读写方法_python中csv文件的若干读写方法小结

如下所示: //用普通文本文件方式打开和操作with open("file.csv") as cf:linescf.readlines()...... //用普通文本方式打开,用csv模块操作import csvwith open("file.csv") as cf:linescsv.reader(cf)for line in lines:print(line)…

unity 世界坐标间角度_Unity 世界坐标局部坐标下的旋转

一、旋转方法在 Unity 中为物体旋转提供了各种 API ,例如 RotateAround、Rotate、LookAt 等方法。但为了避免万向节死锁的问题,一般使用四元数来表示物体的旋转。四元数的乘法可以看作对一个物体施加两次旋转,最终的旋转角度由这两次旋转的角…

删除mysql会不会留下痕迹_MySQL使用痕迹清理~/.mysql_history

mysql会给出咱们最近执行的SQL命令和脚本;同linux command保存在~/.bash_history同样,你用mysql链接MySQL server的全部操做也会被记录到~/.mysql_history文件中,这样就会有很大的安全风险了,如添加MySQL用户的sql也一样会被明文记…

ioc框架 java_从零开始实现一个简易的Java MVC框架(三)--实现IOC

Spring中的IOCIoC全称是Inversion of Control,就是控制反转,他其实不是spring独有的特性或者说也不是java的特性,他是一种设计思想。而DI(Dependency Injection),即依赖注入就是Ioc的一种实现方式。关于Ioc和DI的具体定义和优缺点…

java word文档生成目录_JAVA合并word文档生成目录

/*** 先临时生成一个合并完成后的docx格式文档,doc会出现乱码。*parampathList 所有需要合并的文档的绝对路径*paramsavePath 一个路径,但是没有文件的后缀,之后进行拼接。*return状态,是否保存成功*/public static boolean merge…

java 链表实现堆栈_《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈

//用链表实现堆栈/*** 节点类*/class LinkS {private long data;public LinkS next;public LinkS(long d) {this.data d;}public String toString() {return String.valueOf(data);}}/*** 链表类*/class LinkSList {private LinkS first;public LinkSList() {first null;}pub…

java set去重复元素_java List去掉重复元素的几种方式

使用LinkedHashSet删除arraylist中的重复数据(有序)List words Arrays.asList("a","b","b","c","c","d");HashSet setnew LinkedHashSet<>(words);for(String word:set){System.out.println(word);}使用Has…