HƯỚNG DẪN XÂY DỰNG HỆ THỐNG OCR VỚI ẢNH CĂN CƯỚC CÔNG DÂN - Cole

HƯỚNG DẪN XÂY DỰNG HỆ THỐNG OCR VỚI ẢNH CĂN CƯỚC CÔNG DÂN

28/06/2024

Trong thời đại số hóa, OCR (Optical Character Recognition – Nhận dạng ký tự quang học) là một trong những bài toán Computer Vision có tính ứng dụng thực tế cao nhất – từ eKYC ngân hàng, đăng ký dịch vụ công, cho đến tự động hóa nhập liệu doanh nghiệp. Tuy nhiên, để tự tay xây dựng một hệ thống OCR hoàn chỉnh từ đầu đến cuối – từ phát hiện vùng chữ, nhận dạng ký tự, đến ghép thành sản phẩm demo – không phải ai cũng biết bắt đầu từ đâu.

Đó chính là lý do Cole tổ chức buổi thực hành "Xây dựng hệ thống OCR với ảnh Căn cước công dân" vào ngày 27/6/2024, với sự đồng hành của Mentor Đặng Quang Minh và chuyên gia Nguyễn Xuân Nhật – những người đang trực tiếp làm việc trong lĩnh vực AI ứng dụng.

80+ Người tham dự
27/6 Ngày tổ chức (2024)
5 Chủ đề kỹ thuật chính

▶ Video Recap đầy đủ buổi Practice #1: Xây dựng hệ thống OCR với ảnh CCCD do Cole tổ chức

1. Tại Sao Bài Toán OCR Căn Cước Công Dân Lại Quan Trọng?

OCR không phải bài toán mới – nhưng chắc chắn ai học AI cũng muốn thử một lần. Điều khiến OCR trên ảnh Căn cước công dân (CCCD) trở thành bài tập lý tưởng cho người học Computer Vision là tính ứng dụng cực kỳ rõ ràng: đây là nghiệp vụ cốt lõi trong eKYC (định danh điện tử) của hầu hết ngân hàng, ví điện tử, và nền tảng dịch vụ công tại Việt Nam.

Một hệ thống OCR CCCD hoàn chỉnh cần giải quyết đồng thời nhiều bài toán con: xử lý ảnh chụp nghiêng hoặc mờ, phát hiện chính xác từng vùng chữ (số CCCD, họ tên, ngày sinh, quê quán...), nhận dạng ký tự tiếng Việt với dấu thanh điệu phức tạp, và trả kết quả đủ nhanh để tích hợp vào API thực tế. Mỗi bước đều ẩn chứa những lỗi kỹ thuật riêng cần kinh nghiệm để xử lý.

"OCR không phải bài toán đơn giản vì ở mỗi bước chúng ta sẽ gặp phải những lỗi khác nhau cần giải quyết. Ai học AI cũng nên thử tự xây dựng ít nhất một lần để hiểu thực sự pipeline này hoạt động như thế nào."

— Mentor Đặng Quang Minh, buổi Practice #1 tại Cole

2. Tổng Quan Pipeline Hệ Thống OCR Hoàn Chỉnh

Trước khi đi vào từng bước cụ thể, buổi chia sẻ đã giúp người học hình dung toàn bộ "bản đồ" của một hệ thống OCR thực tế. Một pipeline OCR cho ảnh CCCD thường bao gồm 3 giai đoạn lớn:

1

Tiền Xử Lý Ảnh
(Preprocessing)

Chuẩn hóa ảnh đầu vào: chỉnh độ sáng, tương phản, căn chỉnh góc nghiêng (deskew), cắt vùng thẻ CCCD ra khỏi ảnh nền.

2

Phát Hiện Vùng Chữ
(Text Detection)

Dùng mô hình Deep Learning (DBNet, CRAFT) để xác định tọa độ bounding box của từng dòng hoặc từng từ trên thẻ.

3

Nhận Dạng Ký Tự
(Text Recognition)

Đưa từng vùng chữ đã crop qua mô hình OCR (VietOCR) để đọc nội dung văn bản, bao gồm cả dấu tiếng Việt.

Kết quả cuối cùng là một JSON có cấu trúc chứa đầy đủ thông tin trích xuất từ thẻ CCCD, sẵn sàng để tích hợp vào API hoặc hệ thống backend.

3. Hướng Dẫn Chi Tiết 5 Bước Xây Dựng Hệ Thống OCR CCCD

1
Bước 1 – Định Hướng Kỹ Thuật

Xác Định Các Bước Xây Dựng Hệ Thống OCR

