溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

發(fā)布時(shí)間:2021-09-14 13:37:44 來源:億速云 閱讀:190 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    步驟

    安裝百度AI庫

    !pip install baidu-aip

    注冊(cè)百度AI開放平臺(tái)

    先注冊(cè)百度AI,獲得ID和密鑰。注冊(cè)方法可參考:注冊(cè)方法 只需走到 “1.6 獲取密鑰” 即可。然后記錄下自己的APP_ID、API_KEY、SECRET_KEY,就可以開始了。

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    調(diào)用AipOcr庫識(shí)別表格文字

    from aip import AipOcr #導(dǎo)入AipOcr模塊,用于做文字識(shí)別
    
    APP_ID = '*********' # 你申請(qǐng)的
    API_KEY = '*********'# 你申請(qǐng)的
    SECRET_KEY = '*********'# 你申請(qǐng)的
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

    選擇的圖片為某化學(xué)方程式表(來源于網(wǎng)絡(luò))

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    以二進(jìn)制方式打開圖片,讀?。?/p>

    file = "表格圖片\\化學(xué)方程式表.jpg"
    pic = open(file,'rb') #以二進(jìn)制方式打開圖片
    img = pic.read() #讀取
    table = client.tableRecognitionAsync(img)    #調(diào)用表格識(shí)別模塊
    print(table)

    然后調(diào)用表格識(shí)別模塊tableRecognitionAsync(),并將返回值存入變量table中并查看:

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    table是一個(gè)字典,其中有2個(gè)鍵,一個(gè)叫result,一個(gè)叫l(wèi)og_id。我們需要的是result中的request_id,可以通過如下語句獲?。?/p>

    request_id = table['result'][0]['request_id']
    request_id

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    通過這個(gè)ID,可以獲取識(shí)別完成后所保存的Excel表格的下載地址。將request_id傳入getTableRecognitionResult()就能獲取結(jié)果。

    result = client.getTableRecognitionResult(request_id)
    print(result)

    打印一下結(jié)果result,就能看到下面的內(nèi)容。其中result_data對(duì)應(yīng)的那個(gè)網(wǎng)址就是Excel表格的下載地址。

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    調(diào)用webbrowser庫使用webbrowser.open(url)語句自動(dòng)打開網(wǎng)址進(jìn)行下載:

    url = result['result']['result_data']
    
    import webbrowser # 打開瀏覽器
    webbrowser.open(url)

    附:Python 通過瀏覽器 打開指定網(wǎng)址

    1.通過默認(rèn)瀏覽器打開網(wǎng)頁

    import webbrowser
    webbrowser.open("http://www.baidu.com")

     webbrowser.open(url, new=0, autoraise=True) 在系統(tǒng)的默認(rèn)瀏覽器中訪問url地址,如果new=0, url會(huì)在同一個(gè)

        瀏覽器窗口中打開;如果new=1,新的瀏覽器窗口會(huì)被打開;new=2 新的瀏覽器tab會(huì)被打開

    2.通過os模塊,啟動(dòng)瀏覽器并打開指定網(wǎng)頁

    import os
    os.system('"C:\Program Files\internet explorer\iexplore.exe" http://www.baidu.com')

    3.使用selenium

    from selenium import webdriver
    url='http://www.baidu.com'
    driver = webdriver.Firefox()
    driver.get(url)

    識(shí)別結(jié)果如下:

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    這個(gè)Excel文件有6張工作表,具體包含與圖片中表格內(nèi)容的對(duì)應(yīng)關(guān)系如下。body儲(chǔ)存表格部分的內(nèi)容,header儲(chǔ)存表頭的文字,footer儲(chǔ)存表尾的文字。

    Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能

    識(shí)別效果并非完美,但是整體看來還行,當(dāng)然,原稿越清晰,識(shí)別效果越好。

    可能遇到的問題

    在開始前,需要檢查圖片的大小,必須在1K~4M之間,不然會(huì)報(bào)錯(cuò)“‘error_msg': ‘image size error, image is too big or too small, upper limit 4M, lower limit 1k, please check your param'”。

    批量操作

    先獲取所有圖片的路徑,存入pictures列表。結(jié)果如下。

    #獲取路徑下所有圖片文件,并存入列表
    import os
    work_path = "表格圖片\\"
    pictures=[] # 存儲(chǔ)文件夾內(nèi)所有文件的路徑(包括子目錄內(nèi)的文件)
    for root, dirs, files in os.walk(work_path):
        path = [os.path.join(root, name) for name in files]
        pictures.extend(path)
    pictures

    然后將所有圖片逐個(gè)傳入表格識(shí)別接口,獲取其請(qǐng)求ID及存有識(shí)別結(jié)果的Excel文件的下載地址。在提取Excel下載路徑之前,需要先判斷識(shí)別是否完成。這是通過識(shí)別結(jié)果返回的字典中的'ret_msg'對(duì)應(yīng)的值來判斷的。只有當(dāng)它是“已完成”時(shí),才能獲得下載鏈接。此處用了while循環(huán),每隔2秒刷新一下狀態(tài),直到狀態(tài)是“已完成”時(shí),才提取鏈接。然后使用requests.get()獲取下載鏈接信息,寫入Excel文件。Excel自動(dòng)命名及下載結(jié)果如圖。

    from aip import AipOcr  #導(dǎo)入AipOcr模塊,用于做文字識(shí)別
    import time #時(shí)間模塊
    import requests #用于HTTP請(qǐng)求
    
    APP_ID = '24800359' # 你申請(qǐng)的
    API_KEY = 'PrmTtmrqkeaqhvxOPEN4eZVt'# 你申請(qǐng)的
    SECRET_KEY = 'LOFpCH6wpLV7xZPG0DTcvV4x1Sqyvmk9'# 你申請(qǐng)的
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    
    #提交識(shí)別請(qǐng)求,并儲(chǔ)存所有請(qǐng)求ID
    for picture in pictures:
        pic = open(picture,'rb') #以二進(jìn)制方式打開圖片
        img = pic.read() #讀取
        table = client.tableRecognitionAsync(img)    #調(diào)用表格識(shí)別模塊
        request_id = table['result'][0]['request_id']
        
        #判斷識(shí)別是否完成,直到完成才根據(jù)請(qǐng)求ID獲取Excel下載路徑
        result = client.getTableRecognitionResult(request_id)  #通過ID獲取識(shí)別結(jié)果
        while result['result']['ret_msg'] != '已完成': #如果狀態(tài)是“已完成”,才能獲取下載地址
            time.sleep(2) #暫停2秒再刷新
            result = client.getTableRecognitionResult(request_id) #持續(xù)刷新,直到滿足條件
            
        download_path = result['result']['result_data']
        
        #下載并將Excel文件名設(shè)為圖片名
        excel_name = picture.split(".")[0] + ".xls" #讓excel文件的名字與圖片相同
        excel = requests.get(download_path) #抓取下載鏈接
        file = open(excel_name, 'wb') #新建excel文件
        file.write(excel.content) #寫入excel文件并保存

    看完了這篇文章,相信你對(duì)“Python如何調(diào)用百度AI實(shí)現(xiàn)圖片上表格識(shí)別功能”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI