Python調用百度AI實現圖片上表格識別功能
簡介
Python免費調用百度AI實現圖片上面的表格識別
步驟
安裝百度AI庫
!pip install baidu-aip
註冊百度AI開放平臺
先註冊百度AI,獲得ID和密鑰。註冊方法可參考:註冊方法 隻需走到 “1.6 獲取密鑰” 即可。然後記錄下自己的APP_ID、API_KEY、SECRET_KEY,就可以開始瞭。
調用AipOcr庫識別表格文字
from aip import AipOcr #導入AipOcr模塊,用於做文字識別 APP_ID = '*********' # 你申請的 API_KEY = '*********'# 你申請的 SECRET_KEY = '*********'# 你申請的 client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
選擇的圖片為某化學方程式表(來源於網絡)
以二進制方式打開圖片,讀取:
file = "表格圖片\\化學方程式表.jpg" pic = open(file,'rb') #以二進制方式打開圖片 img = pic.read() #讀取 table = client.tableRecognitionAsync(img) #調用表格識別模塊 print(table)
然後調用表格識別模塊tableRecognitionAsync()
,並將返回值存入變量table中並查看:
table是一個字典,其中有2個鍵,一個叫result,一個叫log_id。我們需要的是result中的request_id,可以通過如下語句獲取:
request_id = table['result'][0]['request_id'] request_id
通過這個ID,可以獲取識別完成後所保存的Excel表格的下載地址。將request_id傳入getTableRecognitionResult()
就能獲取結果。
result = client.getTableRecognitionResult(request_id) print(result)
打印一下結果result,就能看到下面的內容。其中result_data對應的那個網址就是Excel表格的下載地址。
調用webbrowser庫使用webbrowser.open(url)
語句自動打開網址進行下載:
url = result['result']['result_data'] import webbrowser # 打開瀏覽器 webbrowser.open(url)
附:Python 通過瀏覽器 打開指定網址
1.通過默認瀏覽器打開網頁
import webbrowser webbrowser.open("http://www.baidu.com")
webbrowser.open(url, new=0, autoraise=True) 在系統的默認瀏覽器中訪問url地址,如果new=0, url會在同一個
瀏覽器窗口中打開;如果new=1,新的瀏覽器窗口會被打開;new=2 新的瀏覽器tab會被打開
2.通過os模塊,啟動瀏覽器並打開指定網頁
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)
識別結果如下:
這個Excel文件有6張工作表,具體包含與圖片中表格內容的對應關系如下。body儲存表格部分的內容,header儲存表頭的文字,footer儲存表尾的文字。
識別效果並非完美,但是整體看來還行,當然,原稿越清晰,識別效果越好。
可能遇到的問題
在開始前,需要檢查圖片的大小,必須在1K~4M之間,不然會報錯“‘error_msg’: ‘image size error, image is too big or too small, upper limit 4M, lower limit 1k, please check your param’”。
批量操作
先獲取所有圖片的路徑,存入pictures列表。結果如下。
#獲取路徑下所有圖片文件,並存入列表 import os work_path = "表格圖片\\" pictures=[] # 存儲文件夾內所有文件的路徑(包括子目錄內的文件) for root, dirs, files in os.walk(work_path): path = [os.path.join(root, name) for name in files] pictures.extend(path) pictures
然後將所有圖片逐個傳入表格識別接口,獲取其請求ID及存有識別結果的Excel文件的下載地址。在提取Excel下載路徑之前,需要先判斷識別是否完成。這是通過識別結果返回的字典中的’ret_msg’對應的值來判斷的。隻有當它是“已完成”時,才能獲得下載鏈接。此處用瞭while循環,每隔2秒刷新一下狀態,直到狀態是“已完成”時,才提取鏈接。然後使用requests.get()獲取下載鏈接信息,寫入Excel文件。Excel自動命名及下載結果如圖。
from aip import AipOcr #導入AipOcr模塊,用於做文字識別 import time #時間模塊 import requests #用於HTTP請求 APP_ID = '24800359' # 你申請的 API_KEY = 'PrmTtmrqkeaqhvxOPEN4eZVt'# 你申請的 SECRET_KEY = 'LOFpCH6wpLV7xZPG0DTcvV4x1Sqyvmk9'# 你申請的 client = AipOcr(APP_ID, API_KEY, SECRET_KEY) #提交識別請求,並儲存所有請求ID for picture in pictures: pic = open(picture,'rb') #以二進制方式打開圖片 img = pic.read() #讀取 table = client.tableRecognitionAsync(img) #調用表格識別模塊 request_id = table['result'][0]['request_id'] #判斷識別是否完成,直到完成才根據請求ID獲取Excel下載路徑 result = client.getTableRecognitionResult(request_id) #通過ID獲取識別結果 while result['result']['ret_msg'] != '已完成': #如果狀態是“已完成”,才能獲取下載地址 time.sleep(2) #暫停2秒再刷新 result = client.getTableRecognitionResult(request_id) #持續刷新,直到滿足條件 download_path = result['result']['result_data'] #下載並將Excel文件名設為圖片名 excel_name = picture.split(".")[0] + ".xls" #讓excel文件的名字與圖片相同 excel = requests.get(download_path) #抓取下載鏈接 file = open(excel_name, 'wb') #新建excel文件 file.write(excel.content) #寫入excel文件並保存
總結
到此這篇關於Python調用百度AI實現圖片上表格識別功能的文章就介紹到這瞭,更多相關Python調用百度AI識別表格內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python實現PDF掃描件生成DOCX或EXCEL功能
- python爬蟲模擬登錄之圖片驗證碼實現詳解
- Python調用百度AI實現身份證識別
- Python基於百度AI實現抓取表情包
- Python實現老照片修復之上色小技巧