Trước khi code, mentor hướng dẫn học viên tư duy theo hướng modular: chia hệ thống lớn thành các module nhỏ độc lập (Detection → Recognition → Post-processing), mỗi module có thể train và cải thiện riêng mà không ảnh hưởng toàn bộ pipeline. Đây là cách tiếp cận của một kỹ sư AI thực thụ, khác hoàn toàn với việc dùng thư viện OCR có sẵn một cách "hộp đen".

Học viên cũng được giới thiệu về các công cụ chính sẽ dùng: DBNet (Text Detection), VietOCR (Text Recognition), OpenCV (xử lý ảnh), và Gradio/Streamlit để build demo nhanh.

2
Bước 2 – Data

Chuẩn Bị Dữ Liệu (Data Collection & Labeling)

Đây là bước nhiều người học AI hay bỏ qua nhưng lại quyết định 90% chất lượng mô hình. Buổi thực hành hướng dẫn cụ thể cách thu thập ảnh CCCD đa dạng (nhiều góc chụp, điều kiện ánh sáng khác nhau), cách sử dụng công cụ annotation như LabelImg hoặc CVAT để đánh nhãn bounding box cho Text Detection, và tool VietOCR Labeling để tạo file label.txt cho Text Recognition.

Chuyên gia Nguyễn Xuân Nhật chia sẻ kinh nghiệm thực tế: dữ liệu CCCD cần được ẩn danh hóa (anonymize) trước khi dùng để train, và cần tách rõ tập train / validation để đánh giá chính xác hiệu năng mô hình.

3
Bước 3 – Text Detection

Huấn Luyện Mô Hình DBNet cho Text Detection

DBNet (Differentiable Binarization Network) là kiến trúc Deep Learning state-of-the-art cho bài toán phát hiện vùng chữ, nổi bật bởi khả năng xử lý chữ có hình dạng tùy ý (cong, nghiêng) và tốc độ inference nhanh – rất phù hợp cho ảnh CCCD thực tế.

Học viên được hướng dẫn từng bước: cấu hình file config.yaml, khởi tạo pretrained backbone (thường dùng ResNet-18 hoặc MobileNetV3 để cân bằng tốc độ và độ chính xác), thiết lập các tham số huấn luyện (learning rate, batch size, số epoch), và cuối cùng là evaluate model bằng metric F1-score trên tập validation.

Ví dụ: Cấu hình cơ bản DBNet (config.yaml) Architecture: model_type: det algorithm: DB Transform: Backbone: name: ResNet layers: 18 pretrained: True Neck: name: DBFPN out_channels: 256 Head: name: DBHead k: 50 Loss: name: DBLoss balance_loss: true main_loss_type: DiceLoss

Một lỗi phổ biến được đề cập: mô hình bị miss detection với các dòng chữ nhỏ gần mép thẻ – giải pháp là tăng cường dữ liệu (data augmentation) với các phép biến đổi như random crop, rotation, và điều chỉnh shrink ratio trong DBNet.

4
Bước 4 – Text Recognition

Huấn Luyện Mô Hình Text Recognition với VietOCR

Sau khi có bounding box từ DBNet, từng vùng chữ được crop ra và đưa qua module Text Recognition. Buổi thực hành sử dụng VietOCR – thư viện OCR tiếng Việt mạnh mẽ dựa trên kiến trúc Seq2Seq + Transformer Attention, có thể nhận dạng chính xác các ký tự tiếng Việt bao gồm 5 dấu thanh điệu.

Học viên thực hành: fine-tune VietOCR trên bộ dữ liệu CCCD đã chuẩn bị ở bước 2, sử dụng file annotation label.txt theo định dạng đường_dẫn_ảnh\ttext_label. Quá trình train mất khoảng 4 giờ và cho ra file weights seq2seqocr.pth.

Ví dụ: Inference với VietOCR (Python) from vietocr.tool.predictor import Predictor from vietocr.tool.config import Cfg from PIL import Image config = Cfg.load_config_from_name('vgg_transformer') config['weights'] = './weights/seq2seqocr.pth' config['device'] = 'cpu' # hoặc 'cuda:0' nếu có GPU detector = Predictor(config) # Đưa ảnh crop từng vùng chữ vào nhận dạng img = Image.open('cropped_text_region.jpg') result = detector.predict(img) print(result) # Output: "Nguyễn Văn A"
5
Bước 5 – Integration & Demo

Ghép Các Module và Xây Dựng Demo Thực Tế

Bước cuối và cũng là bước thú vị nhất: ghép module Detection và Recognition thành một pipeline hoàn chỉnh, sau đó build giao diện demo bằng Gradio để người dùng có thể upload ảnh CCCD và nhận về kết quả JSON chứa đầy đủ thông tin trích xuất.

