Chương 6 : KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN
6.2 Hướng phát triển
Đề tài đã hoàn thiện được cơ bản nhiệm vụ đưa ra, nhưng cịn một số khuyết điểm:
Hình 6.3: Sai số khi tồn tại nhiễu trắng
Một số ký tự còn chưa được tách rời hết nên nhận dạng ra kết quả sai:
Như mẫu nhận dạng trên tại vị trí các số 444 ta chưa tách rời được các ký tự nên kết quả nhận dạng chưa chính xác (nhận dạng 444 A). Hướng khắc phục xây
dựng phương pháp tách ký tự hiệu quả hơn.
Một số ký tự sai font nên kết quả nhận dạng sai: Ví dụ như mẫu sau chữ số 1 bị sai font (Calibri) nên kết quả nhận dạng sai hoặc không nhận dạng được. Hướng khắc phục xây dựng tập mẫu huấn luyện lớn hơn để có thể nhận dạng được nhiều font chữ hơn.
Hình 6.5: Nhận dạng sai do sai font
Ngoài ra, chưa lưu dữ liệu vào đúng ơ mong muốn trong file exel:
Hình 6.7: Một số dữ liệu khơng đúng vị trí
Từ những tồn tại trên người nghiên cứu đưa ra hướng phát triển như sau:
- Xây dựng phương pháp xử lý, lọc nhiễu hiệu quả và tách ký tự triệt để hơn để nâng cao độ chính xác
- Xây dựng tập mẫu huấn luyện lớn hơn để đảm bảo độ chính xác cao hơn. - Xây dựng tập mẫu với đa dạng kiểu chữ để có thể nhận dạng được nhiều font chữ hơn. Mang lại tính ứng dụng cao hơn trong thực tiễn.
- Nhận dạng hóa đơn với nhiều kiểu mẫu định dạng hơn.
- Xây dựng bộ từ điển để hiệu chỉnh lại kết quả cho các từ tiếng việt đúng chính tả hơn và xác định thuật toán để đưa nội dung dữ liệu vào đúng vị trí trong Exel.
- Có thể mở rộng ứng dụng trong nhiều lĩnh vực hơn như: Nhập điểm cho học sinh sinh viên tại các cơ sở đào tạo, hoặc các ứng dụng quản lý thuốc tại các hiệu thuốc hoặc các công ty dược.
- Xây dựng được ứng dụng có thể sử dụng được trên nhiều hệ điều hành hơn và có thể sử dụng được cả trên điện thoại di động. Chương trình hiện tại của đề tài mới chỉ dừng lại trên hệ điều hành Linux.
Tài liệu tham khảo
[1] Adam Coates, Blake Carpenter, Carl Case, Sanjeev Satheesh, Bipin Suresh, Tao Wang, David J. Wu, Andrew Y. Ng. Text Detection and Character Recognition in Scene Images with Unsupervised Feature Learning.
ICDAR, 2011.
[2] Parthasarathi Giri. Text Information Extraction And Analysis From Images
Using Digital Image Processing Techniques. Special Issue of International
Journal on Advanced Computer Theory and Engineering (IJACTE), ISSN (Print) : 2319 – 2526, Volume-2, Issue-1, 2013, pp. 66-71.
[3] Chiang, Yao-Yi, and Craig A. Knoblock. Automatic Text Recognition from
Raster Maps. 2010.
[4] Arwa AL-Khatatneh, Sakinah Ali Pitchay and Musab Al-qudah. An Arabic
Baseline Estimation Method Based on Feature Points Extraction.
In: Proceedings of the World Congress on Engineering. 2017.
[5] L. Ramesh, E. Dinesh. Text Extraction and Recognition from Mixed Images. Journal of Chemical and Pharmaceutical Sciences ISSN, 974:
2115.
[6] Phan Thị Thanh Nga, Nguyễn Thị Huyền Trang, Nguyễn Văn Phúc, Thái Duy Quý, Võ Phương Bình. Nhận Dạng Bìa Sách Tiếng Việt Cho Ứng
Dụng Quản Lý Sách. Tạp chí Khoa học Đại học Đà Lạt, 2017, 7.2: 142-
152.
[7] Nguyễn Thanh Hải. Giáo Trình Xử Lý Ảnh. NXB Đại học Quốc gia, 2013. [8] Simon Tong and Daphne Koller. Support vector machine active learning
with applications to text classification. Journal of machine learning
[9] Terrence S. Furey, Nello Cristianini, Nigel Duffy, David W. Bednarski Michèl Schummer, David Haussler. Support vector machine classification
and validation of cancer tissue samples using microarray expression data. Bioinformatics 16.10 (2000): 906-914.
[10] Ray Rischpater. Application development with qt creator. Packt Publishing
Ltd, 2013.
[11] https://en.wikipedia.org/wiki/OpenCV
[12] https://docs.opencv.org
[13] https://en.wikipedia.org/wiki/Support_vector_machine
TẠP CHÍ KHOA HỌC GIÁO DỤC KỸ THUẬT
ỨNG DỤNG XỬ LÝ ẢNH TRONG VIỆC NHẬN DẠNG VÀ TRÍCH XUẤT THƠNG TIN, DỮ LIỆU
TRONG CÁC TỜ HÓA ĐƠN BÁN HÀNG
CHARACTER RECOGNITION AND DATA EXTRACTION FROM BILLS USING DIGITAL IMAGE PROCESSING TECHNIQUES
Thân Đức Trường
Trường Đại học Kinh tế Kỹ thuật Bình Dương
TĨM TẮT
Nhận dạng ký tự quang học là một công nghệ thuộc lĩnh vực thị giác máy được sử dụng để chuyển các hình ảnh chứa ký tự thành các văn bản tài liệu.Nhận dạng ký tự quang học giúp ta tiết kiệm rất nhiều thời gian cũng như công sức trong việc nhập liệu. Cụ thể là trong cơng việc kế tốn nhập các thông tin sản xuất và kinh doanh qua các tờ hóa đơn là rất quan trọng. Nên đề tài trình bày về phương pháp để nhận dạng và trích xuất các thơng tin chứa trong các tờ hóa đơn bán hàng và lưu dưới dạng các các văn bản tài liệu để tiện việc theo dõi và chỉnh sửa. Nhiệm vụ cần thực hiện trong đề tài là: Xác định dòng và tách ký tự sử dụng mã nguồn mở thị giác máy (OpenCv) và phần mềm Qt Creator, huấn luyện và nhận dạng sử dụng giải thuật SVM, lưu trữ.
Từ khóa: Nhận dạng ký tự quang học, thị giác máy, OpenCV, Qt Creator, SVM.
ABSTRACT
Optical Character Recognition is a technology of machine vision used to convert character images into text documents. Optical character recognition saves a lot of time as well as effort in data entry. In fact, it is very important to enter the production and business information through the invoice
sheets. In fact, it is very important for the accountant to import the production and business
information contained in the sales bills. Therefore, this project describes how to identify and extract information in sales bills and save them as documents for easy tracking and editing. The tasks performed on the topic are: Defining lines and split characters using open source computer vision (OpenCV) and Qt Creator software, training and identification using SVM algorithm, store.
Key words: Optical Character Recognition, machine vision, OpenCV, Qt Creator, SVM.
I. GIỚI THIỆU
1. Tổng quan về đề tài
Nhằm mục đích giải phóng sức lao động giúp người kế tốn có thể nhanh chóng và dễ dàng nắm bắt thông tin về vật tư và sản phẩm của công ty, tiết kiệm thời gian nhập liệu từ những tờ hóa đơn giúp cơng việc tiến hành trôi chảy và thuận lợi hơn. Nên việc xây dựng một chương trình nhận dạng và trích xuất thơng tin hóa đơn là rất cần thiết.
Nhiệm vụ đặt ra để thực hiện đề tài tiến hành theo sơ đồ khối:
Để thực hiện những nhiệm vụ đã đề ra, đề tài có tham khảo những cơng trình và tài liệu đã nghiên cứu trước đó như: Mã nguồn mở Tesseract được tài trợ bởi google. Phương pháp học không giám sát để phát hiện và nhận dạng ký tự [1]; Phương pháp cạnh cơ sở và liên kết thành phần cơ sở trong trích xuất thơng tin văn bản [2]; Nhận dạng ký tự sử dụng bản đồ Raster [3]; Phương pháp điểm đặc trưng trong nhận dạng ký tự [4]; Phương pháp phân vùng màu sắc trong nhận dạng ký tự ngoại cảnh [5]; Ứng dụng mã nguồn mở Tesseract trong nhận dạng bìa sách [6].
II. GIẢI THUẬT
1. Xác định dòng và tách ký tự
Để xác định dòng và tách ký tự ta sử dụng các phân lớp của chương trình Qt Creator [9] và mã nguồn mở thị giác máy (OpenCV) [10]. Để bắt đầu thực hiện ta nhập hình ảnh chứa hóa đơn cần nhận dạng sau đó ta thực hiện một số phép xử lý cơ bản sau:
- Chuyển đổi không gian màu ta chuyển đổi ảnh sang không gian màu xám để thuận tiện cho việc phân đoạn ảnh.
- Phân đoạn ảnh ở đây ta thực hiện việc chuyển ảnh từ không gian màu xám sang ảnh nhị phân để đơn giản việc nhận dạng. Ở đây ta sử dụng phương pháp lấy ngưỡng Otsu với nhị phân hóa thuận.
- Sau đó ta tiến hành loại bỏ bớt nhiễu trong ảnh sử dụng bộ lọc Gaussian.
❖ Xóa các đường kẻ
Các tờ hóa đơn thường được thiết kế dưới dạng bảng biểu nên sẽ tồn tại những dịng kẻ khơng chứa thơng tin cần trích xuất, do đó, ta tiến hành loại bỏ dịng kẻ bằng cách tìm đường bao với hàm
findcontours.
Sau đó ta tiến hành lọc đường bao bằng cách xóa bỏ những đường bao có kích thước nhỏ hơn 2 pixel và lớn hơn 100 pixel.
❖ Tách dòng và ký tự
Sau khi loại bỏ được đường kẻ ta tiến hành tách dòng và ký tự. Đầu tiên ta tiến hành xác định vị trí trí của các dịng chứa ký tự bằng cách sử dụng phương pháp biến đổi hình thái. Ta tiến hành xói mịn (Erosion) để loại bỏ bớt một số nhiễu trắng sử dụng hàm enrode [11]. Sau đó ta tiến hành giãn nở (Dilation) hình ảnh dùng hàm dilated khi đó các vùng trắng liền kề sẽ được liên kết với nhau và ta sẽ đánh dấu được các dịng có chứa ký tự.
Sau khi ta nối được các ký tự trên cùng một dịng ta sẽ tiến hành tìm đường bao của. Sau đó dùng lớp QRect của QT Creator để vẽ hình chữ nhật bao quanh các dịng chứa ký tự. Vị trí và kích thước của những hình chữ nhật sẽ được lưu trong lớp QList.
đường bao của hình. Kế tiếp ta tiến hành kẻ những đường kẻ dọc có chiều cao bằng chiều cao đường bao từng ký tự theo từng cột của hình từ trái sang phải tại vị trí cột nào mà khơng có bất kỳ điểm trắng nào đường kẻ sẽ không được vẽ ta sẽ tiến hành vẽ cho tới khi kết thúc khung hình.
Sau khi đánh dấu được vị trí của từng ký tự ta cũng tiến hành xác lại đường bao và lưu lại địa chỉ của từng ký tự trong QList rồi trích xuất ký tự ra thành từng ký tự riêng lẻ và thay đổi kích thước từng hình thành 80x80 pixel để thuận tiện cho việc huấn luyện.
Sau khi hoàn thành việc tách ký tự trên frame sẽ hiển thị ảnh và có đánh dấu các dịng (Hình chữ nhật xanh) và từng ký tự (Hình chữ nhật đỏ).
Hình 1. Xác định dịng và ký tự 2. Huấn luyện
❖ Tạo tập mẫu huấn luyện
Chuẩn bị một số mẫu ký tự in sẵn chứa các ký tự cần thiết để huấn luyện. Sau đó, sử dụng chính chương trình tách ký tự đã hoàn thành ở trên tiến hành tách riêng từng ký tự sau đó lưu ký tự vào từng thư mục riêng với tên từng thư mục tương ứng là mã Unicode của chính ký tự đó. Tất cả các thư mục chứa ký tự sẽ được lưu trong một thư mục training. Lưu ý, từng ký tự phải có cùng số lượng mẫu. Yêu cầu về tập mẫu: Ngõ vào gồm 135 ngõ gồm các 93 ký tự, 10 chữ số và 32 ký hiệu và các ký tự đặc biệt. Và các mẫu được tách bằng chính chương trình tách ký tự.
❖ Huấn luyện tạo thư viện nhận dạng
Ta dùng giải thuật SVM (Support Vector Machines)[7][8] để huấn luyện mẫu và tạo thư viện nhận dạng.
Đầu tiên ta xác định một số đặc trưng của từng mẫu. Với mẫu huấn luyện đưa vào là một ảnh 80x80 pixel. Ta sẽ chia ảnh thành 64 phần mỗi phần là một ảnh nhỏ có kích thước 10x10. Sau đó ta tính tỷ lệ điểm trắng và điểm đen từng ảnh nhỏ so với ảnh gốc và kết quả lưu vào một vector với 2 chiều chứa kết quả tỷ lệ được tính ở trên.
Ta có thể tạo nhiều đặc trưng khác theo hàng, cột, đường chéo hoặc một số quy luật ngẫu nhiên khác. Sau khi có đặc trưng ta tiến hành huấn luyện.
Ta tiến hành chọn thông số bộ huấn luyện:
Params.svm_type: Với thông số này ta chọn dạng SVM. Trong đề tài người nghiên cứu lựa chọn
Basis Function).
Params.gamma và params.C: Là 2 thông số của một SVM phi tuyến hết hợp với hàm kernel RBF
được xác định thông qua hàm RandomizedSearchCV() với phân bố mẫu cho trước.
Sau khi thiết lập thông số ta nhập số lượng ngõ vào và số mẫu huấn luyện cho từng ngõ vào. Lưu ý với số lượng mẫu huấn luyện cho mỗi ngõ vào phải bằng nhau.
Sau đó ta tiến hành huấn luyện bằng cách sử dụng hàm: svm.train_auto().
Sau khi huấn luyện xong dữ liệu sẽ được lưu lại và được sử dụng như là một thư viện nhận dạng. Ta cần nhập những thông tin cần thiết như: Số lượng ký tự ngõ vào (Num Characters), số lượng mẫu trên mỗi ngõ vào (Num Samples), chọn thư mục chứa tập huấn luyện (Folder to learning), vị trí lưu thư viện huấn luyện (Path name lib).
❖ Nhận dạng và lưu trữ
Ta lần lượt truy xuất các hình ảnh chứa ký tự được tách ra trước đó theo những chỉ số và nội dung đã được lưu trong lớp Qlist. Sau đó ta tiến hành lấy từng ký tự đi nhận dạng.
Để nhận dạng các ký tự việc đầu tiên ta cũng tính tốn lại những đặc trưng của ảnh chứa ký tự cần nhận dạng theo cách tính đặc trưng của mẫu huấn luyện. Sau đó sử dụng hàm svm.predict() để kiểm chứng sự tương đồng giữa ký tự cần nhận dạng.
Hàm svm.predict() sẽ truy nhập tới folder “Training” chứa các mẫu huấn luyện rồi lần lượt tiến hành so sánh sự tương đồng của ký tự với các mẫu huấn luyện ta đã chuẩn bị sẵn. Từng mẫu huấn luyện được lưu riêng trong từ folder phụ với tên bắt đầu bằng mã Unicode của chính ký tự mẫu.
Ví dụ: với mẫu huấn luyện cho ký tự “A” sẽ được lưu trong folder có tên là “65_A” trong đó, “65” là mã unicode của ký tự “A”. Tương tự cho các mẫu huấn luyện khác.
Hình 2: Thư mục chứa các tập mẫu
Sau khi xác định được ký tự cần nhận dạng có độ tương đồng cao nhất với mẫu nào hàm
svm.predict() sẽ trả về kết quả là tên của folder chứa mẫu huấn luyện đó. Việc tiếp theo ta sẽ tiến hành tách phần số trong tên của folder khi đó ta sẽ có được mã Unicode của ký tự nhận dạng được. Khi đã có được mã Unicode ta tiến hành việc chuyển đổi từ Unicode sang ký tự và lưu lại dưới dạng text trong một file có tên là “Ocr.txt”.
workbook. Sau khi lưu hồn tất ta sẽ lưu workbook theo định dạng Exel (*.xls) và đóng workbook kết thúc chương trình.
Khi mở file Exel lần đầu tiên hệ thống sẽ xuất hiện hộp thoại để ta lụa chọn một số thông tin hiển thị của ký tự trong file. Ở đây, ta cần lưu ý tới hai mục là :
Character set: đây là định dạng của ký tự ngõ vào. Do dữ liệu của ta xử lý theo dạng Unicode (UTF-
8) nên ta chọn trong thẻ Character set là Unicode (UTF-8).
Separated by: Ở đây cho phép ta lựa chọn phương thức tách giữa các đoạn văn bản. Ta chọn Tab để
mỗi đoạn văn bản được đặt trong một ô.
III. KẾT QUẢ
Đề tài đã thực hiện và hoàn thành được những nhiệm vụ đã đề ra là xây dựng được một chương trình có khả năng nhận dạng và trích xuất được những thơng tin có trong một tờ hóa đơn và lưu trữ lại dưới dạng file Exel để dễ quản lý.
Tuy nhiên, Kết quả thu được có độ chính xác chưa cao và vẫn cịn một số nhiễu chưa được loại bỏ hết.
Hiệu suất của training với 100 mẫu hóa đơn đưa vào:
Đối với số lượng mẫu 12 mẫu/ký tự: Độ chính xác trong nhận dạng vào khoảng 25% với các ký tự và 40% với các số học.
Đối với số lượng mẫu 25 mẫu/ký tự: Độ chính xác trong nhận dạng vào khoảng 40% với các ký tự và 70% với các số học.
Đối với số lượng mẫu 50 mẫu/ký tự: Độ chính xác trong nhận dạng vào khoảng 70% với các ký tự và 80% với các số học.
IV. THẢO LUẬN
Đề tài đã hoàn thiện được cơ bản nhiệm vụ đưa ra, nhưng còn một số khuyết điểm: - Chưa loại bỏ được hết nhiễu trắng nên kết quả còn một số điểm nhận dạng sai. - Một số ký tự còn chưa được tách rời hết nên nhận dạng ra kết quả sai
- Một số ký tự sai font nên kết quả nhận dạng sai: Ví dụ như mẫu sau chữ số 1 bị sai font (Calibri) nên kết quả nhận dạng sai hoặc không nhận dạng được. Hướng khắc phục xây dựng tập mẫu huấn luyện