![OCR - 如何使用OCR處理發票, 帳單 1 use scan paper work by worker](https://cdn.leonardo.ai/users/b5b1ec82-9345-461b-992c-00c30603948f/generations/cd031806-277c-434d-9b52-454ee1904d6b/Default_use_scan_paper_work_by_worker_0.jpg)
OCR – 如何使用OCR處理發票 – 不同的部門通常都要處理大理的發票, 帳單, 收據等紙張表格. 花費同事不少的事間, 如果把這些時間省掉, 專心處理核心事務, 省下時間休息一下, 不是很好嗎? 以下我會介紹如何使用OCR來把發票, 帳單的資料抽出來, 以作日後的儲存.
大綱
- Coding ( 簡介 )
- Coding(步驟)
- Coding(Python代碼)
- 使用的好處
- 在不同部門中使用
- 結語
1) Coding (簡介)
以下我們會介紹以下步驟:
- 使用OpenCV預處理發票圖像,使其更容易掃描。
- 使用Tabula從PDF中提取發票。
- 使用Pytesseract對提取的文本執行OCR。
- 使用Pandas處理OCR結果並將其轉換為可用格式。
通過遵循這些步驟,您可以大大提高處理和組織發票的能力。
2) Coding(步驟)
步驟1: 使用OpenCV預處理發票圖像
- 使用cv2.imread()載入圖像
- 使用cv2.cvtColor()將圖像轉換為灰度圖像
- 使用cv2.threshold()對圖像進行閾值處理
步驟2:使用Tabula從PDF中提取發票
- 使用tabula.read_pdf()讀取PDF
步驟3:使用Pytesseract對提取的文本進行OCR
- 使用pytesseract.image_to_string()將圖像轉換為文本
步驟4:使用Panda處理OCR結果
- 使用pandas.DataFrame()從OCR結果創建新的DataFrame
步驟5.1:反覆運算每個檢測到的文字區塊
- 在文字區塊周圍繪製邊界框
步驟5.2:顯示帶有檢測到的文字區塊的圖像
步驟6:將DataFrame轉換為可用格式
3) Coding(Python代碼)
import cv2
import pytesseract
import pandas as pd
import tabula
# 步驟1: 使用OpenCV預處理發票圖像
# 使用cv2.imread()載入圖像
img = cv2.imread('invoice.jpg')
# 使用cv2.cvtColor()將圖像轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用cv2.threshold()對圖像進行閾值處理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 步驟2:使用Tabula從PDF中提取發票
# 使用tabula.read_pdf()讀取PDF
df = tabula.read_pdf('invoice.pdf')
# 步驟3:使用Pytesseract對提取的文本進行OCR
# 使用pytesseract.image_to_string()將圖像轉換為文本
text = pytesseract.image_to_string(thresh)
# 步驟4:使用Panda處理OCR結果
# 使用pandas.DataFrame()從OCR結果創建新的DataFrame
df = pd.DataFrame(text.split('\\\\n'))
# 步驟5.1:反覆運算每個檢測到的文字區塊
for i in range(len(data['text'])):
# 在文字區塊周圍繪製邊界框
x = data['left'][i]
y = data['top'][i]
w = data['width'][i]
h = data['height'][i]
# Draw a bounding box around the text block
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 步驟5.2:顯示帶有檢測到的文字區塊的圖像
cv2.imshow('Detected Text', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 步驟6:將DataFrame轉換為可用格式
df = pd.concat([df[[0]].iloc[1:], df[[0]].iloc[1:].apply(lambda x: pd.Series(str(x[0]).split(' ')))], axis=1)
如果文件不清楚, 也不繄要, 可以以下Code把圖像先優化:
- 定義彈性扭曲增強
- 對圖像應用增強
- 保存增強後的圖像
import imgaug.augmenters as iaa
from PIL import Image
image = Image.open('image.jpg')
# 定義彈性扭曲增強
elastic = iaa.ElasticTransformation(alpha=50, sigma=5)
# 對圖像應用增強
new_image = elastic.augment_image(image)
# 保存增強後的圖像
new_image.save('augmented_image.jpg')
4) 使用的好處
- 創建自動化工作流程可以優化會計、採購、倉庫、銷售、市場、交付、人力資源和IT部門的流程。
- 訓練OCR模型以提取發票中的關鍵字段,例如供應商名稱、發票號碼和發票日期,可以減少會計和採購部門的手動資料登錄。
- 使用OCR技術數位化倉庫部門的紙質發票和收據,減少存儲空間,會令到搜索和檢索文檔更加容易。
5) 在不同部門中使用
- 會計部門:
- 使用OCR技術提取發票中的關鍵資訊,如供應商名稱、發票號碼和發票日期,並自動將它們輸入到會計軟體中,以簡化發票處理流程。
- 這可以減少錯誤並為員工節省時間。
- 採購部門:
- 用OCR來把發票自動化匹配,以確保採購訂單和發票匹配,使用OCR技術從發票中提取資訊,自動更新庫存和採購系統。
- 減少處理發票時的錯誤和延誤風險。
- 倉庫部門:
- 用OCR處理紙質發票和收據,令管理和搜索文檔更容易。
- 這可以減少存儲空間並減少文檔檢索時間。
- 銷售部門:
- 用OCR把發票的客戶資訊,如姓名和位址提取出來,以進行客戶資料管理和分段。
- 這可以説明企業更好地瞭解客戶,以更客製化的行銷活動服務他們。
- 市場部門:
- 用OCR技術把發票中與市場費用相關的資料抽出來,如廣告費用。
- 更有效地跟蹤支出和管理預算。
- 交付部門:
- 用OCR技術從發票中提取交付資訊,如送貨位址和交貨時間。
- 以追蹤績效指標並改善客戶服務。
- 人力資源部門:
- 使用OCR技術從發票中提取員工資訊,如費用報告。
- 以簡化費用報銷流程並減少手動資料登錄。
- IT部門:
- 使用OCR技術從與IT費用相關的發票中提取資訊,如軟體許可證和硬體採購,以跟蹤支出和管理預算。
- 將OCR與機器學習相結合,預測各個部門發票批准時間,並檢測發票批准流程中的異常情況。
通過這些方式使用OCR技術,企業可以改善發票處理流程,減少錯誤和延誤,並節省時間和金錢。
6) 結語
- 把紙製表格, 資料, 單據等用OCR抽出來.
- 再用AI, 如ML, NLP, Deep Learning 來Automate 你想做的事.