hệ điều hành android và thực thi ứng dụng phát hiện khuôn mặt trên android - Pdf 14

a
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trần Thị Hợp
HỆ ĐIỀU HÀNH ANDROID VÀ THỰC THI ỨNG
DỤNG PHÁT HIỆN KHUÔN MẶT TRÊN ANDROID
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Điện Tử Viễn Thông
HÀ NỘI - 2011
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trần Thị Hợp
HỆ ĐIỀU HÀNH ANDROID VÀ THỰC THI ỨNG
DỤNG PHÁT HIỆN KHUÔN MẶT TRÊN ANDROID
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Điện Tử Viễn Thông
Cán bộ hướng dẫn: TS. Nguyễn Linh Trung
Cán bộ đồng hướng dẫn: TS. Nguyễn Thái Hà
HÀ NỘI - 2011
VIETNAM NATIONAL UNIVERSITY, HANOI
UNIVERSITY OF ENGINEERING AND TECHNOLOGY
Tran Thi Hop
ANDROID OPERATING SYSTEM AND
IMPLEMENTATION OF FACE DETECTION
APPLICATION ON ANDROID
Major: Faculty of Electronics and Telecommunications
Supervisor: Ph.D Nguyen Linh Trung
Co-Supervisor: Ph.D Nguyen Thai Ha
HÀ NỘI-2011
LỜI CẢM ƠN
Để hoàn thành khóa luận này, em đã nhận được sự giúp đỡ nhiệt tình của TS.

chương trình ứng dụng Android viết bằng Java có thể gọi được các hàm viết bằng
C/C++ của OpenCV. Giao diện đó là JNI (Java Native Interface). Trong khóa luận tôi
cũng đưa ra một demo với “Hello World” sử dụng Android NDK mà có hỗ trợ JNI.
Từ đó đưa được giải pháp để phát triển ứng dụng phát hiện khuôn mặt sử dụng
OpenCV.
Phương pháp thứ hai để phát hiện khuôn mặt là sử dụng framework API của
Android. API là giao diện lập trình ứng dụng (Application Programming Interface).
Android cung cấp một framework API bao gồm các gói và các lớp giúp cho các nhà
phát triển có thể sử dụng để phát triển nhiều ứng dụng hấp dẫn. Khóa luận trình bày về
các gói và các lớp sử dụng framework API của Android để xây dựng ứng dụng phát
hiện khuôn mặt trên Android và khóa luận đưa ra được kết quả khi tiến hành thực
nghiệm. Với phương pháp này chỉ cần có kỹ năng lập trình Java tốt là có thể xây dựng
được ứng dụng.
i
LỜI CAM ĐOAN
Tôi xin cam đoan đề tài “Hệ điều hành Android và thực thi ứng dụng phát hiện
khuôn mặt trên Android ” là kết quả tìm hiểu của riêng tôi với sự hướng dẫn của TS.
Nguyễn Linh Trung và TS. Nguyễn Thái Hà. Trong khóa luận có sử dụng một số tài
liệu và kết quả nghiên cứu như đã nêu trong phần tài liệu tham khảo. Các kết quả, số
liệu sử dụng trong khóa luận là chính xác và trung thực.
Khóa luận được hoàn thành trong thời gian tôi là sinh viên tại Bộ môn thông tin
vô tuyến, Khoa điện tử viễn thông, Trường Đại học Công Nghệ, ĐHQG Hà Nội.
Hà Nội, ngày 20 tháng 5 năm 2011
Sinh viên:
Trần Thị Hợp
ii
MỤC LỤC
Trần Thị Hợp 1
Trần Thị Hợp 2
Tran Thi Hop 3

Hình 7.Mô hình xây dựng và chạy code JNI [7] 10
Hình 8.Mô hình porting OpenCV vào Android 11
Hình 9.Qúa trình porting OpenCV vào Android 12
Hình 10.Ngăn xếp Activity 13
Hình 11.Chu kỳ sống của Activity [4] 14
Hình 12.Chu kỳ sống của Service [4] 17
Hình 13.Truyền thông giữa hai tiến trình 17
Hình 14.Broadcast receiver 17
Hình 15.Content Provider [4] 18
Hình 16.Ứng dụng Contacts sử dụng Contacts Provider để lấy dữ liệu 18
Hình 17.Intent [4] 19
Hình 18.Qúa trình tạo file APK 20
Hình 19.Quá trình truy cập mã gốc qua JNI [4] 21
Hình 20.Demo ứng dụng Hello World dùng Android NDK 26
Hình 21.Các đặc trưng Haar-like cơ bản [7] 27
Hình 22.Các đặc trưng Haar-like mở rộng [6] 27
Hình 23.Cách tính Integral Image [8] 28
Hình 24.Ví dụ cách tính nhanh các giá trị mức xám [7] 28
Hình 25.Mô hình cascade kết hợp với các bộ phân loại yếu [7] 29
Hình 26.Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh 30
Hình 27. Hệ thống phát hiện khuôn mặt 30
Hình 28.Các gói Android cung cấp trong framework API 36
Hình 29.Mô hình phát hiện khuôn mặt trên Androi 36
Hình 30.Các góc Euler- hệ tọa độ xyz (cố định), hệ tọa độ XYZ (quay) 37
Hình 31.Các thành phần trong một Android Project 40
Hình 32. Các tệp trong thư mục bin của Android Project 46
Hình 33.Hình ảnh gốc ban đầu 48
v
Hình 34.Kết quả phát hiện khuôn mặt trên Android 48
vi

