Download as pdf or txt
Download as pdf or txt
You are on page 1of 32

BỘ GIÁO DỤC ĐÀO TẠO

TRƯỜNG ĐẠI HỌC ĐÀ LẠT

BÁO CÁO TỔNG KẾT

ĐỀ TÀI KHOA HỌC SINH VIÊN NĂM 2018

ỨNG DỤNG NHẬN DẠNG DANH THIẾP TIẾNG VIỆT TRÊN ANDROID

Chủ nhiệm đề tài: Nguyễn Tấn Đạt, CTK38, 1410272

Lâm Đồng, tháng 5/2018


BỘ GIÁO DỤC ĐÀO TẠO
TRƯỜNG ĐẠI HỌC ĐÀ LẠT

BÁO CÁO TỔNG KẾT

ĐỀ TÀI KHOA HỌC SINH VIÊN NĂM 2018

ỨNG DỤNG NHẬN DẠNG DANH THIẾP TIẾNG VIỆT TRÊN ANDROID

Giáo viên Hướng dẫn Chủ nhiệm đề tài


(ký, họ tên) (ký, họ tên)

Xác nhận của cơ quan chủ trì


(Ký, họ tên,đóng dấu)

Lâm Đồng, tháng 5/2018


Danh sách thành viên
Sinh viên thực hiện

STT MSSV Họ tên Email

1 1410272 Nguyễn Tấn Đạt datnguyenctk38@gmail.com

2 1413031 Đỗ Phạm Thành Hương

Giáo viên hướng dẫn: ThS. Thái Duy Quý

ThS. Trần Nhật Quang


MỤC LỤC

CHƯƠNG 1. ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP ............................................1

1.1. Mô tả bài toán .......................................................................................1

1.2. Các vấn đề cần giải quyết .....................................................................1

1.3. Định hướng giải pháp ...........................................................................2

1.3.1. Tiền xử lý ảnh với OpenCV ............................................................3

1.3.2. Nhận dạng thông tin từ ảnh sử dụng Tesseract OCR......................3

1.3.3. Trích rút thông tin liên lạc ..............................................................3

1.3.4. Quản lý danh bạ ...............................................................................3

1.3.5. Tạo Web services .............................................................................4

1.4. Cơ sở lý thuyết .....................................................................................4

1.4.1. Tiền xử lý ảnh với OpenCV ...............................................................4

4.1.2. Các thuật toán xử lý ảnh ..................................................................4

4.1.3. Tổng quan về Tesseract OCR ..........................................................9

4.1.4. Cơ chế hoạt động củaTesseract OCR ............................................10

4.2. Hệ điều hành Android ........................................................................11

4.2.1. Tổng quan về hệ điều hành Android ..............................................11

4.2.2. Contact Provider trong Android .......................................................12

4.3. Web services.......................................................................................12


CHƯƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ...................................................14

2.1. Đặc tả yêu cầu ....................................................................................14

2.2. Phân tích usecase ................................................................................15

2.2.1. Mô hình usecase tổng thể ứng dụng ..............................................15

2.2.2. Usecase nhận dạng danh thiếp ......................................................16

2.2.3. Usecase quản lý danh bạ ................................................................16

2.2.4. Usecase đăng nhập vào hệ thống ...................................................17


2.2.5. Usecase đăng ký hệ thống ..............................................................17

2.2.6. Usecase đồng bộ hóa dữ liệu..........................................................18

2.3. Thiết kế ...............................................................................................18

2.3.1. Thuật toán tiền xử lý nâng cao chất lượng ảnh ..............................18

2.3.2. Thuật toán trích rút thông tin .........................................................19


CHƯƠNG 3. KẾT QUẢ ĐẠT ĐƯỢC ...................................................................................21

3.1. Chương trình.......................................................................................21

3.2. Kết quả thực nghiệm ..........................................................................21

3.3. Giao diện chính chương trình .............................................................23


KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .............................................................................25
DANH MỤC CÁC CHỮ VIẾT TẮT
STT Từ viết tắt Diễn giải
1 OCR Optical Character Recognition
2 BCR Business card reader
3 OpenCV Open Computer Vision
MỞ ĐẦU
Danh thiếp là loại thiếp nhỏ ghi họ tên, thường có kèm theo nghề nghiệp, chức
vụ, địa chỉ, dùng để giao dịch. Những người sở hữu danh thiêp luôn muốn giới thiệu
thông tin của mình một cách nhanh chóng và đầy đủ nhất.

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à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ị thông minh, 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 đề tài nghiên cứu khoa học sinh viên với đề tài “Nhận dạng
danh thiếp tiếng Việt trên Android” chúng tôi 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.

Qua tìm hiểu, chúng tôi nhận thấy nhận dạng thông tin chữ viết từ ảnh có thể sử
dụng công nghệ nhận dạng văn bản OCR, cụ thể là thư viện Tesseract. Quá trình trích
rút thông tin liên lạc thông tin dựa trên đặc điểm tên người, địa điểm của Việt Nam. Tuy
nhiên quá trình nhận dạng văn bản tốn nhiều thời gian xử lý, và trên các máy cấu hình
thấp sẽ mất nhiều thời gian. Vì thế, để tăng độ chính xác nhận dạng và hoạt động trên
nhiều thiết bị khác nhau, chúng tôi sử dụng thư việc OpenCV để xứ lý ảnh nhằm tăng
tốc độ nhận dạng.

