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