nhà sản xuất điện tử trên thế giới sử dụng Android như là một nền tảng cho các sản
phẩm nhúng, ví dụ như nhà thông minh, hệ thống thông tin giải trí ô tô, … Ngoài ra
trong tương lai Google sẽ sớm tung ra một hệ điều hành cho tivi, đầu thu kỹ thuật số
(set-top-box).
Trong khóa luận này tôi sẽ trình bày tổng quan về hệ điều hành Android và trình
bày hai hướng để phát triển ứng dụng phát hiện khuôn mặt trên Android đó là sử dụng
OpenCV và framework API của Android. OpenCV là một thư viện hỗ trợ mạnh cho
xử lý ảnh do Intel phát triển bao gồm các hàm được viết bằng ngôn ngữ C và C++
trong đó có hỗ trợ phát hiện khuôn mặt. Thuật toán phát hiện khuôn mặt của Viola –
Jones được đưa vào OpenCV vì với tốc độ gấp 15 lần so với các thuật toán hiện tại [7].
Hướng thứ hai tôi sẽ trình bày trong khóa luận để xây dựng một ứng dụng phát hiện
khuôn mặt với framework API của Android. API là giao diện lập trình ứng dụng, viết
tắt của Application Programming Interface. Nền tảng Android cung cấp một
framework API mà các ứng dụng có thể tương tác với hệ thống Android. Framework
API bao gồm một lõi thiết lập các gói và các lớp. Trong ứng dụng phát hiện khuôn mặt
tôi sử dụng lớp FaceDetector trong gói android.media của framework API do Android
cung cấp để xây dựng ứng dụng. Với hướng thứ hai này chỉ cần kỹ năng lập trình Java
tốt là có thể xây dựng được ứng dụng.
Nội dung của khóa luận gồm 3 chương:
viii
Chương 1: Trình bày tổng quan về hệ điều hành Android, kiến trúc Android,
Android SDK, Android NDK, porting OpenCV vào Android và quy trình xây dựng và
thực thi một ứng dụng Android. Bản chất của việc Porting OpenCV vào Android là
thêm một thư viện chia sẻ vào tầng thư viện của Android để từ đó có thể dùng thư viện
này để phát triển nhiều ứng dụng khác không chỉ là phát hiện khuôn mặt. Chẳng hạn
như dùng OpenCV có thể phát triển thêm các ứng dụng phân tích chuyển động, nhận
dạng khuôn mặt. Chương này cũng đưa ra sự khác nhau giữa máy ảo Java và máy ảo
Dalvik. Dalvik là máy ảo để thực thi các ứng dụng Android.
Chương 2: Trình bày hai phương pháp phát hiện khuôn mặt trên Android sử
dụng OpenCV và framework API của Android trong tầng applications framework của

