AI大模型實現圖片OCR識別

PetterLiu發表於2024-11-11

AI大模型實現圖片OCR識別

背景

OCR(Optical Character Recognition,光學字元識別)是一種將影像中的文字轉換為機器編碼文字的技術。這項技術可以自動讀取紙質文件上的文字資訊,並將其轉換成電子格式,便於編輯、儲存和檢索。OCR 技術在很多領域都有廣泛應用,比如資料錄入、文獻數字化、輔助閱讀裝置等。

LLM 助力 OCR 的方式

  1. 文字理解和後處理:
    • 語義理解:LLM 可以幫助 OCR 系統理解識別出的文字內容,從而對錯誤或模糊的地方進行校正。例如,如果 OCR 系統誤讀了某個單詞,LLM 可以根據上下文來推測正確的單詞。
    • 格式修復:對於結構複雜的文件,如包含表格、列表等,LLM 能夠幫助恢復原始文件的格式,使輸出結果更加符合原始文件的結構。
  1. 多模態資訊融合:
    • 結合影像識別和自然語言處理能力,LLM 可以處理包含文字和影像的混合內容,實現更高階別的資訊提取和理解。
  1. 特定領域最佳化:
    • 在特定領域(如法律、醫學等),LLM 可以透過預訓練和微調來最佳化對專業術語的理解和識別,提高特定領域的 OCR 準確性。

LLM 進行影像識別與傳統 OCR 對比時的主要缺點

LLM 的缺點

  1. 高計算資源需求:
    • 訓練成本:訓練大型語言模型需要大量的計算資源,包括高效能 GPU 和大規模的資料集。這導致訓練成本非常高昂。
    • 推理成本:即使在模型訓練完成後,進行實時推理也需要較高的計算資源,這對於資源有限的裝置(如嵌入式系統)來說是一個挑戰。
  1. 資料隱私和安全問題:
    • 資料收集:訓練 LLM 需要大量的資料,這些資料可能包含敏感資訊。收集和使用這些資料需要嚴格遵守資料隱私和安全法規,增加了合規成本。
    • 資料洩露風險:在傳輸和儲存過程中,資料有洩露的風險,特別是在雲環境中。
  1. 模型複雜性和可解釋性差:
    • 黑盒性質:大型語言模型通常被視為“黑盒”,內部機制難以理解,這在某些需要高度透明和可解釋性的應用場景中可能是一個問題。
    • 除錯困難:由於模型複雜,除錯和最佳化變得更加困難,尤其是在遇到特定問題時。
  1. 訓練時間和成本:
    • 長時間訓練:訓練 LLM 需要大量的時間和計算資源,這在快速迭代和開發週期短的專案中可能是一個瓶頸。
    • 持續最佳化:模型需要定期進行微調和最佳化,以適應新的資料和應用場景,這增加了維護成本。
  1. 泛化能力的侷限性:
    • 特定領域適應:儘管 LLM 具有較強的泛化能力,但在特定領域(如醫學、法律等)的效能可能不如專門為這些領域設計的傳統 OCR 系統。
    • 長尾問題:對於一些罕見或特殊的字元和佈局,LLM 可能表現不佳,因為這些情況在訓練資料中出現的頻率較低。
  1. 實時性和延遲:
    • 響應時間:由於 LLM 的複雜性,實時處理影像和文字的響應時間可能較長,這對於需要快速反饋的應用(如實時翻譯、即時通訊等)可能是一個問題。
  1. 模型大小和儲存:
    • 大模型佔用空間:大型語言模型通常體積龐大,佔用較多的儲存空間,這在儲存資源有限的裝置上可能是一個問題。

與傳統 OCR 的對比

  1. 技術成熟度:
    • 傳統 OCR:已經發展了幾十年,技術相對成熟,有許多現成的商業產品和服務,易於整合和使用。
    • LLM:雖然近年來取得了顯著進展,但仍處於快速發展階段,技術和工具仍在不斷完善中。
  1. 成本效益:
    • 傳統 OCR:成本相對較低,適合預算有限的小型企業和個人開發者。
    • LLM:初始投資和長期維護成本較高,更適合大型企業和有較高預算的專案。
  1. 應用場景:
    • 傳統 OCR:適用於標準化和結構化的文件處理,如發票、表格等。
    • LLM:適用於複雜和非結構化的文件處理,如手寫筆記、多語言文件等。


識別圖型驗證碼

今天我們來看的場景是 圖型驗證碼識別,使用公網大模型API起成本高效識別圖型驗證碼

提示詞

請對這張圖片進行OCR識別,並輸出最準確的驗證碼,直接輸出識別出的結果字元,不要輸出其他內容。


文心一言3.5

clipboard

識別成功


通義千問2.5

clipboard

識別成功


通義千問2-VL-開源版-7B

圖片理解qwen2-vl-7b

clipboard

識別成功


關於7B模型

