在我的相机应用程序中的前后摄像头和人脸检测之间切换的按钮

Posted

技术标签:

【中文标题】在我的相机应用程序中的前后摄像头和人脸检测之间切换的按钮【英文标题】:Button to switch between front and back camera in my camera app in android studio and face detection 【发布时间】:2015-11-19 07:04:51 【问题描述】:

我正在使用 openCv 3.0.0 在 android studio 上开发相机应用程序。这是我第一次这样做,我遇到了一些问题。但我有两个问题: 1)我想添加一个按钮来切换前置摄像头和后置摄像头。但我似乎找不到切换的方法。

这是我的 onCreate 方法:

private Camera mCamera;
private CameraPreview mPreview;
private static int number = Camera.CameraInfo.CAMERA_FACING_FRONT;

 @Override
 public void onCreate(final Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.face_detect_surface_view);

     // Create an instance of Camera
        mCamera = getCameraInstance(number);// This funtion opens the camera

        // Create our Preview view and set it as the content of our activity.
        mPreview = new CameraPreview(this, number , mCamera);
        final FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);

        preview.addView(mPreview);


        // Add a listener to the Capture button
        ImageButton captureButton = (ImageButton) findViewById(R.id.button_capture);
        captureButton.setOnClickListener(
                new View.OnClickListener() 
                    @Override
                    public void onClick(View v) 
                        Toast.makeText(getApplicationContext(), "Image captured!", Toast.LENGTH_SHORT).show();
                        // get an image from the camera
                        mCamera.takePicture(null, null, mPicture);
                    
                
        );

// Add a listener to the Change button
        ImageButton changeButton = (ImageButton) findViewById(R.id.button_change);
        changeButton.setOnClickListener(
                new View.OnClickListener() 
                    @Override
                    public void onClick(View v) 
                        if (number == Camera.CameraInfo.CAMERA_FACING_FRONT)
                            number = Camera.CameraInfo.CAMERA_FACING_BACK;
                        else
                            number = Camera.CameraInfo.CAMERA_FACING_FRONT;
                       //HERE SHOULD BE THE STEPS TO SWITCH
                        Toast.makeText(getApplicationContext(), "Camera changed!", Toast.LENGTH_SHORT).show();
                        // get an image from the camera

                    
                
        ); 

2)我想使用 openCv 对捕获的图像进行人脸检测,但我不知道这是否可能。我在网上找不到任何东西。我已经尝试过 openCv 3.0.0 中的 faceDetect 示例,它在我使用相机时有效。这就是我一开始想要做的,但是在我将布局更改为包含框架布局而不是 org.opencv.android.JavaCameraView 之后,它就不再起作用了。所以如果有人知道为什么我会非常感激。

【问题讨论】:

【参考方案1】:

所有 *CameraView 类都有 disableViewenableView 方法。您需要禁用视图,设置视图对象的 mCameraIndex 字段并再次启用视图。 mCameraView 是受保护的方法,因此唯一的解决方案是实现视图子类和 setter/getter。有关详细信息,请参阅 tutorial-3 示例。

<org.opencv.android.NativeCameraView
            android:id="@+id/tutorial1_activity_native_surface_view"
            android:layout_
            android:layout_
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            opencv:camera_id="front" />

【讨论】:

此解决方案是否涉及人脸检测或按钮开关?我已经看过 tutorial-3 示例。但我无法在其中添加人脸检测。这就是我继续前进的原因。 它会给你关于相机开关的简要想法 非常感谢!这有很大帮助。我按照你说的做了,开关工作得很好。甚至人脸检测也有效。

以上是关于在我的相机应用程序中的前后摄像头和人脸检测之间切换的按钮的主要内容,如果未能解决你的问题,请参考以下文章

录制视频时在前后摄像头之间切换

使用Android相机进行人脸检测。?

在我的摄像头打开时检测到人脸

Android - 录制视频时在前后摄像头之间切换

ML Kit iOS 人脸检测错误

使用本机反应检测相机上的活人脸