Hình 1 thể hiện hai sự khác biệt giữa máy ảo Java (JVM: Java Virtual
Machine) và máy ảo Dalvik (DVM: Dalvik Virtual Machine). Sự khác biệt đầu tiên
là các mã bytecode mà JVM hoạt động là Java bytecode còn DVM hoạt động trên
định dạng đặc biệt của nó (định dạng .dex). Sự khác biệt thứ hai là các lớp Java
trong chương trình Java SE được biên dịch vào một hay nhiều file (.class) và nén
vào file(.jar), sau đó JVM có được các file bytecode từ các file (.class) và file (.jar).
Mặc dù các ứng dụng Android cũng được biên dịch trong ngôn ngữ lập trình Java
nhưng sau khi các ứng dụng này được biên dịch thành các file (.class) thì một công
cụ dx sẽ biến đổi tất cả các file (.class) thành file (.dex). Từ đó DVM đọc các chỉ
dẫn và dữ liệu. Hình vẽ dưới đây thể hiện quá trình biến đổi đó:
Hình 2.Qúa trình biến đổi file mã Java thành file (.dex)
2
1.3.Kiến trúc Android
Hình 3.Kiến trúc Android [9]
Android là một ngăn xếp phần mềm, bao gồm các tầng như trên hình 3. Trong
đó các hàm thực thi các ứng dụng trong hai tầng Applications và Applications
framework được viết bằng ngôn ngữ lập trình Java. Còn các hàm thực thi các ứng
dụng ở các tầng dưới: Libraries, Android runtime, Linux kernel được viết bằng mã
gốc hay native code được viết bằng ngôn ngữ C/C++. Khi cần xây dựng một ứng
dụng Android mà cần phải sử dụng một đoạn mã viết bằng C/C++ ở các tầng bên
dưới thì ta sẽ sử dụng JNI (Java Native Interface) để giúp ứng dụng Android viết
bằng Java có thể truy cập được các hàm viết bằng C/C++. Ta sẽ nói rõ hơn về quá
trình sử dụng JNI trong phần demo ứng dụng “Hello World” ở phần sau. Dưới đây
ta sẽ tìm hiểu chức năng của từng tầng trong kiến trúc Android:
 Tầng Applications
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: calendar,
maps, contacts, brower, camera, phone, … Tất cả các ứng dụng này đều được viết
bằng ngôn ngữ Java.
 Tầng Applications framework
3

trợ phát và ghi âm với nhiều định dạng audio và video, cũng như đối với các file ảnh
tĩnh bao gồm: MPEG4, H.264, MP3, AAC, ARM, JPG, và PNG.
4
•Surface Manager- Quản lý truy cập vào hệ thống hiển thị.
•LibWebCore- Một công cụ trình duyệt web hiện đại.
•SGL – Công cụ đồ họa 2D cơ sở.
•3D libraries – Sự thực hiện dựa trên OpenGL ES 1.0 APIs.
•Free Type- Biểu diễn font véc-tơ và bitmap.
•QLite –Cơ sở dữ liệu.
•Webkit – Thư viện cho việc biểu diễn HTML
 Tầng Android runtime
Tầng này bao gồm các thư viện lõi và máy ảo Dalvik. Các thư viện lõi bao
gồm các thư viện lớp cơ bản nhất như: cấu trúc dữ liệu, mạng, các tiện ích, hệ thống
file. DVM được thiết kế để đạt được các chức năng quản lý chu kỳ sống của đối
tượng, quản lý ngăn xếp, quản lý luồng, bảo mật, …DVM là lý tưởng để sử dụng
với yêu cầu về không gian bộ nhớ và CPU thấp so với các máy ảo chạy trên các máy
tính để bàn và hệ thống máy chủ. Theo tính toán của Google thì cần 64M RAM cho
phép hệ thống hoạt động tốt, 24M RAM được sử dụng để khởi tạo và bắt đầu hệ
thống cơ bản, và 20M RAM được sử dụng cho các dịch vụ cấp cao.
 Linux kernel
Android được xây dựng trên nhân Linux, nhưng Android không phải là Linux.
Android dựa trên Linux phiên bản 2.6 cho các hệ thống dịch vụ cốt lõi như an ninh,
quản lý bộ nhớ, quản lý quá trình, ngăn xếp mạng, và mô hình điều khiển. Hạt nhân
cũng hoạt động như một lớp trừu tượng giữa phần cứng và phần còn lại của ngăn
xếp phần mềm. Linux kernel hỗ trợ các thư viện chia sẻ (shared libraries) và nó còn
là một mã nguồn mở.
1.4.Android emulator
Android SDK và Plugin Eclipse được gọi là Android Development Tools
(ADT). Trình giả lập Android ( Android Emulator) được tích hợp với Eclipse, sử
dụng ADT plug-in cho Eclipse IDE. Trình giả lập điện thoại Android hay còn gọi là

