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ơ 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 012013 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. CÔNG CỤ NEUROPH STUDIO 2.6 34 1. Lịch sử phát triển 34 2. Chức năng 34 3. 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 3030 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
Trang 1TRƯỜ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:
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ơ
Trang 2LỜ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àiluậ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áoluậ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ự đónggó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 ĐạiHọc Cần Thơ đã hướng dẫn, giúp đỡ em trong những năm qua Xin dành những tìnhcả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 GVHD: ThS Phan Phương Lan SVTH: Trần Hoàng Quốc – MSSV: 1091526
Trang 2
Đề 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 3NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
Cần Thơ, ngày 10, tháng 05, năm 2013
Trang 4NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN
Cần Thơ, ngày 10, tháng 05, năm 2013
Trang 5MỤ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
Trang 6IV CÔNG CỤ NEUROPH STUDIO 2.6 - 34
1 Lịch sử phát triển - 34
2 Chức năng - 34
3 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
Trang 7MỤ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
Trang 8Hình 26 – Thử nghiệm nhận dạng mẫu trên tập mẫu được huấn luyện - 51
Trang 9KÝ HIỆU VÀ VIẾT TẮT
Thư viện xử lý hình ảnh nguồn 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 noronsinh học dùng để mô hình hóa các mốiquan hệ phức tạp giữa dữ liệu vào và kếtquả hoặc để tìm kiếm các dạng/mẫutrong dữ liệu
các phương pháp khác nhau của mạngnoron dùng để phục vụ cho việc nhậndạng các dạng/mẫu trong dữ liệu
Trang 10TÓ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ựngmộ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 tinbiể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ôngtin 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 Androidvới mã nguồn mở thư viện xử lý ảnh OpenCV Nó có thể nhận dạng biển báo giaothô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ẫumạng noron với 125 biển báo khác nhau
Trang 11The Vietnamese traffic signs system is so much and complex It's very difficult toremember 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 theareas of signs, and then display signs, name and information of signs The applicationwas developed on the Android platform with the open source OpenCV library It canrecognize traffic sign patterns using Image processing via Canny method bycombining the color characteristics and geometry to increase accuracy and reducenoise for image, and uses the neural network with test data set are 125 types of signs
Trang 12TỪ KHÓA
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
Trang 13CHƯƠ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ớicá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ưuthô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 đặcbiệt là các thiết bị thông minh có sử dụng hệ điều hành như smartphone, máy tínhbả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âydự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ẫncủ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 minhnhư: 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ầnmề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áttriể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ấyphầ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
Trang 14IV 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ớicá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ụngAndroid và thư viện xử lý ảnh OpenCV dành cho Android Tôi cũng tìm hiểu và ápdụ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:
2 Eclipse Công cụ, môi trường phát triển
ứng dụng
Thiết kế Lập trìnhKiể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ìnhKiểm thử
4 Smartphone Android Chạy thử phần mềm sau khi
đóng gói
Lập trìnhKiểm thử
5 Neuroph Studio Tạo tập tin mẫu mạng noron Lập trình
Trang 158 Website gliffy.com Vẽ lưu đồ thuật toán Thiết kế
• 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ậptrì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
Trang 16• 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
Trang 16
Đề 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 17CHƯƠ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ấnluyện mẫu mạng noron các biển báo, phục vụ cho việc nhận dạng biểnbá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áchà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, đượcphá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ậphợ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áchà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ủ
Trang 18OpenCV 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 đầutiên được phát hành vào năm 2006 Vào giữa năm 2008, OpenCV được sự ủng hộ củacô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ồmnhữ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 philợi nhuận và website OpenCV.org được xây dựng ngay sau đó
Trang 19Hì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 baogồ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êntrang 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
Trang 20Hì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ẩmnày từ tay Andy Rubin và cử ông làm giám đốc phát triển nền tảng di động choGoogle, 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ữaGoogle và đối thủ nặng ký Apple iPhone, đang là nhà cung cấp được ưa chuộng nhấtthờ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ínhcủ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ềuhà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ềntả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ệnthoạ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ấplê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ảnAndroid 4.2 Thiết bị cầm tay cài đặt Android đầu tiên trên thị trường là thiết bị T-Mobile G1 do HTC sản xuất và bán ra ở thị trường Mỹ Ngày nay, rất nhiều nhà sảnxuất điện thoại như HTC, Samsung, LG Electronics, T-Mobile, Lenovo,… sử dụngAndroid 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
Trang 21- 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
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 đã đượccà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ìmkiế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ụngAndroid SDK
Trang 22Cá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ênthứ 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ộcgọ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ầncứ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ườidù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.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ụngcá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ốngnhư công nghệ Java và NET, Android sử dụng một bộ run-time của riêng mình vớicô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ốngcủ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ó độ ưutiên cao hơn
Trang 23Trong bối cảnh đó, độ ưu tiên được xác định tùy thuộc vào ứng dụng mà ngườidù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áchnhanh 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ôngthể tự kiểm soát được thời gian sống cho chính mình.
4.6 Android software development kit (SDK)
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ũngchỉ 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ửalỗ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ớinhiều skin thay thế, cực kì tiện lợi cho việc test ứng dụng Android ngaytrên máy tính mà không cần phải thông qua một thiết bị chạy Androidthự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ácnhữ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 trongAndroid
- Code mẫu: SDK bao gồm các ứng dụng mẫu đơn giản minh họa cho cáctính năng nổi bật trên Android, cũng như các ứng dụng demo cách sử dụngnhữ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ữaEclipse với Android Emulator cũng như công cụ debug Điều này giúp cho việc pháttriển ứng dụng cho Android bằng Eclipse thực sự trở nên đơn giản
4.7 Kiến trúc ứng dụng (Application Architecture)
Ý 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 ứngdụ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ẵntrong ứ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âydự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
Trang 24- 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 để ứngdụ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 ứngdụng với nhau
- Resource Manager: Hỗ trợ quản lý các loại tài nguyên không là code code resources) như các chuỗi, hình ảnh, hoặc âm thanh,…
(non-4.8 Các thư viện của Android
Android cung cấp các gói API để phát triển ứng dụng Danh sách các gói coreAPI 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, stringformatters, 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 khungcanvas
- 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ớidatabases
- 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ộtdạ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ủaGoogleMap
- 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ácchứ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,…
Trang 255 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 Tuynhiê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ẵnmộ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êndướ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 Androidframework 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
Trang 26- Location Manager: cung cấp thư viện hỗ trợ người dùng định vị vị trí của thiết bị.
Tầng Libraries
Android native libraries là tập thư viện C/C++ và bạn sẽ gọi thư viện này thôngqua giao diện Java (trong tầng trên Application Framework) Phần này gồm các thưviện:
- Surface Manager: tạo các cửa sổ giao diện
- OpenGL: hỗ trợ xây dựng ứng dụng đồ họa 2D và 3D
- Media Framework: hỗ trợ xây dựng các ứng dụng về âm thanh và hình ảnh
- SSl: cung cấp chức năng bảo mật thiết bị
- SQLite: cơ sở dữ liệu quan hệ mã nguồn mở được nhúng trong thiết bị
- WebKit: hỗ trợ hiển thị nội dung website
Tầng Linux Kernel
Đây là nền tảng cơ bản nhất của hệ điều hành Android, đảm nhiệm vai trò giaotiếp phần cứng, điều khiển các chức năng cơ bản nhất của thiết bị và cung cấp các tínhnăng thiết yếu như quản lý bộ nhớ, quản lý luồng, kết nối mạng… bằng hàng loạt cácdriver do nhà sản xuất viết cho thiết bị của họ
Máy ảo Dalvik
Máy ảo Dalvik là một phần mềm dùng để chạy các ứng dụng trên thiết bịAndroid, bao gồm một tập các thư viện lõi (core libraries) cung cấp hầu hết các chứcnăng trong thư viện lõi của ngôn ngữ lập trình Java
Trang 27Hình 7 – Máy ảo Dalvik
Mỗi ứng dụng Android sẽ chạy trên một tiến trình riêng dành cho nó, với mộtmáy ảo Dalvik riêng cũng được thiết lập dành riêng cho mỗi ứng dụng
Dalvik được viết để một thiết bị có thể chạy nhiều máy ảo cùng lúc hiệu quả.Máy ảo Dalvik thực thi các tập tin dex, là loại tập tin được tối ưu để tiết kiệm bộ nhớ,
và để quản lý tiến trình, quản lý bộ nhớ hiệu quả, máy ảo này cũng sử dụng các chứcnăng do Linux kernel cung cấp
6 Các thành phần trong một dự án ứng dụng Android
Android Project
Android project là một hệ thống thư mục và file chứa toàn bộ source code, tàinguyên,… mà mục đích cuối cùng là để đóng gói thành một file apk duy nhất ( file cóđuôi apk là file ứng dụng của Android)
Trong một thư mục project, có một số thành phần (file, thư mục con) được tạo ramặc định, còn lại phần lớn thì sẽ được tạo ra sau nếu cần trong quá trình phát triển ứngdụng Dưới đây liệt kê cấu trúc đầy đủ của một thư mục project:
- src/: Chứa toàn bộ source code (file java hoặc aidl)
- bin/: Thư mục chức file Output sau khi build Đây là nơi bạn có thể tìm file.apk
- gen/: Chứa các file java tạo ra bởi ADT plug-in, như là file R.java hoặc các giao diện tạo ra từ file AIDL
- res/: Chứa các tài nguyên (resources) cho ứng dụng, chẳng hạn như file hìnhảnh, file layout, các chuỗi (string),… Dưới đây là các thư mục con của nó:
- anim/: Chứa các file xml dùng cho việc thiết lập các hiệu ứng động
(animation)
- color/: Chứa các file xml dùng định nghĩa màu sắc
- drawable/: Chứa file hình ảnh (png, jpeg, gif), file xml định nghĩa cách vẽ các loại hình dạng khác nhau (shape)
- layout/: Chứa file xml dùng để dựng giao diện người dùng
- menu/: Chứa file xml quy định application menu
- raw/: Chứa các file media, chẳng hạn như mp3 hay ogg
- values/: Chứa file xml định nghĩa các giá trị Khác với các resource trongcác thư mục khác, resource ở thư mục này khi được định danh trong lớp Rthì sẽ không sử dụng file name để định danh, mà sẽ được định danh theoquy định bên trong file xml đó (xem thêm về lớp R ở phần sau)
- xml/: Dùng chứa các file xml linh tinh khác, chẳng hạn như file xml quy định app widget, search metadata,…
- libs/: Chứa các thư viên riêng
Trang 28- AndroidManifest.xml/: File kiểm soát cách các thành phần trong ứng dụng(activity, service, intent receiver,…) tương tác với nhau, cách ứng dụngtương tác với các ứng dụng khác, cũng như đăng ký các quyền hạn về sửdụng tài nguyên trong máy.
- build.properties: Tùy chỉnh các thiết lập cho hệ thống build, nếu bạn sửdụng Eclipse thì file này không cần thiết
- build.xml: Chỉ sử dụng khi bạn dùng dòng lệnh (command line) để kiến tạoproject
- default.properties: File này chứa các thiết lập cho project, chẳng hạn nhưbuild target, min SDK version,… tốt hơn hết là không nên chỉnh sửa file nàybằng tay
AndroidManifest.xml
Mỗi một Android project thì luôn phải có một file AndroidManifest.xml (xembên trên) Manifest dùng để định nghĩa cấu trúc cũng như các metadata của ứng dụng
và các thành phần con Manifest bắt đầu bằng thẻ root <manifest> với thuộc tính
package để quy ước package của project và thuộc tính xmlns:android như là một quyđịnh để chuẩn hóa cấu trúc file manifest Dưới đây là một file Manifest điển hình:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my_domain.my_app" >
[ manifest nodes ]
</manifest>
Hình 8 – Kiến trúc file AndroidManifest.xml
Manifest bao gồm nhiều thẻ định nghĩa các thành phần của ứng dụng, các thiếtlập về bảo mật, các lớp test,… Dưới đây là danh sách các thẻ có thể xuất hiện trongfile manifest:
• Application
Trang 29Một file manifest chỉ có thể chứa một thẻ application Thẻ này dùng để chỉ địnhcác metadata (bao gồm title, icon, theme,…) và các thành phần cho ứng dụng Nóđồng thời cũng là thẻ cha của các thẻ Activity, Service, Content Provider, và BroadcastReceiver.
- Floating Activity: là dạng Activity nổi, có kích thước không phủ lấp toàn bộ
màn hình
- Activity Group: là một nhóm các Activity nhúng trong một Activity khác.
- Full – screen Activity: là dạng Activity phủ kín toàn màn hình.
Một ứng dụng thường chứa nhiều Activity gắn kết với nhau khá lỏng lẻo Khimột Activity được tạo, nó sẽ được đẩy lên trên cùng của ngăn xếp của bộ nhớ và nhậnđược “focus” Trạng thái “focus” là trạng thái mà Activity có thể nhận được tương táccủa người dùng Ngăn xếp hoạt động theo cơ chế LIFO (Last In First Out) có nghĩa làActivity nào được đưa vào ngăn xếp sau cùng, thì khi lấy ra sẽ được lấy ra đầu tiên
Do đó, khi người dùng bấn nút BACK trên thiết bị thì Activity hiện hành cũng làActivity trên cùng của ngăn xếp bị đẩy ra và Activity kế tiếp sẽ nhận được “focus”
Trang 30Hình 9 – Trạng thái của ngăn xếp khi chưacs các Activity
Một Activity trong suốt vòng đời của nó sẽ trải qua các trạng thái sau:
- Resumed: Là trạng thái “chạy” của một Activity Khi Activity chuyển
sang trạng thái này, giao diện của nó sẽ hiển thị trên màn hình và dànhđược focus
- Paused: Khi một trạng thái đang chạy mà có một Activity khác được khởi
động thì trạng thái của Activity cũ sẽ chuyển sang dạng Paused KhiActivity ở trạng thái này thì nó sẽ bị che khuất một phần và mất focus
- Stopped: Khi Activity ở trạng thái này, giao diện của nó bị một Activity
khác che khuất hoàn toàn Thực tế thì Activity vẫn còn tồn tại, nhưng bạnkhông nhìn thấy nó Những Activity ở trạng thái này có thể bị hệ thốnghủy khi một ứng dụng khác yêu cầu thêm bộ nhớ để xử lý
Ba trạng thái của Activity được thể hiện rõ hơn bằng biểu đồ như hình sau:
Trang 31Hình 10 – Vòng đời của một Activity.
Thẻ activity được yêu cầu cho mỗi một Activity trong ứng dụng Sử dụng thuộctính android:name để chỉ định tên của lớp Activity tương ứng
<activity android:name=".MyActivity"></activity>
• Service
Cũng như activity, thẻ service được yêu cầu cho mỗi một Service trong ứng dụng
Sử dụng thuộc tính android:name để chỉ định tên của lớp Service tương ứng Sử dụngthuộc tính android:enabled để chỉ định trạng thái mặc định của Service
<service android:enabled="true" android:name=".MyService">
</service>
• instrumentation
Được yêu cầu cho mỗi một lớp Test bạn tạo ra trong ứng dụng Lớp Test cung cấpnhững khả năng để bạn có thể kiểm tra các Activity và Service, giám sát chúng và xemcách chúng tương tác với tài nguyên hệ thống
<instrumentation android:label="My Test"
III PHƯƠNG PHÁP PHÁT HIỆN BIỂN BÁO
Dựa trên các đặc trưng của các biển báo giao thông, luận văn sử dụng phươngpháp phát hiện biên bằng giải thuật Canny kết hợp với đặc trưng màu để tìm ra biênảnh của biển báo, sau đó dùng đặc trưng nhận dạng hình học để giữ lại chính xác cácbiên ảnh đúng, loại bỏ các biên giả
1 Phát hiện biên ảnh bằng Canny
1.1 Giới thiệu về thuật toán Canny
Năm 1986, Canny ở phòng thí nghiệm MIT khởi xướng phương pháp này Canny
đã đưa ra tập hợp các mục tiêu của một phương pháp phát hiện biên và đưa ra mộtphương pháp tối ưu để thực hiện các mục tiêu đó Phương pháp này gọi là phươngpháp Canny
Canny đưa ra ba điểm chính mà một phương pháp phát hiện biên phải xác địnhđược đó là:
- Mức lỗi: Phương pháp phải làm sao chỉ có hiệu quả đối với các điểm biên, phải tìm ra tất cả các biên và không có đường biên nào bị bỏ sót
- Định vị: Khoảng cách giữa các điểm biên được tìm thấy trong giải thuật vàbiên trong thực tế phải càng nhỏ càng tốt