Android多媒體-Face Service

來源:互聯網
上載者:User

標籤:android   style   blog   http   java   color   

1. 相關背景

Google 於2006年8月收購Neven Vision 公司 (該公司擁有 10 多項應用於行動裝置領域的Image Recognition的專利),以此獲得了Image Recognition的技術,並不是常快應用到免費的 Picasa 相冊管理程式中,提供基於Face Service的相片管理功能,另外還推出了一個新項目叫Goggle ,能從照片中識別世界各地的地標建築,相同Google 也把Face Service功能加入?到了Android 中。只是因為個人隱私等相關因素,Google Goggles好像臨時屏蔽了Face Service功能 。


2. Android 中的Face Service技術

底層庫:android/external/neven/

framework 層:frameworks/base/media/java/android/media/FaceDetector.java


Java 層介面的限制:

僅僅能接受 Bitmap 格式的資料
僅僅能識別雙眼距離大於 20 像素的人臉像(當然,這個可在framework層中改動)
僅僅能檢測出人臉的位置(雙眼的中心點及距離)

不能對人臉進行匹配(尋找指定的臉譜)


3. Face Service技術的應用

A. 為 Camera 加入?Face Service的功能:使得 Camera 的取景器上能標識出人臉範圍;假設硬體支援,能夠對人臉進行對焦。


4. 靜態圖片處理代碼執行個體:

package com.example.mydetect2;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.media.FaceDetector; //Face Service的關鍵類import android.media.FaceDetector.Face; import android.view.View; public class MainActivity2 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main_activity2);setContentView(new myView(this));//使用自建的view來顯示Log.i("zhangcheng","MainActivity2 run here");}private class myView extends View{private int imageWidth, imageHeight;private int numberOfFace = 5;//最大檢測的人臉數private FaceDetector myFaceDetect;//Face Service類的執行個體private FaceDetector.Face[] myFace;//儲存多張人臉的陣列變數float myEyesDistance; //兩眼之間的距離int numberOfFaceDetected; //實際檢測到的人臉數Bitmap myBitmap;public myView(Context context){//view類的建構函式,必須有super(context); BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;//構造位元影像產生的參數,必須為565。類名+enummyBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.baby, BitmapFactoryOptionsbfo); imageWidth = myBitmap.getWidth(); imageHeight = myBitmap.getHeight(); myFace = new FaceDetector.Face[numberOfFace]; //分配人臉數組空間myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); //FaceDetector 構造執行個體並解析人臉Log.i("zhangcheng","numberOfFaceDetected is " + numberOfFaceDetected);}protected void onDraw(Canvas canvas){//override函數,必有canvas.drawBitmap(myBitmap, 0, 0, null);//畫出位元影像 Paint myPaint = new Paint(); myPaint.setColor(Color.GREEN); myPaint.setStyle(Paint.Style.STROKE); myPaint.setStrokeWidth(3); //設定位元影像上paint操作的參數for(int i=0; i < numberOfFaceDetected; i++){Face face = myFace[i];PointF myMidPoint = new PointF(); face.getMidPoint(myMidPoint); myEyesDistance = face.eyesDistance(); //得到人臉中心點和眼間距離參數,並對每一個人臉進行畫框canvas.drawRect( //矩形框的位置參數                        (int)(myMidPoint.x - myEyesDistance),                         (int)(myMidPoint.y - myEyesDistance),                         (int)(myMidPoint.x + myEyesDistance),                         (int)(myMidPoint.y + myEyesDistance),                         myPaint);}}}}

效果例如以下:


如要注意的地方:

依據文檔描寫敘述,輸入圖片必須為Bitmap RGB565格式。
人臉的檢測方法是用雙眼來檢測人臉的位置,也就是說無法檢測到嘴、側臉等,雙眼必須同一時候可見,而且眼鏡會影響檢測的效果。
實際上,FaceDetector檢測到的並非人的全臉,而僅僅是雙眼。
實際測試中,發現圖片太小的話檢測不到人臉,實驗中使用小於100x100的圖片檢測不到人臉,可是因為Android記憶體有限,圖片太大的話,會出現無法載入圖片的異常。
檢測到的人臉存放到FaceDetector.Face類中,該類無法再擴充。從該類能夠擷取到人眼的中心位置和雙眼之間的詳細。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.