Tải bản đầy đủ (.docx) (31 trang)

Báo cáo chuyển đổi file ảnh sang file văn bản

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (621.15 KB, 31 trang )

LỜI CẢM ƠN

Em xin chân thành cảm ơn các thầy, cô giáo trong Khoa Công nghệ thông
tin, trường Đại học Điện Lực, đã tạo điều kiện cho em thực hiện đề tài này.
Xin cảm ơn cô giáo Ts. Nguyễn Thị Thu Hà đã tận tình hướng dẫn, chỉ bảo
nhóm em trong suốt thời gian thực hiện đề tài. Trong thời gian được làm việc với
thầy, em không những học hỏi được nhiều kiến thức bổ ích mà còn học được tinh
thần làm việc, thái độ nghiên cứu khoa học nghiêm túc của thầy.
Xin gửi lời cảm ơn chân thành đến gia đình, và bè bạn vì đã 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.
Mặc dù đã cố gắng hoàn thiện đồ án với tất cả sự nỗ lực của bản thân, nhưng
chắc chắn không thể tránh khỏi những thiếu sót. Kính mong quý Thầy Cô tận tình
chỉ bảo.
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 quý báu của tất cả mọi người

Hà Nội, tháng 12 năm 2014
Sinh viên thực hiện


NHẬN XÉT

·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································


·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································
·········································································································


MỤC LỤC

DANH MỤC HÌNH

DANH MỤC BẢNG


CHƯƠNG 1: TỔNG QUAN VỀ HỌC MÁY
1.1. Giới Thiệu Về Học Máy
Học máy, có tài liệu gọi là Máy học, (tiếng Anh: machine learning) là một
lĩnh vực của trí tuệ nhân tạo liên quan đến việc phát triển các kĩ thuật cho phép các
máy tính có thể "học". Cụ thể hơn, học máy là một phương pháp để tạo ra các
chương trình máy tính bằng việc phân tích các tập dữ liệu. Học máy có liên quan
lớn đến thống kê, vì cả hai lĩnh vực đều nghiên cứu việc phân tích dữ liệu, nhưng
khác với thống kê, học máy tập trung vào sự phức tạp của các giải thuật trong việc
thực thi tính toán. Nhiều bài toán suy luận được xếp vào loại bài toán NP-khó, vì
thế một phần của học máy là nghiên cứu sự phát triển các giải thuật suy luận xấp xỉ
mà có thể xử lí được. Học máy có tính ứng dụng rất cao bao gồm máy truy tìm dữ
liệu, chẩn đoán y khoa, phát hiện thẻ tín dụng giả, phân tích thị trường chứng

khoán, phân loại các chuỗi DNA, nhận dạng tiếng nói và chữ viết, dịch tự động,
chơi trò chơi và cử động rô-bốt (robot locomotion).
Học máy có liên quan lớn đến thống kê, vì cả hai lĩnh vực đều nghiên cứu
việc phân tích dữ liệu, nhưng khác với thống kê, học máy tập trung vào sự phức tạp
của các giải thuật trong việc thực thi tính toán
Tương tác với con người
Một số hệ thống học máy nỗ lực loại bỏ nhu cầu trực giác của con người
trong việc phân tích dữ liệu, trong khi các hệ thống khác hướng đến việc tăng sự
cộng tác giữa người và máy. Không thể loại bỏ hoàn toàn tác động của con người vì
các nhà thiết kế hệ thống phải chỉ định cách biểu diễn của dữ liệu và những cơ chế
nào sẽ được dùng để tìm kiếm các đặc tính của dữ liệu. Học máy có thể được xem là
một nỗ lực để tự động hóa một số phần của phương pháp khoa học. Một số nhà
nghiên cứu học máy tạo ra các phương pháp bên trong các khuôn khổ của thống kê
Bayes.
1.2 Các Loại Giải Thuật
Các thuật toán học máy được phân loại theo kết quả mong muốn của thuật
toán. Các loại thuật toán thường dùng bao gồm:

4


Học có giám sát -- trong đó, thuật toán tạo ra một hàm ánh xạ dữ liệu vào tới
kết quả mong muốn. Một phát biểu chuẩn về một việc học có giám sát là bàitoán
phân loại: chương trình cần học (cách xấp xỉ biểu hiện của) một hàm ánh xạ một
vector [X1, X2, ..., Xn] tới một vài lớp bằng cách xem xét một số mẫu dữ liệu kết
quả của hàm đó.
• Học không giám sát -- mô hình hóa một tập dữ liệu, không có sẵn các
ví dụ đã được gắn nhãn.
• Học nửa giám sát -- kết hợp các ví dụ có gắn nhãn và không gắn nhãn
để sinh một hàm hoặc một bộ phân loại thích hợp.

