使用 4o 模型在ChatCompletion 中進行影像識別與圖片說明

上課時,學員問到網站版本的 ChatGPT 可以上傳圖片進行識別,並且詢問跟該圖片有關的事項,這怎麼做到的?

『非常簡單呀』我說。『一樣使用 Chat Completions 就可以了。』

學員不解。

我直接拿出範例,這邊有張消費發票的照片:
圖片

你只需要把這張照片轉成 base64 編碼,或是把這張照片上傳到雲端,並取得一個網址,例如:
https://hackmd.io/_uploads/SyQphJ77Jx.png

接著就可以直接以這個網址作為 chat/completions 呼叫時的參數 “type”: “image_url” 的 "url值,像是底下這樣:

{
    "model" : "gpt-4o-mini",
    "messages": [ 
        {
            "role": "system", 
            "content": "你是一個公司的支出申請助理,可以辨識用戶上傳的發票,以便於幫助用戶整理出要報銷的單據資料。" 
        },
        {
            "role": "user", 
            "content": [
	            {
	                "type": "text",
	                "text": "這是一張消費發票,請擷取照片中的文字和數字,特別是發票號碼"
	            },
	            {
	                "type": "image_url",
	                "image_url": {
                        "url": "https://hackmd.io/_uploads/SyQphJ77Jx.png"
                    }
                } 
           ] 
        }
    ],
    "max_tokens": 1000, 
    "stream": false 
}

就可以直接辨識了。
唯一要注意的是,這個功能建議使用 4o-mini 以上的模型。

請注意我們的 prompt:
這是一張消費發票,請擷取照片中的文字和數字,特別是發票號碼
透過這樣的方式,我們不僅可以識別圖像,甚至可以直接詢問圖像當中的文字,API的回覆如下:

{
    "id": "chatcmpl-AXjWxxxxxxxxxxxxxxxxxxxxrN2",
    "object": "chat.completion",
    "created": 1732603193,
    "model": "gpt-4o-mini-2024-07-18",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "以下是從發票中擷取的文字和數字:\n\n- 發票號碼: XA-42004423\n- 年份: 113年01-02月\n- 日期: 2024-02-09 17:59:09\n- 隨機碼: 3351\n- 總計: 487\n- 賣方: 23450344\n- 買方: 53091198\n\n如果需要進一步的協助,請告訴我!",
                "refusal": null
            },
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": { 
    ===略===
    },
    "system_fingerprint": "fp_3dxxxxxx069"
}

有沒有, 4o 模型超厲害的!
btw, 4o還可以辨識手寫的中文文字,是目前我看到最可以廣泛使用的模型。

留言

晴樹寫道…
如果不透過AI,直接傳統方式解析一維條碼就有日期與發票號碼,解析二維條碼就有品項與金額。

這個網誌中的熱門文章

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

VS Code的字體大小

使用 Dify 建立企業請假機器人

使用C#開發LineBot(3) - 使用LineBotSDK發送Line訊息

使用Qdrant向量資料庫實作語意相似度比對