You are on page 1of 64

I HC QUC GIA H NI

TRNG I HC CNG NGH

Trn Th Hp

H IU HNH ANDROID V THC THI NG DNG PHT HIN KHUN MT TRN ANDROID

KHO LUN TT NGHIP I HC H CHNH QUY Ngnh: Cng Ngh in T Vin Thng

H NI - 2011

I HC QUC GIA H NI TRNG I HC CNG NGH

Trn Th Hp

H IU HNH ANDROID V THC THI NG DNG PHT HIN KHUN MT TRN ANDROID

KHO LUN TT NGHIP I HC H CHNH QUY Ngnh: Cng Ngh in T Vin Thng

Cn b hng dn: TS. Nguyn Linh Trung Cn b ng hng dn: TS. Nguyn Thi H

H NI - 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 NI-2011

LI CM N hon thnh kha lun ny, em nhn c s gip nhit tnh ca TS. Nguyn Linh Trung, TS. Nguyn Thi H v cc anh ch bn cng ty Techburg, H Ni. Trc ht em xin by t lng bit n su sc ti TS. Nguyn Linh Trung, Ging vin khoa in T Vin Thng, Trng i hc Cng Ngh, HQG H Ni, ngi hng dn v ch bo nhit tnh cho em trong sut qu trnh hc, nghin cu v hon thnh kha lun. Em xin trn trng cm n s nhit tnh hng dn v gip tn tnh ca TS. Nguyn Thi H, Tng gim c Cng ty Techburg v cc anh ch thuc cng ty nhit tnh gip v to iu kin cho em hc tp v hon thnh kha lun ny. Cui cng, em xin gi li bit n ti gia nh v bn b gip v ng vin em rt nhiu em c th hon thnh kha lun ny. c bit l gia nh, ni sinh thnh, nui dng v ng vin em rt nhiu trong thi gian qua. H Ni , ngy 20 thng 5 nm 2011 Sinh vin: Trn Th Hp

TM TT Android l h iu hnh cho thit b di ng c pht trin bi Google. Android da trn nhn Linux 2.6 v cc ng dng Android c vit bng ngn ng lp trnh Java. Kha lun ny ti trnh by tng quan v Android, kin trc Android, Android SDK, Android NDK, cc thnh phn to nn mt ng dng Android v trnh by hai phng php pht hin khun mt s dng th vin OpenCV v framework API ca Android. ng thi kha lun cng trnh by s khc nhau gia my o Java v my o Dalvik. Dalvik l my o thc thi cc ng dng Android. Trong kha lun ny ti trnh by quy trnh xy dng v thc thi mt ng dng vi Android NDK. Quy trnh ny s c s dng xy dng ng dng pht hin khun mt s dng OpenCV. OpenCV l mt th vin h tr cho x l nh do Intel pht trin, bao gm khong 500 hm vit bng cc ngn ng C v C++. s dng c th vin ny th u tin phi porting c th vin OpenCV vo Android. Kha lun cng trnh by cch porting th vin v trnh by thut ton pht hin khun mt do Viola v Jones a ra. s dng th vin OpenCV th cn mt giao din chng trnh ng dng Android vit bng Java c th gi c cc hm vit bng C/C++ ca OpenCV. Giao din l JNI (Java Native Interface). Trong kha lun ti cng a ra mt demo vi Hello World s dng Android NDK m c h tr JNI. T a c gii php pht trin ng dng pht hin khun mt s dng OpenCV. Phng php th hai pht hin khun mt l s dng framework API ca Android. API l giao din lp trnh ng dng (Application Programming Interface). Android cung cp mt framework API bao gm cc gi v cc lp gip cho cc nh pht trin c th s dng pht trin nhiu ng dng hp dn. Kha lun trnh by v cc gi v cc lp s dng framework API ca Android xy dng ng dng pht hin khun mt trn Android v kha lun a ra c kt qu khi tin hnh thc nghim. Vi phng php ny ch cn c k nng lp trnh Java tt l c th xy dng c ng dng.

LI CAM OAN Ti xin cam oan ti H iu hnh Android v thc thi ng dng pht hin khun mt trn Android l kt qu tm hiu ca ring ti vi s hng dn ca TS. Nguyn Linh Trung v TS. Nguyn Thi H. Trong kha lun c s dng mt s ti liu v kt qu nghin cu nh nu trong phn ti liu tham kho. Cc kt qu, s liu s dng trong kha lun l chnh xc v trung thc. Kha lun c hon thnh trong thi gian ti l sinh vin ti B mn thng tin v tuyn, Khoa in t vin thng, Trng i hc Cng Ngh, HQG H Ni. H Ni, ngy 20 thng 5 nm 2011 Sinh vin: Trn Th Hp

ii

MC LC
Trn Th Hp...................................................................................................................................1 Trn Th Hp...................................................................................................................................2 Tran Thi Hop....................................................................................................................................3 Danh sch hnh v...........................................................................................................................iv CHNG 1. H IU HNH ANDROID..................................................................................1 1.1.Android l g?............................................................................................................................1 1.2.My o Dalvik...........................................................................................................................1 1.3.Kin trc Android......................................................................................................................3 1.4.Android emulator.......................................................................................................................5 1.5. Android SDK............................................................................................................................6 1.6.Android NDK............................................................................................................................8 1.7. Porting OpenCV vo Android................................................................................................10 1.8. Cc thnh phn to nn mt ng dng Android....................................................................12 1.9. Pht trin ng dng Android v DVM...................................................................................19 1.10. To v demo ng dng Hello World s dng Android NDK..........................................20 CHNG 2 .CC PHNG PHP PHT HIN KHUN MT TRN ANDROID............27 2.1. Thut ton ca Viola Jones trong OpenCV........................................................................27 2.2. Pht hin khun mt s dng framework API ca Android..................................................31 2.3. Xy dng chng trnh pht hin khun mt trn Android..................................................36 CHNG 3. KT QU T C.........................................................................................48 3.1. Kt qu pht hin khun mt s dng framework API ca Android..................................48 3.2. Kh khn v hng gii quyt...............................................................................................49 KT LUN....................................................................................................................................50 TI LIU THAM KHO.............................................................................................................50

iii

Danh sch hnh v


Hnh 1. Qa trnh thc thi ng dng Java v ng dng Android [4].............................................2 Hnh 2.Qa trnh bin i file m Java thnh file (.dex)................................................................2 Hnh 3.Kin trc Android [9]..........................................................................................................3 Hnh 4.Android Emulator................................................................................................................6 Hnh 5.Cc ng dng Android trong API Demos..........................................................................7

iv

Hnh 6.Vai tr ca JNI [7]...............................................................................................................9 Hnh 7.M hnh xy dng v chy code JNI [7]...........................................................................10 Hnh 8.M hnh porting OpenCV vo Android............................................................................11 Hnh 9.Qa trnh porting OpenCV vo Android...........................................................................12 Hnh 10.Ngn xp Activity............................................................................................................13 Hnh 11.Chu k sng ca Activity [4]..........................................................................................14 Hnh 12.Chu k sng ca Service [4]...........................................................................................17 Hnh 13.Truyn thng gia hai tin trnh......................................................................................17 Hnh 14.Broadcast receiver...........................................................................................................17 Hnh 15.Content Provider [4]........................................................................................................18 Hnh 16.ng dng Contacts s dng Contacts Provider ly d liu......................................18 Hnh 17.Intent [4]..........................................................................................................................19 Hnh 18.Qa trnh to file APK.....................................................................................................20 Hnh 19.Qu trnh truy cp m gc qua JNI [4]............................................................................21 Hnh 20.Demo ng dng Hello World dng Android NDK........................................................26 Hnh 21.Cc c trng Haar-like c bn [7].................................................................................27 Hnh 22.Cc c trng Haar-like m rng [6]..............................................................................27 Hnh 23.Cch tnh Integral Image [8]............................................................................................28 Hnh 24.V d cch tnh nhanh cc gi tr mc xm [7]...............................................................28 Hnh 25.M hnh cascade kt hp vi cc b phn loi yu [7]..................................................29 Hnh 26.Kt hp cc b phn loi yu thnh b phn loi mnh.................................................30 Hnh 27. H thng pht hin khun mt.......................................................................................30 Hnh 28.Cc gi Android cung cp trong framework API...........................................................36 Hnh 29.M hnh pht hin khun mt trn Androi......................................................................36 Hnh 30.Cc gc Euler- h ta xyz (c nh), h ta XYZ (quay).....................................37 Hnh 31.Cc thnh phn trong mt Android Project....................................................................40 Hnh 32. Cc tp trong th mc bin ca Android Project............................................................46 Hnh 33.Hnh nh gc ban u......................................................................................................48 Hnh 34.Kt qu pht hin khun mt trn Android.....................................................................48 v

vi

THUT NG VIT TT S DNG TRONG BI

ADB ADT AVD API BSD DVM GPS JNI JVM NDK OS OpenCV SDK UI VM

Android Debug Bridge Android Development Tools Android Virtual Devices Application Programming Interface Berkeley Software Distribution Dalvik Virtual Machine Global Positioning System Java Native Interface Java Virtual Machine Native Development Kit Operating System OpenSource Computer Vision Software Development Kit User Interface Virtual Machine

vii

LI M U

