基于百度AI的图像文字提取应用程序

基于百度AI的图像文字提取应用程序

现如今,图像提取文字功能被越来越多人需要,尤其是办公与教学。但是目前app提供的都是有偿服务,其实,我们完全可以自己编写小程序来实现,下面是小编自己制作的一个实现图像文字提取的小程序。

实际上,代码中并没有任何图像识别的功能,这属于AI的范畴,不是小编能够做到的,这也是百度的技术核心,不可能开源,但是百度允许我们调用它的相关功能,并且包装好了接口供我们使用,实际上我们要做的就是用代码与百度提供的接口对接,返回结果。
使用百度接口需要在百度AI网站申请并得到id账号和密码,服务也不是完全无偿的,但是有相当一定量的每日免费额度,对于非企业的个人用户来说,免费额度已经相当充裕了(比如小编的程序对精度要求不高,调用的是标准版的接口,每日免费使用50000次)。

在做完程序后,小编也了解了一些应用的图像提取文字功能,这些应用主要分两大类,一类是腾讯QQ这样的大企业,他们有自己相关功能开发(亲测算法功能和精确度远不如百度AI);另外一些小的程序应用如一些扫描类的手机app,未必会专门开发这样的程序,小编猜测大多数此类应用也是付费调用百度平台的接口。因此,显然如果我们在这方面有大的使用需求的话,自己写一个程序将是更实惠的选择,至少个人使用是免费的。

最后,小编非常地感激百度AI提供的这样开放、共享的平台!
Talk is cheap,show the code!

# coding=utf-8

OUTPUT_FILE_PATH='扫描文字.txt'
f=open('扫描文字.txt', "r+")
f.truncate()
#判断文件是否存在,path为文件路径
import os
import sys
import json
import base64


# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
    from urllib.request import urlopen
    from urllib.request import Request
    from urllib.error import URLError
    from urllib.parse import urlencode
    from urllib.parse import quote_plus
else:
    import urllib2
    from urllib import quote_plus
    from urllib2 import urlopen
    from urllib2 import Request
    from urllib2 import URLError
    from urllib import urlencode

# 防止https证书校验不正确
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

API_KEY = "******"         #此处为在百度AI平台报备申请的账号和密码
SECRET_KEY =  "******"

OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"


"""  TOKEN start """
TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'


"""
    获取token
"""
def fetch_token():
    params = {
     'grant_type': 'client_credentials',
            'client_id':API_KEY,
            'client_secret':SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode('utf-8')
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req, timeout=5)
        result_str = f.read()
    except URLError as err:
        print(err)
    if (IS_PY3):
        result_str = result_str.decode()


    result = json.loads(result_str)

    if ('access_token' in result.keys() and 'scope' in result.keys()):
        if not 'brain_all_scope' in result['scope'].split(' '):
            print ('please ensure has check the  ability')
            exit()
        return result['access_token']
    else:
        print ('please overwrite the correct API_KEY and SECRET_KEY')
        exit()
NUM=input("图片数目:")
NUM=int(NUM)
i=1

while i<=NUM:
    i=i+1
    IMAGE=input("图片路径:")
    

    """
        读取文件
    """
    def read_file(image_path):
        f = None
        try:
            f = open(image_path, 'rb')
            return f.read()
        except:
            print('read image file fail')
            return None
        finally:
            if f:
                f.close()


    """
        调用远程服务
    """
    def request(url, data):
        req = Request(url, data.encode('utf-8'))
        has_error = False
        try:
            f = urlopen(req)
            result_str = f.read()
            if (IS_PY3):
                result_str = result_str.decode()
            return result_str
        except  URLError as err:
            print(err)

    if __name__ == '__main__':

        # 获取access token
        token = fetch_token()

        # 拼接通用文字识别高精度url
        image_url = OCR_URL + "?access_token=" + token

        text = ""

        # 读取书籍页面图片
        file_content = read_file(IMAGE)

        # 调用文字识别服务
        result = request(image_url, urlencode({
     'image': base64.b64encode(file_content)}))

        # 解析返回结果
        result_json = json.loads(result)
        for words_result in result_json["words_result"]:
            text = text + words_result["words"]

        # 打印文字
        print(text)

        f = open(OUTPUT_FILE_PATH, 'a',encoding='gb18030',errors='ignore')
        print(text,file = f)    
        f.close()

input()

你可能感兴趣的:(windows)