[CP_13] Python调用百度AI接口进行文字识别、数字验
2019-04-08 本文已影响0人
Fighting_001
目录结构
一、百度AI平台文字识别接口申请和OCR模块安装
1. 申请Baidu通用文字识别接口
2. 查看适用不同平台/语言/功能的SDK
3. 安装支持文字识别的Python SDK
二、文字识别实践应用
1. 案例:识别本地图片中的文字内容
2. 案例:模拟识别登录界面中的数字验证码
一、百度AI平台文字识别接口申请和OCR模块安装
1. 申请Baidu通用文字识别接口
Step-1 登录百度AI平台
登录Baidu账号,免费激活AI平台使用权限
百度AI开放平台传送门:http://ai.baidu.com/
Step-2 进入【通用文字识别】界面
http://ai.baidu.com/tech/ocr/general
Step-3 创建文字识别应用
点击【创建应用】,填写:应用名称、应用类型、接口选择(默认)、文字识别包名(默认)、应用描述
创建OK以上,申请通用文字识别接口完成,即可获取到三个有效信息:AppID、API Key、Secret Key
2. 查看适用不同平台/语言/功能的SDK
传送门:https://ai.baidu.com/sdk#ocr
Python文字识别SDK:http://ai.baidu.com/docs#/OCR-Python-SDK/top
3. 安装支持文字识别的Python SDK
pip install baidu-aip
新建AipOcr:
AipOcr是OCR的Python SDK客户端,使用OCR时提供了一系列的交互方法
语法规则,如下:
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)
以上接口返回的数据为json格式,每一行文字会分别以键值对形式包含在一个大括号中存放,此时可利用正则提取需要识别的内容
二、文字识别实践应用
1. 案例:识别本地图片中的文字内容
被测图片1:
被测图片2:
代码实现:
wordOCR.py
from aip import AipOcr
import re
""" 创建应用后获取的APPID、AK、SK """
APP_ID = 'xxxxx' # 替换为实际申请值
API_KEY = 'yyyyy' # 替换为实际申请值
SECRET_KEY = 'zzzzz' # 替换为实际申请值
# 传入参数,生成对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 以二进制方式读取图片内容
with open(r"D:\CI_Env\Python_Test\file\img\1.png","rb") as f:
image=f.read()
# 调用通用文字识别接口
data=client.basicGeneral(image)
data=str(data) # 将接口返回数据转为字符串,便于后续正则处理
# 定义正则,提取识别的文字内容
pat=re.compile(r"{'words': '(.*?)'}")
result=pat.findall(data)
# 遍历输出图片中的每一行文字内容
for rs in result:
print(rs)
执行结果:
2. 案例:模拟识别登录界面中的数字验证码
登录界面中的数字验证码是动态变化的,由4位数字组成,如下:
authCode.py
from aip import AipOcr
import re
import requests
""" 创建应用后获取的APPID、AK、SK """
APP_ID = 'xxxxx' # 替换为实际申请值
API_KEY = 'yyyyy' # 替换为实际申请值
SECRET_KEY = 'zzzzz' # 替换为实际申请值
# 传入参数,生成对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 包含图片验证码的登录界面,发送请求并获取响应数据
url="xxxxxxxxxxxx" # 替换为实际登录界面的url
resp=requests.get(url).text
# 定义正则,提取并构造登录界面的验证码链接
pat=re.compile(r'<img src="(.*?)" onclick="refreshVerify')
imgUrl=pat.findall(resp)[0]
# 获取图片内容
image=requests.get(imgUrl).content
# 调用OCR接口
data=client.basicGeneral(image)
data=str(data)
# 定义正则,提取验证码识别的内容
pat=re.compile(r"{'words': '(.*?)'}")
result=pat.findall(data)
print(result[0])
执行结果:
以上,识别的结果有可能出现不准确的情况,具体会与识别时的网络、图片的尺寸和清晰度、数字倾斜程度等有关联影响
备注:
调用通用文字识别接口(高精度版):data=client.basicAccurate(image)
调用通用文字识别接口(常规版):data=client.basicGeneral(image)