Tải bản đầy đủ

TÌM HIỂU OPENCV và xây DỰNG PHẦN mềm NHẬN DẠNG BIỂN báo GIAO THÔNG TRÊN ANDROID

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TT

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

TÌM HIỂU OPENCV VÀ XÂY DỰNG
PHẦN MỀM NHẬN DẠNG BIỂN BÁO
GIAO THÔNG TRÊN ANDROID

Sinh viên thực hiện:

Cán bộ hướng dẫn:

Trần Hoàng Quốc

Th.S Phan Phương Lan

MSSV: 1091526

MSCB: 1232
Cán bộ phản biện:

Th.S Trương Thị Thanh Tuyền (MSCB: 1068)
Th.S Huỳnh Quang Nghi (MSCB: 2628)

Luận văn được bảo vệ tại: Hội đồng chấm luận văn tốt nghiệp Bộ môn Công nghệ
phần mềm. Khoa Công nghệ Thông tin, Trường Đại học Cần Thơ vào ngày 10 tháng
05 năm 2013

Có thể tìm hiểu luận văn tại:
• Thư viện Khoa Công nghệ Thông tin, Trường Đại học Cần Thơ


GVHD: ThS. Phan Phương Lan

SVTH: Trần Hoàng Quốc – MSSV: 1091526

LỜI CẢM ƠN
Gần 4 năm học tập tại trường ĐHCT, được sự truyền đạt tận tình của thầy cô
cùng với sự giúp đỡ nhiệt tình của các bạn, hôm nay em đã hoàn thành được đề tài
luận văn tốt nghiệp.
Em xin chân thành cảm ơn quý thầy cô trường ĐHCT nói chung cũng như thầy
cô khoa CNTT nói riêng đã tận tình giảng dạy và truyền đạt những kiến thức quý báo
cho em trong suốt gần 4 năm qua. Đặc biệt là Cô Phan Phương Lan đã tận tình
hướng dẫn em trong quá trình học và làm đề tài luận văn này.
Do kiến thức còn hạn hẹp, thời gian tìm hiểu chưa sâu, chắc chắn bài báo cáo
luận văn này không tránh khỏi những thiếu sót, hạn chế rất mong nhận được sự đóng
góp của quý thầy cô để đề tài này ngày càng hoàn thiện hơn.
Em xin gởi lời chúc sức khoẻ và lòng biết ơn sâu sắc đến quý thầy cô trường Đại
Học Cần Thơ đã hướng dẫn, giúp đỡ em trong những năm qua. Xin dành những tình
cảm chân thành nhất cho gia đình và cho người thân.
Cuối cùng, xin gửi lời cảm ơn đến tất cả bạn bè đã gắn bó cùng tôi.
Cần Thơ, tháng 01-2013

Trần Hoàng Quốc

Đề tài: Tìm hiểu OpenCV và xây dựng phần mềm nhận dạng biển báo giao thông trên Android

Trang 2


NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN



.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
Cần Thơ, ngày 10, tháng 05, năm 2013


NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN

.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
Cần Thơ, ngày 10, tháng 05, năm 2013


MỤC LỤC
LỜI CẢM ƠN---------------------------------------------------------------------------- 1
NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN---------------------------------------- 2
NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN------------------------------------------ 3
MỤC LỤC--------------------------------------------------------------------------------- 4
MỤC LỤC HÌNH ẢNH----------------------------------------------------------------- 6
KÝ HIỆU VÀ VIẾT TẮT--------------------------------------------------------------- 8
TÓM TẮT--------------------------------------------------------------------------------- 9
ABSTRACT---------------------------------------------------------------------------- 10
TỪ KHÓA------------------------------------------------------------------------------- 11
CHƯƠNG 1: TỔNG QUAN-------------------------------------------------------- 12
I.

ĐẶT VẤN ĐỀ--------------------------------------------------------------------------12

II.

LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ------------------------------------------------- 12

III. PHẠM VI ĐỀ TÀI--------------------------------------------------------------------- 12
IV.

PHƯƠNG PHÁP NGHIÊN CỨU – HƯỚNG GIẢI QUYẾT-------------13

V.

KẾ HOẠCH THỰC HIỆN-----------------------------------------------------------14

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT----------------------------------------------- 16
I.

THƯ VIỆN XỬ LÝ ẢNH OPENCV-----------------------------------------------16
1. Giới thiệu Computer Vision---------------------------------------------------16
2. Lịch sử phát triển----------------------------------------------------------------17
3. Cấu trúc của OpenCV---------------------------------------------------------- 18
4. OpenCV trên Android---------------------------------------------------------- 18

II.

NỀN TẢNG ANDROID--------------------------------------------------------------18
1. Lịch sử phát triển của Android--------------------------------------------- 19
2. Các phiên bản Android và API của nó------------------------------------19
3. Hệ thống hỗ trợ của Android------------------------------------------------ 20
4. Các ứng dụng có sẵn trên Android--------------------------------------- 20
5. Kiến trúc của hệ thống Android-------------------------------------------- 24
6. Các thành phần trong một dự án ứng dụng Android---------------26

III. PHƯƠNG PHÁP PHÁT HIỆN BIỂN BÁO-------------------------------------30
1. Phát hiện biên ảnh bằng Canny-------------------------------------------- 30
2. Kết hợp đặc trưng màu với phương pháp Canny--------------------31
3. Dùng đặc trưng hình học để loại bỏ biên giả-------------------------- 32
4. Trích xuất vùng đặc trưng---------------------------------------------------- 32