• Học tăng cường -- trong đó, thuật toán học một chính sách hành động
tùy theo các quan sát về thế giới. Mỗi hành động đều có tác động tới
môi trường, và môi trường cung cấp thông tin phản hồi để hướng dẫn
cho thuật toán của quá trình học.
• Chuyển đổi -- tương tự học có giám sát nhưng không xây dựng hàm
một cách rõ ràng. Thay vì thế, cố gắng đoán kết quả mới dựa vào các
dữ liệu huấn luyện, kết quả huấn luyện, và dữ liệu thử nghiệm có sẵn
trong quá trình huấn luyện.
• Học cách học -- trong đó thuật toán học thiên kiến quy nạp của chính
mình, dựa theo các kinh nghiệm đã gặp.
Phân tích hiệu quả các thuật toán học máy là một nhánh của ngành thống kê,
được biết với tên lý thuyết học điện toán. Các chủ đề về học máy
Mô hình hóa các hàm mật độ xác suất điều kiện: hồi quy và phân loại
o Mạng nơ-ron
o Cây quyết định
o Lập trình biểu thức gen
o Lập trình di truyền
o Hồi quy quá trình Gauss
o Phân tích biệt thức tuyến tính
o k láng giềng gần nhất
o Độ dài thông điệp tối thiểu
o Cảm tri nguyên
o Hàm cơ sở xuyên tâm
o Máy hỗ trợ vector
• Mô hình hóa các hàm mật độ xác suất qua các mô hình phát sinh:


5



Thuật toán cực đại kì vọng
Các mô hình đồ họa gồm mạng Bayes và mạng Markov
Ánh xạ topo phát sinh
• Các kỹ thuật suy luận xấp xỉ đúng:
o Chuỗi Markov phương pháp Monte Carlo
o Phương pháp biến thiên
• Tối ưu hóa: hầu hết các phương pháp trên đều sử dụng tối ưu hóa hoặc là các
thể hiện của các thuật toán tối ưu hóa.
o
o
o

1.3. Ứng Dụng Học Máy
Các ứng dụng Học máy bao gồm:






Máy truy tìm dữ liệu.
Chẩn đoán y khoa.
Phát hiện thẻ tín dụng giả.
Phân tích thị trường chứng khoán.
Phân loại các chuỗi DNA, nhận dạng tiếng nói và chữ viết, dịch tự động,
chơi trò chơi và cử động rô-bốt (robot locomotion).

1.4. Các Ví Dụ Học Máy
 Bài toán lọc các trang web theo sở thích của một người dung.


T: Dự án (để lọc) xem những trang web nào mà một người dùng cụ thể thích
đọc.
P: Tỷ lệ (%) các trang web được dự đoán đúng.
E: Một tập các trang web mà người dùng đã chỉ định là thích đọc và một tập
các trang web mà anh ta chỉ định là không thích đọc.

6


Hình 1.1: Lọc các trang web theo sở thích
 Bài toán phân loại các trang web theo các chủ đề.

T: Phân loại các trang web theo các chủ đề đã định trước.
P: Tỷ lệ (%) các trang web được phân loại chính xác.
E: Một tập các trang web, trong đó mỗi trang web gắn với một chủ đề.

Hình 1.2: Phân loại các trang web theo chủ đề
 Bài toán nhận dạng chữ viết tay.

T: Nhận dạng và phân loại các từ trong các ảnh chữ viết tay.
P: Tỷ lệ (%) các từ được nhận dạng và phân loại đúng.
E: Một tập các ảnh chữ viết tay, trong đó mỗi ảnh được gắn với một định
danh của một từ.

7


Hình 1.3: Nhận dạng chữ viết tay
 Bài toán robot lái xe tự động.


T: Robot (được trang bị các camera quan sát) lái xe tự động trên đường cao
tốc.
P: Khoảng cách trung bình mà robot có thể lái xe tự động trước khi xảy ra
lỗi.
E: Một tập các ví dụ được ghi lại khi quan sát một người lái xe trên đường
cao ốc, trong đó mỗi ví dụ gồm một chuỗi các ảnh và các lệnh điều khiển.

