基于安卓的视频遥控小车——人脸跟随

基于安卓的视频遥控小车实现人脸跟随看起来好像高大上,其实是用的安卓自带的人脸检测API(FaceDetector),将其和红外发射代码结合起来,实现了小车人脸跟随功能。

人脸检测的接口为FaceDetectionListener,

private class MyFaceDetectionListener implements Camera.FaceDetectionListener {

        @Override
        public void onFaceDetection(Camera.Face[] faces, Camera camera) {
            if (faces.length > 0){
                Log.d("FaceDetection", "face detected: "+ faces.length +
                        " Face 1 Location X: " + faces[0].rect.centerX() +
                        "Y: " + faces[0].rect.centerY() );
            }
        }
    }


通过Camera的setFaceDetedtionListener方法来接受底层检测到脸的回掉。

mCamera.setFaceDetectionListener(new MyFaceDetectionListener());


在摄像机开始预览了之后调用开始检测方法

private void startFaceDetection(){
        // Try starting Face Detection
        Camera.Parameters params = mCamera.getParameters();

        // start face detection only *after* preview has started
        if (params.getMaxNumDetectedFaces() > 0){
            // camera supports face detection, so can start it:
            mCamera.startFaceDetection();
        }
    }

以上为通用步骤,我对MyFaceDetectionListener进行了改造,将其和红外发射代码transmit()方法结合起来,代码如下

private class MyFaceDetectionListener implements Camera.FaceDetectionListener{
		  	private int faceX=0;
		    private int faceY=0;
		    boolean fMoveFlag = false;//设置标志位,只执行一次,不连续发送
		    boolean bMoveFlag = false;
		    boolean lMoveFlag = false;
		    boolean rMoveFlag = false;
		    Camera.Parameters parameters;
		    public MyFaceDetectionListener(Camera.Parameters parameters) {
				this.parameters=parameters;
			}
	        @Override
	        public void onFaceDetection(Camera.Face[] faces, Camera camera) {
	            if (faces.length > 0){
	            	
	                Log.d("FaceDetection", "face detected: "+ faces.length +
	                        " Face 1 Location X: " + faces[0].rect.centerX() +
	                        "Y: " + faces[0].rect.centerY() );


	                faceX=faces[0].rect.centerX();
	                faceY=faces[0].rect.centerY();
					 if(faceY<-100&&!fMoveFlag){
			         	
			     	            mCIR.transmit(38000, pattern1);
			     	           fMoveFlag=true;
			     	           bMoveFlag=false;
			         }
			         if(faceY>100&&!bMoveFlag){
			         	
				            mCIR.transmit(38000, pattern2);
				            bMoveFlag=true;
				            fMoveFlag=false;
			         }
			         if(faceX<-100&&!lMoveFlag){
			         	
				            mCIR.transmit(38000, pattern3);
				            lMoveFlag=true;
				            rMoveFlag=false;
			         }
			         if(faceX>100&&!rMoveFlag){
			       		    	            
				    	            
				            mCIR.transmit(38000, pattern4);
				            rMoveFlag=true;
				            lMoveFlag=false;
			         }
	            }else{
	            	
	            }
	        }
	    }

红外发射部分详见基于安卓的视频遥控小车——红外遥控部分

人脸追踪代码:http://www.pudn.com/Download/item/id/3913500.html

 

参考文献

感谢以下文章的博主的分享

Android音视频-视频采集(Camera预览) - LymanYe的博客

Android自带人脸识别

Adnroid 使用安卓自带的人脸识别API - 风飞飘扬的专栏

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值