Đề tài nghiên cứu thực hiện những công việc sau: Tìm hiểu công nghệ xử lý ảnh,
thư viện OpenCV; Tìm hiểu công nghệ nhận dạng OCR; Tìm hiểu lý thuyết về Android,
cách xây dựng ứng dụng; và Thiết kế và xây dựng thử nghiệm ứng dụng BCR dựa trên
việc tích hợp các thành phần nói trên.
CHƯƠNG 1. ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP
1.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
tiếng Anh đã 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 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. Ngoài ra, ứng dụng CamCard là một trong những
ứng dụng nhận dang danh thiếp rất nổi tiếng, bao gồm chụp ảnh danh thiếp, tự lưu thông
tin và ảnh danh thiếp. Phần mềm nhận dạng tiếng Việt có thể kể đến là Visit Card
Scanner. Những phần mềm trên khi nhận dạng tiếng Việt còn nhiều bất cập và độ chính
xác chưa cao.

Vì thế, chúng tôi 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:

 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 Hệ điều hành
Android. Đặc biệt, các thông tin tiếng Việt được rút trích chính xác.
 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ạ.
 Người dùng có thể đăng ký tài khoản để lưu trữ lại thông tin liên lạc của
mình, khi đăng nhập vào điện thoại khác họ sẽ có toàn bộ những thông tin trong
tài khoản đó.

1.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:

1
 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ư
ánh sáng. Do đó quá trình tiền xử lý ảnh để tạo ảnh có chất lượng phù hợp cho
quá trình nhận dạng;
 Nhận dạng thông tin từ ảnh danh thiếp: Đây là quá trình tách nội dung là
chữ trên ảnh. Đây là quá trình đóng vai trò quan trọng nhất trong ứng dụng.
 Trích rút các thông tin liên lạc: Sau quá trình nhận dạng chữ từ ảnh danh
thiếp, cần tiến hành trích rút các thông tin liên lạc từ các chữ thu được ở quá trình
nhận dạng.
 Quản lý các thông tin thu được từ danh thiếp: Sau khi trích rút các thông
tin liên lạc, các thông tin này cần được lưu trữ và quản lý. Người dùng có thể tìm
kiếm, thêm, xóa, sửa các thông tin này.
 Đồng bộ hóa dữ liệu: Khi người dùng tiến hành đăng nhập với một tài
khoản và điện thoại của họ có kết nối internet. Hệ thống sẽ tiến hành đồng bộ dữ
liệu và lưu trữ thông tin lên server. Khi người dùng đăng nhập với tài khoản đó
thì thông tin sẽ lấy từ server xuống điện thoại người dùng.

1.3. Định hướng giải pháp

Đầu tiên, ảnh đầu vào của hệ thống có thể là ảnh chụp từ camera hoặc là một ảnh
có sẵn trong thử viện ảnh. Tiếp đó sẽ đến phần tiền xử lý, sau đó là nhận dạng ảnh bằng
Tesseract. Sau khi đã nhận dạng xong, sẽ đến phần trích rút thông tin sẽ lấy các thông
tin cơ bản như số điện thoại, họ tên, email, địa chỉ và tiến hành lưu vào danh bạ.

Hình 1. Sơ đồ hoạt động ứng dụng

2
1.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. 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ử dụng OpenCV là thư viện để thực hiện quá trình tiền
xử lý ảnh cho OCR.

1.3.2. Nhận dạng thông tin từ ảnh sử dụng Tesseract 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. Trong
đề tài này, chúng tôi sử dụng thư viện Tesseract.

1.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. Để có thể trích rút được kết quả mong muốn chúng tôi đã sử dụng Database để
chứa họ, địa chỉ để trích rút thông tin họ tên và địa chỉ. Để nhận dạng được số điện thoại,
địa chỉ email nhóm đã sử dụng regex. Regex là cách để diễn tả một đoạn mẫu phức tạp
dùng để tìm kiếm (search pattern) bằng một chuỗi. Ví dụ như ta có thể kiểm tra chuỗi
bao gồm chữ hoặc số, kiểm tra số lượng kí tự, vị trí của kí tự, chữ hoa, chữ thường.

1.3.4. Quản lý danh bạ

Danh thiếp sau khi được trích rút thông tin sẽ được lưu vào danh bạ. Danh bạ
trong android cho phép lưu hầu hết các thông tin của một danh thiếp, đồng thời hỗ trợ
quản lý tìm kiếm, thêm, sửa, xóa.

Hình 2. Cấu trúc trình cung cấp danh bạ


3
1.3.5. Tạo Web services

Xây dựng một web services bằng ngôn ngữ php với cơ sở dữ liệu mysql để lưu
trữ thông tin nhằm mục đích thực hiện chức năng đồng bộ hóa khi đăng nhập.

Hình 3. Cơ sở dữ liệu lưu trữ danh bạ

1.4. Cơ sở lý thuyết

1.4.1. Tiền xử lý ảnh với OpenCV

OpenCV là một thư viện đa nền tảng, dùng cho phát triển các ứng dụng thị giác
máy tính. Nó chủ yếu trọng tâm vào xử lý hình ảnh, quay video và các tính năng như
phát hiện khuôn mặt và phát hiện đối tượng.

Sử dụng thư viện OpenCV, ta có thể: Đọc và ghi hình ảnh; Ghi hình và lưu video;
Xử lý hình ảnh (lọc, chuyển đổi); Thực hiện nhận dạng đặc điểm; và Phát hiện các đối
tượng xác định như khuôn mặt, mắt, xe trong video hoặc hình ảnh;

4.1.2. Các thuật toán xử lý ảnh

Do Tesseract OCR hoạt động tốt nhật với ảnh trắng đen nên ta cần phải chuyển
ảnh đầu vào về ảnh trắng đen hay còn gọi là nhị phân hóa ảnh.

 Chuyển đổi hệ màu

Trong xử lý hình ảnh đôi lúc chúng ta cần đưa hình ảnh về những hệ màu phù
hợp với từng thuật toán. Ví dụ như một số yêu cầu đầu vào phải là hệ xám sử dụng 8bit
cho 1pixel hay nhưng thuật toán yêu cầu hệ màu RBG hay YUV, HSV hay BRGA,
AGRG chẳng hạn. Thì lúc đó chúng ta phải xây dựng các hàm để chuyển đổi sáng các
hệ màu đó. Thư viện OpenCV là một thư viện chuyên xử lý hình ảnh vì vậy nó hỗ trợ
rất nhiều hệ màu như RGB, ARGB, BRGA, YUV, HSV… và nó cũng có cung cấp cho
chúng ta hàm cvtColor để thực hiển chuyển đổi giữa các hệ màu này.

4
void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

Với đối số thứ nhất là input đầu vào 8bit unsigned (CV_8U) hoặc 16bit unsigned
(CV_16U); Đối số thứ hai là input đầu ra có cùng size và depth như input đầu vào; Đối
số thứ ba là code quy định sẽ chuyển đổi từ mã màu nào sang mã màu nào và có cấu
trúc như sau.

CV_[MÃ MÀU NGUỒN]2[MÃ MÀU ĐÍCH]

Ví dụ CV_RGB2GRAY sẽ chuyển từ hệ RGB sang GRAY. Phần sau đây là đoạn


code (có 140 code) sử dụng để chuyển đối hệ màu trong OpenCV

enum
{
CV_BGR2BGRA =0,
CV_RGB2RGBA =CV_BGR2BGRA,
CV_BGRA2BGR =1,
CV_RGBA2RGB =CV_BGRA2BGR
CV_BGR2RGBA =2,
CV_RGB2BGRA =CV_BGR2RGBA,
CV_RGBA2BGR =3
CV_BGRA2RGB =CV_RGBA2BGR,
CV_BGR2RGB =4,
CV_RGB2BGR =CV_BGR2RGB,
CV_BGRA2RGBA =5,
CV_RGBA2BGRA =CV_BGRA2RGBA,
CV_BGR2GRAY =6,
CV_RGB2GRAY =7,
CV_Lab2LBGR = 78,
CV_Lab2LRGB = 79,
CV_Luv2LBGR = 80,
CV_Luv2LRGB = 81,
CV_BGR2YUV = 82,
CV_RGB2YUV = 83,
CV_YUV2BGR = 84,
CV_YUV2RGB = 85,
CV_BayerBG2GRAY = 86,
CV_BayerGB2GRAY = 87,
CV_BayerRG2GRAY = 88,
CV_BayerGR2GRAY = 89,
CV_YUV2RGB_NV12 = 90,
CV_YUV2BGR_NV12 = 91,
CV_YUV2RGB_NV21 = 92,
CV_YUV2BGR_NV21 = 93,
CV_YUV420sp2RGB = CV_YUV2RGB_NV21,
CV_YUV420sp2BGR = CV_YUV2BGR_NV21,
5
CV_YUV2RGBA_NV12 = 94,
CV_YUV2BGRA_NV12 = 95,
CV_YUV2RGBA_NV21 = 96,
CV_YUV2BGRA_NV21 = 97,
CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21,
CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21,
CV_YUV2RGB_YV12 = 98,
CV_YUV2BGR_YV12 = 99,
CV_YUV2RGB_IYUV = 100,
CV_YUV2BGR_IYUV = 101,
CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,
CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,
CV_YUV420p2RGB = CV_YUV2RGB_YV12,
CV_YUV420p2BGR = CV_YUV2BGR_YV1,
CV_YUV2RGBA_YV12 = 102,
CV_YUV2BGRA_YV12 = 103,
CV_YUV2RGBA_IYUV = 104,
CV_YUV2BGRA_IYUV = 105,
CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV,
CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYV,
};
Và dưới đây là chương trình chuyển đổi ảnh nguồn RGB sang các hệ màu Gray,
YUV, HSV.

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
#define INPUT "input.jpg"
int main(int argc, const char * argv[]) {
//data structure store image
Mat imageRGB;
Mat imageGray;
Mat imageHSV;
Mat imageYUV;
//read image from file with flags CV_LOAD
imageRGB = imread(INPUT, CV_LOAD_IMAGE_COLOR);
//check image valid
if(imageRGB.empty()){
cout << "can't open or read image" << endl;
}else{
//create windows for display
cv::cvtColor(imageRGB, imageGray, CV_RGB2GRAY);
cv::cvtColor(imageRGB, imageHSV, CV_RGB2HSV);
cv::cvtColor(imageRGB, imageYUV, CV_RGB2YUV);
6
namedWindow("Image RGB", WINDOW_AUTOSIZE);
namedWindow("Image GRAY", WINDOW_AUTOSIZE);
namedWindow("Image HSV", WINDOW_AUTOSIZE);
namedWindow("Image YUV", WINDOW_AUTOSIZE);
//show imag in it
imshow("Image RGB", imageRGB);
imshow("Image GRAY", imageGray);
imshow("Image HSV", imageHSV);
imshow("Image YUV", imageYUV);
//wating user press any key to finish
waitKey();
}
return 0;
}
 Phân ngưỡng ảnh (Threshold): Nếu pixel có giá trị lớn hơn giá trị ngưỡng
thì nó được gán 1 giá trị (thường là 1), ngược lại nhỏ hơn giá trị ngưỡng thì nó
được gán 1 giá trị khác (thường là 0).
double threshold(Mat src, Mat dst, double thresh, double maxval, int type)

Hàm sử dụng là threshold , tham số đầu tiên là 1 ảnh xám, tham số thứ 2 là giá
trị ngưỡng, tham số thứ 3 maxval là giá trị được gán nếu giá pixel lớn hơn giá trị ngưỡng,
tham số thứ 4 là loại phân ngưỡng. Tùy theo các loại phân ngưỡng mà pixel được gán
giá trị khác nhau:

 THRESH_BINARY: Nếu giá trị pixel lớn hơn ngưỡng thì gán bằng maxval.
Ngược lại bằng 0
 THRESH_BINARY_INV: Nếu giá trị pixel lớn hơn ngưỡng thì gán bằng 0.
Ngược lại gán bằng maxval.
 THRESH_TRUNC: Nếu giá trị pixel lớn hơn ngưỡng thì gán giá trị bằng
ngưỡng. Ngược lại giữ nguyên giá trị
 THRESH_TOZERO: Nếu giá trị pixel lớn hơn ngưỡng thì giữ nguyên giá trị.
Ngược lại gán bằng 0
 THRESH_TOZERO_INV: Nếu giá trị pixel lớn hơn ngưỡng thì gán giá trị
bằng 0. Ngược lại giữ nguyên.
 Phân ngưỡng thích nghi (Adaptive Thresholding): Phương pháp phân
ngưỡng ở trên không phù hợp cho nhiều trường hợp, như là ánh sáng không đồng
đều trên ảnh. Trong trường hợp đó chúng ta dùng hàm adaptiveThreshold().

7
Phương thức này tính giá trị trung bình của các n điểm xung quanh pixel đó rồi
trừ cho C chứ không lấy ngưỡng cố định (n thường là số lẻ, còn C là số nguyên
bất kỳ).
void adaptiveThreshold(Mat src, Matdst, double maxValue, int adaptiveMethod,
int thresholdType, int blockSize, double C)

Ngoài các tham số giống như phân ngưỡng thường, adaptiveThreshold có thêm
các tham số như sau:

 Phương thức ADAPTIVE_THRESH_MEAN_C có giá trị của pixel phụ


thuộc vào các pixel lân cận; Phương thức
ADAPTIVE_THRESH_GAUSSIAN_C có giá trị của pixel cũng phụ thuộc vào
các pixel lân cận, tuy nhiên được khử nhiễu
 Block Size: Số pixel lân cận dùng để tính toán
 C: Hằng số trừ đi giá trị trung bình

Hình 4. Minh họa cho các phương pháp phân ngưỡng khác nhau

 Khử nhiễu (Denoising): Nhiễu là một trong những vấn đề thường gặp đối
với nhiếp ảnh nói riêng hay các loại hình thu nhận tín hiệu nói chung, không chỉ
gây ra giảm chất lượng mà còn làm biến dạng thông tin ghi lại. OpenCV đã cung
cấp bốn phương thức để khử nhiễu: fastNlMeansDenoising() (Hoạt động với ảnh
có thang độ xám duy nhất); fastNlMeansDenoisingColored() (Hoạt động với ảnh
màu); fastNlMeansDenoisingMulti() (Hoạt động với chuỗi hình ảnh được chụp

8
trong khoảng thời gian ngắn); fastNlMeansDenoisingColoredMulti() (Hoạt động
với chuỗi hình ảnh được chụp trong khoảng thời gian ngắn).

Các tham số chung của bốn hàm trên là: h là tham số quyết định độ mạnh bộ lọc.
Giá trị h cao hơn sẽ loại bỏ nhiễu tốt hơn, nhưng cũng loại bỏ các chi tiết của hình ảnh;
hForColorComponents là tham số dành cho hình ảnh màu; templateWindowSize phải
là số lẻ; searchWindowSize (phải là số lẻ).

4.1.3. Tổng quan về Tesseract OCR

Tesseract là một OCR (Optical Character Recognition) hàng đầu hiện nay. Công
cụ này được phân phối với bản quyền mã nguồn mở Apache 2.0. Nó hỗ trợ nhận diện kí
tự trên các tập tin hình ảnh và xuất ra dưới dạng kí tự thuần, html, pdf, tsv, invisible-
text-only pdf. Người dùng có thể sử dụng trực tiếp hoặc lập trình viên có thể sử dụng
các chức năng thông qua API.

Tesseract được phát triển bởi Hewlett-Packard Laboratories Bristol tại Hewleett-
Packard Co, Greeley Colorado từ 1985 đến 1994. Sau đó, nó được cập nhật một số thay
đổi nhỏ và tạm ngưng phát triển từ sau 1998. Đến năm 2005, Tesseract được phân bố
dưới dạng mã nguồn mở bởi HP và được phát triển bởi Google từ năm 2006.

Hiện tại, Tesseract đã phát triển đến version 3.0x và có thể hoạt động trên 3 hệ
điều hành phổ biến là Window, Mac và Linux. Công cụ này hỗ trợ nhận diện kí tự của
hơn 100 ngôn ngữ khác nhau, bao gồm cả tiếng Việt. Không những thế, chúng ta có thể
huấn luyện chương trình dùng Tesseract để có thể nhận diện một ngôn ngữ nào đó. Bên
cạnh đó, mã nguồn mở này không hỗ trợ GUI, nên bạn sẽ cần tới ứng dụng của bên thứ
ba nếu muốn sử dụng chức năng này.

Đối với các lập trình viên, họ có thể sử dụng các API của Tesseract để xây dựng
ứng dụng của mình. Thư viện đó gọi là labtesseract và được cung cấp cho ngôn ngữ
C/C++. Trong trường hợp sử dụng ngôn ngữ khác thì cần phải sử dụng các gói hỗ trợ
tương ứng:

 .NET: charlesw/tesseract, http://code.google.com/p/tesseractdotnet/


 Python: tesserocr, pyocr, …
 Java: tess4j

9
Tesseract có ưu điểm là dễ dàng sử dụng, giúp người dùng tiết kiệm thời gian.
Trong khi đó nhược điểm chủ yếu là độ chính xác chưa cao, với những hình ảnh có màu
nền mà màu chữ không có nhiều chênh lệch, hay các hình chụp chữ viết tay thì kết quả
nhận dạng không khả quan.

4.1.4. Cơ chế hoạt động củaTesseract OCR

Về cơ bản, quá trình nhận diện sẽ diễn ra từng bước trải qua bốn bước chính như
phân tích layout, tìm kiếm dòng, tìm kiếm ký tự, nhận diện ký tự và chỉnh sửa kết quả.

Trước tiên, hình ảnh sẽ được phân tích để tìm ra các vùng kết nối (connected
component). Bước này cho phép OCR dễ dàng nhận biết những vùng ký tự ngược để có
thể nhận diện những ký tự bên trong. Trong Tesseract, những vùng chứa ký tự này được
gọi là Blob. Tiếp đến, những blob này sẽ tiếp tục được phân tích để tìm ra các dòng, rồi
đến các ký tự. Việc tìm các dòng sẽ được xử lý bởi thuật toán dựa vào vùng ký tự, cỡ
chữ cùng toạ độ (trục x). Trong quá trình này, các blob cũng có thể được ghép với nhau
nếu OCR nhận thấy chúng chứa các ký tự trong cùng một dòng. Những blob được ghép
phải trùng ít nhất 50% theo chiều ngang. Sau đó, các đường cơ sở (baseline) cũng được
tìm kiếm nhờ vào việc quét các dòng đã được xác định.

Sau khi đã xác định được các dòng ký tự cùng các đối số tương ứng, dòng ký tự
sẽ được chia nhỏ thành các từ dựa vào các ký tự phân cách. Lúc này, văn bản cố định sẽ
được chia nhỏ và tiến hành nhận diện. Trong khi đó, văn bản không cố định hoặc chưa
chắc chắn thì sẽ được chia nhỏ thành các từ dù chưa chắc chắn. Nhưng nhờ vào bước
nhận diện, chúng ta sẽ thu được kết quả cuối cùng chính xác hơn.

Bước vào quá trình nhận diện, input của chúng ta sẽ được đánh giá, phân tích hai
lần. Ở lần đầu tiên, OCR sẽ nhận diện ký tự với kết quả phân tích ở bước trước đó. Các
kết quả nhận diện thoả mãn yêu cầu sẽ được đưa vào tập tin huấn luyện để hỗ trợ cho
quá trình nhận diện lần thứ hai với các kết quả chưa đạt yêu cầu. Đương nhiên, việc xác
nhận kết quả có thoả mãn yêu cầu hay không cần phải dựa trên nhiều tiêu chí vì nhận
diện nội dung phải trải qua một quá trình lặp đi lặp lại gồm các bước nhận diện ký tự,
ghép ký tự và so khớp với từ điển. Các tiêu chí đó bao gồm khoảng cách của các ký tự,
độ phù hợp với từ điển và khoảng cách đến các dấu câu.

10
Hình 5. Quá trình nhận dạng của Tesseract

Cuối cùng, OCR sẽ xử lý những dấu cách không rõ ràng cùng với xem xét các
giả thiết khác cho việc định vị những ký tự in hoa nhỏ để đi đến kết quả cuối cùng.

4.2. Hệ điều hành Android

4.2.1. Tổng quan về hệ điều hành Android

Android là một hệ điều hành có mã nguồn mở dựa trên nền tảng Linux được thiết
kế dành riêng cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh
và máy tính bảng. Ban đầu, hệ điều này này được phát triển bởi công ty Android, với sự
hỗ trợ tài chính từ Google, sau đó chính Google đã mua lại công ty này và tiếp tục phát
triển Android trở thành một nền tảng hiệu quả hơn.

Hình 6. Kiến trúc hệ điều hành Android


11
4.2.2. Contact Provider trong Android