一般來說,7B引數量的模型在推理時可能需要至少8GB到16GB的GPU視訊記憶體,但這只是一個粗略的估計。為了更準確地評估所需GPU視訊記憶體,建議參考該模型官方提供的文件或測試環境中的具體要求。如果是在本地執行,還應該考慮是否進行了任何最佳化措施,比如混合精度訓練(使用FP16而非FP32),這可以有效減少所需的視訊記憶體量。如果您打算進行模型訓練而不是簡單的推理,那麼可能還需要更多的視訊記憶體來儲存梯度資訊和其他訓練過程中產生的資料。

KIMI

clipboard

識別成功


Gemini 1.5 Flash

做 OCR 效果非常好,可以在 Prompt 裡面定製要輸出的格式,並且成本極低。 案例有寶玉反饋其朋友某公司使用第三方的OCR的服務,用來提取發票上的文字為結構化資料。但收費較高.
參考提示詞: *** Extract text from the provided image and organize it into a structured JSON format. ***

Google 每天為開發者免費提供15億個Token,其中 Gemini 1.5 Flash免費套餐包含: - 每分鐘15次請求(RPM) - 每分鐘100萬個Token(TPM) - 每天1,500次Token(RPD) - 免費上下文快取服務,每小時最多可儲存100萬個Token - 免費微調 Gemini 1.5 Pro免費套餐包含: - 每分鐘2次請求(RPM) - 每分鐘32,000個Token(TPM) - 每天50次請求(RPD) 微調模型 text-embedding-004 提供: - 每分鐘1,500次請求(RPM) 除了前面說的 API,Google AI Studio 還為開發者提供免費訪問,其中 Gemini 1.5 Pro 有 2M Token上下文視窗。 價格頁面:https://ai.google.dev/pricing Google AI Studio:https://aistudio.google.com

發票識別示例場景

clipboard


程式碼實現

使用程式碼實現呼叫大模型API

import os
import json
import base64
import requests
from datetime import datetime

class AliBailianImageService:
def __init__(self, configuration):
self.configuration = configuration

def get_api_key(self):
# 根據環境變數決定從哪裡讀取 API Key
dev_environment_variable = os.getenv("ENVIRONMENT")
is_development = not dev_environment_variable or dev_environment_variable.lower() == "development"

if is_development:
# 開發環境從配置中讀取
api_key = self.configuration.get("DASHSCOPE_API_KEY")
else:
# 生產環境從環境變數讀取
api_key = os.getenv("DASHSCOPE_API_KEY")

# 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key = "sk-xxx"
if not api_key:
print("API Key 未設定。請確保環境變數 'DASHSCOPE_API_KEY' 已設定。")
return None

return api_key

def get_image_base64_string_and_save(self, image_url):
response = requests.get(image_url)
if response.status_code != 200:
raise Exception(f"Failed to download image: {response.status_code}")

image_data = response.content
encoded_image = base64.b64encode(image_data).decode('utf-8')

# 可選步驟:儲存圖片到檔案
# filename = f"{uuid.uuid4()}.jpg"
# with open(filename, 'wb') as f:
# f.write(image_data)

return encoded_image

def send_post_request(self, url, json_content, api_key):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"Accept": "application/json"
}

response = requests.post(url, data=json_content, headers=headers)
response_body = response.text

self.write_response_to_log(response_body)

if response.status_code >= 200 and response.status_code < 300:
return response_body
else:
return f"請求失敗: {response.status_code}"

def write_response_to_log(self, response_body):
log_file_path = "Logs/response.log"
log_dir = os.path.dirname(log_file_path)

if not os.path.exists(log_dir):
os.makedirs(log_dir)

with open(log_file_path, 'a') as f:
f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Response Body: {response_body}\n")

def get_results(self):
api_key = self.get_api_key()
if not api_key:
return None

encoded_image = self.get_image_base64_string_and_save(
"http://0.0.0.0/7661454/captchaimage?rnd=0.8717223995099175"
)

url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
json_content = {
"model": "qwen2-vl-7b-instruct",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "請對這張圖片進行OCR識別,並輸出最準確的驗證碼,直接輸出識別出的結果字元,不要輸出其他內容。"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}}
]
}
]
}

json_content_str = json.dumps(json_content)

result = self.send_post_request(url, json_content_str, api_key)
print(result)
return result

if __name__ == "__main__":
# 示例配置
config = {
"DASHSCOPE_API_KEY": "your-api-key-here"
}

service = AliBailianImageService(config)
result = service.get_results()
if result:
print("Result:", result)


通義千問2-VL-開源版-2B

通義千問VL模型qwen2-vl-2b-instruct可以根據您傳入的圖片來進行回答,curl參考

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "model": "qwen-vl-max", "input":{ "messages":[ { "role": "user", "content": [ {"image": "https://img.alicdn.com/imgextra/i2/O1CN01y1lotD1hINrPr60fs_!!6000000004254-0-tps-1384-3024.jpg"}, {"text": "這是什麼?"} ] } ] } }'

事實情況下獨立部署也可以


測試圖片進行識別

clipboard

返回示例