Hình 1.4: Robot lái xe tự động
1.5. Học Giám Sát
Học có giám sát là một kĩ thuật của ngành học máy để xây dựng một hàm
(function) từ dữ liệu huấn luyện. Dữ liệu huấn luyện bao gồm các cặp gồm đối
tượng đầu vào (thường dạng vec-tơ), và đầu ra mong muốn. Đầu ra của một hàm có
thể là một giá trị liên tục (gọi là hồi qui), hay có thể là dự đoán một nhãn phân loại
cho một đối tượng đầu vào (gọi là phân loại). Nhiệm vụ của chương trình học có

8


giám sát là dự đoán giá trị của hàm cho một đối tượng bất kì là đầu vào hợp lệ, sau
khi đã xem xét một số ví dụ huấn luyện (nghĩa là, các cặp đầu vào và đầu ra tương
ứng). Để đạt được điều này, chương trình học phải tổng quát hóa từ các dữ liệu sẵn
có để dự đoán được những tình huống chưa gặp phải theo một cách "hợp lí" (xem
thiên kiến qui nạp - inductive bias).
So sánh với học không có giám sát
Học có giám sát có thể tạo ra 2 loại mô hình. Phổ biến nhất, học có giám sát
tạo ra một mô hình toàn cục (global model) để ánh xạ đối tượng đầu vào đến đầu ra
mong muốn. Tuy nhiên, trong một số trường hợp, việc ánh xạ được thực hiện dưới
dạng một tập các mô hình cục bộ (như trong phương pháp lập luận theo tình huống
(case-based reasoning) hay giải thuật láng giềng gần nhất).
Để có thể giải quyết một bài toán nào đó của học có giám sát (ví dụ: học để

nhận dạng chữ viết tay) người ta phải xem xét nhiều bước khác nhau:
Xác định loại của các ví dụ huấn luyện. Trước khi làm bất cứ điều gì, người
kĩ sư nên quyết định loại dữ liệu nào sẽ được sử dụng làm ví dụ. Chẳng hạn, đó có
thể là một kí tự viết tay đơn lẻ, toàn bộ một từ viết tay, hay toàn bộ một dòng chữ
viết tay.
Thu thập tập huấn luyện. Tập huấn luyện cần đặc trưng cho thực tế sử dụng
của hàm chức năng. Vì thế, một tập các đối tượng đầu vào được thu thập và đầu ra
tương ứng được thu thập, hoặc từ các chuyên gia hoặc từ việc đo đạc tính toán.
Xác định việc biểu diễn các đặc trưng đầu vào cho hàm chức năng cần tìm.
Sự chính xác của hàm chức năng phụ thuộc lớn vào cách các đối tượng đầu vào
được biểu diễn. Thông thường, đối tượng đầu vào được chuyển đổi thành một vectơ đặc trưng, chứa một số các đặc trưng nhằm mô tả cho đối tượng đó. Số lượng các
đặc trưng không nên quá lớn, do sự bùng nổ tổ hợp (curse of dimensionality);
nhưng phải đủ lớn để dự đoán chính xác đầu ra.
Xác định cấu trúc của hàm chức năng cần tìm và giải thuật học tương ứng.
Ví dụ, người kĩ sư có thể lựa chọn việc sử dụng mạng nơ-ron nhân tạo hay cây
quyết định.

9


Hoàn thiện thiết kế. Người kĩ sư sẽ chạy giải thuật học từ tập huấn luyện thu
thập được. Các tham số của giải thuật học có thể được điều chỉnh bằng cách tối ưu
hóa hiệu năng trên một tập con (gọi là tập kiểm chứng -validation set) của tập huấn
luyện, hay thông qua kiểm chứng chéo (cross-validation). Sau khi học và điều chỉnh
tham số, hiệu năng của giải thuật có thể được đo đạc trên một tập kiểm tra độc lập
với tập huấn luyện.
1.6. Học Không Giám Sát
Học không có giám sát (tiếng Anh là unsupervised learning) là một phương
pháp của ngành học máy nhằm tìm ra một mô hình mà phù hợp với các quan sát.
Nó khác biệt với học có giám sát ở chỗ là đầu ra đúng tương ứng cho mỗi đầu vào

là không biết trước. Trong học không có giám sát, một tập dữ liệu đầu vào được thu
thập. Học không có giám sát thường đối xử với các đối tượng đầu vào như là một
tập các biến ngẫu nhiên. Sau đó, một mô hình mật độ kết hợp sẽ được xây dựng cho
tập dữ liệu đó.
Học không có giám sát có thể được dùng kết hợp với suy diễn Bayes
(Bayesian inference) để cho ra xác suất có điều kiện (nghĩa là học có giám sát) cho
bất kì biến ngẫu nhiên nào khi biết trước các biến khác.
Học không có giám sát cũng hữu ích cho việc nén dữ liệu: về cơ bản, mọi
giải thuật nén dữ liệu hoặc là dựa vào một phân bố xác suất trên một tập đầu vào
một cách tường minh hay không tường minh.
Một dạng khác của học không có giám sát là phân mảnh (data clustering), nó
đôi khi không mang tính xác suất. Xem thêm phân tích khái niệm hình thức (formal
concept analysis).