Contact Provider là một thành phần của Android dùng để quản lý dữ liệu về con
người. Các dữ liệu này rất đa dạng, có thể định nghĩa khác nhau tùy vào nhu cầu quản
lý thông tin của con người. Contact Provider xây dựng cấu trúc dữ liệu để lưu trữ thông
tin về con người: Contact, RawContact và Data.

Row Contact biểu diễn thông tin về một người, được lấy từ một nguồn thông tin.
Một Contact có thể có nhiều Raw Contact, một Raw Contact tương ứng với một nguồn
dữ liệu lấy thông tin. Chính điều này giúp cho việc kết hợp thông tin một người từ nhiều
nguồn khác nhau.

Data chứa thông tin chi tiết về một Raw Contact, chẳng hạn như email, số điện
thoại, địa chỉ ... Một Raw Contact có thể có nhiều Data, điều này giúp cho một Raw
Contact liên kết tới nhiều số diện thoại, email, địa chỉ ... khác nhau.

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.3. Web services

Web service là một tập các phương thức được gọi thực hiện từ xa thông qua một
địa chỉ url. Kết quả trả về của web service thường dưới dạng json hoặc xml. Web service
thường được sử dụng để tạo các ứng dụng phân tán.

12
Hình 7. Kiến trúc webservice đơn giản

Đặc điểm của web services: Không phụ thuộc vào ngôn ngữ lập trình; Có thể
được truy cập từ bất cứ ứng dụng nào; Hỗ trợ thao tác giữa các thành phần không đồng
nhất; Chi phí phát triển thấp và Dễ bảo trì

13
CHƯƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
2.1. Đặc tả yêu cầu

Tác nhân: người chủ điện thoại.

Yêu cầu chức năng: Tự động lấy thông tin từ danh thiếp vào điện thoại lưu vào
danh bạ của android. Đây là yêu cầu quan trọng nhất ứng dụng cần thực hiện. Người
dùng sẽ sử dụng camera để chụp ảnh hoặc lấy ảnh từ thư viện ảnh, ứng dụng cần trich
rút thông tin danh thiếp trên ảnh và đưa các thông tin trích rút này cho người dùng xem.
Người dùng sẽ kiểm tra độ chính xác của thông tin sau đó họ sẽ quyết định có lưu vào
contact của android hay không.

Người dùng tạo thêm các trường thông tin để lưu vào danh bạ. Ứng dụng có sẵn
các trường thông tin lưu vào contact như tên, điện thoại, email, địa chỉ...

Quản lý thông tin liên lạc của danh bạ. Các danh thiếp sau khi được trích rút sẽ
được lưu vào danh bạ 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 danh bạ của android.

Đồng bộ hóa dữ liệu khi đăng nhập. Người dùng có thể đồng bộ hóa dữ liệu của
mình khi đăng nhập bằng một tài khoản khác hoặc đăng nhập vào một điện thoại khác
mà không tốn nhiều thời gian xử lý.

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 danh bạ của android. Do đó cần
đảm bảo các danh bạ không bị thay đổi ngoài ý muốn, đảm bảo tính toàn vẹn và bỏa mật
cho danh bạ của người dùng.

14
2.2. Phân tích usecase

2.2.1. Mô hình usecase tổng thể ứng dụng

Hình 8. Sơ đồ tổng thể usecase tổng quan

Từ đặc tả yêu cầu người sử dụng, các usecase chính của hệ thống được đưa ra và
biểu diễn như trong biểu đồ usecase tổng quan phía trên. Có các usecase chính như sau:

 Usecase 1: Nhận dạng thông tin danh thiếp. Người sử dụng cung cấp ảnh
đầu vào để thực hiện quá trình nhận dạng và trích rút thông tin liên lạc trên danh
thiếp. Có 2 usecase con tron usecase này: Usecase 1.1: Nhận dạng thông tin danh
thiếp từ camera điện thoại. Người dùng sử dụng camera điện thoại để chụp ảnh
danh thiếp, cung cấp ảnh đầu vào cho ứng dụng; Usecase 1.2: Nhận dạng thông
tin danh thiếp từ thư viện ảnh. Người dùng chọn ảnh từ thư viện ảnh của android,
cung cấp ảnh đầu vào cho ứng dụng, sau đó thực hiện nhận diện thông tin trên
ảnh này.
 Usecase 2: Quản lý danh bạ trên android. Người dùng thực hiện các thao
tác như tìm kiếm contact, thêm contact, sửa thông tin contact.
 Usecase 3: Người dùng tiến hành đăng nhập vào hệ thống
 Usecase 4: Người dùng tiến hành đăng ký vào hệ thống

15
 Usecase 5: Người dùng tiến hành đồng bộ dữ liệu khi đăng nhập vào hệ
thống

2.2.2. Usecase nhận dạng danh thiếp

Hình 9. Sơ đồ usecase nhận dạng danh thiếp

Tên usecase: Nhận dạng thông tin trên danh thiếp.

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

2.2.3. Usecase quản lý danh bạ

Hình 10. Sơ đồ usecase quản lý danh bạ

16
Actor: user

Mô tả: Đây là usecase cho người dùng thực hiện quản lý contact. Các usecase
con trong quản lý bao gồm tìm kiếm contact, thêm contact, chỉnh sửa thông tin contact,
xóa contact.

Tìm kiếm contact: người dùng nhập thông tin để tìm kiếm contact, có thể là tên
hiển thị, điện thoại. Ứng dụng tìm kiếm và hiển thị danh sách tương ứng.