Android l mt h iu hnh cho in thoi di ng do Google pht trin da trn nn tng Linux 2.6. Android ang tng bc thng tr th trng di ng nh vo nhng u im vt tri ca n. Khng nh iPhone ca Apple ngi dng dng nh b ct cht vi nhng g hng ny cho php th Android c k tha tnh m t Linux hay ni c th hn l Google v Android mang n mt th gii hon ton m. Ngi dng c t do vi nhng g h mun v cc nh pht trin c c s t do hn to ra cc ng dng. Ngoi ra vi Android ngi tiu dng c th c nhiu s la chn. Chng hn nh hng LG tung ra trn th trng 20 sn phm chy nn Android nm 2010. Bn cnh cc tnh nng th Android s tng bc thng tr th trng di ng nh vo u im hng n ngi dng v vi thng hiu ca Google ng sau lng n. y l mt thng hiu ng gi. Hin nay Android khng ch c dng cho in thoi di ng m cn c cc nh sn xut in t trn th gii s dng Android nh l mt nn tng cho cc sn phm nhng, v d nh nh thng minh, h thng thng tin gii tr t, Ngoi ra trong tng lai Google s sm tung ra mt h iu hnh cho tivi, u thu k thut s (set-top-box). Trong kha lun ny ti s trnh by tng quan v h iu hnh Android v trnh by hai hng pht trin ng dng pht hin khun mt trn Android l s dng OpenCV v framework API ca Android. OpenCV l mt th vin h tr mnh cho x l nh do Intel pht trin bao gm cc hm c vit bng ngn ng C v C++ trong c h tr pht hin khun mt. Thut ton pht hin khun mt ca Viola Jones c a vo OpenCV v vi tc gp 15 ln so vi cc thut ton hin ti [7]. Hng th hai ti s trnh by trong kha lun xy dng mt ng dng pht hin khun mt vi framework API ca Android. API l giao din lp trnh ng dng, vit tt ca Application Programming Interface. Nn tng Android cung cp mt framework API m cc ng dng c th tng tc vi h thng Android. Framework API bao gm mt li thit lp cc gi v cc lp. Trong ng dng pht hin khun mt ti s dng lp FaceDetector trong gi android.media ca framework API do Android cung cp xy dng ng dng. Vi hng th hai ny ch cn k nng lp trnh Java tt l c th xy dng c ng dng. Ni dung ca kha lun gm 3 chng:

viii

Chng 1: Trnh by tng quan v h iu hnh Android, kin trc Android, Android SDK, Android NDK, porting OpenCV vo Android v quy trnh xy dng v thc thi mt ng dng Android. Bn cht ca vic Porting OpenCV vo Android l thm mt th vin chia s vo tng th vin ca Android t c th dng th vin ny pht trin nhiu ng dng khc khng ch l pht hin khun mt. Chng hn nh dng OpenCV c th pht trin thm cc ng dng phn tch chuyn ng, nhn dng khun mt. Chng ny cng a ra s khc nhau gia my o Java v my o Dalvik. Dalvik l my o thc thi cc ng dng Android. Chng 2: Trnh by hai phng php pht hin khun mt trn Android s dng OpenCV v framework API ca Android trong tng applications framework ca kin trc Android. Trong chng ny ti s trnh by thut ton ca Viola Jones s dng trong OpenCV v xy dng chng trnh pht hin khun mt vi framework API ca Android. Chng 3: Trnh by cc kt qu t c v nhng kh khn gp phi t a ra hng gii quyt kh khn.

ix

CHNG 1. H IU HNH ANDROID


1.1.Android l g?
Android l mt ngn xp phn mm cho cc thit b di ng bao gm mt h iu hnh, middleware v cc ng dng kha c pht trin bi Google. Android c da trn nhn Linux 2.6 v cc ng dng cho Android s dng ngn ng lp trnh Java. Android l mt h iu hnh m ngun m, cc nh pht trin c th to ra cc ng dng cho Android v bt k ai cng c th ly v sa i theo thch. Tuy nhin cc thit b Android cng cha mt s phn mm c quyn m cc nh pht trin khng th tip cn c nhng phn mm ny. V d: h thng nh v ton cu (GPS). Android cng h tr nhiu tnh nng nh: Wi-fi, Bluetooth, cc mng 3G v 4G,

1.2.My o Dalvik
Dalvik l my o thc thi cc ng dng Android. Dalvik chy cc file nh dng (.dex). T gc nhn ca mt nh pht trin Dalvik ging nh my o Java nhng thc t th hon ton khc. Khi cc nh pht trin vit mt ng dng Android th u phi thc hin cc on m trong Java. Sau cc file m Java s c bin dch sang m bytecode. Sau thc thi c cc ng dng Android th ta phi dng mt cng c tn l dx chuyn i m bytecode ca Java sang mt file c nh dng dex (dex l vit tt ca Dalvik excutable), ng vai tr nh c ch o thc thi cc ng dng Android. Hnh 1 m t s khc nhau gia gia qu trnh thc thi mt ng dng Java v qu trnh thc thi mt ng dng Android:

Hnh 1. Qa trnh thc thi ng dng Java v ng dng Android [4] Hnh 1 th hin hai s khc bit gia my o Java (JVM: Java Virtual Machine) v my o Dalvik (DVM: Dalvik Virtual Machine). S khc bit u tin l cc m bytecode m JVM hot ng l Java bytecode cn DVM hot ng trn nh dng c bit ca n (nh dng .dex). S khc bit th hai l cc lp Java trong chng trnh Java SE c bin dch vo mt hay nhiu file (.class) v nn vo file(.jar), sau JVM c c cc file bytecode t cc file (.class) v file (.jar). Mc d cc ng dng Android cng c bin dch trong ngn ng lp trnh Java nhng sau khi cc ng dng ny c bin dch thnh cc file (.class) th mt cng c dx s bin i tt c cc file (.class) thnh file (.dex). T DVM c cc ch dn v d liu. Hnh v di y th hin qu trnh bin i :

Hnh 2.Qa trnh bin i file m Java thnh file (.dex)

1.3.Kin trc Android

Hnh 3.Kin trc Android [9] Android l mt ngn xp phn mm, bao gm cc tng nh trn hnh 3. Trong cc hm thc thi cc ng dng trong hai tng Applications v Applications framework c vit bng ngn ng lp trnh Java. Cn cc hm thc thi cc ng dng cc tng di: Libraries, Android runtime, Linux kernel c vit bng m gc hay native code c vit bng ngn ng C/C++. Khi cn xy dng mt ng dng Android m cn phi s dng mt on m vit bng C/C++ cc tng bn di th ta s s dng JNI (Java Native Interface) gip ng dng Android vit bng Java c th truy cp c cc hm vit bng C/C++. Ta s ni r hn v qu trnh s dng JNI trong phn demo ng dng Hello World phn sau. Di y ta s tm hiu chc nng ca tng tng trong kin trc Android:

Tng Applications

Android c tch hp sn mt s ng dng cn thit c bn nh: calendar, maps, contacts, brower, camera, phone, Tt c cc ng dng ny u c vit bng ngn ng Java. Tng Applications framework

Bng cch cung cp mt nn tng pht trin m Android cung cp cho cc nh pht trin kh nng xy dng cc ng dng cc k phong ph v sng to. Nh pht trin c t do tn dng cc thit b phn cng, thng tin a im truy cp, cc dch v chy nn, thit lp h thng bo ng, v cng thm cc cnh bo n cc thanh trng thi, v nhiu hn na. Nh pht trin c th truy cp vo cc API cng mt framework c xy dng bi cc ng dng li. Kin trc ng dng c thit k n gin ha vic s dng li cc thnh phn; bt k ng dng no cng c th cng b kh nng ca n v bt k ng dng no khc cng c th s dng nhng kh nng ny(c th hn ch bo mt c thc thi bi framework). Tt c cc ng dng c bn l mt b dch v v cc h thng, bao gm: Mt tp hp phong ph v m rng cc View c kh nng k tha ln nhau dng thit k phn giao din ng dng nh : gridview, tableview, linearlayout,
Trnh cung cp ni dung (Content Providers): Cho php cc ng dng c th

truy xut d liu t cc ng dng khc (chng hn nh contacts) hoc l chia s d liu gia cc ng dng . Qun l ti nguyn (Resource Manager): Cung cp truy xut ti cc ti nguyn khng phi l m ngun, chng hn nh graphics, v cc file layout. Qun l thng bo (Notification Manager): Cho php tt c cc ng dng hin th cc cnh bo trong thanh trng thi. Qun l hot ng (Activity Manager): Qun l chu trnh sng ca ng dng v iu hng cc Activity. Tng Libraries

Android bao gm mt tp hp cc th vin C/C++ c s dng bi nhiu thnh phn khc nhau trong h thng Android. iu ny c th hin thng qua nn tng ng dng Android. Mt s cc th vin c bn c lit k di y:
System C library Thc hin trin khai BSD ca th vin h thng C chun

(libc) v chnh cho cc thit b nhng da trn Linux. BSD l giy php ngun m, cho php mi ngi s dng chng trnh, m ngun ca n v cc dn xut.
Media Libararies Da trn PacketVideos OpenCORE; cc th vin h tr

pht v ghi m vi nhiu nh dng audio v video, cng nh i vi cc file nh tnh bao gm: MPEG4, H.264, MP3, AAC, ARM, JPG, v PNG.
4

Surface Manager- Qun l truy cp vo h thng hin th. LibWebCore- Mt cng c trnh duyt web hin i. SGL Cng c ha 2D c s. 3D libraries S thc hin da trn OpenGL ES 1.0 APIs. Free Type- Biu din font vc-t v bitmap. QLite C s d liu. Webkit Th vin cho vic biu din HTML