Android. Những ví dụ này cung cấp bởi Google để cung cấp cho ta một ý tưởng
nhanh chóng về làm cách nào để phát triển một ứng dụng Android. Mỗi ứng dụng
mẫu thể hiện mỗi phần khác nhau về chức năng của Android. Chúng ta có thể mở
và chạy các ứng dụng này từ bên trong của Eclipse.
Ứng dụng API Demos là một ứng dụng chủ (host application) mô tả nhiều hàm
API trong một Activity đơn lẻ. Một Activity là một ứng dụng Android. Ứng dụng
API Demos như chỉ ra hình dưới bao gồm nhiều ví dụ khác nhau về chức năng của
Android:
Hình 5.Các ứng dụng Android trong API Demos
Giao diện lập trình ứng dụng API (Application Programming Interface) là
phần lõi của Android SDK. API là tập hợp các hàm, phương thức, đặc tính, lớp và
các thư viện được sử dụng bởi các nhà phát triển ứng dụng để tạo ra các chương
trình làm việc trên nền tảng cụ thể. Các Android API chứa tất cả các thông tin cụ thể
mà ta cần để tạo ra ứng dụng có thể làm việc và tương tác với một ứng dụng trên
nền Android. Android SDK cũng chứa hai bộ APIs bổ sung là Google APIs và
Optional APIs:
7
• Google APIs
Nằm trong tập tin android.jar, các API của Google được chứa trong gói
com.google.*. Có một vài gói đi kèm với các API của Google. Một số gói được vận
chuyển trong các API của Google bao gồm các gói cho đồ họa, tính khả chuyển, địa
chỉ liên hệ và các tiện ích về lịch. Chẳng hạn như với gói cho Google Maps. Sử
dụng gói com.google.android.maps. Trong gói này có chứa các thông tin cho bản đồ
Google (Google Maps) ta có thể tạo các ứng dụng tương tác liên tục với giao diện
quen thuộc của Google Maps.
• Optional APIs
Các Optional APIs bao gồm các tùy chọn chương trình khi cố gắng sử dụng
các tính năng này trong các ứng dụng Android. Một trong những tính năng tùy chọn
là một điện thoại di động dựa trên GPS. Android LBS (Location-Based Services)
API giải quyết việc tiếp nhận và sử dụng thông tin từ GPS của điện thoại. (Kết hợp

cần xây dựng một ứng dụng thuộc tầng trên cần kế thừa một số hàm viết bằng mã
gốc thuộc tầng bên dưới (có thể là tầng lõi liên quan đến phần cứng) thì JNI đóng
vai trò quan trọng.
JNI là một tính năng mạnh của nền tảng Java cho phép các nhà lập trình tận
dụng được sức mạnh của nền tảng Java (một chương trình viết bằng ngôn ngữ Java
có thể chạy được trên nhiều hệ điều hành “viết một lần chạy mọi nơi”). JNI là một
giao diện hai chiều cho phép các ứng dụng Java gọi mã gốc và ngược lại. Hình dưới
đây mô tả vai trò của JNI:
Hình 6.Vai trò của JNI [7]
Ta có thể sử dụng JNI để viết các phương thức gốc (native methods) cho phép
các ứng dụng Java gọi các hàm được thực thi trong các thư viện gốc. Các ứng dụng
Java gọi các phương thức gốc trong cùng một cách. Dưới đây là mô hình xây dựng
và chạy code JNI:
9
Hình 7.Mô hình xây dựng và chạy code JNI [7]
Hoạt động của mô hình trên như sau: Đầu tiên ta viết mã nguồn Java (Java
Source) sau đó sử dụng trình biên dịch javac để biên dịch các file mã nguồn này
thành file ở định dạng (.class). Trong file mã nguồn Java ta sẽ thực hiện các công
việc là viết lệnh gọi thư viện động mà ta sẽ tạo ở phần sau (Dynamic Library) và
định nghĩa hay khai báo các phương thức thực hiện các hàm native code mà ta sẽ
viết ở sau, và mã nguồn Java này cũng là nơi để khởi tạo các phương thức.
Tiếp theo ta sẽ tạo ra các header file bằng cách dùng lệnh với javah –jni. Sau
khi tạo ra các header file thì ta sẽ viết mã C thực thi các hàm và các phương thức mà
được khai báo trong mã nguồn Java. Tiếp theo để tạo ra thư viện động ta cần phải
biên dịch mã C vừa viết ở trên. Để link được thư viện này tới mã nguồn Java thì
trong mã nguồn Java ta viết lệnh gọi thư viện này. Sau tất cả các bước trên thì
chương trình được thực thi trên máy ảo Java.
1.7. Porting OpenCV vào Android
Để phát triển ứng dụng Android với OpenCV thì đầu tiên ta cần porting được
thư viện này vào trong kiến trúc của Android. OpenCV (Open Computer Vision

có thể tương tác để làm một cái gì đó. Chẳng hạn như: quay số điện thoại, chụp ảnh,
gửi email hoặc xem một bản đồ. Một Activity có thể bắt đầu từ các Activity khác.
Bên trong hệ thống các Activity được quản lý như một ngăn xếp. Khi một Activity
mới được bắt đầu thì nó được đặt ở đỉnh của ngăn xếp và trở trành Activity đang
chạy. Activity trước sẽ ở bên dưới Activity mới và sẽ không thấy trong suốt quá
trình Activity mới tồn tại. Nếu người dùng nhấn nút Back thì Activity kế tiếp của
ngăn xếp sẽ di chuyển lên và trở thành active. Hình dưới đây mô tả một ngăn xếp
các Activity:
12

Trích đoạn Xây dựng chương trình phát hiện khuôn mặt trên Android Khó khăn và hướng giải quyết
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status