# 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ầu | Mô tả |
---|
Ảnh rõ nét | Tránh ảnh mờ, tối hoặc có nhiễu |
Định dạng ảnh | Hỗ trợ: `.jpg`, `.png`, `.gif` |
Dung lượng ảnh | Không quá lớn (thường < 20MB) |
Kết hợp text + image | Cung 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ính | Nộ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")**