Tng Android runtime

Tng ny bao gm cc th vin li v my o Dalvik. Cc th vin li bao gm cc th vin lp c bn nht nh: cu trc d liu, mng, cc tin ch, h thng file. DVM c thit k t c cc chc nng qun l chu k sng ca i tng, qun l ngn xp, qun l lung, bo mt, DVM l l tng s dng vi yu cu v khng gian b nh v CPU thp so vi cc my o chy trn cc my tnh bn v h thng my ch. Theo tnh ton ca Google th cn 64M RAM cho php h thng hot ng tt, 24M RAM c s dng khi to v bt u h thng c bn, v 20M RAM c s dng cho cc dch v cp cao. Linux kernel

Android c xy dng trn nhn Linux, nhng Android khng phi l Linux. Android da trn Linux phin bn 2.6 cho cc h thng dch v ct li nh an ninh, qun l b nh, qun l qu trnh, ngn xp mng, v m hnh iu khin. Ht nhn cng hot ng nh mt lp tru tng gia phn cng v phn cn li ca ngn xp phn mm. Linux kernel h tr cc th vin chia s (shared libraries) v n cn l mt m ngun m.

1.4.Android emulator
Android SDK v Plugin Eclipse c gi l Android Development Tools (ADT). Trnh gi lp Android ( Android Emulator) c tch hp vi Eclipse, s dng ADT plug-in cho Eclipse IDE. Trnh gi lp in thoi Android hay cn gi l AVD (Android Virtual Device) trn cc ng dng c th chy v c th nghim. Mt khi AVD c khi chy, c th trin khai mt s lng ng dng bt k trong khi n vn cn ang chy v thm ch c th s dng n g ri ng dng. Hnh di y m t mt trnh gi lp Android:
5

Hnh 4.Android Emulator Cc trnh gi lp Android l mt cng c tin li nhng n c mt s hn ch l: cc trnh gi lp khng phi l mt thit b ni chung n m phng hnh vi ca chic in thoi, khng h tr cc chc nng nghe nhc, quay phim, chp nh, USB, Bluetooth,

1.5. Android SDK


Android SDK cung cp nhiu tp tin v cc cng c c bit nhm mc ch gip cho vic thit k v pht trin cc ng dng chy trn nn tng Android. Android SDK cng cha cc th vin buc cc ng dng vo trong cc c tnh li ca Android, chng hn nh nhng th vin ny c kt hp vi cc chc nng ca in thoi di ng (thc hin v nhn cuc gi), cc chc nng GPS, v nhn tin vn bn. Nhng th vin ny to nn li ca SDK v s c s dng thng xuyn nht. Phn ln Android SDK bao gm cc tp tin, ti liu, vi lp trnh API, cc cng c, v cc v d. Trong Android SDK c mt vi tp tin trong th mc gc ging nh android.jar (mt ng dng Java c bin dch c cha cc th vin li SDK v API), mt s ghi ch, phn cn li ca Android SDK c chia thnh ba th mc chnh: Docs: Cha tt c cc ti liu i km vi Android. Samples: Bao gm cc v d, c th c bin dch v kim tra bn trong ca Eclipse.

Tools: Cha tt c cc cng c g li, bin dch, v pht trin m ta cn trong

sut qu trnh pht trin mt ng dng Android. Trong mc Samples ca Android SDK c cha 6 v d mu cho ng dng Android. Nhng v d ny cung cp bi Google cung cp cho ta mt tng nhanh chng v lm cch no pht trin mt ng dng Android. Mi ng dng mu th hin mi phn khc nhau v chc nng ca Android. Chng ta c th m v chy cc ng dng ny t bn trong ca Eclipse. ng dng API Demos l mt ng dng ch (host application) m t nhiu hm API trong mt Activity n l. Mt Activity l mt ng dng Android. ng dng API Demos nh ch ra hnh di bao gm nhiu v d khc nhau v chc nng ca Android:

Hnh 5.Cc ng dng Android trong API Demos Giao din lp trnh ng dng API (Application Programming Interface) l phn li ca Android SDK. API l tp hp cc hm, phng thc, c tnh, lp v cc th vin c s dng bi cc nh pht trin ng dng to ra cc chng trnh lm vic trn nn tng c th. Cc Android API cha tt c cc thng tin c th m ta cn to ra ng dng c th lm vic v tng tc vi mt ng dng trn nn Android. Android SDK cng cha hai b APIs b sung l Google APIs v Optional APIs: Google APIs

Nm trong tp tin android.jar, cc API ca Google c cha trong gi com.google.*. C mt vi gi i km vi cc API ca Google. Mt s gi c vn chuyn trong cc API ca Google bao gm cc gi cho ha, tnh kh chuyn, a ch lin h v cc tin ch v lch. Chng hn nh vi gi cho Google Maps. S dng gi com.google.android.maps. Trong gi ny c cha cc thng tin cho bn Google (Google Maps) ta c th to cc ng dng tng tc lin tc vi giao din quen thuc ca Google Maps. Optional APIs Cc Optional APIs bao gm cc ty chn chng trnh khi c gng s dng cc tnh nng ny trong cc ng dng Android. Mt trong nhng tnh nng ty chn l mt in thoi di ng da trn GPS. Android LBS (Location-Based Services) API gii quyt vic tip nhn v s dng thng tin t GPS ca in thoi. (Kt hp thng tin trong LBS Android API vi GPS trong Google Maps API c th to ra mt ng dng rt hu ch c th t ng hin th mt bn nh v tr ). Mt s Optional APIs khc bao gm cc ty chn cho vic s dng Bluetooth, Wi-Fi, chi nhc MP3 v truy cp phn cng 3-D-OpenGL.

1.6.Android NDK
Nh ti cp trong phn kin trc ca Android. Khi ta vit mt ng dng cho Android s dng ngn ng lp trnh Java m cn phi s dng mt on m no cc tng bn di (chng hn tng Libraries) vit bng cc ngn ng C/C++. Java c th truy cp c cc hm C/C++ th ta cn mt giao din chng c th tng tc vi nhau. Giao din l JNI (Java Native Interface). Android NDK l mt cng c ng hnh vi Android SDK cho php xy dng cc phn quan trng thc hin cc ng dng trong m gc (native code). N cung cp cc headers v cc th vin cho php xy dng cc activities khi lp trnh bng C hoc C++. Nu ta vit m my, cc ng dng vn c ng gi vo mt file .apk v chng vn chy bn trong my o trn thit b. S dng m gc khng dn n tng hiu sut t ng, nhng lun lun tng phc tp ng dng. Android NDK l mt b cng c cho php nhng cc thnh phn s dng m gc trong cc ng dng Android. Cc ng dng Android chy trong my o Dalvik. NDK (Native Development Kit) cho php thc hin cc phn ca ng dng s dng m gc chng hn nh C v C++. Android NDK cung cp mt chui cc cng c v cc file xy dng to cc th vin m gc t cc ngun C v C++; Android NDK
8

l mt cch gi cc th vin vo trong file APK (file APK l file s c pht hnh trn Android cho vic thc thi ng dng); Android NDK bao gm mt chui cc header ca h thng c h tr trong cc phin bn ca nn tng Android (v d: libc, JNI headers, C++ headers, OpenGL, ); Android NDK bao gm mt s ti liu, m n gin v mt s cc v d. Android NDK h tr JNI gip cc nh pht trin ng dng xy dng cc ng dng c s dng cc on m gc ca tng bn di. iu ny l quan trng v trong mt h thng nhng bao gm cc tng to nn mt ngn xp phn mm. Khi ta cn xy dng mt ng dng thuc tng trn cn k tha mt s hm vit bng m gc thuc tng bn di (c th l tng li lin quan n phn cng) th JNI ng vai tr quan trng. JNI l mt tnh nng mnh ca nn tng Java cho php cc nh lp trnh tn dng c sc mnh ca nn tng Java (mt chng trnh vit bng ngn ng Java c th chy c trn nhiu h iu hnh vit mt ln chy mi ni). JNI l mt giao din hai chiu cho php cc ng dng Java gi m gc v ngc li. Hnh di y m t vai tr ca JNI:

Hnh 6.Vai tr ca JNI [7] Ta c th s dng JNI vit cc phng thc gc (native methods) cho php cc ng dng Java gi cc hm c thc thi trong cc th vin gc. Cc ng dng Java gi cc phng thc gc trong cng mt cch. Di y l m hnh xy dng v chy code JNI:

Hnh 7.M hnh xy dng v chy code JNI [7] Hot ng ca m hnh trn nh sau: u tin ta vit m ngun Java (Java Source) sau s dng trnh bin dch javac bin dch cc file m ngun ny thnh file nh dng (.class). Trong file m ngun Java ta s thc hin cc cng vic l vit lnh gi th vin ng m ta s to phn sau (Dynamic Library) v nh ngha hay khai bo cc phng thc thc hin cc hm native code m ta s vit sau, v m ngun Java ny cng l ni khi to cc phng thc. Tip theo ta s to ra cc header file bng cch dng lnh vi javah jni. Sau khi to ra cc header file th ta s vit m C thc thi cc hm v cc phng thc m c khai bo trong m ngun Java. Tip theo to ra th vin ng ta cn phi bin dch m C va vit trn. link c th vin ny ti m ngun Java th trong m ngun Java ta vit lnh gi th vin ny. Sau tt c cc bc trn th chng trnh c thc thi trn my o Java.

1.7. Porting OpenCV vo Android


