999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Android系統(tǒng)下OpenCV的人臉檢測(cè)模塊的設(shè)計(jì)

2012-06-09 10:26:10公衍宇
電子設(shè)計(jì)工程 2012年20期
關(guān)鍵詞:利用檢測(cè)信息

公衍宇, 郭 琦 ,于 超

(1.河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300380;2.河北工業(yè)大學(xué) 機(jī)械工程學(xué)院,天津 300380)

Android是Google開發(fā)的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng),本意為“機(jī)器人”。它包括操作系統(tǒng)、用戶界面和應(yīng)用程序——移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。OpenCV于1999年由Intel建立,現(xiàn)在由Willow Garage提供支持。OpenCV是一個(gè)基于BSD許可證授權(quán)(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows、Mac OS和Android操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法[1-2]。Android應(yīng)用程序是通過Android SDK(Software Develo-pment Kit)利用Java編程語言進(jìn)行開發(fā)的,此虛擬機(jī)支持JNI,同時(shí)伴隨著Android NDK的發(fā)布,使開發(fā)者利用第三方C/C++庫協(xié)助編寫Android程序成為可能,如OpenCV庫便可方便地應(yīng)用在Android系統(tǒng)中[3]。

1 OpenCV移植到Android

1.1 軟件開發(fā)環(huán)境的搭建

OpenCV從2.2版本以后支持Android,本設(shè)計(jì)的編譯環(huán)境PC端為ubuntu 10.10,所用OpenCV版本為2.2 1。OpenCV只提供C/C++、Python接口,這就涉及到Java與C/C++混合編程、Java程序與C/C++程序互相調(diào)用的問題,而Android NDK很好地解決了這一問題,它提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用一起打包成apk。同時(shí)還集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離CPU、平臺(tái)、等差異,開發(fā)人員只需要簡單修改mk文件 (指出 “哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。

官方提供的Android NDK R4版本對(duì)于有些OpenCV中使用的一些C++概念不支持Cryta x為我們提供了一種支持OpenCV的Android NDK修訂版。本設(shè)計(jì)Android NDK所使用的版本為android-ndk-r4-linux-cry-tax-4在開始編譯安裝OpenCV庫之前,需要在PC機(jī)Ubuntu操作系統(tǒng)下安裝如:cmake、buid-essential等編譯OpenCV庫需要用到的工具。在此環(huán)境下編譯并安裝OpenCV庫。

1.2 利用NDK編譯生成OpenCV靜態(tài)庫

OpenCV現(xiàn)已官方支持在Android環(huán)境下的開發(fā),OpenCV2.2源文件包中包含一android文件夾,在此文件夾中包括一些官方提供的編譯文件,利用NDK并借助這些編譯文件對(duì)OpenCV源碼進(jìn)行編譯,就可生成適用于在Android環(huán)境下運(yùn)行的靜態(tài)庫。在編譯之前需要解壓縮android-ndkr4-linux-x86-crytax-4.tar.bz2,完成修訂版本 NDK 的安裝。 進(jìn)入OpenCV2.2內(nèi)的android文件夾下,執(zhí)行 “mkdir build”指令,完成創(chuàng)建build文件夾,然后執(zhí)行 “cd build”指令進(jìn)入build文件夾,隨后執(zhí)行“cmake..”指令生成makefile編譯文件,最后執(zhí)行“make”指令對(duì)其進(jìn)行編譯,編譯完成后將生成OpenCV靜態(tài)庫,用于在Android環(huán)境下基于OpenCV的Android應(yīng)用軟件開發(fā)。

2 設(shè)計(jì)整體框架

在Android系統(tǒng)下基于OpenCV的人臉檢測(cè)實(shí)現(xiàn)需通過Android NDK工具集將利用JNI編寫的本地代碼組件嵌入到Android應(yīng)用程序中,所以整個(gè)實(shí)現(xiàn)過程分為兩個(gè)步驟首先,通過JNI與OpenCV接口編寫本地C/C++代碼,并利用Android NDK對(duì)其進(jìn)行編譯生成Java可調(diào)用的共享庫,接下來利用Android應(yīng)用程序框架編寫Java端代碼,最后通過Android SDK生成Android應(yīng)用程序,整體設(shè)計(jì)框架如圖1所示。

圖1 整體設(shè)計(jì)框架Fig.1 Overall design framework

打開 eclipse,新建一個(gè) workspace,在 Window->Preferences中設(shè)置好Android SDK的路徑。然后新建一個(gè)Android項(xiàng)目,Build Target選擇Android2.2,命名為"facedetect",活動(dòng)名改為“facedetect”,Package name 中 填 寫 com.testopencv.facedetect,最后點(diǎn)擊finish。

2.1 利用JNI編寫C++OpenCV代碼

首先在工程目錄下新建jni文件夾,新建C++源代碼文件并引入此頭文件,編寫函數(shù)實(shí)現(xiàn)代碼。

分類器文件與圖片文件的路徑分別在Java端利用String靜態(tài)變量進(jìn)行存儲(chǔ),在本地代碼端需要得到此String變量的UTF-8形式用來加載分類器和圖片文件,這就需要通過JNI來實(shí)現(xiàn)。關(guān)鍵代碼如下:

以上代碼可得到分類器的絕對(duì)路徑,圖片文件的存儲(chǔ)絕對(duì)路徑也可以此方式得到[4]。

2.2 人臉識(shí)別函數(shù)的實(shí)現(xiàn)

人臉檢測(cè)是指在輸入圖像中將人臉從龐雜的背景中提取出來,并返回人臉在圖像中的位置、大小等信息。首先將彩色圖像轉(zhuǎn)換為灰度圖像,然后對(duì)圖像進(jìn)行直方圖均衡化,最后利用分類器對(duì)圖像中某一區(qū)域是否為人臉進(jìn)行檢測(cè)。OpenCV將分類器信息利用xml文件進(jìn)行存儲(chǔ),同時(shí)OpenCV自帶分類器訓(xùn)練程序:haartrfimng.exe,可以使用它來方便的進(jìn)行haar-like特征分類器的訓(xùn)練。將分類器xm l文件放在Java工程目錄下的asset文件夾內(nèi),當(dāng)安裝應(yīng)用時(shí),利用流操作將此文件寫入sd卡上的指定路徑下,同時(shí)將此途徑存儲(chǔ)在一靜態(tài)變量String,人臉檢測(cè)函數(shù)實(shí)現(xiàn)關(guān)鍵代碼如下:

檢測(cè)到的人臉位置信息將會(huì)存入數(shù)據(jù)類型為vector<RECT>的faces中,最后通過迭代將檢測(cè)到人臉的矩形信息分別換算成空心圓信息存入一個(gè)int數(shù)組,此空心圓信息包括圓心的x坐標(biāo)、y坐標(biāo)以及半徑。

2.3 設(shè)置Java端人臉位置信息

在C/C++端得到人臉位置信息后,需要將此信息傳入Java端進(jìn)行UI更新,這依然需要通過JNI來完成。在IntentService類中新建一int數(shù)組用來存放檢測(cè)到的人臉位置信息,當(dāng)本地人臉檢測(cè)操作執(zhí)行完成后對(duì)其進(jìn)更新與讀取,關(guān)鍵代碼如下:

2.4 腳本文件編寫

有兩個(gè)腳本文件需要編寫,分別是Android.mk和Application.mk文件。Android.mk文件描述了需要NDK進(jìn)行編譯的源文件,以及所要形成的組件,Application.mk文件描述一些關(guān)于本應(yīng)用的輔助編譯信息,這個(gè)編譯文件是可選的。

在Java工程目錄下的jni文件夾下新建Android.mk文件。 打開此文件,首先定 LOCAL_PATH:=$(call my-dir)”, 用來定位源代碼文件所在目錄;其次 “include$(CLEAR_VARS)”,用來清除許多LOCAL_XXX變量,因?yàn)樗芯幾g控制文件都是在一個(gè)GNU Make執(zhí)行上下文中進(jìn)行解析,而此時(shí)所有變量都是全局可見的,所以需要這一操作;由于利用第三方庫OpenCV協(xié)助開發(fā),需要指定此庫通過NDK編譯好的靜態(tài)版本的頭文件、靜態(tài)庫文件的搜索路徑與連接標(biāo)記,所以編寫如下如下6條語句:

最后需說明所要產(chǎn)生的是靜態(tài)庫還是動(dòng)態(tài)庫,由于動(dòng)態(tài)庫為所需,故編寫如下代碼:

include$(BUILD_SHARED_LIBRARY)

在Java工程目錄下的jni文件夾下新建Application.mk文件,由于需要在ARM-V7構(gòu)架的CPU上運(yùn)行,所以通過定義“APP_ABI:=armeabi-v7a“來指定。 打開 Cygwin,進(jìn)入本Android工程目錄下的jni文件中,執(zhí)行”$NDK/ndk-build”命令,執(zhí)行完畢后將生成共享文件libface detect.so。

3 結(jié) 論

人臉檢測(cè)的實(shí)現(xiàn)充分說明了在Android系統(tǒng)下利用OpenCV進(jìn)行計(jì)算機(jī)視覺研究與開發(fā)的可行性與實(shí)用性,雖然由于Android NDK工具還處于初級(jí)發(fā)展階段,不夠成熟,以及硬件配置的差距,致使最后人臉檢測(cè)操作的運(yùn)行速度相對(duì)較慢,但隨著NDK的發(fā)展,利用其進(jìn)行編譯的本地代碼在Android系統(tǒng)中的運(yùn)行將更加高效,同時(shí)越來越強(qiáng)大的硬件配置也將給予有力支持。Android系統(tǒng)如今發(fā)展迅速,許多第三方庫現(xiàn)已提供Android通用編程接口,這為Android應(yīng)用軟件開發(fā)人員提供極大的便利,OpenCV也會(huì)在下一版本提供此接口,但對(duì)于計(jì)算機(jī)視覺算法研究人員以及對(duì)軟件深度開發(fā)人員來說,利用JNI編寫本地代碼,NDK編譯本地代碼的方式還是必須的,并且這一方式也更加靈活。

[1]Gray Bradski,Adrian Kaebler.Learning OpenCV:Computer Vision with the OpenCV Library[M].USA:O Reilly media,2008.

[2]Willow Garage.OpenCV wiki[EB/OL].[2012-05](2012-07).http://opencv.willowgarage.com/wiki/Welcome.

[3]Google.Android Guide[EB/OL].[2012-02](2012-07).http://developer.android.com/guide/index.htm l.

[4]張瑩,李勇平,敖新宇.基于OpenCV的通用人臉檢測(cè)模塊設(shè)計(jì)[J].計(jì)算機(jī)工程與科學(xué),2011(1):97-101.ZHANG Ying,LI Yong-ping,AO Xin-yu.Common face detection module design based on OpenCV[J].Computer Eng ineering and Science,2011(1):97-101.

[5]韓露,李祖樞,陳東義.一種Java與OpenCV結(jié)合實(shí)現(xiàn)的目標(biāo)檢測(cè)模塊[J].計(jì)算機(jī)應(yīng)用,2008(3):773-775.HAN Lu,LI Zu-shu,CHEN Dong-yi.A Java and OpenCV combination of the goal detection module[J].Computer Applications,2008(3):773-775.

[6]任俊偉,林東岱.JNI技術(shù)實(shí)現(xiàn)跨平臺(tái)開發(fā)的研究[J].計(jì)算機(jī)應(yīng)用研究,2005(7):180-184.REN Jun-wei,LIN Dong-dai.JNI technology to achieve crossplatform development[J].Computer Applications Research,2005(7):180-184.

[7]陳勇飛,劉新明.基于膚色和類Harr特征的人臉圖像的人臉檢測(cè)[J].計(jì)算機(jī)工程與應(yīng)用,2008(33):174-180.CHEN Yong-fei,LIU Xin-ming.Face images based on skin color and class Harr features face detection[J].Computer Engineering and Applications,2008(33):174-180.

[8]張靠社,張?jiān)鰪?qiáng),楊寶杰.基于Hamilton能量函數(shù)含TCSC的電力系統(tǒng)非線性控制[J].陜西電力,2009(3):23-26.ZHANG Kao-she,ZHANG Zeng-qiang,YANG Bao-jie.Nonlinear control for power system with TCSC based on hamiltonian energy function[J].Shaanxi Electric Power,2009(3):23-26.

