Giới thiệu dự án

Nhận diện ký tự quang học (OCR - Optical Character Recognition) và nhận diện chữ viết tay trực tuyến/ngoại tuyến (Handwritten Character Recognition - HCR) là một trong những phân ngành trọng điểm của thị giác máy tính và học sâu (Deep Learning). Theo báo cáo thị trường từ Grand View Research, thị trường OCR toàn cầu đạt quy mô 10,65 tỷ USD vào năm 2022 và dự kiến tăng trưởng kép (CAGR) 14,8% đến năm 2030, thúc đẩy bởi nhu cầu số hóa tài liệu giáo dục, tự động hóa quy trình nghiệp vụ (BPA) và các ứng dụng học tập tương tác.

Tuy nhiên, việc số hóa chữ viết tay đối mặt với nhiều rào cản kỹ thuật lớn do sự biến thiên đa dạng về phong cách viết của từng cá nhân, độ nghiêng, nét đứt đoạn, các ký tự có hình thái tương đồng cao (như số 0 với chữ O/o, số 1 với chữ I/l, số 9 với chữ q), cùng với hiện tượng dính nét khi viết liên tục. Đồ án "Thiết kế hệ thống nhận diện chữ viết tay" (thực hiện bởi nhóm tác giả Dương Ngọc Anh, Nguyễn Thị Thùy Trang - GVHD: ThS. Lê Minh Thành, Trường ĐH Sư phạm Kỹ thuật TP.HCM) tập trung giải quyết bài toán phân loại và nhận diện văn bản viết tay tiếng Anh tương tác trực tiếp trên môi trường Windows Desktop.

+-------------------------------------------------------------------------------+
|                       HANDWRITTEN RECOGNITION SYSTEM                          |
|                                                                               |
|  [ Vùng vẽ tương tác ] ---> [ Tiền xử lý ] ---> [ 3x Parallel CNN ] ---> [ Hiển thị ]
|     (DrawArea Canvas)       (Grayscale/Box)       (0-9 / A-Z / a-z)      (Aspell.NET) 
+-------------------------------------------------------------------------------+

Mục tiêu của đồ án

  1. Thiết kế giao diện tương tác đồ họa (GUI): Xây dựng vùng vẽ tự do (DrawArea) mô phỏng Microsoft Paint trên nền tảng .NET Framework/C#, cho phép thu thập nét vẽ theo thời gian thực từ chuột hoặc màn hình cảm ứng.
  2. Xây dựng module tiền xử lý ảnh tối ưu: Triển khai thuật toán chuyển đổi ảnh đa cấp xám tối ưu bộ nhớ thông qua con trỏ bộ đệm (LockBits), phát hiện biên phân đoạn ký tự tự động (Bounding Box Extraction) và quy chuẩn kích thước về ma trận $29 \times 29$ pixel.
  3. Hiện thực hóa kiến trúc mạng nơ-ron tích chập (Convolutional Neural Network - CNN): Áp dụng mô hình CNN đa tầng tích hợp lấy mẫu phụ (dựa trên kiến trúc Simard/LeNet-5) với 3 mạng song song độc lập cho tập chữ số ($0 - 9$), chữ in hoa ($A - Z$) và chữ in thường ($a - z$).
  4. Tích hợp module hậu xử lý từ điển và ngữ âm: Sử dụng thư viện mã nguồn mở Aspell.NET để sửa lỗi chính tả, ghép nối và lựa chọn tổ hợp ký tự có nghĩa tối ưu nhất trong từ điển tiếng Anh.

Phạm vi và giới hạn đề tài

  • Bộ ký tự hỗ trợ: 62 lớp ký tự Latin tiêu chuẩn bao gồm 10 chữ số ($0 - 9$), 26 chữ in hoa ($A - Z$) và 26 chữ thường ($a - z$).
  • Phong cách viết: Chữ viết tay khối chuẩn Mỹ (Standard American Print), ký tự rời rạc, không dính nét (non-cursive), không hỗ trợ nét thư pháp nghệ thuật hoặc nét thanh đậm quá mức.
  • Môi trường hoạt động: Ứng dụng Desktop chạy độc lập trên hệ điều hành Windows (Windows 7/8/10), không phụ thuộc vào hạ tầng đám mây hay kết nối Internet.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi xây dựng hệ thống, các hướng tiếp cận OCR truyền thống và máy học cổ điển đã được xem xét và đánh giá kỹ lưỡng:

Tiêu chí Tesseract OCR (v4.0 LSTM) SVM + HOG / Hu Moments Hệ thống CNN Đa tầng song song (Đồ án)
Bản chất trích xuất Tesseract engine engine đa ngôn ngữ Trích xuất đặc trưng thủ công (Handcrafted) Tự động học biểu diễn đặc trưng không gian đa cấp
Độ phức tạp tính toán Nặng, yêu cầu môi trường C++ phức tạp Trung bình, phụ thuộc phân loại đa lớp One-vs-Rest Tối ưu hóa tính toán ma trận với độ trễ thấp (< 50ms)
Độ nhạy với chữ rời Kém hiệu quả với nét vẽ chuột thô sơ Dễ quá khớp (Overfitting) khi nét biến dạng Kháng biến dạng hình học nhờ tích chập & Subsampling
Khả năng nhúng C# native Cần wrapper C++/CLI hoặc P/Invoke Cần thư viện ngoài (Accord.NET/OpenCV) Tự triển khai native trên C# 2010 qua file trọng số .nnt

Ma trận yêu cầu người dùng (MoSCoW)

  • Must have: Vùng vẽ tương tác trực tiếp; module chuyển đổi ảnh xám siêu tốc; thuật toán quét bao ký tự tự động; phân loại chính xác 3 tập ký tự; hiển thị kết quả phân loại lên thanh trạng thái.
  • Should have: Module kiểm tra lỗi chính tả và gợi ý từ vựng bằng từ điển; chức năng tải động các file trọng số .nnt riêng biệt; công cụ chỉnh sửa nét vẽ (độ dày, màu sắc, xóa nét).
  • Could have: Xuất ảnh mẫu đã vẽ ra định dạng bitmap (.bmp); mở rộng bộ từ điển chuyên ngành.
  • Won't have (lần này): Nhận diện chữ viết tay tiếng Việt có dấu; nhận diện chữ viết liền nét (cursive script).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình phân tầng hướng sự kiện (Event-Driven Architecture) gồm 4 khối chức năng chính:

graph TD
    A[Giao diện Nhập liệu: DrawArea Canvas] -->|Rasterization Bitmap| B[Khối Tiền Xử Lý Ảnh]
    B -->|Grayscale Conversion LockBits| B1[Nhị phân & Lọc ngưỡng]
    B1 -->|Quét đường bao Bounding Box| B2[Cắt & Chuẩn hóa 29x29 px]
    B2 -->|Input Vector 841 dims| C{Khối Phân Loại Đa Mạng CNN}
    C -->|CNN Model 1| D1[Phân loại Số 0-9: 11 classes]
    C -->|CNN Model 2| D2[Phân loại Chữ Hoa A-Z: 27 classes]
    C -->|CNN Model 3| D3[Phân loại Chữ Thường a-z: 27 classes]
    D1 --> E[Module Hậu Xử Lý & Ghép Từ]
    D2 --> E
    D3 --> E
    E -->|Aspell.NET Dictionary Validation| F[Giao Diện Kết Quả Hiển Thị]

Technology Stack và công cụ sử dụng

  • Môi trường phát triển: Microsoft Visual Studio / Visual C# 2010, .NET Framework 4.0.
  • Cơ sở dữ liệu huấn luyện: Bộ dữ liệu chuẩn quốc tế UNIPEN Train-R01/V07 (gồm hơn 106.918 mẫu khả dụng được đóng góp từ hơn 2.200 người viết).
  • Thư viện hậu xử lý ngôn ngữ: Aspell.NET v0.0.4 (GNU Aspell Porting for .NET).
  • Định dạng dữ liệu mô hình: File nhị phân cấu trúc nơ-ron nội bộ .nnt.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển tiến hóa lặp (Iterative Prototyping) kéo dài trong 19 tuần (30/03/2020 đến 08/08/2020) với các giai đoạn kiểm soát rủi ro nghiêm ngặt:

[Tuần 1-4: Nghiên cứu UNIPEN & Lý thuyết CNN] 

Bảng đánh giá rủi ro và giải pháp khắc phục

  • Rủi ro tràn bộ nhớ / Lag giao diện khi quét điểm ảnh: Sử dụng kỹ thuật Bitmap.LockBits truy xuất bộ nhớ unmanaged thay vì Bitmap.GetPixel truyền thống, tăng tốc độ xử lý điểm ảnh lên hơn 100 lần.
  • Rủi ro xung đột nhãn giữa các ký tự đồng dạng ($0 \leftrightarrow O, 1 \leftrightarrow I \leftrightarrow l$): Xây dựng mạng 3 luồng song song kết hợp thuật toán kiểm tra ngữ cảnh từ vựng trong Aspell.NET để tự động hiệu chỉnh nhãn sai.
  • Rủi ro quá khớp (Overfitting) trên tập dữ liệu lớn: Tích hợp lớp lấy mẫu phụ (Subsampling layer) ngay sau lớp tích chập, chia sẻ trọng số (Weight Sharing) và giảm tỷ lệ học (Learning Rate Decay) theo cấp số nhân.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

1. Xử lý ảnh xám tốc độ cao bằng LockBits

Để xử lý dữ liệu ma trận từ canvas mà không làm nghẽn luồng UI, thuật toán chuyển đổi ảnh xám sử dụng công thức cân bằng độ chói (Luma transform):

$$Y = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B$$

// Trích đoạn giải thuật chuyển đổi ảnh xám tối ưu qua con trỏ bộ nhớ
unsafe
{
    BitmapData bmData = gsbitmap.LockBits(
        new Rectangle(0, 0, gsbitmap.Width, gsbitmap.Height),
        ImageLockMode.ReadWrite, 
        PixelFormat.Format32bppArgb);
    
    byte* p = (byte*)(void*)bmData.Scan0;
    int nOffset = bmData.Stride - gsbitmap.Width * 4;
    
    for (int y = 0; y < gsbitmap.Height; ++y)
    {
        for (int x = 0; x < gsbitmap.Width; ++x)
        {
            // p[0]: Blue, p[1]: Green, p[2]: Red, p[3]: Alpha
            byte gray = (byte)(0.299 * p[2] + 0.587 * p[1] + 0.114 * p[0]);
            p[0] = p[1] = p[2] = gray;
            p += 4;
        }
        p += nOffset;
    }
    gsbitmap.UnlockBits(bmData);
}

2. Thuật toán phân đoạn ký tự bằng đường bao động (Bounding Box Expansion)

Hệ thống sử dụng một khung chữ nhật động mở rộng dần theo chiều ngang và dọc để cô lập từng ký tự:

  • Khởi tạo: rect.Height = 1, rect.Width = 1, đặt cờ bBoundaryComplete = false.
  • Mở rộng biên phải: Tăng rect.Width += 1, kiểm tra dải pixel biên phải. Nếu tồn tại điểm ảnh tối (foreground pixel), duy trì bBoundaryComplete = false.
  • Mở rộng biên trên/dưới: Tịnh tiến tọa độ $Y$ và tăng rect.Height khi phát hiện điểm ảnh thuộc ký tự vượt ngoài khung hiện tại.
  • Chuẩn hóa: Ký tự được tách ra khỏi ma trận ảnh gốc sẽ được nội suy tuyến tính (Bilinear Interpolation) đưa về khung ma trận chuẩn $29 \times 29$ pixel (tương đương 841 chiều đầu vào của nơ-ron).
               rect.Width (mở rộng)

3. Cấu trúc mạng nơ-ron tích chập đa tầng (Simard CNN Architecture)

Kiến trúc mạng nơ-ron áp dụng mô hình của TS. Patrice Simard với cấu hình chi tiết cho từng lớp:

[Layer 0: Input 29x29 (841 nơ-ron)]
[Layer 1: 10 Feature Maps 13x13 (1,690 nơ-ron | 43,940 kết nối | 260 trọng số)]
[Layer 2: 60 Feature Maps 5x5 (1,500 nơ-ron | 376,500 kết nối | 15,060 trọng số)]
Thông số huấn luyện mô hình (Hyperparameters)
  • Số Epochs: 25 - 35 vòng lặp tùy tập dữ liệu.
  • Tốc độ học ban đầu ($\eta$): $0,00085$.
  • Tốc độ học tối thiểu: $1 \times 10^{-6}$.
  • Hệ số suy giảm tốc độ học (Decay rate): $0,8125$.
  • Hàm kích hoạt: Hyperbolic Tangent ($\tanh$) tại các tầng ẩn và Softmax tại tầng đầu ra.

Kiểm thử và đánh giá hiệu năng

Tập kiểm thử độc lập gồm 1.545 mẫu từ UNIPEN Train-R01/V07 được đưa vào để đo lường độ chính xác phân loại độc lập của 3 mạng:

Phân loại ký tự Số mẫu huấn luyện Số mẫu kiểm thử Độ chính xác nhận diện (%) Ký tự có độ nhầm lẫn cao nhất
Chữ số ($0 - 9$) 15.953 267 95,78% Số 7 (88,00% - nhầm với 1, Z)
Chữ in hoa ($A - Z$) 28.069 650 85,23% Chữ I (57,50%), O (66,70%), U (66,70%)
Chữ thường ($a - z$) 61.351 628 87,42% Chữ q (nhầm với số 9), o, u, v, w
Tổng thể 105.373 1.545 89,48% Các ký tự đối xứng và ký tự tối giản nét
Độ chính xác phân loại theo lớp (%):
Chữ số (0-9)    : [========================================] 95.78%
Chữ thường (a-z): [====================================]     87.42%
Chữ in hoa (A-Z): [===================================]      85.23%
Trung bình tổng : [=====================================]     89.48%

Module kiểm tra chính tả và ghép từ (Aspell.NET)

Khi nhận diện chuỗi ký tự tạo thành từ (ví dụ chữ "Expert"), ngõ ra thô từ 3 mạng có thể chứa các nhãn xung đột:

  • Mạng chữ số: ? ? ? ? ? 1
  • Mạng chữ thường: ? x p e r t
  • Mạng chữ hoa: E X ? ? ? J

Thuật toán kết hợp tạo ra không gian tổ hợp các từ: {"Exper1", "Expert", "ExperJ", "EXpert", ...}. Module hậu xử lý truyền danh sách ứng viên qua Aspell.NET Dictionary Engine. Từ Expert được đối soát hợp lệ với từ điển tiếng Anh và được chọn làm kết quả hiển thị cuối cùng, loại bỏ hoàn toàn các lỗi nhận diện cục bộ ở từng ký tự đơn lẻ.


Đổi mới và đóng góp

  1. Kiến trúc phân loại phân luồng ba nhánh song song (Tri-Network Parallel CNN Pipeline): Khắc phục triệt để vấn đề không gian nhãn quá lớn (62 lớp) gây giảm độ hội tụ khi huấn luyện trên một mạng nơ-ron đơn lẻ. Bằng cách tách biệt thành 3 mạng chuyên biệt ($10, 26, 26$ nhãn), thời gian huấn luyện giảm 42%, đồng thời nâng độ chính xác nhận diện chữ số lên mức vượt trội 95,78%.
  2. Khung xử lý Native C# độc lập hoàn toàn (Zero Python Dependency): Không cần cài đặt môi trường runtime nặng nề như Python, TensorFlow hay PyTorch. Toàn bộ kiến trúc mạng, phép nhân chập ma trận và cập nhật trọng số lan truyền ngược (Backpropagation) được lập trình thuần túy trên C#, giúp ứng dụng có dung lượng siêu nhẹ (< 15 MB) và khởi chạy tức thì.
  3. Cơ chế hậu xử lý lai kết hợp Ngữ âm - Từ điển (Lexicon-Phonetic Hybrid Post-Correction): Tích hợp công cụ Aspell.NET trực tiếp vào luồng phân loại giúp sửa lỗi thông minh cho các trường hợp chữ viết tay bị biến dạng nặng, cải thiện độ chính xác ở cấp độ từ (Word-level Accuracy) thêm 11,6% so với việc chỉ xuất kết quả thô từ mạng nơ-ron.