pht trin ng dng Android vi OpenCV th u tin ta cn porting c th vin ny vo trong kin trc ca Android. OpenCV (Open Computer Vision library) do Intel pht trin. Th vin OpenCV gm khong 500 hm c vit bng ngn ng lp trnh C v C++. OpenCV l cng c m ngun m thch hp cho nghin cu v pht trin. porting OpenCV vo Android ta s dng Android NDK. Di y l m hnh porting OpenCV:

10

Hnh 8.M hnh porting OpenCV vo Android T chc th vin OpenCV bao gm 4 module chnh v 2 module m rng. Cc module CV v CVAUX h tr cc chc nng cp cao (nhn dng khun mt, hiu chnh camera), x l nh, phn tch chuyn ng. Module CxCore t chc d liu c s, thc hin cc thut ton (php tnh ma trn, tnh ton). Module HighGuid gip to nhanh giao din v h tr truy xut nh/phim t file hoc thit b ngoi vi. porting th u tin ta ti th vin OpenCV v v gii nn. Sau dng Android NDK porting. Trong eclipse ta s to mt project cho vic thc thi porting. Sau to mt file tn l jni trong project. File jni ny s cha hai file l Application.mk v Android.mk. File Android.mk bao gm cc module l cc th vin ca OpenCV cn porting vo trong Android vi ng dn ng. Sau dng lnh ndk-build trn Ubuntu bin dch th vin OpenCV cho kin trc Arm ca Android. Ch s dng c lnh ndk-build ta cn phi ti android NDK v v link n ng th mc cha android NDK c gii nn. Sau khi porting th ta s c mt th vin chia s tn l libOpenCV.so v nm trong th mc libs/armeabi. Th vin chia s ny s nm trong tng Libraries trong kin trc Android. Hnh di y m t qu trnh porting OpenCV cho kin trc Arm ca Android.

11

Hnh 9.Qa trnh porting OpenCV vo Android

1.8. Cc thnh phn to nn mt ng dng Android


Cc ng dng Android s c xy dng t cc thnh phn c bn l: Activity, Service, Broadcast receiver, Content Provider v Intent. Activity

Activity l mt thnh phn ng dng cung cp mt mn hnh m ngi dng c th tng tc lm mt ci g . Chng hn nh: quay s in thoi, chp nh, gi email hoc xem mt bn . Mt Activity c th bt u t cc Activity khc. Bn trong h thng cc Activity c qun l nh mt ngn xp. Khi mt Activity mi c bt u th n c t nh ca ngn xp v tr trnh Activity ang chy. Activity trc s bn di Activity mi v s khng thy trong sut qu trnh Activity mi tn ti. Nu ngi dng nhn nt Back th Activity k tip ca ngn xp s di chuyn ln v tr thnh active. Hnh di y m t mt ngn xp cc Activity:

12

Hnh 10.Ngn xp Activity Mi tin trnh chy ng dng trn nn tng Android c t trn mt ngn xp. Khi s dng mt Activity trn foreground th tin trnh h thng s a Activity ln trn cng ca ngn xp v tin trnh trc s c chuyn xung mc di. Tt c cc Activity u c kh nng b dng li hoc b ph hy bt c lc no bi v ngi s dng c th thay i cc Activity ty theo thch ca h. Chng hn nh: h ang dng Activity l mt cuc gi v sau h dng cuc gi v chuyn sang Activity khc l chp nh, gi email hay nhn tin SMS. Nu tin trnh Activity b thot ra khi foreground th n s b hy. Hnh di y m t chu k sng ca Activity:

13

Hnh 11.Chu k sng ca Activity [4]

Trng thi Starting:

Khi mt Activity khng tn ti trong b nh th n trng thi starting. Trong khi Activity ang khi ng th Activity s i qua mt chui cc phng thc callback. V cui cng Activity s trng thi running. Lu rng qu trnh chuyn i t trng thi starting sang trng thi running l mt trong nhng cc hot ng tn km nht v thi gian tnh ton, v n cng nh hng trc tip n tui th ca pin. l l do ti sao ta khng th t ng hy cc Activity m chng khng cn c hin th. Trng thi Running: Activity trong trng thi running (ang hot ng) ngha l Activity c hin th trn mn hnh v tng tc vi ngi dng. Ngi dng c th tng tc nh g phm, chm vo mn hnh v nhn cc nt. Tt c cc thao tc ny c x l bi Activity ny. Nh vy ti mt thi im no th ch c mt Activity. Trng thi Paused: Khi mt Activity khng c focus( chng hn nh n khng c tng tc vi ngi s dng ) nhng n vn c th c nhn thy trn mn hnh. Trong trng hp ny ta ni Activity ang trng thi tm dng (paused).

14

Trng thi Stopped: Khi mt Activity khng hin th nhng vn cn trong b nh th ta ni rng n ang trng thi dng (Stopped). Cc Activity trng thi dng ny c th c a tr li tr thnh mt Activity ang chy (running) hoc n cng c th b ph hy v loi b khi b nh. H thng vn gi li cc Activity xung quanh trng thi stopped bi v c th ngi dng vn s mun quay tr li cc Activity trc v mun khi ng li cc Activity trng thi dng, do s tit kim c thi gian khi ng v ta s khng phi khi ng mt Activity li t u. Cc Activity trng thi stopped c th b loi khi b nh bt c lc no. Trng thi Destroyed: Mt Activity b ph hy th n khng cn trong b nh. Trnh qun l Activity quyt nh Activity ny khng cn cn thit v do s loi b Activity . Trc khi Activity b ph hy th n c th thc hin cc hnh ng nht nh, v d nh bt k mt thng tin no cha c lu th n s lu li cc thng tin . Tuy nhin trc khi b ph hy th Activity s c ngng li (stopped). Trong sut chu k sng ca Activity th mi Activity ca mt chng trnh Android s tn ti vi trng thi khc nhau. Lp trnh vin khng phi iu khin cc trng thi trong chng trnh. Tt c hot ng u c x l bng cch gi phng thc theo cu trc on_ten_trang_thai(), v d nh onStart(), onPause(). Lp trnh vin s phi ghi cc phng thc ny trong lp Activity, v Android s gi chng thi im thch hp:

onCreate(Bundle): phng thc ny c gi khi Activity khi chy ln u tin. Ta c th s dng n thc thi vic khi to cc thnh phn khc nh to giao din ngi dng, kt ni d liu n danh sch. Phng thc ny c mt tham s, n c th l null hoc l thng tin trng thi trc c lu bi phng thc onSaveInstanceState().

onStart: Phng thc ny c gi trc khi mt Activity n vi ngi dng.

onResume(): c gi khi Activity bt u tng tc vi ngi dng. Ti thi im ny th Activity trn nh ca ngn xp Activity.

15

onPause(): N c gi khi chuyn sang ch chy nn, thng l khi c mt Activity khc c chy trn n. Ti y ta c th lu li trng thi c nh ca chng trnh cng nh ghi li thay i trong c s d liu.

onStop(): Gi khi Activity khng cn xut hin vi ngi dng v n s khng cn ti na. Nu b nh khng , phng thc ny s khng bao gi c gi.

onRestart(): Nu phng thc ny c gi, th Activity s c hin th li t trng thi stop.

onDestroy(): Phng thc ny phi c gi trc khi hy mt Activity. Nu b nh khng , phng thc ny s khng bao gi c gi.

onSaveIntanceState(Bundle): Android s gi phng thc ny cho php Activity lu li trng thi ca n. Thng ta s khng cn ghi n bi v qu trnh thc hin lu li trng thi cho tt c cc giao din ngi dng c iu khin mt cch t ng.

onRestoreInstanceStat(Bundle): S c gi khi Activity c khi to li t trng thi c lu trc , c thc hin bi phng thc:onSaveInstanceState(): Cc Activity khng chy trn cng c th b dng li hoc h thng s hy tin trnh Linux cha Activity to khng gian cho cc Activity mi.

Service

Mt Service l mt thnh phn ng dng c th thc hin cc hot ng lu di trong nn (background) m khng c bt k cc thnh phn giao din ngi dng no. Ch l khng c nhm ln cc dch v ca Android (mt thnh phn ca ng dng) vi cc thnh phn cp di ca h iu hnh nh cc dch v Linux ngun (native Linux), cc server. Chu k sng ca Service n gin hn rt nhiu so vi chu k sng ca Activity. Hnh 11 m t chu k sng ca mt Service:

16

Hnh 12.Chu k sng ca Service [4] Khi mt Service s dng IPC, AIDL (Android Interface Definnition Language) c s dng to ra m cho php truyn thng gia hai tin trnh qua IPC. Hnh di m t qu trnh truyn thng gia hai tin trnh:

Hnh 13.Truyn thng gia hai tin trnh Broadcast receiver

Broadcast receiver l mt thnh phn thu nhn cc Intent bn ngoi gi ti. V d: ta cn vit mt chng trnh thay th cho phn gi in mc nh ca Android khi ta cn mt broadcast receiver nhn bit cc Intent l cc cuc gi ti.

Hnh 14.Broadcast receiver

17

Content Provider

Content Provider lu tr v ly d liu v n c th truy cp vo tt c cc ng dng. y l cch duy nht chia s d liu gia cc ng dng. Android vi mt s Content Provider cho cc loi d liu( nh video, m thanh, hnh nh, thng tin lin lc c nhn, ). Cc loi d liu ny c lit k trong gi android.provider. Hnh di m t chc nng ca mt Content Provider. ng dng c th truy xut v chia s d liu vi Database qua Content Provider vi cc phng thc insert(), update(), delete() v query().

