****AI應用 - 結合OCR與LLM,實現名片資料結構化
問題
如何將名片上的資料轉換成JSON,供後續系統使用
資料流
- 使用者將名片拍照,上傳至line 官方帳號
- 透過WebHook,將Message ID傳給Google CCloud Function
- 根據Message ID,取得上傳影像檔案
- 使用Coud Vision AI之OCR功能,擷取影像檔案所包含之文字資料,範例如下:
- 使用Vertex AI,將文字資料轉為半結構化的JSON/NDJSON格式,範例如下:
- 將相關檔案(影像、文字、JSON)儲存於Google Cloud Storage
- 將文字匯入Google Vertex AI的資料儲存庫
- 將JSON資料匯入MongoDB
- 詢問已拍照匯入之名片相關資料
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
系統建置與相關技術:
- Line官方帳號申請
- Line Message API啟用
- Google Cloud Storage
雖然名片資料最終儲存於mongoDB,但處理過程中所產生的暫存檔儲存在Google Cloud Storage。系統需要以下暫存位置:
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- 系統:處理過程中需要之JSON Template檔案
- 目前提供兩組Template:
{ "公司名稱": "", "公司名稱(英文)": "", "姓名": "", "姓名(英文)": "", "部門": "", "職稱": [ { "職稱": "" } ], "地址": [ { "地址": "", "電話號碼": "", "分機號碼": "" } ], "統一編號": "", "網站": "", "電子郵件": "", "行動電話號碼": "", "Line ID": "" }
{ "公司名稱": "", "公司名稱(英文)": "", "姓名": "", "姓名(英文)": "", "部門": "", "職稱": "", "地址": [ { "地址": "", "電話號碼": "", "分機號碼": "" } ], "統一編號": "", "網站": "", "電子郵件": "", "行動電話號碼": "", "Line ID": "" }
- 影像:儲存拍攝上傳知名片影像檔
- TXT檔(聯絡方式):OCR所產生的文字檔
- JSON檔(結構資料):LLM所產生的JSON檔
- 暫存:處理過程中有錯誤或無法順利產生結果時,暫存檔案的位置
- Google Cloud Function
負責系統主要處理流程,主要邏輯如下:
- 接收Line Server轉傳之訊息並parsing
- 若訊息種類為"image",下載影像檔
- 使用Version AI,取得影像檔之文字
- 使用Generative AI,將文字轉會為結構化的JSON檔
- 將JSON儲存至mongoDB
- 若訊息種類為"text",搜尋mongoDB並回傳搜尋結果
Cloud Function必須設定以下環境變數,根據相關環境變數,Cloud Function可連接Line、Cloud Storage、Generative AI與MongoDB。相關設定範例如下:
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- Google Cloud Vision AI
Cloud Vision AI可辨識影像檔、PDF與TIFF所包含的文字,可以辨識手寫文字,相關程式碼如下:
-
Google Generaticeai
使用LLM技術將文字檔轉會為JSON檔,提供JSON Template,LLM即可根據該Template產生對應之JSON檔案。
-
Google Cloud Function
另一個Google Cloud Function則為事件驅動,當JSON順利產生時,該事件會驅動sasa-worker
Cloud Function,將JSON檔儲存至mongoDB。
-
MongoDB Altas
以JSON格式儲存名片資料以供查詢
背景作業 - 資料正確性與格式正規化
- 電話、行動電話、統一編號等有特定格式欄位可透過背景作業執行正規化,如果格式錯誤則修正或刪除。
- 公司名稱、公司名稱(英文)、統一編號、地址等訊息,可透過同一公司其他訊息補強。
背景作業 - House Keeping
- 失敗檔案會儲存於暫存目錄,透過背景作業可重新使用LLM(使用較簡單的提示,取得主要資料),取得相關資料。
- 同一張名片重複輸入,採用資料交集。
背景作業 - 公司資料整理
透過個人資料累積,建立公司部門組織結構與校正基本資料。
未來功能增加與系統改善
- LLM/OCR皆有其不穩定性,可針對mongoDB以儲存的資料作進一步處理,得到更佳的效果。例如:姓名誤植為中英文修正、電話號碼格式正規化
- 結合Open Data可將基本資料更精確,例如:公司中英文名稱確認、公司統編補足等
- 使用者介面優化(開發專屬APP?)
- 使用者指引(輸入錯誤時可提供正確之提示)
- 資料重複,
- 資料匯出