簡介
以圖片形式的EXCEL表格為例,信息讀取我們使用百度文字識別OCR來實現,百度接口提供了免費額度,基本滿足日常使用,下面來具體看一下如何使用百度Excel識別。
准備工作
baidu-aip 安裝
Python 版的 SDK 安裝很簡單
pip install baidu-aip
注冊百度AI開放平台
創建應用需要一個百度或百度雲賬號,注冊登錄地址為:https://login.bce.baidu.com/
登錄后將鼠標移到登錄頭像位置,在彈出菜單中點擊用戶中心,
如圖所示:

進入需選一下相應信息,如圖所示:

選完之后點保存即可。
接着將鼠標移到左側>符號位置,再選人工智能,點擊文字識別,如圖所示:

點擊之后會進到如下所示圖中:

現在,我們就可以點擊創建應用了,之后進到如下所示圖中:

從上圖中我們可以看出百度文字識別OCR能夠識別的信息類別非常多,也就是說不只是識別表格。
如果你有其他信息識別的需求也是可以通過它來快速實現的。
這里我們填一下應用名稱和應用描述,填完之后點立即創建即可。
創建完成后返回應用列表,如下圖所示:

記下一下AppID&API Key&Secret Key這三個值,調用接口時使用。
代碼實現
原始圖片

處理后圖片

導入所需模塊
# 圖片識別
from aip import AipOcr
# 時間模塊
import time
# 網頁獲取
import requests
# 操作系統接口模塊
import os
為了能夠對圖片進行批量處理,定義get_image(image_path)函數獲取對應文件夾中所有圖片。
# 獲取文件夾中所有圖片
def get_image(image_path):
images=[] # 存儲文件夾內所有文件的路徑(包括子目錄內的文件)
for root, dirs, files in os.walk(work_path):
path = [os.path.join(root, name) for name in files]
images.extend(path)
return images
定義Image_Excel(APP_ID,API_KEY,SECRET_KEY)函數,獲取圖片中表格
def Image_Excel(APP_ID,API_KEY,SECRET_KEY):
# 調用百度AI接口
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 循環遍歷文件家中圖片
images=get_image(image_path)
for image in images:
# 以二進制方式打開圖片
img_open=open(image,'rb')
# 讀取圖片
img_read = img_open.read()
# 調用表格識別模塊識別圖片
table = client.tableRecognitionAsync(img_read)
# 獲取請求ID
request_id = table['result'][0]['request_id']
#獲取表格處理結果
result = client.getTableRecognitionResult(request_id)
# 處理狀態是“已完成”,獲取下載地址
while result['result']['ret_msg'] != '已完成':
time.sleep(2) # 暫停2秒再刷新
result = client.getTableRecognitionResult(request_id)
download_url = result['result']['result_data']
print(download_url)
# 獲取表格數據
excel_data = requests.get(download_url)
# 根據圖片名字命名表格名稱
xlsx_name = image.split(".")[0] + ".xlsx"
# 新建excel文件
xlsx = open(xlsx_name, 'wb')
# 將數據寫入excel文件並保存
xlsx.write(excel_data.content)
主函數定義
if __name__=='__main__':
image_path = input('請輸入圖片所在文件夾路徑:')
APP_ID=input('APP_ID:')
API_KEY=input('API_KEY:')
SECRET_KEY=input('SECRET_KEY')
Image_Excel(APP_ID,API_KEY,SECRET_KEY)
總結
到此這篇關於Python調用百度AI實現圖片表格識別功能的文章就介紹到這了,更多實用小工具請關注公眾號【紫電的學習筆記】
注意:
在開始前,需要檢查圖片的大小,必須在1K~4M之間,不然會報錯“‘error_msg': ‘image size error, image is too big or too small, upper limit 4M, lower limit 1k, please check your param'”。
圖片的清晰度會對識別結果產生影響
完整代碼
# 圖片識別
from aip import AipOcr
# 時間模塊
import time
# 網頁獲取
import requests
# 操作系統接口模塊
import os
image_path=''
# 獲取文件夾中所有圖片
def get_image():
images=[] # 存儲文件夾內所有文件的路徑(包括子目錄內的文件)
for root, dirs, files in os.walk(image_path):
path = [os.path.join(root, name) for name in files]
images.extend(path)
return images
def Image_Excel(APP_ID,API_KEY,SECRET_KEY):
# 調用百度AI接口
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 循環遍歷文件家中圖片
images=get_image()
for image in images:
# 以二進制方式打開圖片
img_open=open(image,'rb')
# 讀取圖片
img_read = img_open.read()
# 調用表格識別模塊識別圖片
table = client.tableRecognitionAsync(img_read)
# 獲取請求ID
request_id = table['result'][0]['request_id']
#獲取表格處理結果
result = client.getTableRecognitionResult(request_id)
# 處理狀態是“已完成”,獲取下載地址
while result['result']['ret_msg'] != '已完成':
time.sleep(2) # 暫停2秒再刷新
result = client.getTableRecognitionResult(request_id)
download_url = result['result']['result_data']
print(download_url)
# 獲取表格數據
excel_data = requests.get(download_url)
# 根據圖片名字命名表格名稱
xlsx_name = image.split(".")[0] + ".xls"
# 新建excel文件
xlsx = open(xlsx_name, 'wb')
# 將數據寫入excel文件並保存
xlsx.write(excel_data.content)
if __name__=='__main__':
image_path = input('請輸入圖片所在文件夾路徑:')
APP_ID=input('APP_ID:')
API_KEY=input('API_KEY:')
SECRET_KEY=input('SECRET_KEY:')
Image_Excel(APP_ID,API_KEY,SECRET_KEY)
