好吧,我听说android studio上已经有相机类了。

我要尝试做的是,我要制作一个可以在按下相机和唯一的前置摄像头时打开相机的应用程序,然后当它检测到自己的脸部时会说“您今天看起来很棒!”我想录制自己的声音并将其作为自己的声音。

因此,如果有人可以指导我如何做类似的事情,那就太好了!我到处研究!

我已经下载了这个已经做好的人脸检测界面。它有效,但是我现在真正需要做的就是添加自己的声音。

  • 打开应用程序
  • 等待直到检测到面部
  • 说“今天你看起来不错”

  • 那就是我真正想要的!您能给我一些建议还是至少给我一些步骤呢?

    我是菜鸟,所以在解释时请放轻松

    最佳答案

    只需使用本机android的人脸检测库(而不是OpenCV或更复杂的东西),应用程序启动后就可以立即跟踪您的脸部。
    您还可以放置一个if语句,以检查是否可以识别该面部,以及是否已经播放了语音消息。

    if(recognized_faces != 0 && message_already_played == false){
        //play the message
    }
    

    这是一段代码(一个“ Activity ”),它从正面相机中获取所有摄影照片并进行分析。最初,代码在照片报上用 Canvas 绘制,并依次将它们显示为“miaImmagine2”(就像是视频流一样)。如果您不想要它,就不要显示miaImmagine2,而仅显示摄像机图层。我已经删除了许多不必要的代码部分,因此可能要擦除或调整很多代码。但这对您可能是一个很好的帮助。所以这是代码:
    package mawashi.alex.driveawake;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ImageFormat;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PointF;
    import android.graphics.Rect;
    import android.graphics.YuvImage;
    import android.hardware.Camera;
    import android.hardware.Camera.ErrorCallback;
    import android.hardware.Camera.PreviewCallback;
    import android.hardware.Camera.Size;
    import android.media.AudioManager;
    import android.media.FaceDetector;
    import android.media.MediaMetadataRetriever;
    import android.media.MediaPlayer;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.Window;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.util.List;
    
    @SuppressLint("NewApi")
    public class AwakeActivity extends Activity {
        SurfaceView mVideoCaptureView;
    
        Camera mCamera;
    
        public Bitmap mFaceBitmap;
        public TextView Testo;
        public Bitmap mFace2Bitmap;
        public ImageView miaImmagine2;
        private MediaPlayer player;
        public SurfaceView mSurfaceView;
        public SurfaceHolder mSurfaceHolder;
        private static final int MAX_FACES = 1;
        int mFaceWidth;
        int mFaceHeight;
        int cameraType = 1; // front
        int frame_sec = 1000000;
        byte[] callbackBuffer;
        PreviewCallback cb;
        public FrameLayout preview;
        Bitmap bmp;
        Bitmap b;
        MediaMetadataRetriever mediaMetadataRetriever=null;
        Bitmap bmFrame = null;
        FaceDetector.Face[] faces;
        Activity activity;
        Context mContext;
        int index_sleep = 0;
        int consec = 0;
        boolean sleep = false;
        public float  scala = 1;
        public int offset = 0;
        int m = 1;
        int Colore = Color.GRAY;
        private MediaPlayer player2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.detection);
            mVideoCaptureView = (SurfaceView) findViewById(R.id.Surface);
            miaImmagine2 = (ImageView) findViewById(R.id.imageView2);
            Testo = (TextView) findViewById(R.id.textView1);
            SurfaceHolder videoCaptureViewHolder = mVideoCaptureView.getHolder();
            videoCaptureViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
            player = MediaPlayer.create(this, R.raw.you_look_good);
            videoCaptureViewHolder.addCallback(new Callback() {
                public void surfaceDestroyed(SurfaceHolder holder) {
            }
    
            public void surfaceCreated(SurfaceHolder holder) {
                startVideo();
            }
    
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
            });
        }
    
        ////////////////////////////////////////////////////////////////////////////////////////
        //************BUTTONS***************************************************************
    
    
    
        //ROTATE THE IMAGE OF 90 DEGREES
    
        protected void setDisplayOrientation(Camera mCamera, int angle){
            Method downPolymorphic;
            try{
                downPolymorphic = mCamera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
                if (downPolymorphic != null)
                    downPolymorphic.invoke(mCamera, new Object[] { angle });
            }catch (Exception e1){  }
        }
    
        /////////////////////////////////////////////////////////////////////////////////////////////
        //******************************************************************************************
    
        @Override
        public void onPause(){
            super.onPause();
            player.pause();
        }
    
        //**************************************************************************************
        //*******************************STARTVIDEO*********************************************
        @SuppressLint("NewApi")
        private void startVideo() {
            SurfaceHolder videoCaptureViewHolder = null;
            try {
                mCamera = Camera.open(1);
            } catch (RuntimeException e) {
                Log.e("CameraTest", "Camera Open filed");
                return;
            }
            mCamera.setErrorCallback(new ErrorCallback() {
                public void onError(int error, Camera camera) {
                }
            });
            Camera.Parameters parameters = mCamera.getParameters();
            List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
            Camera.Size cs = previewSizes.get(0);
            parameters.setPreviewSize(cs.width,cs.height);
    
    
            setDisplayOrientation(mCamera, 90);
            mCamera.setParameters(parameters);
            if (null != mVideoCaptureView)
                videoCaptureViewHolder = mVideoCaptureView.getHolder();
            try {
                mCamera.setPreviewDisplay(videoCaptureViewHolder);
            } catch (Throwable t) {
            }
            Log.v("CameraTest","Camera PreviewFrameRate = "+mCamera.getParameters().getPreviewFrameRate());
            Size previewSize=mCamera.getParameters().getPreviewSize();
            int dataBufferSize=(int)(previewSize.height*previewSize.width* (ImageFormat.getBitsPerPixel(mCamera.getParameters().getPreviewFormat())/8.0));
            mCamera.addCallbackBuffer(new byte[dataBufferSize]);
            mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
                private long timestamp=0;
                public synchronized void onPreviewFrame(byte[] data, Camera camera) {
                    Size previewSize=camera.getParameters().getPreviewSize();
                    YuvImage yuvImage= new YuvImage(data,ImageFormat.NV21, previewSize.width, previewSize.height, null);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    yuvImage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height),80, baos);
                    byte jpgData[]=baos.toByteArray();
                    bmp = BitmapFactory.decodeByteArray(jpgData, 0, jpgData.length);
                    Bitmap bmp2 = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Bitmap.Config.RGB_565);
                    Canvas canvas=new Canvas(bmp2);
                    Paint paint=new Paint();
                    paint.setColor(Color.RED);
                    paint.setStyle(Paint.Style.STROKE);
                    paint.setStrokeWidth(2);
                    Matrix matrix = new Matrix();
                    matrix.setRotate(270,bmp.getWidth()/2,bmp.getHeight()/2);
                    canvas.drawBitmap(bmp, matrix, paint);
                    faces = new FaceDetector.Face[MAX_FACES];
                    int mFaceWidth = bmp2.getWidth();
                    int mFaceHeight = bmp2.getHeight();
                    PointF midPoint = new PointF();      //inizializza Punto di coordinate float
                    FaceDetector detector = new FaceDetector(mFaceWidth, mFaceHeight,MAX_FACES);
                    int facesFound = detector.findFaces(bmp2, faces); //bmp
    
                    if(facesFound > 0 && message_started==false){
                        faces[0].getMidPoint(midPoint);
                        float eyeDistance = faces[0].eyesDistance();
                        float confidence = faces[0].confidence();
                        player.start(); //play of "You look good today!"
                        message_started = true;
                    }
                    miaImmagine2.setImageBitmap(bmp2);
                    //+++++++++++++++++++++PARTE FINALE++++++++++++++++++++++++++++++++++++++++
                    try{
                        camera.addCallbackBuffer(data);
                    }catch (Exception e) {
                        Log.e("CameraTest", "addCallbackBuffer error");
                        return;
                    }
                    return;
                }
            });
            try {
                mCamera.startPreview();
            } catch (Throwable e) {
                mCamera.release();
                mCamera = null;
                return;
            }
    
        }
        //*************************************STARTVIDEO_END***************************************
        ////////////////////////////////////////////////////////////////////////////////////////////
        //*************************************STOPVIDEO********************************************
    
    
        private void stopVideo() {
            if(null==mCamera)
                return;
            try {
                mCamera.stopPreview();
                mCamera.setPreviewDisplay(null);
                mCamera.setPreviewCallbackWithBuffer(null);
                mCamera.release();
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
            mCamera = null;
        }
        //**********************************STOPVIDEO_END********************************************
        //////////////////////////////////////////////////////////////////////////////////////////////
        //**********************************FINISH***************************************************
        public void finish(){
            stopVideo();
            super.finish();
        };
        //**********************************FINISH_END***********************************************
    
    
        }
    

    08-04 16:05