|
# ✍️ Mô hình nhận dạng chữ viết tay hiệu suất cao |
|
## 📝 Giới thiệu |
|
Mô hình TrOCR Small là một mô hình Vision Transformer encoder + Transformer decoder được Microsoft phát triển, fine‑tuned trên tập dữ liệu IAM chuyên nhận dạng chữ viết tay. |
|
Encoder được khởi tạo từ DeiT, còn decoder được khởi tạo từ UniLM, dùng để chuyển đổi hình ảnh chứa chữ viết tay thành văn bản. |
|
|
|
## 📌 Nhiệm vụ |
|
Loại bài toán: OCR – Nhận dạng ký tự từ dòng hình ảnh chữ viết tay |
|
|
|
Mô hình được định hướng cho đầu vào là các dòng chữ, mỗi dòng sinh ra tương ứng một chuỗi ký tự. |
|
|
|
## 📥 Đầu vào |
|
Hình ảnh: RGB hoặc chuyển đổi từ ảnh grayscale |
|
Xử lý bởi: TrOCRProcessor (sử dụng ViTImageProcessor + RobertaTokenizer) |
|
Patch size: Hình ảnh được chia thành patch 16×16, mã hóa vị trí rồi đưa vào encoder |
|
|
|
## 📤 Đầu ra |
|
Mô hình sinh chuỗi token tương ứng ký tự dòng viết tay. |
|
Sử dụng processor.batch_decode(..., skip_special_tokens=True) để chuyển các token này thành văn bản đọc được. |
|
|
|
## 🛠 Cài đặt |
|
```bash |
|
pip install torch torchvision transformers pillow |
|
``` |
|
|
|
## 🧪 Ví dụ sử dụng |
|
```python |
|
from transformers import TrOCRProcessor, VisionEncoderDecoderModel |
|
from PIL import Image |
|
import requests |
|
import torch |
|
|
|
# Tải ảnh ví dụ từ IAM |
|
url = 'https://fki.tic.heia-fr.ch/static/img/a01-122-02-00.jpg' |
|
image = Image.open(requests.get(url, stream=True).raw).convert("RGB") |
|
|
|
# Load processor và mô hình |
|
processor = TrOCRProcessor.from_pretrained("zhaospei/Model_15") |
|
model = VisionEncoderDecoderModel.from_pretrained("zhaospei/Model_15") |
|
model.eval() |
|
|
|
# Tiền xử lý ảnh |
|
pixel_values = processor(images=image, return_tensors="pt").pixel_values |
|
|
|
# Dự đoán văn bản từ ảnh |
|
with torch.no_grad(): |
|
generated_ids = model.generate(pixel_values) |
|
|
|
# Giải mã các token thành câu |
|
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] |
|
print("Kết quả OCR:", generated_text) |
|
``` |
|
|
|
## 📊 Hiệu năng & ứng dụng |
|
Mô hình đạt accuracy cao trên bộ dữ liệu IAM (handwritten), vượt trội so với các giải pháp truyền thống dựa trên CNN+RNN. |
|
Kích thước nhỏ và dễ deploy cho các ứng dụng OCR di động hoặc offline, nơi tài nguyên bị giới hạn. |
|
|
|
## ⚠️ Hạn chế |
|
Được thiết kế dành riêng nhận dạng một dòng chữ tay, không phù hợp với định dạng văn bản phức tạp (đa dòng, layout phức tạp). |
|
Hiệu suất giảm nếu hình ảnh chất lượng kém (mờ, nhiễu) hoặc đối với font/handwriting style khác so với dữ liệu IAM. |