Ứng dụng thực tế và triển khai

+-------------------------------------------------------------------------------+
|                       KỊCH BẢN ỨNG DỤNG THỰC TẾ                              |
|                                                                               |
|   [Giáo Dục Tiểu Học / Ngoại Ngữ]      [Số Hóa Biểu Mẫu Hành Chính]           |
|   - Trẻ em tập viết chữ cái tiếng Anh  - Nhập liệu số CMND/CCCD, mã bưu chính |
|   - Tương tác trực quan trên Tablet    - Tự động tách trường số & chữ cái     |
+-------------------------------------------------------------------------------+

Kịch bản triển khai thực tế

  • Hỗ trợ học ngoại ngữ và luyện viết chữ cái tiếng Anh cho trẻ em: Phần mềm cung cấp giao diện tương tự Microsoft Paint, giúp học sinh thực hành viết chữ cái và số trực tiếp trên máy tính màn hình cảm ứng hoặc bảng vẽ điện tử (Graphics Tablet), nhận phản hồi phát hiện lỗi chính tả ngay lập tức.
  • Số hóa biểu mẫu và phiếu khảo sát viết tay (Form Processing): Ứng dụng có thể nhúng vào các trạm dịch vụ công hoặc quầy giao dịch bưu điện để tự động nhận dạng các ô chữ số (mã bưu chính, số điện thoại, số định danh cá nhân) với độ chính xác trên 95%.

Yêu cầu cấu hình hệ thống triển khai

  • Hệ điều hành: Microsoft Windows 7 / 8 / 8.1 / 10 (32-bit hoặc 64-bit).
  • Môi trường thực thi: Microsoft .NET Framework 4.0 trở lên.
  • Phần cứng tối thiểu: CPU Intel/AMD Dual-Core 1.8 GHz, RAM 1 GB, dung lượng đĩa trống 50 MB.
  • Phần cứng đề xuất: Màn hình cảm ứng hoặc bảng vẽ Wacom để đạt trải nghiệm viết tự nhiên nhất.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Hệ thống chỉ nhận diện tốt các ký tự viết rời rạc; chưa hỗ trợ chữ viết liền nét (Cursive Handwriting) do hạn chế của thuật toán phân đoạn Bounding Box hình chữ nhật.
  • Ký tự có độ nghiêng quá lớn (Slanted text) hoặc các nét chồng lấn theo chiều thẳng đứng dễ bị gộp thành một ký tự duy nhất, gây sai lệch nhận diện.
  • Chưa hỗ trợ tập ký tự tiếng Việt với hệ thống dấu thanh và dấu mũ phức tạp ($á, à, ả, ã, ạ, ă, â, đ,...$).

Hướng phát triển trong tương lai

  • Nâng cấp mô hình chuỗi (Sequence Modeling): Tích hợp kiến trúc mạng CRNN (Convolutional Recurrent Neural Network) kết hợp lớp kết nối CTC (Connectionist Temporal Classification) hoặc Transformer để nhận diện văn bản viết tay dạng dòng liên tục mà không cần bước cắt ảnh (Segmentation-free OCR).
  • Mở rộng hỗ trợ tiếng Việt: Bổ sung tập dữ liệu chữ viết tay tiếng Việt (VNOnDB / HPLabs Vietnamese dataset) và cấu hình lại tầng đầu ra của mạng nơ-ron.
  • Chuyển đổi nền tảng Cross-Platform: Porting mã nguồn sang .NET MAUI / Xamarin để triển khai ứng dụng mượt mà trên thiết bị di động (Android / iOS) và máy tính bảng.

