Python笔记(四)--Python3.7实现智能识别图片文字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coloson/article/details/89069302

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查看版本测试是否安装成功

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()

第一种的识别率不高,如果也是用来学习研究的建议用第二种方法

猜你喜欢

转载自blog.csdn.net/coloson/article/details/89069302
今日推荐