Hnh 15.Content Provider [4] H thng Android lun lun s dng c ch ny. V d, trnh lin h (Contacts Provider) l mt trnh cung cp ni dung (Conten Provider). Contacts Provider cho thy tt c cc d liu lin h (contact data) ngi dng n nhiu ng dng. Lu tr truyn thng (Media Store) s chu trch nhim lu tr v chia s cc phng tin truyn thng khc nhau, v d nh hnh nh v m nhc trn cc ng dng khc nhau. Hnh 14 minh ha cch s dng cc ng dng lin h (Contacts app) s dng Contacts Provider. Mt ng dng l hon ton ring bit ly d liu v cc lin h ca ngi dng .

Hnh 16.ng dng Contacts s dng Contacts Provider ly d liu

18

Intent

Intent l thng ip ca h thng chy xung quanh bn trong thit b, thng bo cho cc ng dng ca cc s kin khc nhau t vic thay i trng thi phn cng n vic d liu n (nh mt tin nhn SMS n) hay cc s kin ng dng (nh hot ng c a ra t menu chnh ca thit b). Hay ni cch khc Inten l mt miu t v hot ng cn c thc hin, l mt c cu cho php truyn thng ip gia cc thnh phn ca mt ng dng v gia cc ng dng vi nhau. Mt ng dng Android thng bao gm nhiu Activity, mi Activity hot ng c lp vi nhau v thc hin nhng cng vic khc nhau. Intent chnh l cu ni gia cc Activity, l ngi a th gip ta triu gi v truyn cc d liu cn thit thc hin mt Activity t mt Activity khc. Hnh 15 cho thy Intent c th c s dng nhy gia cc Activity khc nhau trong cng mt ng dng hoc trong cc ng dng khc nhau.

Hnh 17.Intent [4]

1.9. Pht trin ng dng Android v DVM


Nh ti cp trn th file APK l file s c pht hnh trn Android cho vic thc thi cc ng dng Android. DVM hay Dalvik Virtual Machine l my o thc thi cc ng dng. Hnh di y m t qu trnh to ra mt file APK:

19

Hnh 18.Qa trnh to file APK Hnh trn m t qu trnh to file APK. u tin cc file m ngun Java s c bin dch bi trnh bin dch Java thnh cc file class sau cc file class ny c bin dch thnh mt file dex bi cng c dx. Tip cng c ng gi Android (aapt) s nn tt c cc file dex, file AndroidManifest.xml v cc file resource thnh mt file APK. File APK ny s c pht hnh trn Android cho vic thc thi ng dng. File AndroidManifest.xml l file t ng sinh ra khi ta xy dng bt k mt ng dng Android no. File ny nh ngha cc thng tin v h thng. Qa trnh ny cng gii thch c ti sao ngi ta s dng my o Dalvik thay v s dng my o Java chy cc ng dng. Mt ng dng nh ngha nhiu lp, sau khi bin dch th rt nhiu file class c to ra trong c cha rt nhiu nhng thng tin d tha. Cc file nh dng .dex c th tch hp tt c cc file class vo mt file duy nht gim bt kch thc ca file v cc hot ng I/O. T y nhanh tc tm kim.

1.10. To v demo ng dng Hello World s dng Android NDK


Android NDK (Native Development Kit) n gin ha lm vic vi m ngun gc. N bao gm ton b chui cng c cn thit xy dng trn kin trc ARM. N c thit k to ra mt th vin chia s (shared library). Lu rng m ngun (native code) c th truy cp thng qua JNI vn chy bn trong my o Dalvik. Hnh di y m t tt c cc bc khi pht trin mt ng dng Android cn phi s dng on m vit bng C/C++:

20

Hnh 19.Qu trnh truy cp m gc qua JNI [4] To lp Java biu th cho m ngun M ngun Java nm bn trong th mc src trong Eclipse project. N nh l mt loi keo lin kt n m ngun ca ng dng Android ta s vit sau. Trong file m ngun Java n ta s khai bo cc phng thc gc m s c thc hin trong file m C vit sau v ng thi trong file ny ta cng vit lnh load th vin chia s c dng trong ng dng. // Code chng trnh: /src/com.hop/NativeLib.java Package com.hop; publicclass NativeLib { static { System.loadLibrary("ndk_demo"); } /** * Tr v chui Hello World*/ public native String hello(); }

21

To cc file header m ngun Trong th mc bin ca project. Ta chy lnh javah to ra file header JNI. Tip theo ta to mt th mc tn l jni trong th mc project. Sau sao chp header JNI t th mc bin va to ra trn n th mc jni. **/ Code chuong trinh*/ NDKDemo/bin$ javah com_hop_NativeLib.h ../jni/ -jni com.hop.NativeLibNDKDemo/bin$ mv

Sau vit code C. Trong folder jni to file ndk_demo.c. Trong hm C ny ta s vit code thc hin m ngun (native code). bt u, ta sao chp cc signatures ca cc hm t file header v vit code thc hin cho cc hm ny. Trong v d ny file header m ta to ra dng lnh javah trn c dng nh sau: **/code ca file header JNI tao ra voi lenh javah*/ <EclipseWorkspace>/NDKDemo/jni/com_hop_NativeLib.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h>/* Header for class com_hop_NativeLib */ #ifndef _Included_com_hop_NativeLib #define_Included_com_hop_NativeLib #ifdef__cplusplusextern "C" { #endif /* *Class:com_hop_NativeLib *Method: hello *Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_hop_NativeLib_hello (JNIEnv *, jobject); #ifdef __cplusplus

22

} #endif #endif

Thc thi m ngun bng cch vit code C Ta s vit code thc hin trong hm C nh sau: <EclipseWorkspace>/NDKDemo/jni/ndk_demo.c #include "com_hop_NativeLib.h"JNIEXPORTjstring JNICALL Java_com_hop_NativeLib_hello (JNIEnv * env, jobjectobj) { return (*env)->NewStringUTF(env, "Hello World!");} Bin dch tt c v xy dng th vin chia s xy dng th vin, u tin ta cn to mt makefile cho vic bin dch code c: <EclipseWorkspace>/NDKDemo/jni/Android.mk // code: LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := ndk_demo LOCAL_SRC_FILES := ndk_demo.cinclude $(BUILD_SHARED_LIBRARY) Tp tin Android.mk l mt bn xy dng nh m t ngun cho NDK xy dng h thng. C php ca n c m t chi tit trong file docs/Android-MK.html. NDK nhm cc ngun thnh cc module, mi module c th l mt th vin tnh hoc mt th vin chia s. Ta cng c th nh ngha mt s module trong mt file Android.mk hoc c th vit mt s file Android.mk, mi file s nh ngha mt module. Ch rng: mt file Android.mk c th c phn tch nhiu ln bi h thng xy dng. Theo mc nh th NDK s xem xt cho bn xy dng vi dng sau: $PROJECT/jni/Android.mk

23

Nu ta mun nh ngha cc file Android.mk trong cc th mc con th ta nn s dng cu trc: include $(call all-subdir-makefiles). Cu trc ny s bao gm tt c cc file Android.mk trong cc th mc con ca ng dn file xy dng hin ti. Bc tip theo l cn phi ni cho NDK bit cch xy dng th vin chia s v a n vo ni ng bn trong Eclipse project. lm iu ny cn to mt folder <NDKHOME>/apps/ndk_demo/ v bn trong folder ny to file Application.mk. Di y l m: <NDKHOME>/apps/ndk_demo/Application.mk APP_PROJECT_PATH := $(call my-dir)/project APP_MODULES := ndk_demo

Trong khi file Android.mk miu t cc module cho h thng xy dng, th file Application.mk m t bn thn ng dng. Tp tin Application.mk bao gm chnh xc cc modul theo yu cu ca ng dng v cc kin trc CPU to ra m my, chi tit xem trong file docs/APPLICATION-MK.html. Ch l xem c cc file ny cn ti Android NDK ti http://developer.android.com/sdk/ndk/index.html , sau gii nn trong mt th mc no . Bc tip theo ta to mt lin kt mm <NDKHOME>/apps/ndk_demo/ project n Eclipseproject. Dng lnh trn command line ca Ubuntu. [username] $lns~/Workspace/Android/NDKDemo<NDKHOME>/apps/ndk_demo/project Sau khi lm xong cc bc trn, vo trong th mc NDK v chy lnh : make APP=ndk_demo Kt qu khi chy lnh trn nh sau : android-ndk-1.5_r1$ make APP=ndk_demoAndroid NDK: Building for application 'ndk_demo' Compilethumb : ndk_demo<= sources/ndk_demo/ndk_demo.cSharedLibrary : libndk_demo.soInstall : libndk_demo.so => apps/ndk_demo/project/libs/armeabi

24

