Báo cáo Đồ án Xây dựng phần mềm nhận dạng ký tự quang học sử dụng mã nguồn mở

TẬP ĐOÀN ĐIỆN LỰC VIỆT NAM  
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC  
KHOA CÔNG NGHỆ THÔNG TIN  
BÁO CÁO ĐỒ ÁN THỰC TẬP TỐT NGHIỆP  
XÂY DỰNG PHẦN MỀM NHẬN DẠNG KÝ TỰ  
QUANG HỌC SỬ DỤNG MÃ NGUỒN MỞ  
TESSERACT OCR  
Giảng viên hướng dẫn: TS. NGUYỄN THỊ THANH TÂN  
Sinh viên thực hiện: NGUYỄN ĐÌNH NGỌC  
Ngành: CÔNG NGHỆ THÔNG TIN  
Chuyên ngành: CÔNG NGHỆ PHẦN MỀM  
Lớp: D6 - CNTT  
Khóa: 2011 – 2016  
Hà Nội, tháng 10 năm 2015.  
LỜI MỞ ĐẦU  
Hiện nay, nhu cầu về việc rút trích từ ngữ từ hình ảnh đang ngày càng phát triển,  
bên cạnh sự gia tăng về nhu cầu là sự phát triển của công nghệ nhận dạng ký tự quang  
học (Optical Character Recognition) hay còn được gọi tắt là OCR. Đây là một công  
nghệ giúp chuyển đổi hình ảnh của chữ viết tay hoặc đánh máy thành các ký tự đã  
được mã hóa trong máy tính. Giả sử chúng ta cần chỉnh sửa một số tài liệu giấy như:  
Các bài viết trên tạp chí, tờ rơi, hoặc một tập tin PDF hình ảnh. Rõ ràng, chúng ta  
không thể sử dụng một máy quét để chuyển các tài liệu này thành tập tin văn bản để có  
thể chỉnh sửa (ví dụ như trình soạn thảo Microsoft Word).  
Tất cả những gì máy quét có thể làm là tạo ra một hình ảnh hoặc một bản chụp  
của các tài liệu. Để giải nén và sử dụng lại dữ liệu từ tài liệu được quét, hình ảnh máy  
ảnh hoặc hình ảnh của các tập tin PDF, chúng ta cần một phần mềm OCR. Nó sẽ xuất  
ra kí tự trên hình ảnh, ghép chúng thành từ và sau đó ghép các từ thành câu. Nhờ vậy,  
chúng ta có thể truy cập và chỉnh sửa nội dung của tài liệu gốc.  
Tương tự, những tài liệu cổ đang bị hư hại theo thời gian và việc viết tay hay  
đánh máy lại những tài liệu này sẽ tốn rất nhiều chi phí, thời gian và không đảm bảo  
được độ chính xác cũng như là sự an toàn cho tài liệu nền. Việc này rất cần một công  
nghệ lấy từ ngữ từ hình ảnh chụp.  
Bài báo cáo nhằm mục đích tìm hiểu, chỉnh sửa công cụ Tesseract để thực hiện  
việc rút trích các văn bản từ tập tin hình ảnh.  
Tên đề tài: “Xây dựng phần mềm nhận dạng ký tự quang học sử dụng mã nguồn mở  
Tesseract Ocr”.  
CẤU TRÚC ĐỀ TÀI  
Chương 1: Tổng quan về đề tài  
Quy trình chung của một hệ thống nhận dạng chữ  
Bài toán nhận dạng văn bản tiếng Việt Việt  
Phạm vị nghiên cứu và phạm vi ứng dụng  
Đối tượng sử dụng  
Yêu cầu phần cứng, phần mềm  
Yêu cầu giao diện và chức năng  
Chương 2: Tìm hiểu hệ thống mã nguồn mở Tesseract OCR  
Giới thiệu về bộ nhận dạng ký tự quang học Tesseract OCR  
Thư viện Opencv  
Tiến trình nhận dạng sử dụng Tesseract OCR  
Đánh giá độ chính xác nhận dạng Tesseract OCR  
Công cụ và ngôn ngữ sử dụng  
Chương 3: Xây dựng chương trình nhận dạng văn bản tiếng Việt sử dụng thư  
viện Tesseract OCR  
Phân tích hệ thống  
Thiết kế hệ thống  
Thiết kế cơ sở dữ liệu  
Demo giao diện chương trình  
Một số thử nghiệm  
Cách sử dụng chương trình  
Kết luận: Kết quả đạt được và phương hướng phát triển.  
LỜI CẢM ƠN  
Em xin gửi đến Thầy cô ở Khoa Công nghệ thông tin – Trường Đại học Điện  
Lực lời biết ơn sâu sắc nhất, những người đã cùng với tri thức và tâm huyết của mình  
để truyền đạt vốn kiến thức quý báu cho em trong thời gian học tập tại trường.  
Em xin chân thành cám ơn TS. Nguyễn Thị Thanh Tân đã tận tâm hướng dẫn em  
qua những buổi trao đổi. Trong thời gian được học tập và thực hành dưới sự hướng  
dẫn của thầy và anh, em đã thu được rất nhiều kiến thức bổ ích. Nếu không có những  
lời hướng dẫn, dạy bảo của thầy cô thì em nghĩ đồ án này của em rất khó có thể hoàn  
thành được.  
Xin gửi lời cảm ơn chân thành đến gia đình, bè bạn, đã luôn là nguồn động viên  
to lớn, giúp em vượt qua những khó khăn trong suốt quá trình học tập và thực hiện đồ  
án.  
Mặc dù đã rất cố gắng hoàn thiện đồ án với tất cả sự nỗ lực, tuy nhiên, do bước  
đầu đi vào thực tế, tìm hiểu và xây dựng đồ án trong thời gian có hạn, và kiến thức còn  
hạn chế, nhiều bỡ ngỡ, nên đồ án “Xây dựng phần mềm nhận dạng ký tự quang học  
sử dụng mã nguồn mở tesseract OCR” chắc chắn sẽ không thể tránh khỏi những thiếu  
sót. Em rất mong nhận được sự quan tâm, thông cảm và những đóng góp quý báu của  
các thầy cô và các bạn để đồ án này ngày càng hoàn thiện hơn.  
Một lần nữa, em xin chân thành cám ơn và luôn mong nhận được sự đóng góp  
của mọi người.  
Sau cùng, em xin kính chúc các thầy cô trong Khoa Công nghệ thông tin dồi dào  
sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến  
thức cho thế hệ mai sau.  
Trân trọng!  
Hà Nội, ngày 06 tháng 10 năm 2015  
Sinh viên thực hiện  
Nguyễn Đình Ngọc  
MỤC LỤC  
DANH MỤC HÌNH ẢNH  
DANH MỤC BẢNG BIỂU  
DANH MỤC KÝ HIỆU  
KÝ HIỆU NHỮNG CỤM TỪ VIẾT TẮT  
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI...............................................................1  
1.1 Quy trình chung của một hệ thống nhận dạng chữ...........................................1  
1.2 Bài toán nhận dạng văn bản tiếng Việt Việt ......................................................2  
1.3 Phạm vi nghiên cứu và phạm vi ứng dụng.........................................................2  
1.4 Đối tượng sử dụng...............................................................................................2  
1.5 Yêu cầu phần cứng, phần mềm..........................................................................2  
1.6 Yêu cầu giao diện và chức năng .........................................................................2  
CHƯƠNG 2 TÌM HIỂU HỆ THỐNG MÃ NGUỒN MỞ TESSERACT OCR..3  
2.1 Giới thiệu về bộ nhận dạng ký tự quang học Tesseract ....................................3  
2.1.1 Lịch sử ..............................................................................................................3  
2.1.2 Kiến trúc hoạt động ...........................................................................................5  
2.1.3 Huấn luyện dữ liệu trên tesseract .......................................................................6  
2.1.4 Quá trình huấn luyện ngôn ngữ và font mới.......................................................7  
2.2 Thư viện Opencv...............................................................................................10  
2.2.1 Giới thiệu về thư viện Opencv.........................................................................10  
2.2.2 Phiên bản opencv 1 và opencv 2......................................................................10  
2.2.3 Cách tổ chức Opencv.......................................................................................14  
2.3 Tiến trình nhận dạng sử dụng Tesseract OCR................................................15  
2.3.1 Xác định dòng .................................................................................................15  
2.3.2 Thiết lập dòng cơ sở ........................................................................................15  
2.3.3 Cắt nhỏ từ........................................................................................................15  
2.3.4 Nhận dạng khoảng cách giữa chữ hoặc số........................................................15  
2.3.5 Nhận dạng từ...................................................................................................16  
2.4 Đánh giá độ chính xác nhận dạng Tesseract OCR..........................................16  
2.5 Công cụ và ngôn ngữ sử dụng ..........................................................................17  
2.5.1 Công cụ ...........................................................................................................17  
2.5.2 Ngôn ngữ.........................................................................................................17  
CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH NHẬN DẠNG VĂN BẢN  
TIẾNG VIỆT SỬ DỤNG THƯ VIỆN TESSERACT OCR...................................18  
3.1 Phân tích hệ thống ............................................................................................18  
3.1.1 Kiến trúc tổng thể của chương trình.................................................................18  
3.1.2 Các chức năng của hệ thống ............................................................................19  
3.1.3 Biểu đồ use case ..............................................................................................20  
3.1.4 Biểu đồ trạng thái ............................................................................................22  
3.2 Thiết kế hệ thống...............................................................................................24  
3.2.1 Biểu đồ hoạt động............................................................................................24  
3.2.2 Biểu đồ trình tự................................................................................................27  
3.3 Thiết kế cơ sở dữ liệu........................................................................................29  
3.3.1 Cơ sở dữ liệu logic ..........................................................................................29  
3.3.2 Cơ sở dữ liệu vật lý..........................................................................................29  
3.4 Demo giao diện chương trình ...........................................................................30  
3.5 Một số thử nghiệm ............................................................................................31  
3.5.1 Hình chữ viết tay.............................................................................................31  
3.5.2 Hình chữ đánh máy..........................................................................................32  
3.5.3 Hình ảnh tập tin ảnh có chữ tiếng việt..............................................................32  
3.6 Cách sử dụng chương trình..............................................................................33  
KẾT LUẬN .........................................................................................................34  
TÀI LIỆU THAM KHẢO .......................................................................................35  
DANH MỤC HÌNH ẢNH  
Hình 2.1 Ví dụ về một đường cơ sở dạng cong ..........................................................15  
Hình 2.2 Ví dụ về cắt các ký tự bị dính......................................................................15  
Hình 2.3 Quá trình nhận dạng từ................................................................................16  
Hình 3.1 Biểu đồ kiến trúc tổng thể của quá trình nhận dạng văn bản ........................18  
Hình 3.2 Biểu đồ Use case tổng quát..........................................................................20  
Hình 3.3 Biểu đồ trạng thái chọn ảnh.........................................................................22  
Hình 3.4 Biểu đồ trạng thái xử lý ảnh ........................................................................23  
Hình 3.5 Biểu đồ hoạt động xác định dòng ................................................................24  
Hình 3.6 Biểu đồ hoạt động cắt nhỏ từ.......................................................................25  
Hình 3.7 Biểu đồ hoạt động nhận dạng từ..................................................................26  
Hình 3.8 Biểu đồ trình tự chọn ảnh ............................................................................27  
Hình 3.9 Biểu đồ trình tự lưu kết quả.........................................................................28  
Hình 3.10 Bảng tài khoản người dùng........................................................................29  
Hình 3.11 Bảng kết quả sau .......................................................................................30  
Hình 3.12 Giao diện hệ thống ....................................................................................30  
Hình 3.13 Giao diện convert......................................................................................31  
Hình 3.16 Một ví dụ về hình chứa chữ viết tay ..........................................................31  
Hình 3.17 Một ví dụ về hình chứa chữ đánh máy.......................................................32  
Hình 3.18 Một ví dụ về hình dạng chữ tiếng việt .......................................................32  
DANH MỤC BẢNG BIỂU  
Bảng 2.1 So sánh phần mềm thương mại và Tesseract.................................................4  
Bảng 2.2 Độ chính xác của Tesseract trên một số ngôn ngữ.........................................4  
Bảng 3.1 Các chức năng chính của hệ thống..............................................................19  
Bảng 3.2 Mô tả các use case ......................................................................................20  
Bảng 3.3 Thực thể tài khoản ......................................................................................29  
Bảng 3.4 Thực thể Kết quả ........................................................................................29  
LIỆT KÊ CHỮ VIẾT TẮT  
Từ viết tắt  
OCR  
Tên tiếng Anh  
Tên tiếng Việt  
Optical Character  
Recognition  
Nhận dạng ký tự bằng quang học.  
OPENCV Open Source Computer Một thư viện mã nguồn mở phục vụ cho việc  
Vision  
nghiên cứu hay phát triển về thị giác máy tính.  
ML  
Machine learning  
Một lĩnh vực của trí tuệ nhân tạo liên quan đến  
việc nghiên cứu và xây dựng các kĩ thuật cho  
phép các hệ thống "học" tự động từ dữ liệu để  
giải quyết những vấn đề cụ thể  
DANH MỤC KÝ HIỆU  
PHẦN TỬ  
KÝ HIỆU  
Ý NGHĨA  
Biểu đồ USE CASE  
Một người / nhóm người hoặc một  
thiết bị hoặc hệ thống tác động hoặc  
thao tác đến chương trình.  
Tác nhân (Actor)  
Use-case  
Biểu diễn một chức năng xác định của  
hệ thống  
Use case này sử dụng lại chức năng  
của use case kia  
Mối quan hệ giữa các  
use case  
Use case này kế thừa các chức năng từ  
use case kia  
Biểu đồ HOẠT ĐỘNG  
Mô tả hoạt động gồm tên hoạt động và  
đặc tả của nó  
Hoạt động  
Trạng thái khởi đầu  
Trạng thái kết thúc  
Bắt đầu trạng thái hoặc hoạt động  
Kết thúc trạng thái hoặc hoạt động  
Quyết định  
Mô tả một lựa chọn điều kiện  
Mô hình hóa các thông tin lưu trữ lâu  
dài trong hệ thống, nó thường độc lập  
với các đối tượng khác ở xung quanh  
Entity class  
Là một phương thức của một lớp mà  
đối tượng lớp 2 gọi thực hiện  
Procedure  
CHƯƠNG 1  
TỔNG QUAN VỀ ĐỀ TÀI  
1.1 Quy trình chung của một hệ thống nhận dạng chữ  
Có nhiều phương pháp để tạo ra một phần mềm dạng OCR, độ chính xác của các  
phương pháp này phụ thuộc vào công nghệ tạo nên phần mềm. Các phương pháp này  
đạt được độ tin cậy trong các hình ảnh có chất lượng tốt và vừa. Độ chính xác của việc  
rút trích văn bản là điều quan trọng nhất. Nhóm tác giả Kirill Safronov cho rằng một  
số sai sót trong quá trình chuyển đổi thường không quá quan trọng trừ các trường hợp  
như rút trích số serial từ ảnh chụp,...  
Để khắc phục tình trạng kết quả xuất ra không chính xác của công nghệ OCR,  
nhiều công nghệ khác đã ra đời, tác giả A. Vinutha M H đã ứng dụng định hướng  
robot (Optical Character Recognition Based Auto Navigation of Robot). Việc định  
hướng của robot dựa vào bảng tính hiệu như là một cột mốc đánh dấu đường đi tiếp  
theo của robot. Định hướng tự động của các robot trong một vùng lớn đòi hỏi nhiều  
bảng tín hiệu khác nhau với mô hình nhận dạng duy nhất. Ngoài ra, hệ thống này còn  
cho phép nhận diện vị trí tên riêng.  
Bên cạnh việc cải thiện độ chính xác, cần có sự thay đổi kích thước của thiết bị  
nhận dạng, tác giả Ali Ahmadi đã đề cập trong nghiên cứu của mình, tốc độ xử lý và  
độ chính xác cao là yêu cầu lớn hiện nay của các thiết bị nhận dạng ký tự dạng nhỏ, ví  
dụ như bút biết nhận dạng. Nhưng dù có nhiều mặt hàng loại này được chào bán trên  
thị trường nhưng nó vẫn không đáp ứng nhu cầu sử dụng và kích thước thiết bị. Ngoài  
sự đa dạng trong cách thức nhận dạng, OCR còn đa dạng về cách dùng, nó được chia  
thành hai cách, dùng online và dùng offline, có nhận xét về hai cách dùng này như sau:  
(1) Nhận dạng offline: nhận dạng các văn bản in ra giấy hoặc các bản viết tay và  
nó đòi hỏi quá trình scan trên mặt giấy hoặc mặt vật liệu có chữ. Cách này thường đòi  
hỏi con người phải thực hiện một số thao tác như phân loại, lưu trữ và chỉnh sửa văn  
bản trước khi scan.  
(2) Nhận dạng online: thường chỉ được dùng cho nhận dạng chữ viết tay được  
lưu trữ ở dạng kỹ thuật số, thông thường để scan dạng này chúng ta thường dùng một  
loại bút đặc biệt nhưng do sự thành công của các nghiên cứu gần đây mà giờ đã có các  
thiết bị khác thay thế. Việc nhận dạng online nhằm giúp con người giao tiếp với máy  
tính tốt hơn bằng cách viết tay thay vì gõ phím.  
Trong bài báo này, chúng ta sẽ tìm hiểu về một công cụ OCR điển hình và là một  
trong những nền tảng quan trọng, đó là Tesseract.  
1
1.2 Bài toán nhận dạng văn bản tiếng Việt Việt  
Rút trích văn bản từ tập tin hình ảnh đang là một trong những bài toán quan trọng  
trong xử lý ảnh hiện nay. Trong bài báo này, tôi bước đầu tìm hiểu các phương pháp  
trích lọc văn bản từ hình ảnh của một số công trình liên quan đồng thời cũng tìm hiểu,  
hiệu chỉnh công cụ mã nguồn mở Tesseract để thực hiện trích lọc văn bản tiếng Anh từ  
tập tin hình ảnh. Kết quả thử nghiệm bước đầu cho thấy công cụ này rút trích khá tốt  
các văn bản từ tập tin hình ảnh chứa văn bản được đánh máy.  
1.3 Phạm vi nghiên cứu và phạm vi ứng dụng  
Phạm vi nghiên cứu: Tự nghiên cứu  
Phạm vi ứng dụng: Trong nhận dạng  
1.4 Đối tượng sử dụng  
Tất cả mọi người.  
1.5 Yêu cầu phần cứng, phần mềm  
Phần cứng: Window  
Phần mềm: Microsoft Visual Studio 2010  
1.6 Yêu cầu giao diện và chức năng  
Về giao diện có các giao diện chính sau:  
o Giao diện menu  
o Giao diện chọn ảnh đầu vào  
o Giao diện ảnh đầu ra  
o Giao diện lưu kết quả  
Các chức năng cần thiết trong từng giao diện  
o Chức năng chọn ảnh đầu vào  
o Chức năng xử lý ảnh đầu vào  
o Chức năng lưu kết quả xử lý  
o Chức năng thoát chương trình  
2
CHƯƠNG 2  
TÌM HIỂU HỆ THỐNG MÃ NGUỒN MỞ  
TESSERACT OCR  
2.1 Giới thiệu về bộ nhận dạng ký tự quang học Tesseract  
Nhận dạng ký tự quang học (tên tiếng anh là Optical Character Recognition –  
OCR) là kỹ thuật được sử dụng để chuyển đổi ảnh văn bản sang dạng văn bản có thể  
chỉnh sửa trong máy tính. Đầu vào của quá trình này là tập tin hình ảnh và đầu ra sẽ là  
các tập tin văn bản chứa nội dung là các chữ viết, ký hiệu có trong hình ảnh đó.  
2.1.1 Lịch sử  
Tesseract là một phần mềm mã nguồn mở và ban đầu nó được nghiên cứu và  
phát triển tại hãng Hewlett Packet (HP) trong khoảng từ năm 1984 đến 1994. Vào năm  
1995, Tesseract nằm trong nhóm ba bộ nhận dạng OCR đứng đầu về độ chính xác khi  
tham gia trong hội nghị thường niên của tổ chức UNLV.  
Lúc mới khởi động thì Tesseract là một dự án nghiên cứu tiến sĩ tại phòng thí  
nghiệm HP ở Bristol và đã được tích hợp vào trong các dòng máy quét dạng phẳng của  
hãng dưới dạng các add-on phần cứng hoặc phần mềm. Nhưng thực tế dự án này đã  
thất bại ngay từ trong trứng nước vì nó chỉ làm việc hiệu quả trên các tài liệu in có chất  
lượng tốt.  
Sau đó, dự án này cùng với sự cộng tác của bộ phận máy quét HP ở bang  
Colorado đã đạt được một bước tiến quan trọng về độ chuẩn xác khi nhận dạng và  
vượt lên nhiều bộ nhận dạng OCR thời đó nhưng dự án đã không thể trở thành sản  
phẩm hoàn chỉnh vì độ cồng kềnh và phức tạp. Sau đó, dự án được đưa về phòng thí  
nghiệm của HP để nghiên cứu về cách thức nén và tối ưu mã nguồn. Dự án tập trung  
cải thiện hiệu năng làm việc của Tesseract dựa trên độ chính xác đã có. Dự án này  
được hoàn tất vào cuối năm 1994 và sau đó vào năm 1995 bộ Tesseract được gửi đi  
tham dự hội nghị UNLV thường niên về độ chính xác của OCR, vượt trội hơn hẳn so  
với các phần mềm OCR lúc bấy giờ. Tuy nhiên, Tesseract đã không thể trở thành một  
sản phẩm thương mại hoàn chỉnh được và vào năm 2005, HP đã chuyển Tesseract  
sang mã nguồn mở và được hãng Google tài trợ. Tesseract cho đến nay vẫn được nhiều  
nhà phát triển cộng tác và tiếp tục hoàn thiện. Phiên bản mới nhất của bộ nhận dạng  
Tesseract là phiên bản 3.0.1.  
3
Phần mềm thương mại  
Hỗ trợ hơn 100 ngôn ngữ  
Có giao diện đồ họa  
Bộ nhận dạng Tesseract  
Hỗ trợ trên 40 ngôn ngữ và đang tăng dần  
Không hỗ trợ giao diện đồ họa (dùng  
Command Line để gõ lệnh)  
Hầu hết chỉ hỗ trợ trên nền tảng Hỗ trợ trên Windows, Linux, Mac OS  
Windows  
Độ chính xác cao mới đây  
Độ chính xác cao từ năm 1995  
Chi phí khá cao 130$ - 500 $  
Hoàn toàn miễn phí (mã nguồn mở)  
Bảng 2.1 So sánh phần mềm thương mại và Tesseract  
Vì Tesseract hiện nay là bộ thư viện mã nguồn mở hoàn toàn miễn phí nên trên  
thế giới đã có nhiều phần mềm nhận dạng ký tự quang học ra đời dựa trên bộ Tesseract  
với giao diện và các tính năng dễ sử dụng hơn so với giao diện đơn giản của Tesseract  
ban đầu như: VietOCR cho nhận dạng tiếng Việt, Tessenet2 bộ nhận diện Tesseract  
trên nền .Net của Microsoft, giao diện Java (Java GUI frontend) cho Tesseract…  
Ngôn ngữ  
Tổng số ký tự  
(triệu)  
Tổng số từ  
(triệu)  
Lỗi ký tự  
(%)  
Lỗi từ (%)  
Tiếng Anh  
39  
4
0.5  
3.72  
5.78  
Tiếng Nga  
213  
0.25  
26  
0.75  
3.77  
Tiếng Hoa giản  
thể  
không xác  
định  
không xác  
định  
Tiếng Hindi  
1.4  
0.33  
15.41  
69.44  
Bảng 2.2 Độ chính xác của Tesseract trên một số ngôn ngữ  
4
2.1.2 Kiến trúc hoạt động  
Đầu tiên, bộ nhận diện Tesseract sẽ nhận đầu vào là ảnh màu hoặc ảnh mức  
xám. Ảnh này sẽ được chuyển đến bộ phận phân tích ngưỡng thích ứng (adaptive  
thresholding) để cho ra ảnh nhị phân. Vì trước kia HP cũng đã phát triển bộ phận  
phân tích bố cục trang nên Tesseract không cần phải có thành phần đó và được thừa  
hưởng từ HP. Vì thế mà Tesseract nhận đầu vào là một ảnh nhị phân với các vùng đa  
giác tùy chọn đã được xác định.  
Ban đầu, Tesseract được thiết kế làm việc trên ảnh nhị phân sau đó chương  
trình được cải tiến để có thể nhận dạng cả ảnh màu và ảnh mức xám. Chính vì thế mà  
cần bộ phận phân tích ngưỡng thích ứng để chuyển đổi ảnh màu / ảnh mức xám sang  
ảnh nhị phân.  
Sau đó quá trình nhận dạng sẽ được thực hiện tuần tự theo từng bước.  
Bước đầu tiên là phân tích các thành phần liên thông. Kết quả của bước  
này sẽ là tạo ra các đường bao quanh các ký tự.  
Bước thứ hai là tìm hàng và tìm từ, kết quả của bước này cũng giống như  
bước trên sẽ tạo ra các vùng bao quanh các hàng chữ và ký tự chứa trong  
vùng văn bản.  
Bước tiếp theo sẽ là nhận dạng từ. Công đoạn nhận dạng từ sẽ được xử lý  
qua 2 giai đoạn. Giai đoạn đầu sẽ là nhận dạng các từ theo lượt. Các từ  
thỏa yêu cầu trong giai đoạn này sẽ được chuyển sang bộ phân loại thích  
ứng (adaptive classifier) để làm dữ liệu huấn luyện. Chính nhờ đó mà  
bộ phân loại thích ứng sẽ có khả năng nhận diện được chính xác hơn ở  
phần sau của trang. Sau khi bộ phân loại thích ứng đã học được các  
thông tin có ích từ giai đoạn đầu khi nhận dạng phần trên của trang thì  
giai đoạn thứ 2 của việc nhận dạng sẽ được thực hiện. Giai đoạn này sẽ  
quét hết toàn bộ trang, các từ không được nhận diện chính xác ở giai  
đoạn đầu sẽ được nhận diện lại lần nữa. Cuối cùng bộ nhận diện sẽ tổng  
hợp lại các thông tin ở trên và cho ra kết quả nhận diện hoàn chỉnh.  
5
2.1.3 Huấn luyện dữ liệu trên tesseract  
Tesseract ban đầu được thiết kế để nhận dạng các từ tiếng Anh trên ngôn ngữ  
hệ Latinh. Sau này, nhờ sự cố gắng của nhiều nhà phát triển mà các phiên bản của  
Tesseract đã có thể nhận diện các ngôn ngữ khác ngoài hệ Latinh như tiếng Trung,  
tiếng Nhật và tương thích với các ký tự trong bảng mã UTF-8. Việc nhận dạng các  
ngôn ngữ mới trên Tesseract có thể thực hiện được nhờ vào việc huấn luyện dữ liệu.  
Từ phiên bản 3.0 trở đi, Tesseract đã có thể hỗ trợ thêm nhiều dạng ngôn ngữ mới và  
mở rộng thêm việc huấn luyện theo font chữ. Bởi vì ban đầu, bộ Tesseract được huấn  
luyện để nhận diện từ chính xác nhất trên một số loại font mặc định, nếu sử dụng các  
font chữ khác để nhận diện thì có thể kết quả sẽ không có độ chính xác cao khi làm  
việc với các loại font được cài đặt sẵn trong dữ liệu huấn luyện. Để thực hiện quá trình  
huấn luyện thì ta phải sử dụng công cụ có sẵn của Tesseract. Mặc định trong luận văn  
này, sử dụng công cụ Tesseract 3.01 cho việc thực hiện huấn luyện ngôn ngữ và font  
mới.  
Để huấn luyện dữ liệu trên Tesseract (hoặc ngôn ngữ mới) thì ta cần một tập  
các tập tin dữ liệu chứa trong thư mục tessdata, sau đó kết hợp các tập tin này thành  
tập tin duy nhất. Các tập tin có trong thư mục tessdata có quy tắc đặt tên theo dạng:  
tên_ngôn_ngữ.tên_tập tin. Ví dụ các tập tin cần thiết khi thực hiện việc huấn luyện  
tiếng Anh:  
tessdata/eng.config.  
tessdata/eng.unicharset: Tập ký tự của ngôn ngữ huấn luyện.  
tessdata/eng.unicharambigs.  
tessdata/eng.inttemp: Danh mục cho tập hợp các ký tự.  
tessdata/eng.pffmtable: Tập tin dạng hộp – sử dụng để xác định ký tự có  
trong tập tin huấn luyện.  
tessdata/eng.normproto: Như tập tin pffmtable.  
tessdata/eng.punc-dawg.  
tessdata/eng.number-dawg.  
tessdata/eng.freq-dawg: Danh sách các từ tổng quát.  
6
tessdata/eng.word-dawg: Danh sách các từ thông thường.  
tessdata/eng.user-word: Danh sách từ của người dùng (tùy chọn có thể  
có hoặc không).  
Bước cuối cùng sẽ tổng hợp dữ liệu từ bước trên và phát sinh ra tập tin dữ liệu  
duy nhất có dạng:  
tessdata/eng.traineddata.  
Các tập tin cần thiết cho việc huấn luyện dữ liệu sẽ được phát sinh khi ta sử  
dụng công cụ có sẵn để qua quá trình huấn luyện.  
Tổng hợp lại ta có:  
1. Sinh hình ảnh huấn luyện  
2.Tạo các tập tin *.box  
3.Bắt đầu chạy huấn luyện Tesseract  
4.Clustering (tập hợp lại)  
5.Thêm dữ liệu từ điển (tùy biến)  
6.Tổ hợp kết quả lại với nhau:  
Trong việc ứng dụng Tesseract enginer cho nhận dạng ký hiệu toán học, thực  
chất các vấn đề khó khăn nhất nằm ở khâu huấn luyện hơn là các vấn đề về lập trình và  
tích hợp phần mềm.  
2.1.4 Quá trình huấn luyện ngôn ngữ và font mới  
Để trải qua quá trình huấn luyện ngôn ngữ hoặc loại font mới trên Tesseract ta  
cần thực hiện thông qua các giai đoạn sau:  
Phát sinh các tập tin hình ảnh cho việc huấn luyện:  
Đây là bước đầu tiên nhầm xác định tập ký tự sẽ được sử dụng trong việc huấn  
luyện. Trước hết ta cần chuẩn bị sẵn một tập tin văn bản chứa các dữ liệu huấn luyện  
(trường hợp cụ thể là một đoạn văn bản). Việc tạo ra tập tin huấn luyện cần theo các  
quy tắc sau:  
7
Bảo đảm số lần xuất hiện ít nhất của các ký tự trong mẫu từ khoảng 5 đến  
10 lần cho một ký tự.  
Nên có nhiều mẫu cho các từ xuất hiện thường xuyên, ít nhất là 20 lần.  
Các dữ liệu huấn luyện nên được chia theo kiểu font, mỗi tập tin huấn luyện  
chỉ nên chứa 1 loại font nhưng có thế huấn luyện nhiều loại font cho nhiều  
tập tin. Không nên kết hợp nhiều loại font trong riêng một tập tin huấn  
luyện.  
Sau khi đã chuẩn bị mẫu văn bản dùng cho việc huấn luyện thì ta cần phát  
sinh ra ảnh từ tập tin đó. Dùng các phần mềm để chuyển tập tin mẫu văn  
bản sang dạng tập tin ảnh hoặc in mẫu văn bản sau đó quét thành tập tin  
hình ảnh dạng .tif với độ phân giải là 300dpi. Tập tin cuối cùng trước khi  
thực hiện việc huấn luyện là tập tin ảnh dạng .tif.  
Tạo các tập tin dạng hộp .box:  
Một dạng tập tin để Tesseract có thể huấn luyện dựa trên các dữ liệu hình ảnh  
đã có bước đầu là tập tin dạng hộp – box. Tập tin dạng hộp là tập tin văn bản chứa 1  
dãy các ký tự tuần tự từ đầu đến cuối trong tập tin hình ảnh, mỗi hàng chứa thông tin  
của 1 ký tự, tọa độ và đường bao quanh ký tự đó trong tập tin ảnh.  
Để tạo ra tập tin dạng hộp ta sẽ dùng cách gõ lệnh (trên Windows là CMD và  
Linux là Terminal) sau (yêu cầu người dùng phải cài đặt công cụ Tesseract để có thể  
chạy được các lệnh này):  
Sau khi thực hiện câu lệnh trên thì ta sẽ tạo ra được các tập tin dạng hộp .box.  
Chạy công cụ Tesseract trên máy tính để thực hiện việc huấn luyện dữ liệu. Sau  
khi được tập tin .box thì chúng ta cần 1 trình chỉnh sửa tập tin dạng hộp để kiểm  
tra lại và chỉnh sửa lại các thông số của từng ký tự cho khớp với văn bản ban đầu  
trong tập tin ảnh huấn luyện. Ở đây nhóm em dùng phần mềm jTextBoxEditor  
để chỉnh sửa trực tiếp tập tin dạng hộp.  
Sau khi kiểm tra và chỉnh sửa lại các ký tự cho chính xác trong tập tin dạng hộp  
thì thực hiện lệnh tiếp theo:  
Nếu thành công thì tại giai đoạn này, Tesseract sẽ phát sinh ra tập tin .tr  
8
Ước lượng tập ký tự của ngôn ngữ cần huấn luyện: Tesseract cần biết hết  
các tập ký tự có thể xuất hiện trong dữ liệu. Ta dùng lệnh sau:  
Sau khi thực hiện, tập tin unicharset sẽ được tạo ra.  
Xác định kiểu font trong dữ liệu (từ phiên bản 3.0.1 trở đi):  
Đây là tính năng mới chỉ có từ phiên bản Tesseract 3.0.1 trở đi. Với tính  
năng này người dùng có thể huấn luyện dữ liệu với nhiều loại font khác nhau  
thay vì chỉ có thể dùng các font mặc định sẵn ở các phiên bản trước. Ta cần tạo  
tập tin font_properties để quy định thông số các kiểu font ta đã sử dụng trong các  
mẫu văn bản huấn luyện.  
Cấu trúc của tập tin font_properties là mỗi hàng chứa tên 1 loại font huấn luyện  
và các đặc tính của font đó: <tên loại font><in nghiêng><in đậm><bình thường><in  
hoa><fraktur> (đánh dấu có thuộc tính bằng bit 1 hoặc không có dùng bit 0).  
Ví dụ cấu trúc tập tin font_properties với dữ liệu huấn luyện là tiếng Anh:  
Gom nhóm dữ liệu:  
Tại giai đoạn này thì các đường nét khung của ký tự đã được rút trích ra và  
chúng ta cần gom nhóm lại các dữ liệu ban đầu để tạo ra mẫu thử (prototype).  
Hình dạng, đường nét của các ký tự sẽ được gom nhóm lại nhờ vào chương trình  
mftraining và cntraining có sẵn trong công cụ Tesseract:  
Với lệnh mftraining sẽ tạo ra tập tin dữ liệu: inttemp (chứa hình dạng mẫu),  
pffmtable và Microfeat nhưng ít khi sử dụng).  
Cuối cùng dùng công cụ cntraining sẽ tạo ra tập tin dữ liệu normproto.  
Tạo tập tin unicharambigs.  
Kết hợp các tập tin lại tạo thành tập tin huấn luyện dữ liệu: Cuối cùng  
sau khi đã có đủ các tập tin huấn luyện cần thiết (inttemp, pffmtable, normproto,  
Microfeat) thì ta đổi tên các tập tin lại cho đúng dạng với tiền tố lang. trước tên  
tập tin với lang là 3 ký tự đại diện cho ngôn ngữ huấn luyện theo chuẩn ISO 639-  
2
9
Kết quả là tạo ra tập tin lang.trainedata. Bỏ tập tin này vào thưc mục tessdata  
của Tesseract thì Tesseract đã có thể nhận diện được ngôn ngữ hoặc font chữ mới  
(theo lý thuyết).  
2.2 Thư viện Opencv  
2.2.1 Giới thiệu về thư viện Opencv  
OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thị  
giác máy với hơn 500 hàm và hơn 2500 các thuật toán đã được tối ưu về xử lý ảnh, và  
các vấn đề liên quan tới thị giác máy. OpenCV được thiết kế một cách tối ưu, sử dụng  
tối đa sứcmạnh của các dòng chip đa l.i… để thực hiện các phép tính toán trong thời  
gian thực, nghĩa là tốc độ đáp ứng của nó có thể đủ nhanh cho các ứng dụng thông  
thường. OpenCV là thư viện được thiết kế để chạy trên nhiều nền tảng khác nhau  
(cross-patform), nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac, iOS  
… Việc sử dụng thư viện OpenCV tuân theo các quy định về sử dụng phần mềm m.  
nguồn mở BSD do đó bạn có thể sử dụng thư viện này một cách miễn phí cho cả mục  
đích phi thương mại lẫn thương mại.  
Dự án về OpenCV được khởi động từ những năm 1999, đến năm 2000 nó được  
giới thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy và nhận dạng,  
tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức được công bố và năm  
2008 bản 1.1 (pre-release) mới được ra đời. Tháng 10 năm 2009, bản OpenCV thế hệ  
thứ hai ra đời (thường gọi là phiên bản 2.x), phiên bản này có giao diện của C++ (khác  
với phiên bản trước có giao diện của C) và có khá nhiều điểm khác biệt so với phiện  
bản thứ nhất.  
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bở Willow  
Garage, một phòng thí nghiệm chuyên nghiên cứu về công nghệ robot. Cho đến nay,  
OpenCV vẫn là thư viện mở, được phát triển bởi nguồn quỹ không lợi nhuận (none -  
profit foundation) và được sự hưởng ứng rất lớn của cộng đồng.  
2.2.2 Phiên bản opencv 1 và opencv 2  
Cho tới nay, trải qua hơn 6 năm từ lúc phiên bản OpenCV đầu tiên được công  
bố, đã có lần lượt nhiều phiên bản OpenCV ra đời, tuy nhiên có thể chia thư viện này  
thành hai bản chính dựa trên những đặc điểm khác biệt lớn nhất của chúng: phiên bản  
OpenCV thế hệ thứ nhất (hay còn gọi là phiên bản OpenCV 1.x) và phiên bản  
10  
OpenCV thứ hai (hay còn gọi là phiên bản OpenCV 2.x). Sau đây ta sẽ chỉ ra một số  
điểm khác biệt cơ bản giữa hai phiên bản này.  
OpenCV 1.x (bao gồm bản 1.0 và bản pre-release 1.1) dựa trên giao diện C, cấu  
trúc của một ảnh số dựa trên cấu trúc của IplImage, trong khi thư OpenCV 2.x  
dựa trên giao diện C++, cấu trúc của ảnh số, ma trận dựa trên cấu trúc của  
cv::Mat.  
Trong OpenCV 1.x, người sử dụng phải hoàn toàn quản lý bộ nhớ của các đối  
tượng, nghĩa là khi một đối tượng mới được tạo ra, ta phải luôn chú . để giải  
phóng nó khi không còn sử dụng nữa (trong nhiều trường hợp có thể sẽ bị tràn  
bộ nhớ nếu không chú . đều này), trong khi thư viện OpenCV 2.x việc quản lý  
bộ nhớ trở nên dễ dàng hơn nhờ các hàm hủy các các lớp đối tượng trong  
OpenCV 2.x đã thực hiện điều này khi một đối tượng không còn được sử dụng  
nữa.  
Việc viết các dòng lệnh để thực hiện cùng một chức năng trong OpenCV 2.x là  
dễ dàng hơn nhiều so với OpenCV 1.x, một phần là là giao diện C++ có phần  
dễ hiểu hơn so với C, một phần là các hàm trong OpenCV 2.x đã được tối ưu  
hóa nhiều bước trung gian không cần thiết về mặt giao diện người sử dụng.  
Thư viện OpenCV 1.x tuy chứa một lượng lớn hàm xử lý và thuật toán, tuy  
nhiên nó vẫn ở dạng sơ khai. Thư viện OpenCV 2.x đã được bổ xung khá nhiều  
hàm, thuật toán và được tối ưu khá nhiều đặc biệt trong các khía cạnh về phát  
hiện đối tượng (detection), nhận dạng đối tượng (partten regconition) và theo  
dỗi đối tượng (tracking). Hơn thế nữa, tuy có giao diện là C++ nhưng OpenCV  
2.x vẫn dữ một phần giao diện C để tương thích với các phiên bản của OpenCV  
1.x …  
Từ một số đặc điểm trên ta có thể thấy rằng thư viện OpenCV phiên bản 2.x là có  
nhiều điểm nổi trội hơn so với phiên bản 1.x, Tuy nhiên trong một số trường hợp như  
ở các hệ thống nhúng khi mà trình dịch chỉ đơn thuần chấp nhận ngôn ngữ C thì phiển  
bản 1.x vẫn còn giá trị. Trong cuốn sách này, các nội dung cài đặt, thuật toán, ứng  
dụng … chỉ dành cho OpenCV phiên bản 2.x trên nền tảng hệ điều hành Window.  
OpenCV rất đa dạng, nó hỗ trợ rất nhiểu hệ điểu hành như: Window, Linux và  
MacOSX.  
11  
Tải về để xem bản đầy đủ
pdf 44 trang yennguyen 15441 Free
Bạn đang xem 20 trang mẫu của tài liệu "Báo cáo Đồ án Xây dựng phần mềm nhận dạng ký tự quang học sử dụng mã nguồn mở", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbao_cao_do_an_xay_dung_phan_mem_nhan_dang_ky_tu_quang_hoc_su.pdf