Buổi thực hành hướng dẫn cách viết hàm ocr_pipeline(image_path) kết hợp cả hai module, xử lý hậu kỳ (post-processing) để map từng vùng text vào đúng trường thông tin (số CCCD, họ tên, ngày sinh...) dựa trên vị trí bounding box, và tối ưu tốc độ xử lý bằng cách batch các vùng crop lại trước khi đưa qua Recognition module.

Ví dụ: Skeleton của OCR Pipeline def ocr_pipeline(image_path: str) -> dict: # 1. Load ảnh image = cv2.imread(image_path) # 2. Text Detection với DBNet boxes, scores = dbnet_model.detect(image) # 3. Crop từng vùng chữ cropped_regions = [crop_region(image, box) for box in boxes] # 4. Text Recognition với VietOCR texts = [vietocr_predictor.predict(Image.fromarray(r)) for r in cropped_regions] # 5. Map vào các trường thông tin CCCD result = map_to_cccd_fields(boxes, texts) return result # Output: {"id": "...", "name": "...", "dob": "...", ...}

4. Những Lỗi Thường Gặp Và Cách Xử Lý

Một trong những giá trị thực tế nhất của buổi chia sẻ là phần Q&A và debug live – nơi các chuyên gia chia sẻ những lỗi hay gặp nhất khi xây dựng OCR CCCD trong môi trường thực tế:

Lỗi Phổ Biến & Cách Khắc Phục
1

Detection bỏ sót vùng chữ nhỏ hoặc chữ gần mép

Nguyên nhân: bounding box quá nhỏ bị lọc ra sau quá trình binarization. Giải pháp: giảm ngưỡng min_size trong config DBNet, đồng thời thêm padding quanh ảnh đầu vào để tránh mất thông tin mép.

2

Recognition nhận dạng sai dấu thanh điệu tiếng Việt

Nguyên nhân: bộ dữ liệu train không đủ đa dạng về font chữ và quality. Giải pháp: tăng cường dữ liệu bằng cách synthetic thêm ảnh chữ tiếng Việt với nhiều font khác nhau, hoặc fine-tune thêm vài epoch với bộ dữ liệu thực tế của riêng bạn.

3

Pipeline chạy chậm, không đáp ứng yêu cầu real-time

Giải pháp: dùng model backbone nhẹ hơn (MobileNet thay ResNet), export mô hình sang ONNX để inference nhanh hơn, và batch nhiều crop region lại trước khi đưa vào Recognition một lần thay vì gọi từng ảnh riêng lẻ.

4

Kết quả bị lộn thứ tự các trường thông tin

Nguyên nhân: các bounding box không được sắp xếp theo thứ tự đọc (top-to-bottom, left-to-right). Giải pháp: sau khi có list các box, sort lại theo tọa độ y (dọc) trước, sau đó đến tọa độ x (ngang) để đảm bảo thứ tự đọc đúng.

5. Tài Nguyên Học Tập Từ Buổi Thực Hành

Để hỗ trợ học viên tự thực hành sau buổi chia sẻ, Cole đã cung cấp đầy đủ tài liệu và cộng đồng hỗ trợ:

Tài Nguyên Đầy Đủ Buổi Practice #1
🎬

Video Record đầy đủ: https://youtu.be/d_Y1GsvR2cQ

📚

Khóa Học AI Engineer: https://cole.vn/san-pham/khoa-hoc-ai-engineer-942 

🖥️

Khóa AI Advanced – Computer Vision: https://cole.vn/san-pham/khoa-hoc-ai---computer-vision-795 – Đi sâu vào các kỹ thuật như OCR, Object Detection, Segmentation

6. Bạn Đã Sẵn Sàng Tự Xây Dựng Hệ Thống OCR Của Mình Chưa?

Buổi thực hành đã kết thúc thành công với hơn 80 người tham dự và nhận được phản hồi rất tích cực. Nhiều học viên chia sẻ đây là lần đầu tiên họ hiểu rõ OCR hoạt động như thế nào từ trong ra ngoài – không phải qua API có sẵn mà là từ việc tự tay xây dựng từng module.

Điều quan trọng nhất mà buổi thực hành truyền đi: OCR không khó nếu bạn được hướng dẫn đúng hướng. Sự khác biệt giữa người học AI có thể làm được việc và người chỉ biết lý thuyết nằm ở việc có dám thực hành thực tế, đối mặt với lỗi và debug từng bước hay không.

Học Computer Vision Thực Chiến Cùng Cole

Nếu bạn muốn nắm vững các kỹ thuật Computer Vision thực tế như OCR, Object Detection, và Image Segmentation – được hướng dẫn trực tiếp bởi các chuyên gia đang làm trong ngành – hãy khám phá lộ trình đào tạo tại Cole. Từ nền tảng Machine Learning đến các dự án AI ứng dụng thực tế, Cole đồng hành cùng bạn từng bước trên con đường trở thành AI Engineer.

Có thể bạn quan tâm