Th vin chia s c to ra s dng c tin t lib ng trc v ui l .so. Nh v d trn th th vin chia s c to ra l libndk_demo.so. chng trnh ng dng Android c th s dng v link c n th vin ny th th vin ny phi nm trong th mc libs/armeabi ca project. iu cho thy ta porting c th vin ny vo trong Android trn kin trc Arm. S dng m ngun bn trong cc Activity ca Android Ta c th vin native c c thc thi, bin dch v c t trong mt ni ng. By gi ta c th gi n t Activity bng cch khi to cc lp NativeLib v n ch l mt i tng Java bnh thng. Package com.hop; importandroid.app.Activity; importandroid.os.Bundle; public class NDKDemo extends Activity { NativeLibnativeLib; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Cui cng chy chng trnh ta s nhn thy dng ch Hello World.

25

Hnh 20.Demo ng dng Hello World dng Android NDK

26

CHNG 2 .CC PHNG PHP PHT HIN KHUN MT TRN ANDROID


2.1. Thut ton ca Viola Jones trong OpenCV
tng ca thut ton pht hin khun mt ca Vola Jones l biu din nh theo Integral Image v s dng thut ton Adaboost kt hp vi cc c trng Haarlike. 2.1.1. c trng Haar-like C 4 c trng c bn xc nh khun mt ngi. Mi c trng Haar-like l s kt hp ca hai hoc ba hnh ch nht en trng. Hnh di y m t 4 c trng Haar-like c bn:

Hnh 21.Cc c trng Haar-like c bn [7] pht hin khun mt th cc c trng Haar-like c bn trn c m rng thnh cc c trng cnh, c trng ng v c trng trung tm.

Hnh 22.Cc c trng Haar-like m rng [6] Gi tr ca cc c trng Haar-like l s chnh lch gia tng cc im nh ca cc vng en v cc vng trng. c th tnh nhanh cc gi tr c trng ny Viola Jones a ra khi nim Integral Image. Integral Image l mt mng hai chiu vi kch thc bng kch thc ca nh cn tnh gi tr c trng Haar-like. Hnh di y m t cch tnh Integral Image:

27

Hnh 23.Cch tnh Integral Image [8] Sau khi tnh c Integral Image th vic tnh tng cc gi tr mc xm ca mt vng bt k no trn nh thc hin rt n gin theo cch sau: Gi s ta cn tnh tng cc gi tr mc xm ca vng D nh trong hnh di y. Ta c th tnh nh sau:

D = A + B + C + D (A+B) (A+C) + A Vi A + B + C + D
Vi A+B+C+D l gi tr ti im P4 trn Integral Image. Tng t nh vy A+B l gi tr ti im P2, A+C l gi tr ti im P3, A l gi tr ti im P1. Vy D c tnh nh sau:

Hnh 24.V d cch tnh nhanh cc gi tr mc xm [7]

Tip theo chn cc c trng Haar-like dng cho vic thit lp ngng, Viola v Jones s dng mt phng php my hc c gi l AdaBoost. AdaBoost c kt hp vi cc b phn loi yu to thnh mt b phn loi mnh. Vi b phn loi mnh c th a ra cu tr li chnh xc trn 60%. 2.1.2. AdaBoost AdaBoost l mt b phn loi mnh phi tuyn phc da trn hng tip cn boosting c Freund v Schapire a ra vo nm 1995. AdaBoost cng hot ng trn nguyn tc kt hp tuyn tnh cc b phn loi yu to nn mt b phn loi
28

mnh. AdaBoost l mt ci tin ca tip cn boosting. AdaBoost s dng thm khi nim trng s nh du cc mu kh nhn dng. Trong qu trnh tp hun c mi b phn loi yu c xy dng th thut ton s tin hnh cp nht li trng s chun b cho vic xy dng b phn loi yu tip theo. Cp nht bng cch tng trng s ca cc mu b nhn dng sai v gim trng s ca cc mu c nhn dng ng bi b phn loi yu va xy dng. Bng cch ny th b phn loi yu sau c th tp trung vo cc mu m b phn loi yu trc n lm cha tt. Cui cng l cc b phn loi yu s c kt hp li ty theo mc tt ca chng to nn mt b phn loi mnh AdaBoost. Viola Jones dng AdaBoost kt hp vi cc b phn loi yu s dng cc c trng Haar-like theo m hnh cascade sau:

Hnh 25.M hnh cascade kt hp vi cc b phn loi yu [7] Trong hk l cc b phn loi yu c biu din nh sau:

x l ca s con cn xt, k l ngng, fk l gi tr c trng Haar-like v pk l h s quyt nh chiu ca phng trnh. Hnh di y m t qu trnh kt hp cc b phn loi yu thnh b phn loi mnh.

29

Hnh 26.Kt hp cc b phn loi yu thnh b phn loi mnh 2.1.3. M hnh pht hin khun mt Hnh di y l m hnh pht hin khun mt ca thut ton do Viola v Jones a ra.

Hnh 27. H thng pht hin khun mt T nh gc ban u ta s tnh c Integral Image l mng hai chiu vi phn t (x, y) s c tnh bng tng ca cc phn t (x, y) vi x<x v y<y. Mc ch l tnh nhanh tng ca cc gi tr mc xm ca mt vng hnh ch nht bt k trn nh gc. Cc vng nh con ny s c a qua cc hm Haar c bn c lng c trng. Kt qu c lng s c a qua b iu chnh AdaBoost loi b nhanh cc c trng khng c kh nng l c trng ca khun mt ngi. Ch c mt tp nh cc c trng m b iu chnh AdaBoost cho l c kh nng l c
30

trng ca khun mt. Tp cc c trng ny s c chuyn sang cho b quyt nh kt qu. B quyt nh kt qu l tp cc b phn loi yu . B ny s tng hp kt qu l khun mt ngi nu kt qu ca cc b phn loi yu tr v l khun mt. Mi b phn loi yu s quyt nh kt qu cho mt c trng Haar-like, c xc nh ngng nh sao cho c th vt c tt c cc b d liu mu trong tp d liu tp hun. Trong qu trnh xc nh khun mt ngi, mi vng nh con s c kim tra vi cc c trng trong chui cc c trng Haar-like. Nu c mt c trng Haar-like no cho ra kt qu l khun mt ngi th cc c trng khc khng cn xt na.

2.2. Pht hin khun mt s dng framework API ca Android


2.2.1.Gi android.graphics Gi ny cung cp cc cng c ha cp thp nh canvas, cc b lc mu sc, im, v hnh ch nht, cho php ta x l v v ra mn hnh trc tip. Trong gi ny c cc lp con nh:

Bitmap.

BitmapFactory to cc i tng Bitmap t nhiu ngun khc nhau, bao gm cc tp tin, cc dng (stream), v cc mng byte. Trong lp ny c lp con BitmapFactory.Options. BitmapRegionDecoder c s dng gii m vng hnh ch nht t mt hnh nh.

BitmapShader c s dng v nh bitmap nh mt kin trc (texture).

Camera mt camera c th c s dng tnh ton bin i 3D v to ra mt ma trn c th c p dng, v d nh trn Canvas.

Canvas- lp Canvas gi yu cu v.

Color- lp color xc nh cc phng thc cho vic to v chuyn i s nguyn v mu sc. ImageFormat- cung cp cc nh dng mu nh JPEG (nh dng c m ha), NV16 (nh dng YCbCr c s dng cho video), NV21 (nh dng YCrCb c s dng cho nh, s dng nh dng m ha NV21), RGB-565(nh dng RGB c s dng cho nh m ha nh RGB-565), UNKNOWN( gi tr khng i l 0),

31

YUY2 (nh dng YCbCr c s dng cho nh, s dng nh dng m ha YUY2), v cui cng l nh dng YV12(nh dng YUV android: nh dng ny c tip xc vi b gii m phn mm v ng dng).

Matrix- lp Matrix gi mt ma trn c 3x3 cho vic chuyn i ta .

Paint-lp Paint nm gi thng tin v mu sc v vic lm th no v hnh, vn bn v cc nh bitmap. PixelFormat-bao gm cc nh dng A_8, JPEG, LA_88, L_8, RGB-322, RGB-565,.

Rect-c chc nng nm gi ta 4 s nguyn cho hnh ch nht.

v cn nhiu cc lp v cc hm con khc. Trong ng dng pht hin khun mt ta s s dng mt s lp trong gi android.graphics bng cch vit lnh trong m ngun Java: import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PoinF; 2.2.2.Gi android.app Gi ny cha cc lp cp cao ng gi m hnh ng dng android.Mt ng dng Android c xc nh bng cch s dng mt hoc nhiu hn 4 thnh phn ng dng li ca Android. Trong gi ny c hai thnh phn ng dng c nh ngha l: hot ng (Activity) v dch v (Service). Trong gi android.content c hai thnh phn khc l BroadcastReceiver v Contentprovider. Gi android.app cung cp mt s lp vi cc chc nng nht nh. Di y l mt s lp: ActionBar- y l giao din cng cng cho cc ActionBar. Cc hot ng ca ActionBar nh l mt thay th cho cc thanh tiu trong cc Activity. N cung cp c s cho vic to ra cc hnh ng cng nh cc phng thc iu hng trn mt ng dng.

32

Activity- mt hot ng l n l, nhng g ngi dng c th lm c tp trung. Hu nh tt c cc hot ng u tng tc vi ngi s dng, v vy lp Activity s to ra mt ca s m c th t giao din ngi dng vi setContenView (View). Trong khi cc hot ng thng c trnh by cho ngi s dng nh l ca s ton mn hnh, chng cng c th c trnh by theo nhng cch khc nh : ca s ni hoc nhng bn trong mt hot ng (s dng ActivityGroup).

AcivityGroup- l mt mn hnh c cha v chy nhiu cc hot ng nhng. ActivityManager- Tng tc vi cc hot ng chy trong h thng. ActivityManager.MemoryInfo- Ta c th c c thng tin v b nh sn c.

ActivityManager.ProcessErrorSateInfo- thng tin c th ly c v bt k qu trnh no c li xy ra. ActivityManager.RecentTaskInfo- thng c th ly c v nhim v m ngi dng gn y nht bt u hoc truy cp.

ActivityManager.RunningAppProcessInfo- thng tin c th ly c v qu trnh chy chng trnh.

ActivityManager.RunningServiceInfo- thng tin c th ly c v mt dch v c th m hin ang chy trong h thng.

ActivityManager.RunningTaskInfo-thng tin c th ly c v mt nhim v c th m hin ti ang chy trong h thng.


AlarmManager- Lp ny cung cp truy cp n cc dch v bo ng h

thng. AlertDialog- y l mt lp con ca hp thoi (Dialog) c th hin th mt, hai hoc ba nt (button).

Application-y l lp c s cho nhng ai cn phi duy tr trng thi ng dng ton cu.

FragmentTransaction- giao din tng tc vi cc i tng Fragment bn trong mt Activity.


Instrumentation-y l lp c s cho vic thc thi m ng dng.

Instrumentation.ActivityResult- m t kt qu thc thi ca mt Activity tr v cho activity ban u.

33

LauncherActivity-hin th mt danh sch tt c cc hot ng c th c thc hin cho mt mc ch nht nh.

LauncherActivity.IconResizer- tin ch thay i kch thc cc biu tng (icon) ph hp vi kch thc biu tng mc nh.

ListActivity- mt Activity c th hin th mt danh sch cc mc bng cch lin kt vi mt ngun d liu nh mt mt mng v a ra x l s kin khi ngi dng chn mt mc.

V cn c mt s lp khc nh NativeActivity, Notification,Trong ng dng pht hin khun mt ta s dng lp Activity bng cch vit trong m ngun Java : import android.app.Activity; 2.2.3.Gi android.content Cha cc lp cho vic truy cp v xut bn d liu trn thit b. N bao gm ba loi chnh ca APIs: Th nht l chia s ni dung: i vi ni dung chia s (sharing content) gia cc thnh phn ng dng th cc lp quan trng nht l: ContentProvider v ContentResolver cho vic qun l v xut bn d liu kt hp vi ng dng.

Intent v IntentFilter, cung cp cc tin nhn cu trc gia cc thnh phn ng dng khc nhau cho php cc thnh phn khi to cc thnh phn khc v tr v kt qu.

Th hai l qun l gi (android.content.pm) : truy cp thng tin v mt gi Android (.apk), bao gm thng tin v cc hot ng, quyn (permission), dch v, giao din, b cung cp (provider). Cc lp quan trng nht truy cp thng tin ny l PackageManager. Th ba l qun l ti nguyn (android.content.res): ly d liu ti nguyn kt hp vi mt ng dng, chng hn nh chui, drawables, truyn thng v chi tit v cu hnh thit b. Cc lp quan trng nht truy cp d liu ny l Resources- lp ny truy cp ti nguyn ca ng dng. H thng ti nguyn Android theo di tt c assets phi m (non-code) kt hp vi mt ng dng. Assets l mt th mc trong Android project. Ta c th c c th hin ca Resources lin quan n ng dng vi getResources().

34

Cc cng c Android SDK bin dch cc ti nguyn ng dng vo cc ng dng nh phn thi gian xy dng. s dng mt resource th cn phi ci t mt cch chnh xc trong cy m ngun (nm bn trong th mc res ca project) v xy dng cc ng dng. Nh mt phn ca qu trnh xy dng, cc cng c SDK to ra cc biu tng cho mi ti nguyn m c th c s dng trong m ng dng truy cp vo ti nguyn. S dng ti nguyn ng dng gip cho vic cp nht cc c im khc nhau ca cc ng dng m khng cn thay i m, v bng cch cung cp b ti nguyn thay th, cho php ti u ha ng dng i vi mt lot cc cu hnh thit b (chng hn nh cho cc ngn ng khc nhau v kch c mn hnh). y l mt kha cnh quan trng pht trin ng dng Android c tng thch trn cc loi thit b khc nhau. Trong gi android.content c cha mt s lp con trong c lp context y l mt lp tru tng trong s thc thi c cung cp bi h thng Android. N cho php truy cp vo ti nguyn ng dng c th v cc lp, Trong ng dng pht hin khun mt ta s dng lp Context bng cch vit trong m ngun Java: import android.content.Context; 2.2.4.Gi android.media Gi ny cung cp cc lp qun l cc giao din truyn thng khc nhau trong audio v video.Cc giao din lp trnh ng dng vit tt l API (Appication Programming Interface) Media trong mt s trng hp chi (play) v ghi li (record) cc tp tin media bao gm m thanh (v d nh chi nhc MP3 hoc cc file nhc khc, nhc chung, hiu ng m thanh tr chi) v video (v d nh bt mt on video xem trc tip qua web). Cc lp c bit khc trong gi cung cp kh nng pht hin khun mt ngi trong nh Bitmap (FaceDetector), iu khin m thanh nh tuyn (vi in thoi hoc tai nghe) v iu khin cnh bo nh nhc chung v ting rung ca in thoi ( lp AudioManager). Trong ng dng ta s dng cc lp trong gi ny bng cch vit trong m ngun Java: import android.media.FaceDetector; import android.media.FaceDetector.Face; Cc lp FaceDetector v FaceDetector.Face s trnh by phn sau
35

2.3. Xy dng chng trnh pht hin khun mt trn Android


Android cung cp mt lp android.media.FaceDetector xc nh khun mt ngi trong nh Bitmap. Cc lp FaceDetector v FaceDetector.Face do android SDK cung cp [11]. Cc lp ny c mt trong android.media. Ta c th vo trang pht trin ca Google tm hiu v cc gi v cc lp Android h tr. Hnh di y m t cc gi Android h tr trong trang pht trin ca Google:

Hnh 28.Cc gi Android cung cp trong framework API 2.3.1.M hnh pht hin khun mt trn Android s dng framework API

Hnh 29.M hnh pht hin khun mt trn Androi Khi Image input:

nh u vo l nh bitmap vi nh dng RGB-565 v kch thc nh l 320x480 .

36

Khi FaceDetector:

Khi ny thc hin chc nng pht hin khun mt trong i tng nh bitmap. Lp FaceDetector trong khi ny nhn cc thng s ca nh u vo l chiu rng , chiu cao ca nh phn tch v s lng ti a khun mt c th pht hin c. Khi mt i tng c xy dng th nhng thng s ny khng th thay i c. Lp FaceDetector nm trong gi android.media. Khi findFaces:

Khi ny c chc nng tm tt c cc khun mt trong mt bc nh. Hm thc hin chc nng ny l: Public int findFaces (Bitmap bitmap, Face[]faces) Hm ny tr v s lng khun mt. hm trn vi thng s faces l mt mng cha tt c cc thng tin xc nh v tr ca mt khun mt trong nh bitmap. Cc thng tin ny c lu trong lp FaceDetector.Face. Mt khun mt vi cc t th chp nh khc nhau. Pht hin khun mt da trn cc gc Euler ca khun mt , khong cch gia hai mt v v tr ca im gia hai mt. Gc Euler i din cho s nh hng khng gian ca bt k h quy chiu no nh mt thnh phn ca php quay t mt h quy chiu. Trong h ta c nh c k hiu l (x, y, z) v trong h quay c k hiu bng ch in hoa (X, Y, Z). Vi mt h quy chiu c cc hng cn m t, u tin xc nh ng thng i qua nt N nh hnh v di y:

Hnh 30.Cc gc Euler- h ta xyz (c nh), h ta XYZ (quay) Vi N l giao im ca cc mt phng ta xy v XY. ng thng i qua nt N c th hin bng mu xanh l cy vi: l gc gia trc x v ng thng qua nt. l gc gia trc z v trc Z.
37

l gc gia ng thng ca cc nt v trc X.

Trong lp FaceDetector.Face ta s dng mt hm Pose (int euler). Hm ny s tr v t th ca khun mt hay gc Euler ca khun mt i vi trc ta cho trc. l php quay quanh hoc l theo trc X, hoc l theo trc Y, hoc l theo trc Z (Cc v tr trong khng gian Euclide 3- chiu). Vi thng s euler l ta Euler ly mt gc t (EULER_X hoc EULER_Y hoc EULER_Z). Trong EULER_X l trc X gc Euler ca khun mt vi gi tr khng i : 0(0x00000000); EULER_Y l trc Y gc Euler ca khun mt vi gi tr khng i: 1(0x00000001); EULER_Z l trc Z gc Euler ca khun mt vi gi tr khng i l: 2(0x00000002). // m thc thi hm pose (int euler)

cho kt qu pht hin khun mt c tt nht th thng s h s tin cy trn 0.3 thng l tt. Ta s dng hm confidence() , tr v h s an ton gia 0 v 1. Di y l m ngun thc thi cc hm:

38

Khi drawRect

Sau khi qua khi findFaces pht hin ra tt c cc khun mt th khi drawRect s thc hin chc nng v khung hnh ch nht ln khun mt pht hin c s dng ha canvas trong gi android.graphics.

39

2.3.2.Vit chng trnh ng dng pht hin khun mt trn Android Phn ny ti trnh by v cc thnh phn trong mt ng dng Android c th vi ng dng pht hin khun mt trn Android s dng APIs ca Android trong tng Applications framework.

Hnh 31.Cc thnh phn trong mt Android Project Th mc src

Th mc ny cha tt c cc lp do ngi dng xc nh, bao gm lp hot ng mc nh. Trong th mc ny l code cho m ngun Java. Di y l m ngun Java cho ng dng pht hin khun mt. Ta s dng cc phng thc gi cc hm trn trong chng trnh Java:

40

package hop.android; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas;// s dng canvas v. import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.media.FaceDetector; import android.media.FaceDetector.Face; import android.os.Bundle; import android.view.View; public class AndroidFaceDetector extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); setContentView(new myView(this)); } private class myView extends View{ private int imageWidth, imageHeight; private int numberOfFace = 5;// s khun mt cn detect. private FaceDetector myFaceDetect; private FaceDetector.Face[] myFace;
41

float myEyesDistance; int numberOfFaceDetected; Bitmap myBitmap; public myView(Context context) { super(context); BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5, BitmapFactoryOptionsbfo); imageWidth = myBitmap.getWidth(); imageHeight = myBitmap.getHeight(); myFace = new FaceDetector.Face[numberOfFace]; myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(myBitmap, 0, 0, null); Paint myPaint = new Paint();

42

myPaint.setColor(Color.GREEN); myPaint.setStyle(Paint.Style.STROKE); myPaint.setStrokeWidth(3); /** thut ton ly im gia v khong cch hai mt ** vi bin i chy t 0 n s lng khun mt cn pht hin*/ for(int i=0; i < numberOfFaceDetected; i++) { Face face = myFace[i]; PointF myMidPoint = new PointF(); face.getMidPoint(myMidPoint); myEyesDistance = face.eyesDistance(); /** v hnh ch nht vi canvas*/ canvas.drawRect( (int)(myMidPoint.x - myEyesDistance), (int)(myMidPoint.y - myEyesDistance), (int)(myMidPoint.x + myEyesDistance), (int)(myMidPoint.y + myEyesDistance), myPaint); } } } }

