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. Cần demo liên hệ hoapham.epu.edu@gmail.com
Trang 1TẬ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Ở
Trang 2LỜ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ự quanghọc (Optical Character Recognition) hay còn được gọi tắt là OCR Đây là một côngnghệ 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 takhô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ụpcủ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ôngnghệ 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ệnviệc rút trích các văn bản từ tập tin hình ảnh
Trang 3Tê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.
Trang 4LỜ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ệnLự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 emqua những buổi trao đổi Trong thời gian được học tập và thực hành dưới sự hướngdẫ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ữnglờ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ànthà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ủacá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ópcủ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àosứ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ếnthứ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
Trang 5MỤ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
Trang 62.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
Trang 7DANH 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
Trang 8DANH 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 Tên tiếng Anh Tên tiếng Việt
OCR Optical Character
Recognition
Nhận dạng ký tự bằng quang học.
OPENCV Open Source Computer
Vision
Một thư viện mã nguồn mở phục vụ cho việc 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ể
Trang 9Use-case Biểu diễn một chức năng xác định của
Entity class
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 quanhProcedure 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
Trang 10CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI1.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ácphươ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ệcrú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ợpnhư 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ướngrobot (Optical Character Recognition Based Auto Navigation of Robot) Việc địnhhướ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ếptheo của robot Định hướng tự động của các robot trong một vùng lớn đòi hỏi nhiềubả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òncho 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ênthị 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 chiathà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 đòihỏ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ănbả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 đượclư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ộtloạ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ácthiế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áytí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ộttrong những nền tảng quan trọng, đó là Tesseract
Trang 111.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ọngtrong 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áptrí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ốtcác văn bản từ tập tin hình ảnh chứa văn bản được đánh máy
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
Trang 12CHƯƠNG 2 TÌM HIỂU HỆ THỐNG MÃ NGUỒN MỞ
TESSERACT OCR2.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 đó
Sau đó, dự án này cùng với sự cộng tác của bộ phận máy quét HP ở bangColorado đã đạ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ảnphẩ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 trungcả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 đitham 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 sovới các phần mềm OCR lúc bấy giờ Tuy nhiên, Tesseract đã không thể trở thành mộtsản phẩm thương mại hoàn chỉnh được và vào năm 2005, HP đã chuyển Tesseractsang mã nguồn mở và được hãng Google tài trợ Tesseract cho đến nay vẫn được nhiềunhà 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ạngTesseract là phiên bản 3.0.1
Trang 13Phần mềm thương mại Bộ nhận dạng Tesseract
Hỗ trợ hơn 100 ngôn ngữ Hỗ trợ trên 40 ngôn ngữ và đang tăng dần
Có giao diện đồ họa 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
Windows
Hỗ trợ trên Windows, Linux, Mac OS
Độ 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ênthế 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ộ Tesseractvớ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 Tesseractban đầu như: VietOCR cho nhận dạng tiếng Việt, Tessenet2 bộ nhận diện Tesseracttrê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ự (%)
Bảng 2.2 Độ chính xác của Tesseract trên một số ngôn ngữ
Trang 142.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ừahưở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 đagiá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ươngtrì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ướcnà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 trongvù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ácthô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ổnghợp lại các thông tin ở trên và cho ra kết quả nhận diện hoàn chỉnh
Trang 152.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ủaTesseract đã 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ácngô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ấnluyệ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ácfont chữ khác để nhận diện thì có thể kết quả sẽ không có độ chính xác cao khi làmviệ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ìnhhuấ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ănnà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à fontmớ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
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.
tessdata/eng.word-dawg: Danh sách các từ thông thường.
Trang 16 tessdata/eng.user-word: Danh sách từ của người dùng (tùy chọn có thể
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ựcchấ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 tacầ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ấnluyệ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ácquy tắc sau:
Trang 17 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ệnchỉ nên chứa 1 loại font nhưng có thế huấn luyện nhiều loại font cho nhiềutập tin Không nên kết hợp nhiều loại font trong riêng một tập tin huấnluyệ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átsinh ra ảnh từ tập tin đó Dùng các phần mềm để chuyển tập tin mẫu vănbả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 1dã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 tincủ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 Saukhi đượ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ểmtra 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ộpthì 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
Trang 18 Ước lượng tập ký tự của ngôn ngữ cần huấn luyện: Tesseract cần biết hếtcá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ínhnă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 nhauthay 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ạotập tin font_properties để quy định thông số các kiểu font ta đã sử dụng trong cácmẫ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><inhoa><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ùngsau 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 2
Trang 19639-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ụngtố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ờigian thực, nghĩa là tốc độ đáp ứng của nó có thể đủ nhanh cho các ứng dụng thôngthườ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ó đượcgiớ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ácvớ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ệnbản thứ nhất
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bở WillowGarage, 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àythà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ảnOpenCV thế hệ thứ nhất (hay còn gọi là phiên bản OpenCV 1.x) và phiên bảnOpenCV 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
Trang 20 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ấutrúc của một ảnh số dựa trên cấu trúc của IplImage, trong khi thư OpenCV 2.xdự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ủacv::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 đốitượng, nghĩa là khi một đối tượng mới được tạo ra, ta phải luôn chú để giảiphó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 trongOpenCV 2.x đã thực hiện điều này khi một đối tượng không còn được sử dụngnữ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 ưuhó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, tuynhiên nó vẫn ở dạng sơ khai Thư viện OpenCV 2.x đã được bổ xung khá nhiềuhà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áthiện đối tượng (detection), nhận dạng đối tượng (partten regconition) và theodỗi đối tượng (tracking) Hơn thế nữa, tuy có giao diện là C++ nhưng OpenCV2.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 OpenCV1.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ểnbả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, ứngdụ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
Trang 21 Image and Video I/O
Những giao diện này sẽ giúp bạn đọc được dự liệu ảnh từ file hoặc trực tiếp từvideo Bạn cũng có thể tạo các file ảnh và video với giao diện này
Thị giác máy và các thuật toán xử lý ảnh ( General computer-vision and image-processing algorithms(mid – and low level APIs))
Sử dụng những giao diện này, bạn có thể thực hành với rất nhiều chuẩn thị giácmáy mà không cần phải có mã nguồn của chúng
Modul thị giác máy ở cấp độ cao
OpenCV gồm một vài tác dụng ở cấp độ cao Thêm vào nhận dạng mặt, dò tìm,theo dõi Nó bao gồm luồng thị giác (sử dụng camera di động để xác định cấu trúc3D), kích cỡ camera và âm thanh nổi
AI and machine-learning
Các ứng dụng của thị giác máy thường yêu cầu máy móc phải học (machinelearning) hoặc các hình thức trí tuệ nhân tạo khác Một vài trong số chúng là có sẵntrong gói OpenCV
Lấy mẫu ảnh và phép biến đổi
Nó thường rất tốt cho quá trình xử lý một nhóm phần tử ảnh như là một đơn vị.OpenCV bao gồm lấy tách ra, lấy mẫu ngẫu nhiên, phục chế, xoay ảnh, làm cong ảnh( warping), thay đổi hiệu ứng của ảnh
Cách thức tạo và phân tích ảnh nhị phân
Trang 22Ảnh nhị phân thường xuyên được dùng trong các hệ thống kiểm tra có khuyếtđiểm hình dạng hoặc các bộ phận quan trọng Sự biểu diễn ảnh cũng rất thuận tiện khichúng ta biết rõ vật thể cần bắt.
Cách thức cho tính toán thông tin 3D (methods for computing 3D information)
Những hàm này rất có ích khi cần sắp xếp và xác định với một khối lập thể(with a stereo rig) hoặc với không gian nhìn phưc tạp (multiple views) từ một camerariêng
Các phép toán cho xử lý ảnh, thị giác máy và biểu diễn ảnh( image interpretation)
OpenCV sử dụng các phép toán phổ biến như: đại số học, thống kê và tính toánhình học
Đồ họa
Những giao diện này giúp bạn viết chữ và vẽ trên hình ảnh Thêm vào đó nhữngchức năng này được sử dụng nhiểu trong ghi nhãn và đánh dấu Ví dụ nếu bạn viết mộtchương trình cần nhận dạng nhiểu đối tượng thì nó sẽ rất có ích cho tạo nhãn ảnh( label image) với kích thước và vị trí
Phương thức GUI
OpenCV bao gồm cửa sổ giao diện của chính bản thân nó Trong khi đó nhữnggiao diện này được so sánh giới hạn với khả năng có thể thực hiện trong mỗi môitrường Chúng cung cấp những môi trường API đa phương tiện và đơn giản để hiện thịhình ảnh, cho phép người dùng nhập dữ liệu thông qua chuột , bàn phím và điều khiểnquá trính
Cấu trúc dữ liệu và giải thuật
Với những giao diện này bạn có thể giữ lại, tìm kiếm, lưu và cách danh mụcđiều khiển, các tuyển tập(cũng như các tập hợp lệnh được gọi), đồ họa và sơ đồ nhánhmột cách hiệu quả
Khả năng tồn tại lâu dài của dữ liệu (Data persistence)