[9]孟洪波,王亞軍,方濤.氣相色譜法檢測(cè)無水肼中水含量的不確定度評(píng)定[J].火箭推進(jìn),2011(3):68-72.MENG Hong-bo,WANG Ya-jun,F(xiàn)ANG Tao.Uncertainty evaluation of detecting the water content in anhydrous hydrazine with gas chromatography[J].Journal of Rocket Propulsion,2011(3):68-72.

猜你喜歡
利用檢測(cè)信息
利用min{a,b}的積分表示解決一類絕對(duì)值不等式
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
利用一半進(jìn)行移多補(bǔ)少
利用數(shù)的分解來思考
Roommate is necessary when far away from home
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
小波變換在PCB缺陷檢測(cè)中的應(yīng)用
展會(huì)信息
主站蜘蛛池模板: 国产9191精品免费观看| 国产精品人莉莉成在线播放| 国产美女视频黄a视频全免费网站| 不卡午夜视频| 亚洲水蜜桃久久综合网站| 欧美成人日韩| 在线看国产精品| 国产91视频观看| 天堂av高清一区二区三区| 自拍偷拍欧美| 天天综合色天天综合网| 久久精品中文字幕少妇| 免费在线视频a| 91精品国产一区自在线拍| 日韩不卡免费视频| 久久精品人人做人人爽电影蜜月| 久久午夜夜伦鲁鲁片无码免费| 超清无码一区二区三区| 免费无码网站| 无码aaa视频| 免费激情网址| 欧美成人午夜视频免看| 99热免费在线| 天堂av综合网| 国产精品无码久久久久久| 国产精品第一区| 91麻豆精品国产91久久久久| 国产毛片不卡| 日韩av电影一区二区三区四区| 72种姿势欧美久久久大黄蕉| 国产免费自拍视频| 国产微拍一区二区三区四区| 国产精品部在线观看| 69综合网| 亚洲天堂色色人体| 亚洲男人天堂久久| 欧美成人第一页| 天堂在线www网亚洲| 亚洲人成网站在线观看播放不卡| 一级全免费视频播放| 伊人久久大线影院首页| 国产成人精品一区二区三区| 色综合婷婷| 99久久精品国产麻豆婷婷| 国产成人一区在线播放| 亚洲,国产,日韩,综合一区| 国产精品白浆无码流出在线看| 三上悠亚精品二区在线观看| 一本久道热中字伊人| 欧美性久久久久| 99re热精品视频国产免费| 伊人天堂网| 亚洲人成高清| 国产乱人伦偷精品视频AAA| 999精品色在线观看| 欧美亚洲第一页| 欧日韩在线不卡视频| 日日拍夜夜操| 国产69精品久久久久孕妇大杂乱| 精品久久久久久久久久久| 日韩国产亚洲一区二区在线观看| 这里只有精品在线播放| 亚洲制服中文字幕一区二区| 狠狠久久综合伊人不卡| 国产精品久久久久久搜索| 亚洲日韩精品欧美中文字幕| 成人看片欧美一区二区| 最新国产在线| www.狠狠| 免费人欧美成又黄又爽的视频| 在线免费看片a| 黄色污网站在线观看| 波多野结衣第一页| 亚洲一区二区日韩欧美gif| 亚洲经典在线中文字幕| 午夜久久影院| 中文字幕一区二区人妻电影| 真实国产精品vr专区| 国产屁屁影院| 91在线播放国产| 成人欧美在线观看| 91福利国产成人精品导航|