天天看点

Python——调用百度AI实现图片上文字识别简介步骤

Python——调用百度AI实现图片上文字识别

  • 简介
  • 步骤
    • 安装百度AI库
    • 调用百度AI开放平台
    • 调用glob库
    • 调用AipOcr库识别文字
      • 可能会遇到的问题
    • 批量操作

简介

Python免费调用百度AI实现图片上面的文字识别

步骤

安装百度AI库

!pip install baidu-aip
           

调用百度AI开放平台

先注册百度AI,获得ID和密钥。注册方法可参考:注册方法 只需走到 “1.6 获取密钥” 即可。然后记录下自己的APP_ID、API_KEY、SECRET_KEY,就可以开始了。

Python——调用百度AI实现图片上文字识别简介步骤

调用glob库

glob库用于获得指定路径下的指定后缀的文件,图片使用的是《数学模型》pdf扫描版,部分如下:

Python——调用百度AI实现图片上文字识别简介步骤
import glob
path = "数学模型\\"
glob.glob(path+"*.png")
           

指定文件夹中的指定的.png后缀的文件,全部提取出来了:

Python——调用百度AI实现图片上文字识别简介步骤

选取第一张图片 “数学模型1.png” 做测试:

files = glob.glob(path+"*.png")
file = files[0]
           

调用AipOcr库识别文字

导入AipOcr模块,这个模块是用于做文字识别的(OCR即Optical Character Recognition,光学字符识别)。

from aip import AipOcr #导入AipOcr模块,用于做文字识别
import glob

APP_ID = '*********' # 你申请的
API_KEY = '*********'# 你申请的
SECRET_KEY = '*********'# 你申请的

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
pic = open(file,'rb')# 以二进制(rb)打开
img = pic.read() # 读取
message = client.basicGeneral(img) # 调用百度AI识别图片中的文字
           

查看message参数,结果如下:

Python——调用百度AI实现图片上文字识别简介步骤

可见,message参数的结果为 “大字典” 形式,其中的键 “words_result” 所对应的值为一个 “大列表” ,这个列表又是以 “小字典” 作为元素。使用语句可以筛选出该页的标题:

Python——调用百度AI实现图片上文字识别简介步骤

识别效果图:

Python——调用百度AI实现图片上文字识别简介步骤

识别也不是完美的,有很多识别错误与未识别出的文字。当然,原图字体越清晰,识别度越高。

可能会遇到的问题

识别过程中可能会遇到类似识别错误(无法识别)问题,原因是未领取免费识别次数,解决过程如下:

百度OCR API识别失败:Open api qps request limit reached 错误 解决方法

Python——调用百度AI实现图片上文字识别简介步骤

批量操作

若要批量操作则只需要增加一句for循环就行:

from aip import AipOcr #导入AipOcr模块,用于做文字识别
import glob

APP_ID = '*********' # 你申请的
API_KEY = '*********'# 你申请的
SECRET_KEY = '*********'# 你申请的
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

path = "数学模型\\"
files = glob.glob(path+"*.png")

txt_file = open('数学模型.txt', 'a')

for file in files:
    pic = open(file,'rb')# 以二进制(rb)打开
    img = pic.read() # 读取
    message = client.basicGeneral(img) # 调用百度AI识别图片中的文字
    for words in message['words_result']:
        word = words['words'] # 提取文字
        print(word)

        txt_file.write(word) # 将文字写入文本文件

txt_file.close() # 关闭文本文件