百度AI文字识别

每天免费50,000次OCR调用!

Posted by firewang on September 28, 2020

免费额度

看更新日志,可以发现更新很快,功能很强大。

image-20200928210542433

通用的文字识别功能每天免费5万次,非常良心,除了特殊功能的场景,对于日常使用是肯定够了。

image-20200928212653727

如何使用

官方也有一个快速教程

1. 成为开发者

三步完成账号的基本注册与认证:

  • STEP1:点击百度AI开放平台导航右侧的控制台,选择需要使用的AI服务项。若为未登录状态,将跳转至登录界面,请您使用百度账号登录。如还未持有百度账户,可以点击此处注册百度账户
  • STEP2:首次使用,登录后将会进入开发者认证页面,请填写相关信息完成开发者认证。注:(如您之前已经是百度云用户或百度开发者中心用户,此步可略过。)
  • STEP3:通过控制台左侧导航,选择产品服务-人工智能,进入具体AI服务项的控制面板(如文字识别、人脸识别)

img

2. 创建应用

账号登录成功,您需要创建应用才可正式调用AI能力。应用是您调用API服务的基本操作单元,您可以基于应用创建成功后获取的API Key及Secret Key,进行接口调用操作,及相关配置。

您可按照下图所示的操作流程,完成创建操作。

img 两种入口只是展现形式不同,相关AI服务模块内容完全一样 点击上图中的「创建应用」,即可进入应用创建界面,如下图所示:

img

img

两种入口只是展现形式不同,相关AI服务模块内容完全一样 创建应用需填写的内容如下:

应用名称: 必填项,用于标识您所创建的应用的名称,支持中英文、数字、下划线及中横线,此名称一经创建完毕,不可修改;

应用类型: 必填项,根据您的应用的适用领域,在下拉列表中选取一个类型;

接口选择: 必填项,每个应用可以勾选业务所需的所有AI服务的接口权限(仅可勾选具备免费试用权限的接口能力),应用权限可跨服务勾选,创建应用完毕,此应用即具备了所勾选服务的调用权限;

填写完毕后,即可点击「立即创建」,完成应用的创建。应用创建完毕后,您可以点击左侧导航中的「应用列表」,进行应用查看,如下图红框部分所示:

img

img

3. 获取密钥

在您创建完毕应用后,平台将会分配给您此应用的相关凭证,主要为AppID、API Key、Secret Key。示例:

img 两种入口只是展现形式不同,相关AI服务模块内容完全一样

4. 生成签名

您需要使用创建应用所分配到的AppID、API Key及Secret Key,进行Access Token(用户身份验证和授权的凭证)的生成。

每种应用的生成方式略有不同,对于OCR,Token生成方式为:

# encoding:utf-8
import requests 

# client_id 为官网获取的AK, 
# client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
    print(response.json())

5. 调用OCR接口

官方文档在通用文字识别(标准含位置版)给了示例, 其他版本方式也是一样的,只是请求的网址会有一点点不同

ocr-request

可以看到支持的语种也很多!

# encoding:utf-8

import requests
import base64

request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())

这里仅需要更改access_token, 而他的获取方式要通过上一节的方式,而不是从百度AI开放平台复制的!

6.简单修改为更通用的函数

可以发现标准版与标准带位置版只在请求的URL处不一样,这样我们把这个位置作为参数传给函数,就可以切换接口了。

image-20200928211008982

# -*- encoding: utf-8 -*-

import json
import requests
import base64


def get_words(fig_path, ocr_type="general"):
    """

    :param fig_path:
    :param ocr_type: general 标准含位置版 500次, general_basic 50000次
    :return:
    """
    request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/{ocr_type}"
    # 二进制方式打开图片文件
    f = open(fig_path, 'rb')
    img = base64.b64encode(f.read())

    params = {"image": img}
    # ! 改成你自己的AK和SK!!!
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=o5h0WAUse6ka5Y8xgV2WcGOA&client_secret=ScGdml5cwKwkaxK1KEDztY7plbFups18'
    response = requests.get(host)  # 获取access_token
    if response:
        res = response.json()
        access_token = res["access_token"]
        request_url = request_url + "?access_token=" + access_token
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            ocr_result = response.json()
            print(json.dumps(ocr_result, indent=4, ensure_ascii=False))
            words_result = "".join([words["words"] for words in ocr_result["words_result"]])
            print(words_result)
            return words_result
    else:
        return None


if __name__ == "__main__":
    get_words(r"Snipaste_2020-09-28_15-54-01.png", 'general_basic')

示例结果:

ocr_result