TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
──────── * ───────
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
ỨNG DỤNG NHẬN DẠNG DANH THIẾP
TIẾNG VIỆT VÀ CẬP NHẬT THÔNG TIN
DANH BẠ TRÊN ANDROID
Sinh viên thực hiện : Trần Đức Hải
Lớp CNPM – K53
Giáo viên hướng dẫn: TS. Vũ Thị Hương Giang
HÀ NỘI 6-2013
TR
ẦN
ĐỨ
C
HẢ
I
CN
PM
K5
3
KH
OA
CÔ
NG
NG
HỆ
TH
ÔN
công trình nào khác.
Hà Nội, ngày tháng năm
Tác giả ĐATN
Trần Đức Hải
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 2
5. Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảo
vệ:
Hà Nội, ngày tháng năm
Giáo viên hướng dẫn
TS. Vũ Thị Hương Giang
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 3
TÓM TẮT ĐỒ ÁN
Danh thiếp là một tấm thẻ nhỏ có chứa thông tin liên lạc của một cá nhân hay của
một tổ chức. Danh thiếp được sử dụng để giới thiệu thông tin liên lạc của cá nhân, của tổ
chức trong những buổi gặp mặt đầu tiên. Ngày nay, danh thiếp được mọi người sử dụng
rộng rãi, từ những tổ chức, công ty, cửa hàng buôn bán cho tới những cá nhân muốn giới
thiệu thông tin liên lạc một cách đầy đủ nhanh chóng.
Thế nhưng, việc quản lý và sử dụng danh thiếp gặp nhiều khó khăn khi mà một
người nhận được nhiều danh thiếp. Khi họ muốn tìm thông tin liên lạc trên số danh thiếp
này là rất mất thời gian. Việc tìm kiếm sẽ đơn giản hơn nếu các thông tin trên danh thiếp
được lưu vào điện thoại. Người dùng có thể dành thời gian để ngồi nhập thông tin trên
danh thiếp vào điện thoại, nhưng việc ngồi nhập danh thiếp là một công việc tốn công sức
và thời gian. Ngày nay, với sự phát triển của công nghệ xử lý ảnh, và sự phát triển mạnh
các thiết bị smartphone, việc lấy thông tin trên danh thiếp có thể được lấy tự động thông
qua ảnh chụp danh thiếp.
Trong khuôn khổ của đồ án tốt nghiệp với đề tài “Ứng dụng nhận dạng danh thiếp
Tiếng Việt và cập nhật thông tin danh bạ trên Android” em mong muốn xây dựng một ứng
dụng cho người dùng di động Android, ứng dụng nhận dạng danh thiếp từ ảnh, hỗ trợ nhận
dạng Tiếng Việt. Ngoài việc nhận dạng, ứng dụng cho phép người dùng quản lý danh bạ
trên điện thoại.
technology, and a thriving smartphone devices, information on business cards can be
obtained automatically through photo of bussiness card.
In this paper about "Application about recognition Vietnamese business cards and update
contacts on Android", I want to building an application for Android mobile users, the
application recognize contact information from images, especially supporting recognize
Vietnamese bussiness card. And the application allows users to manage contacts on your
phone.
Through research, I found that OCR is technology to recognize text from images. A library
of OCR is Tesseract library. The process of extracting contact information based on name,
and location of Vietnam. Both processes require time-consuming process, and the phone
with low configuration will take much less time. Therefore, to increase recognition
accuracy and operate across different devices, i build webservice on server for the
recognition process and extract information.
Specific research projects carried out the following tasks:
- Research image processing technology, OpenCV library.
- Research OCR technology.
- Research how to extract information.
- Learn the theory of Android, how to build applications.
- Design ,build, and test VietCardReader application
The structure of reports consist:
- Chapter 1: Introduction and problem and solution. This chapter discusses the
problem to be solved and the solution to solve the problem. Next, it will present the
technology, the algorithm will be applied to solve the requirements.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 5
- Chapter 2: The results. This chapter focuses on analysis, system design, conduct
application testing.
MỤC LỤC
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 6
DANH MỤC CÁC HÌNH
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 7
- Giải pháp để giải quyết những vấn đề đặt ra.
- Cơ sở lý thuyết và công nghệ sử dụng.
1. Mô tả bài toán:
Như đã viết ở phần trên, danh thiếp là công cụ rất tiện lợi sử dụng trong liên
lạc, giao dịch nhưng việc sử dụng và quản lý danh thiếp gặp khó khăn khi mà một
người nhận được nhiều danh thiếp. Hiện nay, các phần mềm quét thông tin trên
danh thiếp đã có trên các nền tảng smartphone như android, iphone, bao gồm cả bản
thương mại và miễn phí.Bản thương mại đang được sử dụng nhiều hiện nay là phần
mềm Bussines Card Reader của ABBYY [1] trên cả iphone và android. Phần mềm
có chức năng quét thông tin trên danh thiếp bằng camera của iPhone và lưu tất cả
vào danh bạ điện thoại của mình phần mềm tự động lưu tên, số điện thoại liên lạc,
địa chỉ email vào đúng chỗ trong danh bạ điện thoại. Nhưng phần mềm này chưa
hỗ trợ cho nhận dạng Tiếng Việt, do đó các danh thiếp có Tiếng Việt chưa được
nhận dạng.
Vì thế, đồ án hướng tới xây dựng một ứng dụng giúp người dùng sử dụng có
thể chụp ảnh danh thiếp để lấy thông tin lưu vào điện thoại và ứng dụng hỗ trợ nhận
dạng danh thiếp Tiếng Việt. Cụ thể người dùng sẽ được cung cấp những chức năng
sau:
• Việc nhập thông tin từ danh thiếp vào điện thoại sẽ trở nên đơn giản hơn.
Người dùng chỉ cần sử dụng camera để chụp ảnh danh thiếp, các thông tin
liên lạc trên danh thiếp sẽ được trích rút và lưu vào danh bạ trên android.
Đặc biệt, các thông tin Tiếng Việt được trích rút chính xác hơn.
• Sau khi các thông tin liên lạc được lưu vào danh bạ trên android, người dùng
thực hiện quản lý, tìm kiếm liên lạc trong danh bạ của android.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 9
2.Các vấn đề cần giải quyết:
Để xây dựng ứng dụng có những chức năng như trên, trong quá trình nghiên cứu
và xây dựng ứng dụng có một số vấn đề cần được giải quyết:
• Tiền xử lý ảnh cho quá trình nhận dạng: camera trên điện thoại thường cho
ảnh có chất lượng không cao, phụ thuộc nhiều vào điều kiện môi trường như
• ContactProvider: cung cấp các thao tác xử lý với contact trong android.
3.1.Tiền xử lý ảnh với OpenCV:
Ảnh chụp từ camera thường có chất lượng không cao và chịu nhiều sự tác động của
môi trường đặc biệt là ánh sáng. Có rất nhiều các thuật toán xử lý nâng cao chất
lượng ảnh, nhưng việc tự cài đặt là mất thời gian. OpenCV là thư viện xử lý ảnh,
cung cấp rất nhiều hàm xử lý ảnh. Do đó ứng dụng sẽ sử dụng OpenCV là thư viện
để thực hiện quá trình tiền xử lý ảnh cho OCR.
3.2.Nhận dạng thông tin từ ảnh sử dụng Tesseract OCR Engine:
Người dùng sử dụng camera để chụp ảnh danh thiếp, từ ảnh này ứng dụng sẽ
nhận dạng thông tin trên đó. Ảnh chụp từ camera chất lượng càng cao, thì kết quả
nhận dạng càng chính xác. Android có nhiều phiên bản hệ điều hành khác nhau, các
dòng máy hỗ trợ khác nhau nên cần phải sử dụng API sao cho lấy được ảnh chất
lượng phù hợp nhất cho quá trình OCR. Một điều khó nữa là ảnh chụp các camera
của android hiện tại chất lượng không cao do đó cần tiền xử lý nâng cao chất lượng
ảnh trước khi đưa vào quá trình OCR.
OCR là công nghệ nhận dạng kí tự trên ảnh. Việc xây dựng OCR từ đầu là
phức tạp vì thế cần chọn lựa một bộ thư viện OCR cho quá trình lấy thông tin từ
ảnh. Tuy nhiên, các thư viện OCR hiện nay cho kết quả có độ chính xác tùy thuộc
vào chất lượng ảnh đầu vào, nên vẫn cần thông qua tiền xử lý ảnh.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 12
3.3.Trích rút thông tin liên lạc:
Các thông tin thu được từ quá trình nhận dạng là các kí tự trên ảnh đầu vào. Từ các
thông tin này, ứng dụng sẽ trích rút các thông tin như số điện thoại, tên, địa chỉ,
email.
Hiện tại chưa có thư viện OCR nào đạt độ chính xác cao, do đó kết quả thu
từ quá trình nhận dạng có thể chứa lỗi chính tả nhiều. Để tối ưu kết quả nhận dạng
từ OCR cần bước chỉnh sửa lỗi kí tự nhận dạng được. Các lỗi này được xem như là
lỗi chính tả và cần phải sửa các lỗi chính tả này. Sau khi đã loại bỏ đi lỗi chính
tả,quá trình trích rút sẽ được thực thi.
3.4.Quản lý danh bạ:
Contact biểu diễn thông tin về con người, các thông tin này được kết hợp từ
các Row Contact. Contact Provider kết hợp nhiều Raw Contact từ tất cả các nguồn
thông tin vào chung một Contact. Điều này tạo điều kiện hiển thị và chỉnh sửa tất cả
các dữ liệu người dùng đã thu thập cho một người. Contact Provider quản lý việc
tạo ra các Raw Contact mới, và kết hợp với Raw Contact hiện có.
Một ứng dụng muốn sử dụng Contact Provider cần yêu cầu các quyền sau:
- Quyền truy cập tới Contact: READ_CONTACT.
- Quyền ghi tới Contact: WRITE_CONTACT.
4.1.3.Camera API: [ 9 ]
Camera được sử dụng để thiết lập các cài đặt chụp ảnh, bắt đầu / dừng hình
ảnh xem trước snap, và lấy khung hình để mã hóa cho video. Để truy cập vào
camera của điện thoại, bạn phải khai báo yêu cầu cho phép CAMERA trong
Manifest Android của bạn.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
Các bước chung để sử dụng camera lấy ảnh:
• Phát hiện và truy cập Camera - kiểm tra sự tồn tại của camera và yêu cầu
truy cập.
• Tạo một Class Preview - Tạo một Class Preview mở rộng SurfaceView và
thực hiện các giao diện SurfaceHolder. Cho phép người dùng xem ảnh trước
khi chụp.
• Xây dựng một giao Preview – Tạo giao diện người dùng trên màn hình
Preview. Chẳng hạn trên giao diện có button chụp ảnh, chỉnh độ zoom
• Xây dựng lớp lắng nghe và xử lý sự kiện chụp ảnh.
• Chụp và lưu ảnh.
• Giải phóng camera - Sau khi sử dụng máy ảnh, ứng dụng cần giải phóng
camera. Máy ảnh phần cứng là một nguồn tài nguyên được chia sẻ phải được
quản lý một cách cẩn thận.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 15
4.2.RESTful Webservice: [ 10 ]
giữa các đặc trưng đó. Độ đo tương tự là cơ sở để xác định một đối tượng có thuộc
một lớp ký tự hay không. Ngày nay, nhiều thư viện cho OCR đã được xây dựng
như:
• ABBYY – OCR. [1]
• Tesseract – OCR. [2]
• Online OCR API. [3]
4.3.1 ABBYY – OCR: [1]
ABBYY là một công ty rất nổi tiếng về nhận dạng tài liệu, thu thập dữ liệu và
xử lý ngôn ngữ [5]. Họ cũng cung cấp OCR SDK cho nền tảng di động. Sử dụng
SDK của họ, các nhà phát triển có thể phát triển các ứng dụng dựa trên OCR cho
điện thoại di động. Họ cung cấp SDK theo nền tảng di động sau:
• Android.
• Windows Mobile.
• Mobile Linux
• Iphone.
• Symbian.
ABBYY OCR nhận một hình ảnh như đầu vào trong tất cả các định dạng được biết
đến như png, gif, jpg, và quét ảnh lấy về thông tin dạng text.
4.3.2.Tesseract OCR: [2]
Tesseract là một mã nguồn mở OCR engine đã được phát triển tại HP từ năm
1984 và 1994. Sau thời gian này, dự án đã được phát triển bởi Đại học Bắc Las
Vegas, tuy vậy có rất ít tiến triển giữa các năm 1996 và 2006. Mã nguồn cuối cùng
đã được phát hành theo giấy phép Apache 2.0 mã nguồn mở. Google hiện đang phát
triển dự án và tài trợ cho dự án phát triển mở. Hiện tại, Tesseract là công cụ OCR
miễn phí chính xác nhất.
Nó lấy ảnh xám hoặcảnh màu đầu vào và cung cấp cho đầu ra ở định dạng
văn bản. Nó hỗ trợ các loại hình ảnh như png, jpg Nó có thể đọc dữ liệu trong bất
kỳ ngôn ngữ từ hình ảnh như tiếng Anh, Thụy Điển,Đan Mạch và các nhà phát
triển có thể tạo ngôn ngữ riêng của họ nếu sự hỗ trợ cho một cụ thể ngôn ngữ không
phải là có sẵn [8]. Google phát triển thử nghiệm nó trên Ubuntu và Windows hệ
có thể tìm thấy khá nhiều hàm có khả năng sẽ xuất hiện chính thức trong OpenCV
trong tương lai. Có thể kể đến như:
• Nhận dạng cử chỉ từ camera
• Đặc tả các texture (vân bề mặt)
• Theo dõi mắt và miệng
• Theo dõi 3D
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 18
Hình 5: Kiến trúc Opencv.
Hiện tại, OpenCV đã cung cấp sẵn các wrapper dành cho hệ điều hành
Android trên trang chủ của mình (http://opencv.willowgarage.com/wiki/Android)
và cho người dùng chọn lựa giữa việc sử dụng thư viện đã biên dịch sẵn hay dùng
trực tiếp mã nguồn của OpenCV. Nếu không có yêu cầu đặc biệt về các tính năng
hay tối ưu thêm nữa các hàm của OpenCV, lựa chọn đầu tiên sẽ dễ dàng hơn cho
đại đa số người dùng.
Sau khi tải và cài đặt OpenCV lên môi trường lập trình cho Android, người dùng đã
có thể sử dụng các tính năng đặc biệt của bộ thư viện này một cách nhanh chóng.
4.5.Sửa lỗi chính tả Tiếng Viết với Hunspell: [ 11 ]
Bài toán kiểm lỗi chính tả là một bài toán khá phức tạp, được không ít đơn vị
nghiên cứu, phát triển và nó có tính ứng dụng cao, đặc biệt là trong các ứng dụng
soạn thảo hay nhận dạng văn bản. Chương trình kiểm lỗi chính tả cần có hai chức
năng chính, cơ bản là chỉ ra lỗi sai và đưa ra gợi ý sửa lỗi.
Hunspell là một kiểm tra chính tả và phân tích hình thái học được thiết kế
cho các ngôn ngữ với các hình thái phong phú và từ kép và ký tự mã hóa phức tạp,
ban đầu được thiết kế cho ngôn ngữ Hungary. Hunspell dựa trên MySpell và tương
thích ngược với từ điển MySpell. Trong khi MySpell sử dụng một mã hóa ký tự
single-byte, Hunspell có thể sử dụng từ điển Unicode UTF-8-mã hóa.
Hunspell được sử dụng để xây dựng bộ kiểm tra chính tả trên LibreOffice,
OpenOffice.org, Mozilla Firefox 3 & Thunderbird, Google Chrome. Đã có phần
mềm kiểm tra lỗi chính tả Tiếng Việt cũng sử dụng thư viện này như: VietSpell.
Tổng kết chương
thuế (MST) do đó người dùng cần có khả năng lưu thêm các trường này
vào contact.
• Chống trùng lặp contact trong android. Các contact trong android không bị
trùng lặp nhau. Cụ thể ở đây không có contact nào trùng tên hiển thị, nếu
phát hiện contact được lưu vào trùng tên với một contact đã có thì cần thông
báo cho người dùng. Người dùng nếu chọn tiếp tục lưu thì hai contact này sẽ
được ghép vào với nhau thành một contact duy nhất trong android.
• Lựa chọn ngôn ngữ nhận dạng: Ứng dụng tập trung chủ yếu nhận dạng Tiếng
việt, nhưng có trường hợp danh thiếp của Việt Nam (địa chỉ, số điện thoại )
nhưng là Tiếng Anh. Người dùng có thể lựa chọn nhận dạng tiếng ciệt hoặc
tiếng anh tùy theo danh thiếp để nâng cao độ chính xác.
• Quản lý thông tin liên lạc của contact. Các danh thiếp sau khi được trích rút
sẽ được lưu vào contact của android. Người dùng sẽ thực hiện các thao tác
tìm kiếm, chỉnh sửa, xóa, liên lạc trong contact của android.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 21
Yêu cầu phi chức năng:
• Ứng dụng hoạt động ổn định, thông suốt. Trong quá trình chạy ứng dụng,
ứng dụng không bị treo quá lâu. Do thời gian thực hiện quá trình OCR
thường là từ 10 tới 20 giây trên máy có cấu hình mạnh, trên các dòng điện
thoại cũ có thể lâu hơn, nên cần giới hạn thời gian nhận dạng. Tức là nếu quá
thời gian đó thì ảnh xem như không nhận dạng được.
• Dễ sử dụng. Tính dễ sử dụng dựa trên số thao tác cần thực hiện 1 chức năng.
Chức năng chính của ứng dụng là “Trích rút thông tin từ ảnh”, để thực hiện
chức năng này người dùng chỉ cần sử dụng camera để chụp ảnh hoặc chọn
ảnh từ thư viện. Tất cả chỉ mất từ 1 đến 2 thao tác.
• Tính an toàn, bảo mật: ứng dụng có sử dụng tới contact của android. Do đó
cần đảm bảo các contact không bị thay đổi ngoài ý muốn, đảm bảo tính toàn
vẹn và bỏa mật cho contact của người dùng.
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 22
2.Phân tích usecase:
- Actor: user.
-Mục đích: Lấy thông tin trên danh thiếp lưu vào contact của android.
-Mô tả: Đây là usecase nhận dạng và trích rút thông tin từ ảnh danh thiếp. Người
dùng sẽ sử dụng camera để chụp ảnh hoặc chọn ảnh từ thư viện để tiến hành nhận
dạng. Người dùng có thể chọn OCR ngay trên máy điện thoại hoặc sử dụng dịch vụ
OCR cloud. Sử dụng dịch vụ OCR cloud cho độ chính xác cao hơn nhưng lại lâu
hơn so với OCR trên máy. Sau khi nhận dạng và trích rút thông tin (tên, email, điện
thoại ), các thông tin sẽ được nhận dạng sẽ hiển thị trên màn hình để người dùng
chỉnh sửa các thông tin này lại cho chính xác. Người sử dụng có thể thêm các
trường thông tin mà ứng dụng chưa có (chẳng hạn như mã số thuế).
Sinh viên thực hiện: Trần Đức Hải 20080886 Khóa 53 Lớp Công Nghệ Phần Mềm 25