Pythonpython红红火火恍恍惚惚

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

上一篇下一篇

猜你喜欢

热点阅读