Đối tượng hưởng lợi

  • Học sinh, sinh viên: Tiếp cận tài liệu tham khảo hoàn chỉnh về xử lý ảnh y khoa/thị giác máy tính, hiểu rõ quy trình toán học đằng sau phép nhân chập và kỹ thuật lập trình mạng nơ-ron từ con số 0 trên C#.
  • Lập trình viên .NET: Khai thác mẫu thiết kế (Code Pattern) tối ưu hiệu năng đồ họa GDI+ và kỹ thuật thao tác trực tiếp trên bộ nhớ (Bitmap.LockBits) mà không cần dựa vào thư viện OpenCV cồng kềnh.
  • Doanh nghiệp EdTech: Sở hữu giải pháp mẫu chi phí thấp (Low-cost solution) để tích hợp tính năng bảng viết tương tác số vào các phần mềm giảng dạy trực tuyến.
  • Nhà nghiên cứu: Dữ liệu thực nghiệm phong phú về ma trận tương quan và tỷ lệ nhận diện lỗi của 62 lớp ký tự trên tập dữ liệu chuẩn UNIPEN.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật phần mềm và phần cứng để triển khai hệ thống là gì?

Hệ thống yêu cầu hệ điều hành Windows (7/8/10) đã cài đặt sẵn .NET Framework 4.0. Ứng dụng chạy native không cần card đồ họa rời (GPU), tiêu thụ dưới 100 MB RAM và 30 MB bộ nhớ lưu trữ cho toàn bộ tệp thực thi và các file trọng số .nnt.

2. Giới hạn khả năng mở rộng quy mô (Scalability) của mô hình là gì?

Hệ thống hiện tại sử dụng kiến trúc phân loại ảnh tĩnh cục bộ. Để mở rộng lên quy mô nhận diện trang văn bản đầy đủ (Full-page document), cần phát triển thêm module phân đoạn dòng văn bản (Line Segmentation) sử dụng phép chiếu ngang/dọc (Projection Profile) trước khi đưa vào module nhận diện ký tự.

3. Làm thế nào để tích hợp hệ thống này vào các ứng dụng quản lý hiện có?

Toàn bộ logic nhận diện được đóng gói thành các class C# độc lập (MCNN, DrawArea, SpellChecker). Lập trình viên có thể biên dịch mã nguồn thành thư viện liên kết động .dll (Class Library) để nhúng trực tiếp vào các dự án WPF, WinForms hoặc ASP.NET.

4. Hệ thống cần bảo trì và cập nhật những gì trong quá trình vận hành?

Cần định kỳ cập nhật từ điển Aspell .dic theo từng lĩnh vực chuyên môn cụ thể và bổ sung thêm các mẫu chữ viết tay bị nhận diện sai vào tập dữ liệu huấn luyện để tái tinh chỉnh (Fine-tuning) ma trận trọng số mạng nơ-ron.

5. Chi phí đầu tư và thời gian hoàn vốn (ROI) ước tính như thế nào?

Dự án được phát triển hoàn toàn trên nền tảng công nghệ mã nguồn mở và công cụ miễn phí của Microsoft, chi phí bản quyền phần mềm bằng 0. Khi ứng dụng vào số hóa chứng từ tại các doanh nghiệp vừa và nhỏ, hệ thống giúp tiết kiệm tới 60% thời gian nhập liệu thủ công, thời gian thu hồi vốn chỉ từ 1 đến 3 tháng.


Kết luận

Đồ án tốt nghiệp "Thiết kế hệ thống nhận diện chữ viết tay" đã giải quyết thành công bài toán nhận diện chữ viết tay tiếng Anh trên môi trường tương tác thời gian thực. Bằng việc kết hợp sáng tạo giữa cấu trúc 3 mạng nơ-ron tích chập đa tầng song song, giải thuật tiền xử lý tối ưu bộ nhớ LockBits và cơ chế hậu kiểm chính tả Aspell.NET, hệ thống đạt độ chính xác ấn tượng 95,78% trên tập chữ số và xấp xỉ 89,48% trên toàn bộ 62 lớp ký tự Latin.

Công trình không chỉ mang giá trị học thuật cao trong việc chứng minh tính khả thi của việc tự hiện thực mạng học sâu thuần túy trên ngôn ngữ C# mà còn mở ra tiềm năng ứng dụng thực tiễn rộng rãi trong giáo dục số và tự động hóa quy trình văn phòng. Bạn đọc và các nhà phát triển quan tâm có thể ứng dụng các mã nguồn thuật toán và kiến trúc mạng đã phân tích để xây dựng các module OCR nhúng hiệu năng cao cho riêng mình.