[2024-11-06 16:14:22] Response Body: {"choices":[{"message":{"content":"\"bafy\"","role":"assistant"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":60,"completion_tokens":6,"total_tokens":66},"created":1730880859,"system_fingerprint":null,"model":"qwen-vl-plus","id":"chatcmpl-5a306496-300c-9815-8c50-35e98f15508d"}


目前僅供免費體驗,另一個官方示例是視覺語言模型輸出示例

p845775

傳統OCR工具提取的內容不完整且格式混亂。大模型不僅能精準提取圖片中的文字,還能以規整的形式輸出。

p845875

p845972

通義千問團隊以Apache 2.0協議開源了Qwen2-VL-2B和Qwen2-VL-7B,開原始碼已整合到Hugging Face Transformers、vLLM和其他第三方框架中。開發者可以透過Hugging Face和魔搭ModelScope下載使用模型,也可透過通義官網、通義APP的主對話頁面使用模型。


圖片理解

https://bailian.console.aliyun.com/#/model-market/detail/qwen2-vl-2b-instruct?tabKey=sdk

視覺理解

https://help.aliyun.com/zh/model-studio/user-guide/vision?spm=a2c4g.11186623.help-menu-2400256.d_1_0_2.5ef477e9sJEdx7&scm=20140722.H_2845871._.OR_help-V_1#f1cbd5b8a8k5w

阿里雲百鍊平臺:

https://help.aliyun.com/zh/model-studio/developer-reference/qwen-vl-api

GitHub:

https://github.com/QwenLM/Qwen2-VL

HuggingFace:

https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d

魔搭ModelScope:

https://modelscope.cn/organization/qwen?tab=model

模型體驗:

https://huggingface.co/spaces/Qwen/Qwen2-VL

https://qwen.readthedocs.io/en/latest/benchmark/speed_benchmark.html


總結

我們基於網際網路大模型API輔助實現圖型驗證碼識別,如果配合工作流更是簡單便捷,同時成本不高, 使得老一代資訊系統中圖型驗證碼已存在安全隱患。相比傳統OCR識別,能夠按要求完善識別後格式。

LLM(Large Language Models,大型語言模型)輔助OCR(Optical Character Recognition,光學字元識別)圖片識別具有重要意義,主要體現在以下幾個方面:

1、提高資訊提取的準確性和效率

OCR技術的侷限性:

  • OCR技術雖然能夠從影像中提取文字資訊,但在處理複雜場景時,如具有複雜背景、手寫字型、低質量影像等情況,其識別準確性可能會受到影響。

LLM的輔助作用:

  • LLM可以對OCR提取的文字進行深入分析,理解其上下文含義,並提取出關鍵資訊。這種分析能力使得LLM能夠糾正OCR識別中的錯誤,提高資訊提取的準確性。
  • LLM還可以根據使用者的提問或需求,對提取的資訊進行進一步的篩選和整理,從而提高資訊提取的效率。
2、擴充OCR技術的應用場景

傳統OCR的應用限制:

傳統的OCR技術主要應用於文件掃描、車牌識別等相對簡單的場景。

LLM賦能下的OCR應用:

在LLM的輔助下,OCR技術可以應用於更復雜的場景,如自然場景文字識別、手寫字型識別等。

此外,LLM還可以結合OCR技術實現定製化的關鍵資訊抽取,滿足不同行業和領域的特定需求。

3、推動智慧化發展

自動化辦公:

  • 在辦公場景中,LLM與OCR的結合可以實現對文件圖片的自動識別、關鍵資訊提取和整理,極大地提高了工作效率。例如,在財務報銷流程中,可以自動從發票圖片中提取關鍵資訊並錄入系統。

智慧客服:

  • 在智慧客服領域,使用者可能會透過圖片形式傳送問題或需求。利用LLM與OCR技術,智慧客服可以自動識別圖片中的文字資訊,並據此給出相應的回答或解決方案。

其他領域:

  • 在電商領域,LLM技術可以用於分析商品圖片中的關鍵資訊,如品牌、顏色、尺碼等,以支援商品推薦和庫存管理等決策。
  • 在醫療影像分析領域,可以使用OCR技術提取影像中的文字資訊,再使用LLM理解影像描述的語義資訊,從而實現對病情的自動診斷和分析。
4、技術融合與創新

技術融合:

  • LLM與OCR的結合是技術融合的一個典型例子。這種融合不僅提高了資訊提取的準確性和效率,還擴充了OCR技術的應用場景。

技術創新:

  • 隨著LLM技術的不斷髮展,其在OCR領域的應用也將不斷創新。例如,透過引入更先進的深度學習演算法和模型結構,可以進一步提高LLM對OCR提取文字的理解和分析能力。




今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管理,資訊保安,團隊建設 有參考作用 , 您可能感興趣的文章:
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
影片直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續整合/CD
網際網路電商購物車架構演變案例
網際網路業務場景下訊息佇列架構
網際網路高效研發團隊管理演進之一
訊息系統架構設計演進
網際網路電商搜尋架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
網際網路資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之效能實時度量系統演變

如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 該文章也同時釋出在我的獨立部落格中-Petter Liu Blog。

相關文章