Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
人脸检测Android版本的兼容性问题_Android_Android Studio_Face Detection_Android Sdk Manager - Fatal编程技术网

人脸检测Android版本的兼容性问题

人脸检测Android版本的兼容性问题,android,android-studio,face-detection,android-sdk-manager,Android,Android Studio,Face Detection,Android Sdk Manager,我在APK中有以下类代码,用于人脸检测和在相机预览中绘制自定义视图。人脸检测在我的“三星S3”上运行得很好,但我在另外两款安卓手机上进行了测试,这些手机的人脸检测从未启动过。为什么会这样/如何让它工作?(请不要介意缩进) 公共类CameraPreview扩展了SurfaceView实现了SurfaceHolder.Callback{ 私人地勤人员; 私人摄像机麦卡梅拉; 私人医生; 公共摄像机回顾(上下文、摄像机){ 超级(上下文); mCamera=摄像机; mHolder=getHolder

我在APK中有以下类代码,用于人脸检测和在相机预览中绘制自定义视图。人脸检测在我的“三星S3”上运行得很好,但我在另外两款安卓手机上进行了测试,这些手机的人脸检测从未启动过。为什么会这样/如何让它工作?(请不要介意缩进)

公共类CameraPreview扩展了SurfaceView实现了SurfaceHolder.Callback{ 私人地勤人员; 私人摄像机麦卡梅拉; 私人医生; 公共摄像机回顾(上下文、摄像机){ 超级(上下文); mCamera=摄像机; mHolder=getHolder(); mHolder.addCallback(this); //不推荐使用的设置,但在3.0之前的Android版本上是必需的 mHolder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区); } 公共摄像机(摄像机){ if(mHolder.getSurface()==null){ //预览曲面不存在 返回; } //在进行更改之前停止预览 试一试{ mCamera.stopPreview(); }捕获(例外e){ //忽略:尝试停止不存在的预览 } //设置预览大小并进行任何调整大小、旋转或 //在此处重新格式化更改 //使用新设置开始预览 设置摄像机(摄像机); 试一试{ mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); //startFaceDetection(); }捕获(例外e){ d(VIEW_Log_标记,“启动相机预览时出错:”+e.getMessage()); } } 公共无效表面更改(表面持有人,整数格式,整数w,整数h){ //如果预览可以更改或旋转,请在此处处理这些事件。 //请确保在调整预览大小或重新设置预览格式之前停止预览。 刷新照相机(mCamera); } 公共摄像机(摄像机){ //方法来设置摄影机实例 mCamera=摄像机; setFaceDetectionListener(faceDetectionListener); startFaceDetection(); } @凌驾 公共空间表面覆盖(表面覆盖物持有人){ //TODO自动生成的方法存根 mCamera.release(); } private Camera.FaceDetectionListener FaceDetectionListener=新建Camera.FaceDetectionListener(){ @凌驾 public void onFaceDetection(Camera.Face[]faces,Camera c){ 如果(faces.length>0){ Log.d(“面检测”,“面检测X和Y为:”+faces.length+ 面1位置X:“+faces[0]。rect.centerX()+ Y:“+faces[0].rect.centerY()+”位于“+(MyDrawing.w-MyDrawing.radius)+”-“+(MyDrawing.w+MyDrawing.radius)); 如果(面[0].rect.centerX()>=0&&faces[0].rect.centerX()0){ //摄像头支持人脸检测,因此可以启动它: mCamera.startFaceDetection(); } }
Min-supported SDK设置为10

问题在于在Android清单文件中设置TargetSDK。我在为4.4.4(KitKat)工作之前将其设置为最新的Android M作为目标。现在可以正常工作。答对了。

我建议检查检测器依赖项是否准备好,以及是否处于低存储状态。请参阅此处示例代码中的检查:
     public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
private MyDrawing md;

public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;
    mHolder = getHolder();
    mHolder.addCallback(this);
    // deprecated setting, but required on Android versions prior to 3.0
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void refreshCamera(Camera camera) {
    if (mHolder.getSurface() == null) {
        // preview surface does not exist
        return;
    }
    // stop preview before making changes
    try {
        mCamera.stopPreview();
    } catch (Exception e) {
        // ignore: tried to stop a non-existent preview
    }
    // set preview size and make any resize, rotate or
    // reformatting changes here
    // start preview with new settings
    setCamera(camera);
    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
        //startFaceDetection();
    } catch (Exception e) {
        Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());
    }
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // If your preview can change or rotate, take care of those events here.
    // Make sure to stop the preview before resizing or reformatting it.
    refreshCamera(mCamera);
}

public void setCamera(Camera camera) {
    //method to set a camera instance
    mCamera = camera;
    mCamera.setFaceDetectionListener(faceDetectionListener);
    startFaceDetection();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
     mCamera.release();
}

private Camera.FaceDetectionListener faceDetectionListener = new Camera.FaceDetectionListener() {

    @Override
    public void onFaceDetection(Camera.Face[] faces, Camera c) {

        if (faces.length > 0) {

            Log.d("FaceDetection", "face detected X and Y are as: " + faces.length +
                    " Face 1 Location X: " + faces[0].rect.centerX() +
                    "Y: " + faces[0].rect.centerY() +" LIES IN "+(MyDrawing.w-MyDrawing.radius) +"--"+(MyDrawing.w+MyDrawing.radius));

            if(faces[0].rect.centerX()>=0 && faces[0].rect.centerX()<115 )
            {
                Log.d("ALERT = ", "Detection Started" );
                AndroidVideoCaptureExample.capture.setText("Recording/ stopNsave ");
                AndroidVideoCaptureExample.faceDetect();
            }

        } else {
            Log.d("FaceDetection", "circle cordinates are as: " + (MyDrawing.w-MyDrawing.radius) +"cX"+ MyDrawing.radius+"cY");

        }
    }
};

public 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();
    }
}