IV.
1.
2.
3.

CÔNG CỤ NEUROPH STUDIO 2.6------------------------------------------34
Lịch sử phát triển----------------------------------------------------------------34
Chức năng------------------------------------------------------------------------- 34
Tầm nhìn----------------------------------------------------------------------------35

CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU--------------------36
I.

ĐẶC TẢ---------------------------------------------------------------------------------36
1. Giới thiệu--------------------------------------------------------------------------- 36
2. Mô tả tổng quan------------------------------------------------------------------ 36
3. Các yêu cầu giao tiếp---------------------------------------------------------- 39
4. Các tính năng của hệ thống--------------------------------------------------39
5. Các yêu cầu phi chức năng--------------------------------------------------46

II.

THIẾT KẾ-------------------------------------------------------------------------------46
1. Giới thiệu--------------------------------------------------------------------------- 46
2. Mô tả thiết kế hệ thống---------------------------------------------------------47
3. Thiết kế dữ liệu------------------------------------------------------------------- 51
4. Thiết kế theo chức năng------------------------------------------------------ 53

KẾT LUẬN VÀ ĐỀ NGHỊ----------------------------------------------------------- 60
I.

KẾT LUẬN-----------------------------------------------------------------------------60
1. Kết quả đạt được---------------------------------------------------------------- 60
2. Hạn chế------------------------------------------------------------------------------60

II.

HƯỚNG PHÁT TRIỂN--------------------------------------------------------------60

TÀI LIỆU THAM KHẢO------------------------------------------------------------- 61


