【Python】騰訊雲調用API接口獲得OCR信息

from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
# 導入對應產品模塊的 client models。
from tencentcloud.common.profile.client_profile import ClientProfile
import base64

def get_base64(img_dir):
    with open(img_dir, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        base64_code = base64_data.decode()
    return base64_code

def img_ocr(img_url, secretId, secretKey, ifurl=False, tryagain=0):
    from tencentcloud.ocr.v20181119 import ocr_client, models
    try:

        clientProfile = ClientProfile()
        clientProfile.signMethod = "TC3-HMAC-SHA256"

        cred = credential.Credential(secretId, secretKey)
        client = ocr_client.OcrClient(cred, "ap-guangzhou", clientProfile)

        req = models.GeneralFastOCRRequest()
        if ifurl:
            req.ImageUrl = img_url
        else:
            req.ImageBase64 = get_base64(img_url)

        resp = client.GeneralFastOCR(req)

        return resp

    except TencentCloudSDKException as err:
        if '照片中未檢測到文本' in err.message:
            return None
        # 若是api調用失敗失敗了,再嘗試5次
        if tryagain<1:
            return img_ocr(img_url, secretId, secretKey, tryagain=tryagain+1)
        else:
            return None

def merge_ocr_result(resp, area_threshold=500):
    # 過濾小面積字體+合併所有檢測到的文本
    img_ocr_res = ''
    for text in resp.TextDetections:
        width = text.Polygon[2].X-text.Polygon[0].X
        height = text.Polygon[2].Y-text.Polygon[0].Y
        area = width*height
        if area>=area_threshold:
            img_ocr_res += text.DetectedText
    if img_ocr_res == '':
        return None
    return img_ocr_res

def get_ocr_result(img_url, secretId, secretKey, ifurl=False):

    resp = img_ocr(img_url, secretId, secretKey, ifurl=ifurl)
    if resp:
        img_ocr_res = merge_ocr_result(resp)
    else:
        img_ocr_res = None

    return img_ocr_res

if __name__ == '__main__':
    img_url = 'D:/1.jpg'
    secretId = ''
    secretKey = ''
    print(get_ocr_result(img_url, secretId, secretKey, ifurl=False))

img_url填入圖片的url或者本地地址
ifurl如果圖片是url形式的話,選擇True,如果是圖片本地地址的話,選擇False
secretIdsecretKey在這裏看自己的Id和Key:https://console.cloud.tencent.com/cam/capi

P.S. 可以改爲,判斷之前是否有讀過這個圖片,如果讀過的話,直接讀取之前保存的內容,如果沒讀過的話,再調用API

佔坑:每次調用都保存下來,下一次優先判斷是否已保存過,若是則直接讀取txt,減少耗時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章