筆者今年做了一個和人臉有關的android產(chǎn)品,主要是獲取攝像頭返回的預覽數(shù)據(jù)流,判斷該數(shù)據(jù)流是否包含了人臉,有人臉時顯示攝像頭預覽框,無人臉時攝像頭預覽框隱藏,看上去這個功能并不復雜,其實在開發(fā)過程中,遇到的問題也不多,全部都處理了,在正式推出前,這個產(chǎn)品在公司內(nèi)部也測試了幾個月,也沒發(fā)現(xiàn)bug,但最近實施人員,在客戶公司做實施時,反饋回來各種問題,這些問題有部分是程序bug,也有一部分是和硬件有關,因為測試環(huán)境有限,筆者無法對各種型號,各個廠家的硬件進行測試,這篇文章主要是記錄,攝像頭給我們帶來的一些坑,分享給涉及到人臉開發(fā)的朋友,讓大家少走彎路。
一:概述
Android SDK 中支持人臉檢測,它提供了一個直接在位圖上進行人臉檢測的方法,這個 API 是android.media.FaceDetector,源文件路徑是:
frameworks/base/media/java/android/media/FaceDetector.java
調(diào)用 findFaces 方法就可進行人臉檢測,該方法返回檢測到的人臉總數(shù),并且會將每個”人臉”的信息保存在FaceDetector.Face 的數(shù)組中。每個 Face 都包含下面幾點信息:
識別流程是這樣的:
1. 讀取一張圖片至 Bitmap,且該 Bitmap 必須是 565 格式。
2. 調(diào)用 findFaces 方法分析 Bitmap(注意待分析的 Bitmap 寬度必須是偶數(shù)),將探測到的人臉數(shù)據(jù)存儲在一個FaceDetector.Face 數(shù)組中,并返回檢測到的人臉總數(shù)。Android SDK 中的 FaceDetector 介紹
android有原生的api做人臉檢測,通過android.media.FaceDetector來檢測bitmap是否包含人臉,android.media.FaceDetector.Face來檢測人臉位置信息,我們需要在activity中實現(xiàn)Carema.PreviewCallBack接口,該接口有一個onPreviewFrame方法,這個方法返回攝像頭實時圖像的數(shù)據(jù)流,由于這個方法返回的數(shù)據(jù)流時nv21格式,我們需要轉(zhuǎn)換bitmap才能進行人臉檢測,轉(zhuǎn)換過程如下:byte[] --> YuvImage --> ByteArrayOutputStream --> byte[] --> bitmap ,具體轉(zhuǎn)換的代碼如下:
Camera.Size size = mtCamera.getParameters().getPreviewSize(); YuvImage yuvImage = new YuvImage(mData, ImageFormat.NV21, size.width, size.height, null); yuvImage.compressToJpeg(new Rect(0, 0, size.width, size.height), 100, mBitmapOutput); options.inPreferredConfig = Bitmap.Config.RGB_565; bitmap = BitmapFactory.decodeByteArray(mBitmapOutput.toByteArray(), 0, mBitmapOutput.toByteArray().length, options); mBitmapOutput.reset(); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), mMatrix, false);
文章標題:詳解android人臉檢測你一定會遇到的坑-創(chuàng)新互聯(lián)
文章出自:http://www.sd-ha.com/article20/dojhco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站營銷、網(wǎng)站策劃、靜態(tài)網(wǎng)站、網(wǎng)站排名、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)