10


CHƯƠNG 2: BỘ NHẬN DẠNG KÝ TỰ QUANG HỌC TESSERACT
2.1. Giới Thiệu Về Bộ Nhận Dạng Ký Tự Quang Học Tesseract
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.
Phầ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

11


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ự

Tổng số từ

Lỗi ký tự

(triệu)

(triệu)


(%)

Lỗi từ (%)

Tiếng Anh

39

4

0.5

3.72

Tiếng Nga

213

26

0.75

5.78

Tiếng Hoa giản

0.25

không xác


3.77

không xác

thể

định

Tiếng Hindi

1.4

0.33

định
15.41

69.44

Bảng 2.2: Độ chính xác của Tesseract trên một số ngôn ngữ
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

12



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.
2.1.3. Xác định dòng và từ
Xác định dòng : mục đích của bước này là nhận dạng các dòng của các hình
ảnh bị nghiêng, giúp giảm sự mất thông tin khi nhận dạng ảnh nghiêng. Các bộ

phận quan trọng của quá trình này là lọc dãy màu (còn được gọi là blobs) và xây
dựng dòng. Bước này cũng giúp loại bỏ các văn bản có drop-cap.
Thiết lập dòng cơ sở: khi dòng văn bản được tìm thấy, các dòng cơ sở được
thiết lập chính xác hơn bằng cách sử dụng một đường có tên là spline toàn phương

13


(là dòng mà được kết hợp từ nhiều đoạn). Nó giúp Tesseract xử lý các trang có
đường cơ sở là đường cong.
Các dòng cơ sở được thiết lập bằng cách phân vùng các blobs thành các
nhóm có thể thay thế thích hợp liên tục trong đường cơ sở thẳng ban đầu. Một
spline toàn phương được thiết lập cho phân vùng dày đặc nhất, (giả định là đường
cơ sở) của một hình có phương ít nhất. Spline có lợi thế là tính toán ổn định, nhược
điểm là sự gián đoạn có thể xảy ra khi nhiều phân đoạn spline được yêu cầu.
Cắt nhỏ từ : Tesseract sẽ xác định xem có các ký tự dính với nhau trong một
từ hay không. Nếu có nó sẽ cắt nhỏ các ký tự ra thành các ký tự riêng lẻ.
Nhận dạng khoảng cách giữa chữ hoặc số: xác định khoảng cách giữa các
số hoặc giữa các chữ là một vấn đề khá phức tạp. Tesseract giải quyết những vấn đề
này bằng cách đo khoảng cách trong một phạm vi hạn chế theo chiều dọc giữa dòng
cơ sở và dòng trung bình.
Nhận dạng từ : quá trình nhận dạng một từ là quá trình phân tích một từ
được chia ra thành các ký tự như thế nào.
Khi kết quả xuất ra một từ mà nó không thỏa mãn nhu cầu thì Teseract cố
gắng cải thiện kết quả này bằng cách cắt nhỏ các từ có nghĩa không tốt nhất. Nếu
việc cắt nhỏ không làm tăng chất lượng từ thì nó sẽ phục hồi lại từ trước đó.
2.1.4. 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.

14


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.
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.
2.1.5. 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

15


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:


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:

16


Nếu thành công thì tại giai đoạn này, Tesseract sẽ phát sinh ra tập tin .tr
 Ướ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>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.Thực hiện lệnh sau:


17


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:

18


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 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

19


Window. OpenCV rất đa dạng, nó hỗ trợ rất nhiểu hệ điểu hành như: Window,
Linux và MacOSX.
2.2.3. Những điểm đặc trưng
OpenCV có rất nhiều chức năng. Bạn có thể bất ngờ khi lần đầu tiếp xúc với
nó. Tuy nhiên, bạn sẽ chỉ cần một vài lần đầu để khởi động nó
Sau đây là những tóm tắt cơ bản về hệ thống các về chức năng của các hàm
trong OpenCV



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 computervision 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ác má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úc 3D), 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 ( machine
learning) 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ẵn
trong 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.


20

Cách thức tạo và phân tích ảnh nhị phân


Ả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 khi chú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
camera riê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án hì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ững chứ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ột chươ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ững giao 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ôi trườ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ển quá 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ánh một cách hiệu quả.


