Trong kỷ nguyên số hóa tài liệu, các công cụ OCR (Optical Character Recognition) truyền thống thường bộc lộ những hạn chế đáng kể khi đối mặt với các cấu trúc phức tạp. Nếu việc nhận diện văn bản thuần túy đã trở nên phổ biến, thì các thành phần như bảng biểu bị lỗi định dạng hay các công thức toán học biến thành những ký tự vô nghĩa vẫn là thách thức lớn. GLM-OCR xuất hiện như một giải pháp đa mô hình (multimodal), không chỉ "đọc" chữ cái mà còn "hiểu" được cấu trúc logic của tài liệu để chuyển đổi chúng sang các định dạng có cấu trúc như Markdown hay LaTeX.
1. Triển khai và khởi chạy dịch vụ
GLM-OCR được thiết kế để dễ dàng triển khai, đặc biệt là trong các môi trường container hoặc server đã cấu hình sẵn GPU. Quá trình thiết lập ban đầu cực kỳ tối giản, giúp kỹ sư nhanh chóng đưa vào thử nghiệm.
Khởi động server
Sau khi chuẩn bị môi trường, bạn có thể kích hoạt dịch vụ vLLM bằng các dòng lệnh cơ bản sau:
# Truy cập vào thư mục chứa mã nguồn
cd /opt/glm-ocr-deployment
# Thực thi script khởi tạo dịch vụ
bash scripts/run_vllm_service.sh
Hệ thống sẽ nạp model (dung lượng khoảng 2.5GB). Sau khi log hiển thị trạng thái sẵn sàng, dịch vụ sẽ lắng nghe tại cổng 7860 mặc định.
Giao diện điều khiển Web
Người dùng có thể truy cập trực tiếp qua trình duyệt theo địa chỉ http://localhost:7860 (hoặc IP của server). Giao diện trực quan cho phép tải lên hình ảnh, chọn loại tác vụ (Task) và nhận kết quả ngay lập tức mà không cần viết mã.
2. Các tính năng cốt lõi của GLM-OCR
Điểm khác biệt của GLM-OCR nằm ở khả năng xử lý chuyên sâu cho từng loại dữ liệu cụ thể thông qua các câu lệnh (prompts) điều hướng.
Nhận diện văn bản (Text Recognition)
Thay vì chỉ trích xuất các chuỗi ký tự rời rạc, GLM-OCR cố gắng giữ nguyên cấu trúc phân tầng của tài liệu bao gồm tiêu đề, đoạn văn và các danh sách. Để thực hiện, người dùng chỉ cần sử dụng prompt: Text Recognition:.
- Độ chính xác: Rất cao với các văn bản in ấn, hỗ trợ tốt đa ngôn ngữ.
- Định dạng: Tự động xử lý xuống dòng và thụt lề hợp lý.
Trích xuất bảng biểu (Table Recognition)
Đây là tính năng mạnh mẽ nhất đối với khối văn phòng và phân tích dữ liệu. GLM-OCR không chỉ nhận diện chữ trong ô mà còn hiểu được quan hệ hàng-cột, bao gồm cả các ô bị gộp (merged cells).
Khi sử dụng prompt Table Recognition:, kết quả trả về sẽ là một bảng định dạng Markdown. Ví dụ:
| Danh mục | Quý 1 | Quý 2 |
| :--- | :--- | :--- |
| Doanh thu | 500tr | 650tr |
| Chi phí | 300tr | 400tr |
Dữ liệu này có thể được copy trực tiếp vào các trình soạn thảo như Typora, Notion hoặc chuyển đổi sang CSV/Excel một cách dễ dàng.
Giải mã công thức toán học (Formula Recognition)
Đối với giới nghiên cứu và giáo dục, việc nhập liệu thủ công các công thức phức tạp là một "cực hình". GLM-OCR giải quyết vấn đề này bằng cách chuyển đổi hình ảnh công thức sang mã LaTeX thông qua prompt: Formula Recognition:.
Ví dụ, một hình ảnh tích phân phức tạp sẽ được chuyển đổi thành chuỗi \int_{a}^{b} f(x) \,dx, sẵn sàng để chèn vào các tệp tin học thuật hoặc trình soạn thảo khoa học.
3. Tự động hóa với Python API
Để xử lý hàng loạt tài liệu, việc sử dụng API là phương án tối ưu. GLM-OCR hỗ trợ kết nối thông qua gradio_client.
Xử lý đơn lẻ
Dưới đây là đoạn mã Python để thực hiện nhận diện một hình ảnh bất kỳ:
from gradio_client import Client
def recognize_document(path_to_img, mode="Text Recognition:"):
# Kết nối tới endpoint của dịch vụ
app_client = Client("http://localhost:7860")
try:
# Gửi yêu cầu dự đoán
output = app_client.predict(
image_path=path_to_img,
prompt=mode,
api_name="/predict"
)
return output
except Exception as e:
return f"Error: {str(e)}"
# Chạy thử nghiệm
print(recognize_document("data/sample_invoice.jpg", "Table Recognition:"))
Xử lý hàng loạt (Batch Processing)
Sử dụng thư viện pathlib để quét thư mục và lưu kết quả tự động:
import pathlib
from gradio_client import Client
def batch_ocr_processor(input_dir, output_dir):
service = Client("http://localhost:7860")
input_path = pathlib.Path(input_dir)
output_path = pathlib.Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
for img_file in input_path.glob("*.*"):
if img_file.suffix.lower() in ['.jpg', '.png', '.jpeg']:
print(f"Processing: {img_file.name}")
res = service.predict(
image_path=str(img_file),
prompt="Text Recognition:",
api_name="/predict"
)
# Lưu kết quả vào file text
with open(output_path / f"{img_file.stem}.txt", "w", encoding="utf-8") as f:
f.write(res)
batch_ocr_processor("./inputs", "./results")
4. Đánh giá tổng quan
GLM-OCR không chỉ là một công cụ OCR thông thường mà là một trợ lý hiểu tài liệu. Khả năng tích hợp "3 trong 1" giúp tối giản quy trình làm việc cho nhiều đối tượng người dùng khác nhau:
- Nghiên cứu viên: Tiết kiệm thời gian soạn thảo công thức từ tài liệu giấy hoặc PDF.
- Kế toán/Phân tích: Chuyển đổi báo cáo dạng ảnh sang dữ liệu số trong vài giây.
- Lập trình viên: Dễ dàng tích hợp vào các hệ thống tự động hóa nhờ API linh hoạt.
Mặc dù yêu cầu tài nguyên phần cứng (GPU với khoảng 3GB VRAM để đạt hiệu suất tốt nhất), nhưng giá trị về mặt cấu trúc hóa dữ liệu mà GLM-OCR mang lại là hoàn toàn vượt trội so với các giải pháp truyền thống.