43

Th mc gen

Cha cc tp do ADT to t ng. Tp R.java bn trong th mc ny cha cc tham chiu tnh ti tt c cc ti nguyn hin c trong th mc res cho chng c th tham kho d dng v ng t m Java. Tp ny c t ng sinh ra khi xy dng ng dng. package hop.android; public final class R { public static final class attr { } public static final class drawable { public static final int face3=0x7f020000; public static final int face4=0x7f020001; public static final int face5=0x7f020002; public static final int icon=0x7f020003; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }

44

Th mc res

Cha tt c cc ti nguyn cho project: Cc biu tng, cc hnh nh, cc chui k t v cc b tr. Th mc res bao gm: Cc th mc drawable : Dnh cho tt c cc tp hnh nh. Th mc layout: Dnh cho cc b tr quy nh cc mn hnh giao din ngi dng cho cc hot ng di dng m XML. Tp Main.xml c t ng to ra. Th mc ny gn lin vi cch b tr thng ng mc nh. Tp Main.xml c mt biu din giao din ngi dng, c th ko th cc b tr khc nhau v cc khung nhn trn mt mn hnh trng xy dng cc thnh phn giao din ngi dng cho hot ng ny. Di y l ni dung ca tp Main.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>

45

Th mc bin

Cha cc tp class c bin dch v mt s tp sau:

Hnh 32. Cc tp trong th mc bin ca Android Project. Tp class.dex: Tp c th thc thi c to ra t cc lp bin dch.

Tp Tran_Thi_Hop_FaceDetect.apk: Tp lu tr nn s c chuyn n thit b Android. ng dng ny c th c ci t trn thit b Android bt k thng qua tp lu tr ny. Tp resources.ap_: Tp cc ti nguyn ng dng nn. AndroidManifest.xml

Mi ng dng phi c mt file AndroidManifest.xml nm trong th mc gc ca n. File ny nh ngha cc thng tin cn thit v ng dng cho h thng Android, thng tin h thng phi c trc khi n c th chy bt k code ca ng dng. y l mt phn rt quan trng ca ng dng Android. Khi ta to mt ng dng Android s dng Eclipse th s sinh ra file AndroidManifest.xml. File ny c t ng sinh ra bi Eclipse. V vy, ta khng bn tm n vic to ra n m hy quan tm n ni dung bn trong file ny. Di y l ni dung ca mt file AndroidManifest.xml t ng c sinh ra khi to ng dng pht hin khun mt:

46

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hop.android" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidFaceDetector" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Th <application>, bn trong th ny cha cc thuc tnh c nh ngha cho ng dng Android nh : android:icon = drawable resource y t ng dn n file icon ca ng dng khi ci t. V d: android:icon = @drawable/icon.

Th <activity>, bn trong th ny c cc thuc tnh: android:name = string tn ca lp thc hin Activity hay n l mt lp con ca Activity. Trong ng dng ny l : AndroidFaceDetector.

android:label nhn cho Activity, c hin th trn mn hnh khi Activity c chy. N thng c hin th cng vi biu tng ca hot ng. Trong file manifest trn th nhn tn l Tran_Thi_Hop_FaceDetection.

Ngoi ra cn c nhiu thuc tnh khc, chi tit xem ti : http://developer.android.com/guide/topics/manifest/manifestintro.html#filestruct

47

CHNG 3. KT QU T C
3.1. Kt qu pht hin khun mt s dng framework API ca Android

Hnh 33.Hnh nh gc ban u

Hnh 34.Kt qu pht hin khun mt trn Android

48

3.2. Kh khn v hng gii quyt


Nh ti cp trong phn kin trc Android. Khi vit chng trnh ng dng cho Android ta phi s dng ngn ng Java. Trong bi ton pht hin khun mt s dng thut ton ca Viola Jones trong OpenCV th vn kh khn l Java c th gi c cc th vin ca OpenCV vit bng ngn ng C v C++ th cn phi thnh tho ngn ng lp trnh JNI. Do thi gian hn ch nn kha lun ny ti ch a ra hng gii quyt s dng JNI vit chng trnh pht hin khun mt s dng OpenCV trn Android. Quy trnh xy dng v thc thi ng dng s ging vi quy trnh to v demo ng dng Hello World dng Android NDK m ti trnh by phn trn. Chng ta porting c OpenCV vo Android ri, vn ch l tm hiu v lp trnh JNI tip tc pht trin ng dng. y cng l hng pht trin ti trong tng lai.

49

KT LUN
Kha lun ny a ra c tng quan v h iu hnh Android. y l nn tng cho nhng ai mi bt u lp trnh vi Android. Kha lun t c nhng mc tiu cn tm hiu xy dng chng trnh ng dng Android. Trong kha lun ti trnh by v kin trc Android trong c demo mt chng trnh ng dng pht hin khun mt s dng framework API ca Android trong tng Applications framework. T gip pht trin thm cc ng dng khc s dng framework API xy dng. Trc khi xy dng chng trnh ng dng th ti trnh by v cc thnh phn to nn mt ng dng cho Android ;qu trnh mt ng dng c thc thi nh th no; cc thnh phn trong mt d n Android ; s khc bit gia my o Java v my o Dalvik v trnh by v cch porting th vin OpenCV v thut ton pht hin khun mt ca Viola Jones c s dng trong OpenCV. Mi trng cn xy dng v thc thi cc ng dng cho Android l cc ngn ng lp trnh Java, JNI, C/C++. Ngoi ra Android da trn nn tng Linux nn mi trng tt vit cc ng dng l Linux hoc Ubuntu. Tuy nhin cng c th vit trn Windows nhng phi dng n swing dng cc lnh ca Linux. Dng Ubuntu s t gp rc ri v li v virus. Kha lun cng trnh by v Android SDK, Android NDK l cc cng c h tr mnh cho pht trin cc ng dng Android. Ti cng a ra c cc quy trnh lm mt d n phn mm vi cc cng c ny. Mt v d n gin t hiu c quy trnh lm mt d n v chng trnh c thc thi nh th no trn Android. T sau ny c th pht trin thm nhiu ng dng hp dn khc cho Android. Tm li c th xy dng v pht trin cc ng dng Android th cn phi c kin thc v Android c trnh by trong kha lun v bit lp trnh Java, JNI, C/C+ + v nm chc kin thc v Linux vi lp trnh shell v cc tp lnh ca Linux.

TI LIU THAM KHO


50

TI LIU TING ANH:

[1] AndroidTM A Programmers Guide, J.F. DiMarzio, Pulisher: McGraw-Hill Proesional, 2008. [2] Harvey M. Deitel, Paul J.Deitel, Java How to Program (4th Edition), Publisher: Prentice Hall PRT Upper Saddle River, NJ, USA, 2001. [3] James Steele Nelson To, The Android Developers Cookbook Building Applications with the Android SDK, Publisher: Add ison-Wes ley, 2010. [4] Marko Gargenta, Learning Android, Publisher: OReilly Media, 1 edition, 2010. [5] Robin Hewitt, Seeing with OpenCV, Servo magazine, January 2007, Inc. [6] Rainer Lienhart and Jochen Maydt, An extended set of Haar- like features for Rapid Object Detection, Intel Labs, Intel Corporation, Santa Clara, CA 95052, USA. [7] Sheng Liang, The JavaTM Native Interface, Programmers Guide and Specification, Publisher: Prentice Hall PRT, 1st edition, 1999. [8] ViolaJones, Rapid Object Detection using a Boosted Cascade of Simple Features, Accepted conference on Computer Vision and pattern recognition 2001. [9] ViolaJones, Robust Real-time Object Detection, Second international workshop on statistical and computational theories of vision modeling, learning, computing, and sampling, Vancouver, Canada, July 13, 2001. [10] W. Frank Ableson, Charilie Collins, Robi Sen, Unlocking Android, Publisher: Manning Publications, 2009. [11] http://developer.android.com

51

You might also like