MỤC LỤC HÌNH ẢNH
Hình 1 – Logo của tổ chức OpenCV------------------------------------------- 16
Hình 2. Các hàm xử lý ảnh của OpenCV------------------------------------- 17
Hình 3 – Lịch sử phiên bản của OpenCV------------------------------------ 18
Hình 4 – Cấu trúc thư viện OpenCV------------------------------------------- 18
Hình 5 – Robot Android – Biểu tượng của Hệ điều hành Android - 19
Hình 6 – Kiến trúc của Android------------------------------------------------- 24
Hình 7 – Máy ảo Dalvik------------------------------------------------------------ 26
Hình 8 – Kiến trúc file AndroidManifest.xml-------------------------------- 27
Hình 9 – Trạng thái của ngăn xếp khi chưacs các Activity------------29
Hình 10 – Vòng đời của một Activity.----------------------------------------- 30
Hình 11 – Không gian màu HSV------------------------------------------------ 32
Hình 12 - Quy trình của phương pháp phát hiện biển báo giao thông
-------------------------------------------------------------------------------------------- 33
Hình 13 – Lưu đồ thuật toán phát hiện biển báo.------------------------- 33
Hình 14 – Các khái niệm cơ bản trong Neuroph-------------------------- 34
Hình 15 – Mô hình cấu trúc của Neuroph------------------------------------ 35
Hình 16 – Một số biển báo cấm đường bộ Việt Nam
(http://www.hcmct.edu.vn)------------------------------------------------------- 37
Hình 17 – Một số biển báo nguy hiểm đường bộ Việt Nam
(http://www.hcmct.edu.vn)------------------------------------------------------- 38
Hình 18 – Một số biển báo hiệu lệnh đường bộ Việt Nam
(http://www.hcmct.edu.vn)------------------------------------------------------- 38
Hình 19 – Mô hình thiết kế kiến trúc của hệ thống----------------------- 47
Hình 20 – Mẫu biển báo cấm trong giao thông đường bộ Việt Nam.
-------------------------------------------------------------------------------------------- 48
Hình 21 – Mẫu biển báo nguy hiểm trong giao thông đường bộ Việt
Nam-------------------------------------------------------------------------------------- 49
Hình 22 – Mẫu biển báo hiệu lệnh trong giao thông đường bộ Việt
Nam-------------------------------------------------------------------------------------- 49
Hình 23 – Mẫu các biển báo cá biệt------------------------------------------- 49
Hình 24 – Chức năng Image Recognition của Neuroph Studio------50
Hình 25– Tập mẫu 125 biển báo kích thước 30*30 pixel----------------50


Hình 26 – Thử nghiệm nhận dạng mẫu trên tập mẫu được huấn
luyện------------------------------------------------------------------------------------- 51


KÝ HIỆU VÀ VIẾT TẮT
STT

Ký hiệu và từ viết tắt

Diễn giải

1

OpenCV

Open Source Computer Vision Library –
Thư viện xử lý hình ảnh nguồn mở.

2

Mạng noron

Hay mạng noron nhân tạo, nó là một mô
hình toán học hay mô hình tính toán
được xây dựng dựa trên các mạng noron
sinh học dùng để mô hình hóa các mối
quan hệ phức tạp giữa dữ liệu vào và kết
quả hoặc để tìm kiếm các dạng/mẫu
trong dữ liệu.

3

Tập mẫu

Là tập các dữ liệu được huấn luyện bằng
các phương pháp khác nhau của mạng
noron dùng để phục vụ cho việc nhận
dạng các dạng/mẫu trong dữ liệu.


TÓM TẮT
-------Hệ thống biển báo giao thông Việt Nam là rất nhiều và khá phức tạp. Vì thế để
ghi nhớ và hiểu hết các ý nghĩa của nó rất khó khăn. Mục đích của đề tài là xây dựng
một ứng dụng trên điện thoại thông minh cho phép người dùng tìm kiếm các thông tin
biển báo một cách trực quan. Khi người dùng quay video hoặc chụp ảnh, chương trình
sẽ tự động phát hiện các khu vực có biển báo và sau đó hiển thị hình ảnh, tên và thông
tin của biển báo được nhận dạng. Ứng dụng này được phát triển trên nền tảng Android
với mã nguồn mở thư viện xử lý ảnh OpenCV. Nó có thể nhận dạng biển báo giao
thông bằng cách xử lý hình ảnh qua giải thuật Canny có kết hợp các đặc trưng màu và
hình học để tăng độ chính xác và giảm nhiễu cho ảnh và sử dụng tập huấn luyện mẫu
mạng noron với 125 biển báo khác nhau.


ABSTRACT
-------The Vietnamese traffic signs system is so much and complex. It's very difficult to
remember and understand the meaning of each signs. The aim of the thesis is to build
an application on smart phones that allow users to search information signs visually.
When users record videos or take pictures, the program will automatically detect the
areas of signs, and then display signs, name and information of signs. The application
was developed on the Android platform with the open source OpenCV library. It can
recognize traffic sign patterns using Image processing via Canny method by
combining the color characteristics and geometry to increase accuracy and reduce
noise for image, and uses the neural network with test data set are 125 types of signs .


TỪ KHÓA
STT

Từ khóa

Diễn giải

1

OpenCV

Open Source Computer Vision Library –
Thư viện xử lý hình ảnh nguồn mở.

2

Biển báo

Là các biển báo giao thông đường bộ
Việt Nam


CHƯƠNG 1: TỔNG QUAN
I. ĐẶT VẤN ĐỀ
Hiện nay, số lượng biển báo giao thông đường bộ của Việt Nam khá nhiều với
các phân loại khác nhau, điều này gây khó khăn cho người tham gia giao thông có thể
ghi nhớ tất cả các ý nghĩa của các biển báo để họ thực hiện đúng khi tham gia lưu
thông trên đường. Đây cũng là lý do dẫn đến nhiều người phạm luật vì không hiểu đầy
đủ nội dung các chỉ dẫn của các biển báo.
Tận dụng lợi thế dễ sử dụng và ngày càng phổ biến của các thiết bị di động đặc
biệt là các thiết bị thông minh có sử dụng hệ điều hành như smartphone, máy tính
bảng,… Nhằm khai thác tính cần thiết và thực tiễn của vấn đề trên, tôi đề xuất xây
dựng một ứng dụng giúp người dùng có thể nhận dạng và biết được nội dung, chỉ dẫn
của các biển báo giao thông dễ dàng và nhanh chóng thông qua thiết bị di động sử
dụng hệ điều hành Android.
II. LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ
Hiện tại, có rất nhiều phần mềm làm về nhận dạng, nhưng đa phần trong số đó là
các phần mềm sử dụng cho các tổ chức, doanh nghiệp với quy mô lớn như:
-

Phần mềm nhận dạng biển số xe, ứng dụng ở các bãi giữ xe của siêu thị,
trung tâm thương mại,..

-

Phần mềm nhận dạng khuôn mặt, ứng dụng chủ yếu ở thiết bị thông minh
như: máy tính, máy ảnh, điện thoại thông minh,…và các cơ sở tiên tiến về
công nghệ.

-

Phần mềm nhận dạng và phân tích các hành động để ứng dụng vào các hệ
thống an ninh ở các sân bay,…

-

Ngoài ra, nhiều phần mềm khác cũng ứng dụng công nghệ nhận dạng.

Về phần mềm dùng để nhận dạng biển báo giao thông, hiện nay có một số phần
mềm được ứng dụng và sử dụng trên các xe thông minh tự lái hoặc các xe taxi để đưa
ra các cảnh báo cho người điều khiển. Những phần mềm này chỉ được nghiên cứu và
áp dụng ở các nước giao thông tiên tiến mà không chia sẻ mã nguồn và tài liệu phát
triển ra bên ngoài. Cho đến thời điểm đề xuất đề tài (01/2013), tôi vẫn chưa tìm thấy
phần mềm nào về nhận dạng biển báo giao thông được sử dụng cho các mục đích cá
nhân.
III. PHẠM VI ĐỀ TÀI
Đề tài sẽ xây dựng một ứng dụng có thể nhận dạng được các biển báo giao thông
đường bộ của Việt Nam, được thiết kế dùng cho người dùng cá nhân đang sở hữu thiết
bị di động được cài đặt hệ điều hành Android, một hệ điều hành di động nguồn mở
phổ biến nhất hiện nay.


IV. PHƯƠNG PHÁP NGHIÊN CỨU – HƯỚNG GIẢI QUYẾT
Để giải quyết vấn đề nêu trên, trước hết tôi cần tìm hiểu về nội dung, ý nghĩa,
cách phân biệt tất cả các loại biển báo giao thông đường bộ của Việt Nam, cùng với
các quy định xử phạt đối với từng trường hợp vi phạm ứng với các biển báo nói trên.
Bên cạnh đó, tôi cũng nghiên cứu và tìm hiểu về kiến thức lập trình ứng dụng
Android và thư viện xử lý ảnh OpenCV dành cho Android. Tôi cũng tìm hiểu và áp
dụng các phương pháp lọc ảnh, xử lý ảnh bằng các giải thuật, phương pháp tối ưu để
có thể hoàn thành được ứng dụng đúng với yêu cầu được đề ra.
 Chọn công cụ thực hiện:
Danh sách các công cụ được sử dụng để hoàn thành đề tài:
STT

Công cụ

Chức năng

Giai đoạn
Đặc tả
Phân tích

1

Microsoft Office
2010

Soạn thảo tài liệu và slide báo
cáo

Thiết kế
Kiểm thử
Báo cáo
Thiết kế

2

Eclipse

Công cụ, môi trường phát triển
ứng dụng.

Lập trình
Kiểm thử

3

OpenCV

Thư viện hỗ trợ ứng dụng trong
việc xử lý ảnh và nhận dạng
biển báo.

Thiết kế

Lập trình

4

Smartphone Android

Chạy thử phần mềm sau khi
đóng gói.

5

Neuroph Studio

Tạo tập tin mẫu mạng noron

6

StarUML

Vẽ lưu đồ Usecase

WinSnap

Chụp ảnh lưu đồ, hình ảnh cho
báo cáo.

7

Lập trình
Kiểm thử
Kiểm thử
Lập trình
Kiểm thử
Đặc tả
Thiết kế
Đặc tả
Thiết kế
Báo cáo


8

Website gliffy.com

Vẽ lưu đồ thuật toán

9

Adobe Photoshop

Xử lý ảnh cho báo cáo

Thiết kế
Báo cáo
Báo cáo

V. KẾ HOẠCH THỰC HIỆN
Tuần
01 - 02

Ngày
31/12/2012 - 06/91/2013

Công việc
• Tiếp nhận đề tài từ GVHD
• Hoàn thành mô tả đề tài

02 - 05

07/01/2013 – 27/01/2013

• Hoàn thành đặc tả đề tài.
• Hoàn thành chương 1: Tổng quan.
• Viết tài liệu Thiết kế phần mềm.
• Tìm hiểu kiến thức về kỹ thuật lập
trình Android.
• Tìm hiểu về lập trình OpenCV trên
Android Project.
• Tìm hiểu các kỹ thuật về xử lý và
nhận dạng ảnh.

05 - 07

28/01/2013 – 10/02/2013

• Ứng dụng các kỹ thuật về lập trình,
xử lý ảnh và nhận dạng vào dự án.
• Cập nhật lại các tài liệu: Đặc tả,
thiết kế

07 – 09

11/02/2013 – 24/02/2013

• Thu thập thông tin về các biển báo
của Giao thông đường bộ Việt
Nam.
• Tiếp tục hoàn thiện chương trình.
• Cập nhật lại các tài liệu: Đặc tả,
thiết kế

09 - 11

25/02/2013 – 10/03/2013

• Chỉnh sửa và tối ưu code và hoàn
chỉnh chương trình.

11 - 13

11/03/2013 – 24/03/2013

• Tiếp nhận góp ý của GVHD để
hoàn thiện chương trình hoàn thiện
nhất.

Đề tài: Tìm hiểu OpenCV và xây dựng phần mềm nhận dạng biển báo giao thông trên Android

Trang 15


• Cập nhật các tài liệu
13 - 15

25/03/2013 – 07/04/2013

• Hoàn thành chương trình và đưa ra
sản phẩm.
• Cài đặt và kiểm thử chương trình.

15 - 17

08/04/2013 – 21/04/2013

• Hoàn thành tài liệu báo cáo.
• Soạn slide báo cáo.

17 - 18

22/04/2013 – 28/04/2013

• Tiến hành bảo vệ Luận Văn trước
Hội đồng

Đề tài: Tìm hiểu OpenCV và xây dựng phần mềm nhận dạng biển báo giao thông trên Android

Trang 16


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Chương này trình bày cơ sở lý thuyết về:
-

Thư viện xử lý ảnh OpenCV: thư viện chính làm nhiệm vụ xử lý ảnh
trong ứng dụng.

Nền tảng Android: Nền tảng được sử dụng để lập trình nên ứng dụng.
-

Phương pháp phát hiện biển báo: Các phương pháp chính để pháp hiện
biển báo giao thông và trích xuất biển báo phục vụ cho quá trình nhận
dạng.

-

Công cụ Neuroph Studio 2.6: Công cụ chính yếu để tạo ra tập tin huấn
luyện mẫu mạng noron các biển báo, phục vụ cho việc nhận dạng biển
báo sau khi nhận dạng được.

I. THƯ VIỆN XỬ LÝ ẢNH OPENCV
1. Giới thiệu Computer Vision
OpenCV (Open Source Computer Vision Library) là một thư viện tập hợp các
hàm lập trình chủ yếu nhằm vào công nghệ thời gian thực của thị giác máy tính, được
phát triển bởi Intel và hiện tại được hỗ trợ bởi Willow Garage và Itseez. OpenCV là
thư viện mã nguồn mở miễn phí theo giấy phép BSD, nhằm giúp cho người dùng có
thể dễ dàng thay đổi và sử dụng.

Hình 1 – Logo của tổ chức OpenCV
Hiện tại, OpenCV có hơn 2500 thuật toán tối ưu hóa, trong đó bao gồm một tập
hợp tất cả các thuật toán về thị giác máy tính và máy học. Các thuật toán này có thể
được sử dụng để phát hiện và nhận diện khuôn mặt, nhận diện đối tượng, phân loại các
hành động của con người trong video, theo dõi đối tượng chuyển động, trích xuất các
mô hình 3D của các đối tượng, tìm hình ảnh tương tự từ một cơ sở dữ liệu hình ảnh,
loại bỏ mắt đỏ từ hình ảnh chụp sử dụng đèn flash, theo dõi chuyển động của mắt,…
OpenCV hiện có hơn 47 nghìn người dùng trên toàn thế giới. Thư viện này được sử
dụng rộng rãi các trong nhóm nghiên cứu của các công ty lớn như: Google, Yahoo,
Microsoft, Intel, IBM, Sony, Honda, Toyota… và các cơ quan chính phủ.


Hình 2. Các hàm xử lý ảnh của OpenCV
2. Lịch sử phát triển
Chính thức ra mắt vào năm 1999, dự án OpenCV ban đầu một sáng kiến nghiên
cứu của Intel để cải tiến CPU và các ứng dụng chuyên sâu, một phần của một loạt các
dự án bao gồm cả theo dõi các tia sáng theo thời gian thực và màn hình hiển thị 3D.
Người đóng góp chính cho dự án tối ưu hóa bao gồm một số chuyên gia trong Intel
Nga và nhóm các chuyên gia phòng nghiên cứu hiệu suất của Intel. Trong những ngày
đầu của OpenCV, các mục tiêu của dự án đã được mô tả như
OpenCV ban đầu được chỉ hỗ trợ viết bằng ngôn ngữ C, nhưng hiện tại đã hỗ trợ
thư viện và phát triển trên các nền tảng ngôn ngữ khác như C++, Java, Android, iOS,
…Đồng thời, nó cũng hỗ trợ trên đa môi trường hệ điều hành: Windows, Linux,
Android, Mac OS, Cube,…
Phiên bản alpha đầu tiên của OpenCV được phát hành ra công chúng tại hội nghị
IEEE về Computer Vision và Pattern Recognition vào năm 2000. Phiên bản 1.0 đầu
tiên được phát hành vào năm 2006. Vào giữa năm 2008, OpenCV được sự ủng hộ của
công ty từ Willow Garage, và bây giờ lại được phát triển tích cực.
Tháng 10/2009, OpenCV 2 được phát hành với nhiều cải tiến vượt bật, bao gồm
những thay đổi lớn về thay đổi ngôn ngữ lập trình, về giao diện, sử dụng dễ dàng hơn,
một số chức năng mới, và khai thác tốt hơn về hiệu suất (đặc biệt là trên các hệ thống
đa lõi).
Trong tháng 8 năm 2012, OpenCV được hỗ trợ và tiếp quản bởi một tổ chức phi
lợi nhuận và website OpenCV.org được xây dựng ngay sau đó.


Hình 3 – Lịch sử phiên bản của OpenCV
3. Cấu trúc của OpenCV
Cấu trúc của OpenCV gồm 4 thành phần chính:
CxCore: Chứa các cấu trúc cơ bản như điểm, đường, dãy, mặt, ma trận… và các
thao tác cấp thấp liên quan.
MLL (Machine Learning Library) là thư viện machine learning, thư viện này bao
gồm rất nhiều lớp thống kê và gộp các công cụ xử lý.
CV (Computer Vision): Chứa hầu hết các thao tác liên quan đến việc xử lý ảnh ở
cấp thấp như lọc ảnh, trích biên, phân vùng, tìm contour, biến đổi Fourier…
HighGUI: Các thao tác lên những file ảnh và file Video như đọc ảnh, hiển thị
ảnh, chuyển đổi định dạng…

Hình 4 – Cấu trúc thư viện OpenCV
4. OpenCV trên Android
Thư viện OpenCV dành cho hệ điều hành Android được OpenCV cung cấp trên
trang chủ của mình (http://opencv.org/android) cùng với các tài liệu hướng dẫn sử
dụng và cộng đồng trao đổi học tập với nhau.
II. NỀN TẢNG ANDROID
Android là một hệ điều hành cho các thiết bị di động, dựa trên nền tảng Linux,
được Google phát triển và sau đó trở thành sản phẩm chiến lược của tổ chức OHA. Nó
là sản phẩm mã nguồn mở, cho phép các nhà phát triển có thể điều khiển thiết bị di
động có cài hệ điều hành Android thông qua các đoạn mã được viết bằng ngôn ngữ
Java.


Hình 5 – Robot Android – Biểu tượng của Hệ điều hành Android
1. Lịch sử phát triển của Android
Vào những năm đầu của thế kỷ 21, Andy Rubin đã tạo ra Android như là một hệ
điều hành mở dành cho các thiết bị di động. Năm 2005, Google đã mua lại sản phẩm
này từ tay Andy Rubin và cử ông làm giám đốc phát triển nền tảng di động cho
Google, một mặt giúp Google khẳng định mạnh mẽ vị trí của mình trong lĩnh vực mới
được xem là Internet 2.0, nhưng mặt khác cũng tạo ra cuộc cạnh tranh khốc liệt giữa
Google và đối thủ nặng ký Apple iPhone, đang là nhà cung cấp được ưa chuộng nhất
thời điểm này.
Tháng 11/2007, Android phiên bản 1.0 ra đời cùng với sự thành lập tổ chứ OHA
(Open Handset Alliance) gồm nhiều công ty phần cứng, phần mềm. Mục tiêu chính
của tổ chức này là cùng nhau nghiên cứu phát triển tiêu chuẩn mở cho các thiết bị di
động, để giảm giá thành sản xuất và nâng cao chất lượng dịch vụ. Android là hệ điều
hành mở dành cho thiết bị di động đầu tiên, ra đời theo mục tiêu này. Nó tựa trên nền
tảng mở Linux và ngôn ngữ lập trình Java của Oracle. Nền tảng Android phải hoạt
động như một máy tính chạy trên chip, nghĩa là đủ nhỏ để vừa với thiết bị và đủ mạnh
để chạy các ứng dụng. Ngoài ra, Android còn cung cấp các công cụ, tài liệu, thư viện
hỗ trợ những nhà phát triển phần mềm và phần cứng phát triển ứng dụng cho điện
thoại một cách dễ dàng. Trải qua nhiều thập niên, Android đã phát triển và nâng cấp
lên các phiên bản khác nhau và phiên bản mới nhất hiện nay (năm 2013) là phiên bản
Android 4.2. Thiết bị cầm tay cài đặt Android đầu tiên trên thị trường là thiết bị TMobile G1 do HTC sản xuất và bán ra ở thị trường Mỹ. Ngày nay, rất nhiều nhà sản
xuất điện thoại như HTC, Samsung, LG Electronics, T-Mobile, Lenovo,… sử dụng
Android làm hệ điều hành cho các dòng điện thoại mới của họ.
2. Các phiên bản Android và API của nó
Lịch sử các phiên bản của Android và API tiêu biểu của nó được liệt kê như sau:
-

Android 1.0 (API 1): phát hành ngày 23/09/2008.

-

Android 1.1 (API 2): phát hành ngày 09/02/2009.

-

Android 1.5 Cupcake (API 3): phát hành ngày 30/04/2009.

-

Android 1.6 Donut (API 4): phát hành ngày 15/09/2009.

-

Android 2.0 Eclair (API 5): phát hành ngày 26/10/2009.

-

Android 2.0.1 Eclair (API 6): phát hành ngày 03/12/2009.


-

Android 2.1 Eclair (API 7): phát hành ngày 12/01/2010.

-

Android 2.2 Froyo (API 8): phát hành ngày 20/05/2010.

-

Android 2.3 Gingerbread (API 9): phát hành ngày 06/12/2010.

-

Android 2.3.3 Gingerbread (API 10): phát hành 09/02/2011.

-

Android 3.0 Honeycomb (API 11): phát hành ngày 22/02/2011.

-

Android 3.1 Honeycomb (API 12): phát hành ngày 10/05/2011.

-

Android 3.2 Honeycomb (API 13): phát hành ngày 15/07/2011.

-

Android 4.0 Ice Cream Sanwich (API 14): phát hành ngày 19/10/2011.

-

Android 4.0.3 Ice Cream Sanwich (API 15): phát hành ngày 16/12/2011.

-

Android 4.1 Jelly Bean (API 16): phát hành ngày 09/07/2012.

-

Android 4.2 Jelly Bean (API 17): phát hành ngày 11/02/2013.

Nguồn: http://en.wikipedia.org/wiki/Android_version_history
3. Hệ thống hỗ trợ của Android
Android được phát triển theo hướng mở hết mức có thể, người dùng hay các nhà
phát triển có toàn quyền thay đổi giao diện, các thành phần hệ thống hay thậm chí là
mã nguồn của hệ điều hành này tùy thích. Điều này khiến cho hệ điều hành này trở nên
rất dễ tùy biến nhưng kèm theo đó là khó làm quen đối với những người chưa có kinh
nghiệm. Tuy vậy, sự thành công của nó trên thị trường phần nào đã khẳng định được
chất lượng so với các đối thủ.
4. Các ứng dụng có sẵn trên Android
Một điện thoại Android thông thường sẽ đi kèm với một vài ứng dụng đã được
cài đặt sẵn, bao gồm:
-

Một trình email tương thích với Gmail.

-

Chương trình quản lý tin nhắn SMS.

-

Chương trình quản lý thông tin cá nhân, bao gồm cả lịch làm việc, danh bạ,
và được đồng bộ hóa với dịch vụ của Google.

-

Phiên bản thu gọn của Google Map cho điện thoại, bao gồm StreetView, tìm
kiếm địa điểm, chỉ đường, tình trạng giao thông,...

-

-

Trình duyệt web dựa trên nhân WebKit.

-

Chương trình tán gẫu (chat).

-

Trình đa phương tiện (chơi nhạc, xem ảnh,…).
Android Marketplace – cho phép người dùng tải về và cài đặt các ứng dụng
mới.

Tất cả các ứng dụng có sẵn đều được viết bằng ngôn ngữ Java và sử dụng
Android SDK.


Các dữ liệu về thông tin người dùng được các ứng dụng có sẵn sử dụng - như
thông tin về danh bạ - vẫn hoàn toàn có thể được sử dụng bởi các ứng dụng của bên
thứ ba.
Tương tự vậy, ứng dụng của bạn hoàn toàn có thể xử lý các sự kiện như có cuộc
gọi đến, nhận một tin nhắn mới,… thay cho các ứng dụng có sẵn.
4.1.

Truy cập phần cứng (Access Hardware)

Android bao gồm thư viện các API giúp đơn giản hóa tối đa việc sử dụng phần
cứng của thiết bị. Điều đó đảm bảo rằng bạn không cần phải bận tâm nhiều đến việc
ứng dụng của mình có thể chạy như mong đợi trên nhiều thiết bị khác nhau hay không,
miễn là thiết bị đó có hỗ trợ Android.
Android SDK bao gồm các API cho phần cứng như: GPS, camera, kết nối mạng,
Wi-Fi, Bluetooth, con quay gia tốc, màn hình cảm ứng, quản lý năng lượng,…
4.2.

Dịch vụ chạy nền (Background Services)

Android hỗ trợ các ứng dụng và dịch vụ được thiết kể để chạy ẩn.
Do kích thước nhỏ của màn hình điện thoại nên tại một thời điểm chỉ có thể thấy
được một ứng dụng. Dịch vụ chạy nền giúp tạo ra các thành phần ứng dụng “vô hình”
để thực hiện tự động một tác vụ nào đó mà không cần phải có sự tương tác của người
dùng. Ví dụ như một dịch vụ chạy nền có chức năng chặn cuộc gọi đến đối với các số
điện thoại có trong “black list” chẳng hạn.
4.3.

SQLite Database

Bởi vì tính chất nhỏ gọn và bị hạn chế về phần cứng của điện thoại di động, cho
nên đòi hỏi việc lưu trữ và truy xuất dữ liệu phải nhanh chóng và hiệu quả.
Android hỗ trợ hệ quản trị dữ liệu nhỏ gọn SQLite, và cung cấp cho ứng dụng các
API để thao tác. Mặc định mỗi ứng dụng đều được chạy trong sandbox - điều này có
nghĩa là nội dung của từng database ứng với từng ứng dụng chỉ có thể được truy cập
bằng chính ứng dụng đó. Tuy nhiên cũng có các cơ chế để ứng dụng có thể chia sẽ,
trao đổi các database với nhau.
4.4.

Hệ thống thông báo (Notifications)

Thông báo là cách thức tiêu chuẩn mà ở đó thiết bị báo cho người dùng đã có
một sự kiện nào đó xảy ra. Chẳng hạn như có cuộc gọi tới, máy sắp hết pin,… Sử dụng
các API bạn có thể cho ứng dụng của mình thông báo đến người dùng bằng âm thanh,
rung, hoặc thậm chí là cả đèn LED của thiết bị.
4.5.

Tối ưu hóa bộ nhớ và quản lý tiến trình

Việc quản lý bộ nhớ và tiến trình trong Android có một chút khác biệt. Giống
như công nghệ Java và .NET, Android sử dụng một bộ run-time của riêng mình với
công nghệ ảo hóa để quản lý bộ nhớ của các ứng dụng đang chạy. Không giống như
những nền tảng khác, Android run-time cũng đồng thời quản lý luôn cả thời gian sống
của ứng dụng. Android đảm bảo các ứng dụng đều được đáp ứng bằng cách dừng và
hủy các tiến trình không cần thiết để giải phóng tài nguyên cho các tiến trình có độ ưu
tiên cao hơn.


Trong bối cảnh đó, độ ưu tiên được xác định tùy thuộc vào ứng dụng mà người
dùng đang tương tác. Android đảm bảo rằng các tiến trình có thể bị hủy một cách
nhanh chóng, nhưng đồng thời cũng có thể khởi động lại nhanh không kém nếu cần.
Điều này thực sự quan trọng trong một môi trường mà ở đó bản thân ứng dụng không
thể tự kiểm soát được thời gian sống cho chính mình.
Android software development kit (SDK)

4.6.

Bộ SDK của Android bao gồm mọi thứ cần thiết giúp bạn có thể lập trình,
debug, và test ứng dụng Android.
-

Android API: Cốt lõi của bộ SDK là thư viện các API. Và Google cũng
chỉ sử dụng bộ API này để xây dựng các ứng dụng có sẵn cho Android
(native application).

-

Development Tool: SDK bao gồm rất nhiều công cụ giúp biên dịch, sửa
lỗi, và hỗ trợ trong việc lập trình ứng dụng.

-

Android Emulator: Trình giả lập một thiết bị chạy Android thực sự với
nhiều skin thay thế, cực kì tiện lợi cho việc test ứng dụng Android ngay
trên máy tính mà không cần phải thông qua một thiết bị chạy Android
thực.

-

Tài liệu: SDK bao gồm bộ tài liệu rất chi tiết, giải thích cặn kẽ, chính xác
những gì bao gồm trong mỗi package, class cùng với cách sử dụng chúng.
Ngoài tài liệu về “code”, còn có những tài liệu dùng để “getting started”
và giải thích các nguyên tắc về cơ chế hoạt động của ứng dụng trong
Android.

-

Code mẫu: SDK bao gồm các ứng dụng mẫu đơn giản minh họa cho các
tính năng nổi bật trên Android, cũng như các ứng dụng demo cách sử dụng
những tính năng của bộ API.

Đối với Eclipse IDE, Google cung cấp một plug-in giúp kết hợp chặt chẽ giữa
Eclipse với Android Emulator cũng như công cụ debug. Điều này giúp cho việc phát
triển ứng dụng cho Android bằng Eclipse thực sự trở nên đơn giản.
Kiến trúc ứng dụng (Application Architecture)

4.7.

Ý tưởng của Android đó là khuyến khích việc tái sử dụng lại các thành phần đã
có, cho phép ứng dụng của bạn có thể chia sẻ Activity, Service, Dữ liệu với các ứng
dụng khác trong giới hạn truy cập do bạn đặt ra.
Một ví dụ đơn giản: bạn cần làm một ứng dụng chụp ảnh hàn quốc, về cơ bản
ứng dụng này sẽ làm hai nhiệm vụ: một là chụp ảnh, hai là ghép, chỉnh sửa ảnh. Thay
vì phải tự xây dựng chức năng chụp ảnh, bạn sẽ sử dụng lại chức năng chụp ảnh có sẵn
trong ứng dụng chụp ảnh của Android. Việc này giúp bạn dễ dàng và mau chóng xây
dựng được những ứng dụng nhiều tính năng và sử dụng hiệu quả tài nguyên máy.
Những dịch vụ dưới đây là nền tảng kiến trúc của mọi ứng dụng Android, đây là
khuôn khổ cho bạn xây dựng ứng dụng của riêng mình:
-

Activity Manager: Kiểm soát vòng đời của Activity.


-

Views: Xây dựng giao diện người dùng cho các Activity.

-

Notification Manager: Cung cấp một cơ chế thống nhất và an toàn để ứng
dụng có thể đưa ra các thông báo cho người dùng.

-

Content Providers: Giúp cho việc trao đổi, chia sẽ dữ liệu giữa các ứng
dụng với nhau.

-

Resource Manager: Hỗ trợ quản lý các loại tài nguyên không là code (noncode resources) như các chuỗi, hình ảnh, hoặc âm thanh,…
Các thư viện của Android

4.8.

Android cung cấp các gói API để phát triển ứng dụng. Danh sách các gói core
API dưới đây giúp cho bạn có cái nhìn tổng quát về những gì được hỗ trợ sẵn, tất cả
các thiết bị chạy Android đều phải hỗ trợ được tối thiểu các API này.
-

android.util: Gói api lõi, chứa các class cấp thấp như containers, string
formatters, XML parsing.

-

android.os: Truy cập tới các chức năng của hệ điều hành chẳng hạn như:
gửi nhận tin nhắn, giao tiếp nội bộ giữa các ứng dụng, thời gian,…

-

android.graphics: Cung cấp các lớp liên quan tới xử lý đồ họa ở mức thấp.
Hỗ trợ các hàm cơ bản như vẽ điểm, vẽ miền, tô màu,… trên một khung
canvas.

-

android.text: Cung cấp các hàm phân tích và xử lý chuỗi.

-

android.database:Cung cấp các lớp cấp thấp cần thiết để làm việc với
databases.

-

android.content: Dùng để quản lý các tài nguyên, các nội dung, và các gói.

-

android.view: Views là lớp cha của mọi lớp giao diện người dùng.

-

android.widget: Được kế thừa từ lớp View, bao gồm các lớp để cơ bản để
xây dựng giao diện widget như: lists, buttons, layouts. (widget là một
dạng ứng dụng mini - hiển thị ở màn hình chính - cung cấp các chức năng
“nho nhỏ” lấy từ ứng dụng lớn).

-

android.maps: Gói API cấp cao, dùng để truy cập đến các chức năng của
GoogleMap.

-

android.app: Gói API cấp cao, bao gồm lớp Activity và Service - hai lớp
cơ sở cho mọi ứng dụng Android.

-

android.telephony: Cung cấp cho bạn khả năng tương tác trực tiếp với các
chức năng cơ bản của một chiếc điện thoại như nghe, gọi, tin nhắn.

-

android.webkit: Cung cấp một WebView control trên nền webkit để có thể
nhúng vào ứng dụng, cùng với các api điều khiển cơ bản như stop, refresh,
cookie manager,…


5. Kiến trúc của hệ thống Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành
Android. Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây.

Hình 6 – Kiến trúc của Android
 Tầng Applications
Đây là tầng cao nhất và ứng dụng Android của bạn sẽ nằm trong tầng này. Tuy
nhiên, để tiện lợi cho việc truy xuất một thông tin ở các tầng dưới, Google đã viết sẵn
một thư viện tiện ích trong tầng này giúp bạn truy xuất thông tin ở những tầng bên
dưới linh hoạt và hiệu quả nhất.
 Tầng Application Framework
Tầng này chứa các thư viện Java hỗ trợ người dùng giao tiếp với tầng Android
framework. Một thành phần của tầng này di Google cung cấp sẵn cho bạn, một phần là
do bạn tự tạo ra. Trong tầng này thì thành phần quan trọng nhất là Activity Manager vì
nó quản lý chu kỳ sống của Activity.
-

Activity Manager: quản lý chu kỳ sống của các Activity trong ứng dụng
Android.

-

Telephony Manager: cung cấp thư viện để truy xuất đến các dịch vụ thoại
cũng như là thông tin thuê bao.
-

View System: xử lý giao diện trong ứng dụng Android của bạn.


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×