Thêm contact: Người dùng thêm contact vào android, cần kiểm tra trong danh
sách contact android để chống bị trùng lặp contact trong android.

2.2.4. Usecase đăng nhập vào hệ thống

Hình 14. Sơ đồ usecase đăng nhập vào hệ thống

Actor: user

Mô tả: Đây là usecase cho phép người dùng đăng nhập vào hệ thống có thể nhận
dạng danh thiếp, quản lý danh bạ và đồng bộ dữ liệu.

2.2.5. Usecase đăng ký hệ thống

Hình 11. Sơ đồ usecase đăng ký vào hệ thống

17
Actor: user

Mô tả: Đây là usecase cho phép người dùng đăng ký vào hệ thống để tiến hành
đăng nhập và thực hiện chức năng đồng bộ hóa dữ liệu.

2.2.6. Usecase đồng bộ hóa dữ liệu

Hình 12. Sơ đồ usecase đồng bộ hóa dữ liệu

Actor: user

Mô tả: Đây là usecase cho phép người dùng đồng bộ hóa lại dữ liệu của mình và
yêu cầu người dùng bắt buộc phải đăng nhập mới sử dụng. Do mỗi cá nhân có thông tin
liên lạc liên nên việc đăng nhập là cần thiết và dữ liệu của người dùng luôn được bảo
mật.

2.3. Thiết kế

2.3.1. Thuật toán tiền xử lý nâng cao chất lượng ảnh

Ảnh thu được từ camera có độ phân giải thấp, chịu nhiều ảnh hưởng của điều
kiện môi trường. Nếu đưa ảnh thu được này vào nhận dạng ngay, kết quả thu được có
độ chính xác không cao. Do đó, trước khi đưa ảnh vào nhận dạng cần tiền xử lý ảnh để
nâng cao chất lượng ảnh. Các bước tiền xử lý ảnh:

18
Hình 13. Sơ đồ tiến trình xử lý ảnh cho OCR

Ảnh đa mức xám là ảnh sử dụng 1 byte màu cho mỗi pixel, chuyển từ ảnh màu
sang ảnh đa mức xám loại bỏ các dữ liệu màu không cần thiết. Nhận dạng ảnh đa mức
xám dễ dàng hơn ảnh màu.

Ảnh thu được từ camera có nhiễu, làm giảm độ chính xác của nhận dạng. Để
giảm nhiễu ảnh, trước hết ta sử dụng tính năng auto focus của camera để thu được ảnh
có ít nhiễu nhất. Tiếp theo ta sử dụng bộ lọc nhiễu để giảm nhiễu ảnh.Sau khi sử dụng
bộ lọc nhiễu, các nhiễu ảnh bị loại trừ đồng thời ảnh cũng sẽ bị mờ đi một chút. Do đó
ảnh cần được tăng độ nét.

Ảnh thu được từ camera thường có độ phân giải là 72dpi. Trong khi để nhận diện
với Tesseract, ảnh được yêu cầu với độ phân giải là 300dpi. Do đó, ta cần nâng cao độ
phân giải của ảnh lên khoảng 5 lần.

Sau các bước tiền xử lý ảnh như trên, độ chính xác của kết quả nhận dạng đã tăng
lên đáng kể.

2.3.2. Thuật toán trích rút thông tin

Thông tin cần trích rút từ danh thiếp bao gồm: Tên người, điện thoại, địa chỉ,
email. Bài toán trích rút thông tin từ một đoạn chữ là bài toán con của nhận dạng tên
thực thể. Có 2 cách để trích rút thông tin là: sử dụng các qui tắc được định nghĩa, hoặc
sử dụng phương pháp thống kê học máy. Trong đề tài nghiên cứu khoa học, em sử dụng
các qui tắc để trích rút thông tin từ danh thiếp.

Thông tin chữ nhận được từ quá trình nhận dạng bao gồm nhiều dong thông tin.
Dòng thông tin trên danh thiếp thường có các chữ đầu đề để cho biết nội dung của dòng
đó. Thuật toán tách thông tin sẽ đọc từng dòng thông tin và tách thông tin có trên dòng
này. Thuật toán dừng lại khi đã quét qua toàn bộ các dòng.

Các thông tin như điện thoại, email có thể được tách sử dụng regular expression.

19
Việc trích rút tên người dựa vào đặc điểm tên người Việt Nam.

 Thuật toán tách địa chỉ: Đầu vào của thuật toán là dòng thông tin. Thuật
toán sẽ kiểm tra xem dòng đầu vào có chứa tiền đề như ĐC, Địa chỉ, Add, Address
không. Nếu có thì dòng này chứa thông tin địa chỉ. Nếu không có, thuật toán sẽ
kiểm tra xem dòng thông tin này co chứa tên địa điểm các tỉnh thành phố Việt
Nam hay không. Thuật toán sẽ đọc lần lượt các địa điểm trong file dữ liệu để
kiểm tra với dòng đầu vào.
 Thuật toán tách tên: Đầu vào của thuật toán là dòng thông tin. Thuật toán
sẽ kiểm tra xem trong dòng thông tin có chứa họ của người Việt Nam hay không,
nếu dòng thông tin có chứa họ của người Việt Nam thì nó sẽ được lưu vào mảng
tên người. Dữ liệu tên người sẽ được đọc từ file dữ liệu chứa các họ của người
Việt Nam.
 Thuật toán tách sô điện thoại: Đầu vào của thuật toán là dòng thông tin.