21

Khả năng tồn tại lâu dài của dữ liệu(Data persistence)


Những phương pháp này cung cấp các giao diện một cách thuận lợi để lưu

trữ các dạng khác nhau của dữ liệu vào đĩa để có thể khôi phục khi cần thiết.
2.2.4. Cách tổ chức opencv
Cấu trúc OpenCV gồm nhiều module.
CXCORE bao gồm các dạng dữ liệu cơ bản rõ rang. Ví dụ cấu trúc dự liệu
về ảnh, điểm, hình chữ nhật được xác định trong file cxtypes.h. CXCORE chứa các
phép toán đại số tuyến tính và thống kê, các hàm lưu trữ lâu dài ( persistence fun…)
và các lỗi thao tác. Có điều lạ lung thay là các hàm đồ họa được cho việc vẽ ảnh
cũng được lưu trữ tại đây.
CV chứa đựng quá trình xử lý ảnh và các phương pháp đánh giá sơ bộ kích
thước ảnh. Những hàm tính toán hình học cũng được lưu trữ tại đây.
CVAUX được mô tả trong văn bản của OpenCV như là modul cũ và chỉ
dùng để thí nghiệm. Tuy nhiên, giao diện đơn giản nhất cho nhận dạng mặt được
nằm trong modul này. Những mã nguồn nằm trong module này rất phù hợp cho
việc nhận dạng mặt và chúng được sử dụng rộng rãi cho mục đích này.
ML chứa đựng giao diện machine- learning:
Những hàm còn lại được nằm trong HighGUI và CVCAM. Cả hai đều nẳm ở
thư mục có tên “otherlibs”, sử dụng chúng rất dễ gặp lỗi. Vì rằng HighGUI chứa các
thư viện vào ra cơ bản , bạn sẽ muốn chắc chắn hơn, đừng bỏ sót nó.Nó cũng chứa
đựng nhiều cửa sổ đa chức năng.
CVCAM là thư viện chứa các hàm truy nhập video thông qua DirectX trên
môi trường Window 32 bit. Tuy nhiên, HighGUI cũng có các giao diện video.Trong
bài báo này, tôi chỉ xem xét HighGUI. Chúng đơn giản, làm việc trên nhiều môi
trường. Nếu bạn sử dụng Window XP hoặc 2000, bạn có thể làm tăng hiểu quả của
nó bằng cách chuyển qua giao diện CVCAM, nhưng học OpenCV sẽ đơn giản hơn
khi dùng HighGUI.

22


CHƯƠNG 3: PROJECT CHUYỂN ĐỔI VĂN BẢN TỪ FILE ẢNH SANG

FILE VĂN BẢN
3.1. Giới Thiệu
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, chúng 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.
3.2. Demo Sản Phẩm

Hình 4.1: Giao diện chương trình
3.3. Một Số Thử Nghiệm
Chúng tôi tiến hành thử nghiệm trên ba loại hình ảnh: Hình chụp từ chữ viết
tay (1), hình chụp từ chữ đánh máy (2) và hình từ tập tin pdf (3).
3.3.1. Hình chữ viết tay

23


Hình 4.2: Một ví dụ về hình chứa chữ viết tay
- Kết quả:
)CHAO
- Tỉ lệ sai: 1/5 chiếm 20%.
3.3.2. Hình chữ đánh máy

Hình 4.3: Một ví dụ về hình chứa chữ đánh máy
- Kết quả:
ESTA67

E8767
UNA45G7
PRUEBA5887

24


- Tỉ lệ sai: 1/33 chiếm 3.03%.
3.3.3. Hình ảnh tập tin ảnh có chữ tiếng việt

Hình 4.4: Một ví dụ về hình dạng chữ tiếng việt
- Kết quả:
Lời NÒI ĐẤU

Hiện nay công nghệ hiện đại đã giúp giám tải quá trinh xử lý, lim trữ, trưyền tái
hình ánh tái liệu hiện quả. Các công ty thường phát triển hướng đến văn phòng
không cần
giấy tờ, một số lượng lớn các tài liệu in được số hoá và lim tiũ như hình ánh trong
cơ sở
dữ liệu. SụỘ phổ biến, tầm quan ìirọng cúá hình ánh tài liệu như nguồn thôngtin
gốc. Cùng
với đó nhu cầu về việc n'it trích từ ngữ từ hình ánh đang ngày cáng phát triển, bên
cạnh sự
giá 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
(Opticál
Chárácter 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úá chữ viết táỵ hoặc đánh máy thành các ký tự đã được mà hóa trong
máy
tính.


25


×