0

У меня есть код класса в APK, который выполняет обнаружение лиц и рисует пользовательский вид на предварительный просмотр камеры. Обнаружение лица отлично работает на моем «Samsung-S3», но я тестировал его на пару других телефонов Android, где распознавание лиц никогда не начинается. Почему это так/Как заставить его работать? (Не против отступов пожалуйста)Обнаружение лица Версия версии для совместимости версий Android

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

Min поддерживается SDK установлен 10

+0

Я бы предложил проверить, готовы ли зависимости от детекторов и для условий с низким уровнем хранения. См. Проверки в примере кода здесь: https://github.com/googlesamples/android-vision/blob/master/visionSamples/photo-demo/app/src/main/java/com/google/android/gms/samples /vision/face/photo/PhotoViewerActivity.java#L75 – pm0733464

ответ

0

Проблема заключалась в создании TargetSDK в Android Manifest файл. Я установил его на последнюю версию Android M, пока он не работал в качестве 4.4.4 (KitKat). Теперь работает отлично.Bingo.