Thuật toán sẽ tách số điện thoại bằng regular expression và phân loại số điện
thoại ra 2 loại là số cố định và số di động. Trên danh thiếp, các số điện thoại được
biểu diễn là một chuỗi số liên tục hoặc được phân cách nhau bởi các kí tự như kí
tự trắng, dấu chấm, dấu gạch ngang. Regular expression cần tách được định dạng
chuỗi như vậy. Thuật toán sử dụng regular expression như sau:
(\\(\\d+\\)+[\\s-.]*)*(\\d+[\\s-.]*)+

Việc phân loại số điện thoại là cố định hay di động dựa vào đầu số của chuỗi tách
bởi regular expression

 Thuật toán tách email: Đầu vào của thuật toán là dòng thông tin. Thuật
toán sẽ kiểm tra xem trong dòng thông tin có chứa dấu @ hay không. Nếu dòng
đó có chưa dấu @ thì ta tiến hành sử dụng expression như sau:
(/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/)

20
CHƯƠNG 3. KẾT QUẢ ĐẠT ĐƯỢC
3.1. Chương trình

Nhóm đã xây dựng được hệ thống với các chức năng chính như hình sau:

Hình 14. Chương trình ứng dụng

3.2. Kết quả thực nghiệm

Chúng tôi cho chạy thử nghiệm với 50 danh thiếp tiếng Việt. Chia làm ba loại:
Dễ (25); Trung bình (16); và Khó (9).

 Dễ: Không có ảnh nền, logo; Màu chữ và nền tương phản; Chữ rõ in ràng,
không hoa văn, kích thước phù hợp.
 Trung bình: Là danh thiếp có chứa logo, kích thước bé, màu chữ và nền
có độ tương phản thấp…
 Khó: Có hình nền; Chữ hoa văn; Chữ và nền gần màu nhau.

Các danh thiếp được chụp bằng Camera máy điện thoại Samsung, chạy thử
nghiệm so sánh với 03 phần phần mềm khác: Camcard, Envenote, Visit Card Reader
(VCR).

Các kết quả so sánh như sau như trong các Bảng 1, 2, và 3 và Hình 15, 16, và 17.

21
Bảng 1. Kết quả thống kê tỉ lệ nhận dạng danh thiếp dễ (%)
Camcard Envernote VCR BCR
Họ tên 42.4 46.4 54.4 80.32
Số điện thoại 84.92 80.64 79.2 83
Địa chỉ 28.8 56 47.6 72.2
Email 80.8 80 76 80.04
Trung bình 59.23 65.76 64.3 78.88

Hình 15. Thống kê tỉ lệ nhận dạng danh thiếp dễ

Bảng 2. Kết quả thống kê tỉ lệ nhận dạng danh thiếp trung bình (%)
Camcard Envernote VCR BCR
Họ tên 51.88 55 43.13 77.81
Số điện thoại 91.06 82 79.31 90.19
Địa chỉ 38.75 29.38 44.38 70.62
Email 88.88 86.25 81.25 86.50

Trung bình 67.64 63.16 62.02 81.29

Hình 16. Thống kê tỉ lệ nhận dạng danh thiếp trung bình


22
Bảng 3. Kết quả thống kê tỉ lệ nhận dạng danh thiếp khó (%)
Camcard Envernote VCR BCR
Họ tên 20 52.22 45.56 64.44
Số điện thoại 87.89 82.33 79.33 82.56
Địa chỉ 20 30 47.78 62.22
Email 95.56 88.89 66.67 79.11
Trung bình 55.86 63.36 59.83 72.08

Hình 17. Thống kê tỉ lệ nhận dạng danh thiếp khó

3.3. Giao diện chính chương trình

Hình 18. Một số giao diện chính chương trình

23
Hình 19. Giao diện đăng nhập và đăng ký hệ thống

24
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Qua thời gian nghiên cứu về thư viện xử lý ảnh OpenCV, Tesseract chúng tôi đã
nghiên cứu xây dựng ra được ứng dụng nhận dạng danh thiếp. Sau khi triển khai đề tài
đã đạt được kết quả sau:

 Về mặt lý thuyết: Hiểu rõ các khái niệm cách thức hoạt động của thư việc
OpenCV, Tesseract. Cách thức quản lý danh bạ của hệ thống Android.
 Về mặt thực nghiệm: Xây dựng được ứng dụng nhận dạng danh thiếp tiếng
Việt trên Android với những chức năng cơ bản như nhận dạng và quản lý danh
ba, thực hiện cuộc gọi, nhắn tin, gửi email, đồng bộ hóa dữ liệu nếu có tài khoản.
Về hướng phát triển: Cải thiện tốc độ xử lý; Nậng cao tỷ lệ chính xác; Xây dựng
chức năng nhận dạng nhiều ảnh một lúc; Chia sẻ thông tin giữ các ứng dụng với
nhau.

TÀI LIỆU THAM KHẢO

[1] https://opencv.org/

[2] https://github.com/tesseract-ocr/tesseract

[3] https://developer.android.com/reference/org/w3c/dom/Document

[4] https://tnquangblog.wordpress.com/2017/12/11/co-che-hoat-dong- cua-


tesseract-ocr/

[5] https://stackoverflow.com/questions/22122309/opencv-adaptive-threshold-
ocr

25

You might also like