依据人脸检测实现视频的播放和 暂停
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
由CAMERA前置摄像头来进行人脸的识别, 若当前正在播放, 但是发现没有检测到人脸时, 会暂停视频播放;当再次检测
到人脸时, 会再次继续视频的播放. 下面的修改方式可以实现基本功能.
[SOLUTION]
1. 屏幕检测到人脸: 利用camera的人脸检测
2. 正在播放且没有人脸的时候, 视频暂停; 当再次出现人脸的时候,视频自动播放, 有如下参考:
(1). 首先需要开启摄像头,开启人脸检测:
在MoviePlayer.java中添加:
import java.lang.Exception;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.widget.Toast;
Camera mCamera = null;
SurfaceTexture mSurface = null;
int mCameraID = 0;
boolean isFrontCamera = false;
在onResume()方法最后,添加如下code:
Log.d(TAG,"Camera.getNumberOfCameras() = " + Camera.getNumberOfCameras());
if(Camera.getNumberOfCameras() > 1){
mCameraID = 1;
isFrontCamera = true;
}else if(Camera.getNumberOfCameras() <=1 ){
isFrontCamera = false;
}
Log.d(TAG,"isFrontCamera = " + isFrontCamera);
if(isFrontCamera){
mCamera = Camera.open(mCameraID);
mSurface = new SurfaceTexture(1351);
try{
mCamera.setPreviewTexture(mSurface);
}catch(Exception e){
Log.d(TAG, "mSurface is wrong");
e.printStackTrace();
}
mCamera.startPreview();
mCamera.setFaceDetectionListener(new MyFaceDetectionListener());
mCamera.startFaceDetection();
}
(2). 添加MyFaceDetectionListener:
class MyFaceDetectionListener implements FaceDetectionListener {
public void onFaceDetection(Face[] faces, Camera camera) {
Log.d(TAG,"onFaceDetection() faces.length: " + faces.length + ", mTState:" + mTState);
Toast toast = Toast.makeText(mContext, "faces.length = " + faces.length, Toast.LENGTH_SHORT);
toast.show();
if(faces.length == 0 && mTState == TState.PLAYING) {
pauseVideo();
}else if(faces.length > 0 && mTState == TState.PAUSED){
playVideo();
}
}
}
(3). 在onPause()方法的最后添加如下code:
mCamera.setFaceDetectionListener(null);
mCamera.stopFaceDetection();
mCamera.stopPreview();
mCamera.release();
if(mSurface != null){
mSurface.release();
}
(4).修改alps\mediatek\platform\MT6592\hardware\mtkcam\hal\CLIent\CamClient\FD\FDClient.Thread.cpp
约314行的位置:
if( i4CamMode == MtkCameraParameters::CAMERA_MODE_NORMAL ){
//Rotation_Info = 180;
Rotation_Info = 361;//修改为除去0,90,180,270以外的一个值
}
然后编译:
./mk mm mediatek/platform/mt6592/hardware/mtkcam/hal/client
./mk mm packages/apps/Gallery2
将生成的libcam.client.so 和Gallery2.apk给push到手机中,重启手机查看。
由CAMERA前置摄像头来进行人脸的识别, 若当前正在播放, 但是发现没有检测到人脸时, 会暂停视频播放;当再次检测
到人脸时, 会再次继续视频的播放. 下面的修改方式可以实现基本功能.
[SOLUTION]
1. 屏幕检测到人脸: 利用camera的人脸检测
2. 正在播放且没有人脸的时候, 视频暂停; 当再次出现人脸的时候,视频自动播放, 有如下参考:
(1). 首先需要开启摄像头,开启人脸检测:
在MoviePlayer.java中添加:
import java.lang.Exception;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.widget.Toast;
Camera mCamera = null;
SurfaceTexture mSurface = null;
int mCameraID = 0;
boolean isFrontCamera = false;
在onResume()方法最后,添加如下code:
Log.d(TAG,"Camera.getNumberOfCameras() = " + Camera.getNumberOfCameras());
if(Camera.getNumberOfCameras() > 1){
mCameraID = 1;
isFrontCamera = true;
}else if(Camera.getNumberOfCameras() <=1 ){
isFrontCamera = false;
}
Log.d(TAG,"isFrontCamera = " + isFrontCamera);
if(isFrontCamera){
mCamera = Camera.open(mCameraID);
mSurface = new SurfaceTexture(1351);
try{
mCamera.setPreviewTexture(mSurface);
}catch(Exception e){
Log.d(TAG, "mSurface is wrong");
e.printStackTrace();
}
mCamera.startPreview();
mCamera.setFaceDetectionListener(new MyFaceDetectionListener());
mCamera.startFaceDetection();
}
(2). 添加MyFaceDetectionListener:
class MyFaceDetectionListener implements FaceDetectionListener {
public void onFaceDetection(Face[] faces, Camera camera) {
Log.d(TAG,"onFaceDetection() faces.length: " + faces.length + ", mTState:" + mTState);
Toast toast = Toast.makeText(mContext, "faces.length = " + faces.length, Toast.LENGTH_SHORT);
toast.show();
if(faces.length == 0 && mTState == TState.PLAYING) {
pauseVideo();
}else if(faces.length > 0 && mTState == TState.PAUSED){
playVideo();
}
}
}
(3). 在onPause()方法的最后添加如下code:
mCamera.setFaceDetectionListener(null);
mCamera.stopFaceDetection();
mCamera.stopPreview();
mCamera.release();
if(mSurface != null){
mSurface.release();
}
(4).修改alps\mediatek\platform\MT6592\hardware\mtkcam\hal\CLIent\CamClient\FD\FDClient.Thread.cpp
约314行的位置:
if( i4CamMode == MtkCameraParameters::CAMERA_MODE_NORMAL ){
//Rotation_Info = 180;
Rotation_Info = 361;//修改为除去0,90,180,270以外的一个值
}
然后编译:
./mk mm mediatek/platform/mt6592/hardware/mtkcam/hal/client
./mk mm packages/apps/Gallery2
将生成的libcam.client.so 和Gallery2.apk给push到手机中,重启手机查看。
功耗是不是很大?
