百度ocr地址
以下代碼為對百度ocr的簡單封裝,實際使用時推薦使用baidu-aip
百度通用ocr
import base64
from enum import Enum, unique
import requests
import logging as log@unique
class OcrType(Enum):# 標準版STANDARD_BASIC = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"# 標準版含位置STANDARD_WITH_LOCATION = "https://aip.baidubce.com/rest/2.0/ocr/v1/general"# 高精度版ACCURATE_BASIC = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"# 高精度版含位置ACCURATE_WITH_LOCATION = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate"# 辦公文檔識別DOC_ANALYSiS_OFFICE = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office"# 網絡圖片文字識別WEB_IMAGE = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage"# 網絡圖片文字識別 含位置WEB_IMAGE_WITH_LOCATION = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage_loc"# 手寫文字識別HAND_WRITING = "https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting"# 數字識別NUMBERS = "https://aip.baidubce.com/rest/2.0/ocr/v1/numbers"# 表格文字識別(同步接口)FORM_SYNCH = "https://aip.baidubce.com/rest/2.0/ocr/v1/form"# 表格文字識別(異步接口)FORM_ASYNCH = "https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request"# 二維碼識別QRCORD = "https://aip.baidubce.com/rest/2.0/ocr/v1/qrcode"def ocr_help():print("==========百度ocr使用說明==========")print("本API基于ocr通用識別api編寫,官方文檔地址:https://cloud.baidu.com/doc/OCR/s/zk3h7xz52")print("使用示例:")print('''baiduOcr = BaiduGeneralOcr(OcrType.STANDARD_BASIC)baiduOcr.set_access_token("access_token")wordsList = baiduOcr.recoginze(image="D:\\txt1.png",options={})['words_result']for word in wordsList:print(word)''')class BaiduGeneralOcr():# ocr版本ocr_type = 0def __init__(self, ocr_type: OcrType):"""ocr_type ocr識別類型 STANDARD_BASIC標準版 標準版含位置STANDARD_WITH_LOCATION 高精讀版ACCURATE_BASIC 高精度版含位置ACCURATE_WITH_LOCATION@param ocr_type:"""self.options = Noneself.pdf_file = Noneself.url = Noneself.image = Noneself.access_token = Noneself.ocr_type = ocr_type.valuedef gen_access_token(self, api_key, secret_key):"""生成access_token@param api_key:@param secret_key:@return:"""request_url = f'''https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}'''response = requests.get(request_url)if response:print("access_token:%s" %(response.json()['access_token']))self.access_token = response.json()['access_token']def __check(self):"""參數檢查@return:"""image = self.imageurl = self.urlpdf_file = self.pdf_fileif (image is None or image == "") and (url is None or url == "") and (pdf_file is None or pdf_file == ""):raise ValueError("image,url,pdf_file至少傳入一項")if (image is not None) and (image != ""):f = open(image, 'rb')self.options['image'] = base64.b64encode(f.read()).decode()elif (image is not None or image == "") and (url is not None and url != ""):self.options['url'] = urlelse:f = open(pdf_file, 'rb')self.options['pdf_file'] = base64.b64encode(f.read()).decode()keys = self.options.keys()if ("image" not in keys) and ("url" not in keys) and ("pdf_file" not in keys):raise ValueError("image,url,pdf_file至少傳入一項")try:self.ocr_type.valueexcept Exception as e:log.info(repr(e))self.ocr_type = OcrType.STANDARD_BASIClog.info("ocr_type類型,已重置為標準版")def __request(self, request_url, data):# 設置headerheaders = {'content-type': 'application/x-www-form-urlencoded'}# 請求print(self.options)print(headers)return requests.post(request_url + "?access_token=%s" % self.access_token, data=self.options,headers=headers).json()def recoginze(self, image: str = None, url: str = None, pdf_file: str = None, options=None):"""識別@param image:@param url:@param pdf_file:@param options:@return:"""self.image = imageself.url = urlself.pdf_file = pdf_fileself.options = options or {}self.__check()# 發送請求return self.__request(self.ocr_type.value, options)def set_access_token(self, access_token):"""設置access_token@param access_token:@return:"""self.access_token = access_token
百度卡片識別ocr
import requests
import base64
import json
from cwrpa.log.log import logging as log
from enum import Enum, unique
import keyring@unique
class OcrType(Enum):# 身份證識別ID_CARD = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"# 身份證混貼識別MULTI_IDCARD = "https://aip.baidubce.com/rest/2.0/ocr/v1/multi_idcard"# 身份證識別(金融加密版)IDCARD_ENC = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard_enc"# 銀行卡識別BANKCARD = "https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard"# 營業執照識別BUSINESS_LICENSE = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license"# 名片識別BUSINESS_CARD = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_card"# 護照識別PASSPORT = "https://aip.baidubce.com/rest/2.0/ocr/v1/passport"# 社保卡識別SOCIAL_SECURITY_CARD = "https://aip.baidubce.com/rest/2.0/ocr/v1/social_security_card"# 港澳通行證識別HK_MACAU_EXITENTRYPERMIT = "https://aip.baidubce.com/rest/2.0/ocr/v1/HK_Macau_exitentrypermit"# 臺灣通行證識別TAIWAN_EXITENTRYPERMIT = " https://aip.baidubce.com/rest/2.0/ocr/v1/taiwan_exitentrypermit"# 戶口本識別HOUSEHOLD_REGISTER = "https://aip.baidubce.com/rest/2.0/ocr/v1/household_register"# 出生醫學識別證明BITTH_CERTIFICATE = "https://aip.baidubce.com/rest/2.0/ocr/v1/birth_certificate"# 多卡證類別檢測MULTI_CARD_CLASSIFY = "https://aip.baidubce.com/rest/2.0/ocr/v1/multi_card_classify"def ocr_help():print("==========百度ocr使用說明==========")print("本API基于ocr卡證識別api編寫,官方文檔地址:https://ai.baidu.com/ai-doc/OCR/rk3h7xzck")print("使用示例:")print('''baiduOcr = BaiduCardOcr(OcrType.ID_CARD)baiduOcr.set_access_token("access_token")wordsList = baiduOcr.recoginze(image="D:\\txt1.png",options={})['words_result']for word in wordsList:print(word)''')class BaiduCardOcr:# ocr版本ocr_type = 0def __init__(self, ocr_type: OcrType):"""ocr_type ocr識別類型 STANDARD_BASIC標準版 標準版含位置STANDARD_WITH_LOCATION 高精讀版ACCURATE_BASIC 高精度版含位置ACCURATE_WITH_LOCATION@param ocr_type:"""self.options = Noneself.pdf_file = Noneself.url = Noneself.image = Noneself.access_token = Noneself.ocr_type = ocr_type.valuedef gen_access_token(self, api_key, secret_key):"""生成access_token@param api_key:@param secret_key:@return:"""request_url = f'''https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}'''response = requests.get(request_url)if response:self.access_token = response.json()['access_token']def __check(self):"""參數檢查@return:"""image = self.imageurl = self.urlpdf_file = self.pdf_fileif (image is None or image == "") and (url is None or url == "") and (pdf_file is None or pdf_file == ""):raise ValueError("image,url,pdf_file至少傳入一項")if (image is not None) and (image != ""):f = open(image, 'rb')self.options['image'] = base64.b64encode(f.read()).decode()elif (image is not None or image == "") and (url is not None and url != ""):self.options['url'] = urlelse:f = open(pdf_file, 'rb')self.options['pdf_file'] = base64.b64encode(f.read()).decode()keys = self.options.keys()if ("image" not in keys) and ("url" not in keys) and ("pdf_file" not in keys):raise ValueError("image,url,pdf_file至少傳入一項")try:self.ocr_type.valueexcept Exception as e:log.info(repr(e))self.ocr_type = OcrType.STANDARD_BASIClog.info("ocr_type類型,已重置為標準版")def __request(self, request_url, data):# 設置headerheaders = {'content-type': 'application/x-www-form-urlencoded'}# 請求print(self.options)print(headers)return requests.post(request_url + "?access_token=%s" % self.access_token, data=self.options,headers=headers).json()def recoginze(self, image: str = None, url: str = None, pdf_file: str = None, options=None):"""識別@param image:@param url:@param pdf_file:@param options:@return:"""self.image = imageself.url = urlself.pdf_file = pdf_fileself.options = options or {}self.__check()# 發送請求return self.__request(self.ocr_type.value, options)def set_access_token(self, access_token):"""設置access_token@param access_token:@return:"""self.access_token = access_token