| # ✍️ 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. |