# Sử Dụng OpenAI API Để Hiểu, Phân Tích Và Mô Tả Hình Ảnh Trong phần này, chúng ta sẽ khám phá cách sử dụng **OpenAI API với hình ảnh**, một tính năng mạnh mẽ và linh hoạt, cho phép bạn: - Hiểu nội dung hình ảnh - Mô tả hoặc phân tích hình ảnh - Trích xuất văn bản từ hình ảnh (OCR) - Kết hợp giữa hình ảnh và văn bản để đưa ra câu trả lời chính xác ## Tổng Quan: Tại Sao API Này Lại Quan Trọng? Thông thường, các mô hình ngôn ngữ chỉ làm việc với văn bản. Tuy nhiên, với khả năng **multimodal** (đa phương thức), OpenAI API hiện cho phép xử lý **hình ảnh** cùng với văn bản, mở ra rất nhiều ứng dụng thực tế như: - Phân tích hóa đơn, biên lai, biểu đồ - Trích xuất văn bản từ hình ảnh chụp màn hình - Mô tả ảnh cho người khiếm thị - Nhận diện nội dung ảnh trong hệ thống kiểm duyệt ## Cách Gửi Hình Ảnh Cho API Phân Tích Để gửi một yêu cầu đến API, bạn cần cấu trúc dữ liệu `messages` như sau: ```python { "model": "gpt-4-vision-preview", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Hãy mô tả những gì đang diễn ra trong hình ảnh sau." }, { "type": "image_url", "image_url": { "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Big_Ben_2012-06-23.jpg/800px-Big_Ben_2012-06-23.jpg" } } ] } ] } ``` - `type: text`: Đây là đoạn văn bản mô tả yêu cầu (prompt). - `type: image_url`: Đây là phần chứa hình ảnh (dưới dạng đường dẫn hoặc base64). - `image_url.url`: Phải là **liên kết trực tiếp** tới ảnh (.jpg, .png,...), không phải trang HTML. ## Các Tác Vụ Bạn Có Thể Làm Với Ảnh ### 1. Mô tả nội dung ảnh ```python "text": "Hãy mô tả bức ảnh này một cách chi tiết." ``` > Kết quả sẽ là mô tả như: “Bức ảnh chụp Tháp đồng hồ Big Ben tại London vào một ngày nắng, với bầu trời trong xanh…” 2\. Trích xuất nội dung văn bản trong ảnh (OCR) ```python "text": "Hãy đọc và trích xuất toàn bộ văn bản có trong hình ảnh sau." ``` > Kết quả: Toàn bộ chữ có trong ảnh sẽ được AI trả lại, rất hữu ích khi xử lý biên lai, tài liệu scan, v.v. ## Thay vì URL: Dùng Base64 Cho Ảnh Riêng Tư Nếu ảnh bạn muốn phân tích **không được lưu công khai trên internet**, bạn có thể **chuyển ảnh sang dạng base64** và nhúng trực tiếp vào yêu cầu: ```python { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD..." } } ``` > **Lợi ích của base64:** - Không cần tải ảnh lên server trung gian - Bảo mật cao hơn (ảnh không công khai) - Hoạt động trong các API nội bộ, offline hoặc giới hạn truy cập Các Lưu Ý Khi Dùng API Với Ảnh
Yêu cầuMô tả
Ảnh rõ nétTránh ảnh mờ, tối hoặc có nhiễu
Định dạng ảnhHỗ trợ: `.jpg`, `.png`, `.gif`
Dung lượng ảnhKhông quá lớn (thường < 20MB)
Kết hợp text + imageCung cấp prompt rõ ràng cùng với ảnh để tăng độ chính xác
Sử dụng hệ thống prompt(Optional) Có thể dùng để hướng dẫn vai trò hoặc mục tiêu của AI
Ví Dụ: Phân Tích Biểu Đồ ```python "text": "Đây là biểu đồ. Hãy mô tả xu hướng chính và kết luận rút ra từ nó." ``` Với hình ảnh kèm theo là biểu đồ đường, biểu đồ cột, AI sẽ trả lời như một nhà phân tích dữ liệu.
Điểm chínhNội dung
**Đa năng**OpenAI API không chỉ làm việc với văn bản, mà còn hiểu được hình ảnh
**Mô tả & Đọc ảnh**Có thể mô tả cảnh vật hoặc trích xuất chữ từ ảnh
**Hỗ trợ base64**Hữu ích cho ảnh nhạy cảm, không công khai
**Ứng dụng thực tế**Từ kiểm tra tài liệu, hỗ trợ người khiếm thị đến phân tích hình ảnh trong hệ thống doanh nghiệp
Dưới đây là **một ví dụ thực tế hoàn chỉnh** về cách **trích xuất thông tin từ hóa đơn** bằng cách sử dụng **OpenAI API với hình ảnh**, kết hợp cùng đoạn mã Python để thực thi yêu cầu này. #### **Tình huống giả định:** Bạn có một **ảnh chụp hóa đơn** và muốn tự động trích xuất các thông tin sau: - Tên công ty - Ngày xuất hóa đơn - Tổng tiền - Mã số thuế - Số hóa đơn #### **Yêu cầu gửi đến OpenAI** ##### Ví dụ về `messages` gửi tới GPT-4 API: ```python "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Hãy trích xuất các thông tin sau từ hóa đơn trong hình ảnh: Tên công ty, Mã số thuế, Ngày lập hóa đơn, Số hóa đơn, và Tổng tiền thanh toán. Vui lòng trả về kết quả dưới dạng JSON." }, { "type": "image_url", "image_url": { "url": "https://example.com/hoa_don_mau.jpg" } } ] } ] ``` Kết quả GPT trả về có thể là: ```python { "company_name": "Công Ty TNHH ABC Việt Nam", "tax_code": "0301234567", "invoice_date": "01/04/2024", "invoice_number": "0000123", "total_amount": "5.500.000 VND" } ``` #### **Đoạn mã Python thực tế** Bạn có thể dùng đoạn mã sau để gửi ảnh hóa đơn đến GPT-4 và nhận kết quả JSON: ```python import openai openai.api_key = "YOUR_API_KEY" response = openai.ChatCompletion.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ { "type": "text", "text": "Hãy trích xuất các thông tin sau từ hóa đơn trong hình ảnh: Tên công ty, Mã số thuế, Ngày lập hóa đơn, Số hóa đơn, và Tổng tiền thanh toán. Vui lòng trả về kết quả dưới dạng JSON." }, { "type": "image_url", "image_url": { "url": "https://example.com/hoa_don_mau.jpg" # Thay bằng URL ảnh thật } } ] } ], max_tokens=500 ) print(response['choices'][0]['message']['content']) ``` #### **Nếu bạn dùng ảnh nội bộ (Base64):** Bạn có thể chuyển ảnh hóa đơn thành Base64 và gửi đi: ```python import base64 with open("hoa_don_mau.jpg", "rb") as img: b64 = base64.b64encode(img.read()).decode("utf-8") image_url = f"data:image/jpeg;base64,{b64}" ``` Sau đó thay dòng: ```python "url": "https://example.com/hoa_don_mau.jpg" ```
bằng: ``` "url": image_url ``` #### **Ứng dụng thực tế** Bạn có thể áp dụng kỹ thuật này để: - Tự động lưu hóa đơn vào hệ thống kế toán - Gửi cảnh báo nếu tổng tiền vượt ngưỡng - Kiểm tra hóa đơn trùng - Phân loại hóa đơn theo nhà cung cấp **Tác giả: Đỗ Ngọc Tú** **Công Ty Phần Mềm [VHTSoft](https://vhtsoft.com/ "Công Ty Phần Mềm VHTSoft")**