Python笔记(四)–Python3.7识别图片中的文字
之前,学习编写问卷星自动填写脚本的时候,定位得到的xpath参数无法复制,所以我寻思能不能直接截图把参数识别出来
在这里总结出两个办法,一个是利用Tesseract和pytesseract模块,另一个则是利用百度AI开放平台进行识别。经过测试,前者的识别率不高,后者的识别率还是挺不错的。而且提供50000次/天免费,所以拿来玩玩挺不错的。
一,利用Tesseract和pytesseract模块
首先,安装pytesseract模块以及Pillow模块(python3)
pip install Pillow
pip install pytesseract
下载安装自己相应版本的Tesseract(http://tesseract.gg),安装完成后在cmd中进到Tesseract安装目录,用tesseract -v查看版本测试是否安装成功
# coding=utf-8
from PIL import Image#导入图形处理模块
import pytesseract
text = pytesseract.image_to_string(Image.open('test.JPG'),lang='chi_sim') #Image.open()内改为需要是被的图片,lang=''内选择语言类型,将Tesseract OCR处理结果以字符串形式返回
print(text)
pytesseract的使用可以参考这里(https://www.cnblogs.com/zhangxinqi/p/9297292.html)
二,利用百度AI开放平台进行识别
这里我查阅了百度提供的产品文档,你们可以下载下来研究一下(https://ai.baidu.com/docs#/OCR-Python-SDK/top)
百度提供新建AipOcr的方法,其他的一些属性可以去查查文档
from aip import AipOcr
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
通用文字识别 返回格式
{
"log_id": 2471272194,
"words_result_num": 2, #图片可能包含的内容行数
"words_result":#识别的内容结果
[
{"words": " TSINGTAO"},
{"words": " 青島睥酒"}
]
}
这里是核心代码
这里要先注册一个百度云账号
# -*- coding: UTF-8 -*-
from aip import AipOcr
#定义常规变量
APP_ID = '自己的APPID'
API_KEY = '自己的API KEY'
SECRET_KEY = '自己的SECRET_KEY'
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)#初始化AipFace对象
def Get_File_Contnet(IMG_Path):
with open(IMG_Path,'rb') as Ip: #以二进制性质读待识别的图片
return Ip.read() #返回PIL读取结果
def main():
IMG_Path = input('请输入待识别图片的路径:')
result = aipOcr.basicGeneral(Get_File_Contnet(IMG_Path))#调用通用文字识别, 图片参数为本地图片,并把返回值添加进result
print('*'*32)
print('检测到可能有%s行\n内容如下:'%(result['words_result_num']))#取出内容行数
print('>'*32)
with open('识别内容.txt','w+') as fd: #以写+读的形式打开文件,若不存在就新建一个
fd.write("检测到图片文字可能有 %s 行\n内容如下: "%(result["words_result_num"])+'\n')
list =result['words_result'] #把返回值中的识别内容添加进列表中
for i in list:
print(i['words'])
with open('识别内容.txt','a') as fd: #以追加方式写+读打开文件,若不存在就新建一个
fd.write(i['words'] + '\n')#写入识别内容
if __name__ == '__main__':
main()
第一种的识别率不高,如果也是用来学习研究的建议用第二种方法