11

У меня есть проверка с последними API для Google Вижн здесь:Google видение Примеры API: Получить CameraSource к фокусу

https://github.com/googlesamples/android-vision

И я бегу это на G2 устройство LG с KitKat. Единственное изменение, которое я сделал это в minSdkVerion в файле Gradle:

... 
defaultConfig { 
    applicationId "com.google.android.gms.samples.vision.face.multitracker" 
    minSdkVersion 19 
... 

Однако это не фокус. Как мне сфокусироваться?

ответ

15

Я изменил CameraSourcePreview (....) конструктор быть следующим:

public CameraSourcePreview(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mContext = context; 
    mStartRequested = false; 
    mSurfaceAvailable = false; 

    mSurfaceView = new SurfaceView(context); 
    mSurfaceView.getHolder().addCallback(new SurfaceCallback()); 
    addView(mSurfaceView); 
    mSurfaceView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      cameraFocus(mCameraSource, Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); 
     } 
    }); 
} 

private static boolean cameraFocus(@NonNull CameraSource cameraSource, @NonNull String focusMode) { 
    Field[] declaredFields = CameraSource.class.getDeclaredFields(); 

    for (Field field : declaredFields) { 
     if (field.getType() == Camera.class) { 
      field.setAccessible(true); 
      try { 
       Camera camera = (Camera) field.get(cameraSource); 
       if (camera != null) { 
        Camera.Parameters params = camera.getParameters(); 
        params.setFocusMode(focusMode); 
        camera.setParameters(params); 
        return true; 
       } 

       return false; 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 

      break; 
     } 
    } 

    return false; 
} 

Рекомендация была дана здесь: https://github.com/googlesamples/android-vision/issues/2

и контрольный код здесь: https://gist.github.com/Gericop/7de0b9fdd7a444e53b5a

Мне также пришлось модифицировать метод FaceTrackerFactory draw (Canvas ...):

@Override 
public void draw(Canvas canvas) { 
    Face face = mFace; 
    if (face == null) { 
     return; 
    } 

    // Draws a circle at the position of the detected face, with the face's track id below. 
    float cx = translateX(face.getPosition().x + face.getWidth()/2); 
    float cy = translateY(face.getPosition().y + face.getHeight()/2); 
    canvas.drawCircle(cx, cy, FACE_POSITION_RADIUS, mFacePositionPaint); 
    canvas.drawText("id: " + getId(), cx + ID_X_OFFSET, cy + ID_Y_OFFSET, mIdPaint); 

    // Draws an oval around the face. 
    float xOffset = scaleX(face.getWidth()/2.0f); 
    float yOffset = scaleY(face.getHeight()/2.0f); 
    float left = cx - xOffset; 
    float top = cy - yOffset; 
    float right = cx + xOffset; 
    float bottom = cy + yOffset; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     canvas.drawOval(left, top, right, bottom, mBoxPaint); 
    } else { 
     canvas.drawCircle(cx, cy, Math.max(xOffset, yOffset), mBoxPaint); 
    } 
} 
+0

Можно изменить размер изображения? Поскольку у нас есть только CameraSourcePreview с некоторым размером изображения, и у нас нет объекта Camera, чтобы получить возможный размер изображения. – Zookey

+0

java.lang.RuntimeException: setParameters не удалось –

9

Опция автоматической фокусировки теперь доступна в официальном API. Смотрите setAutoFocusEnabled метод здесь:

https://developers.google.com/android/reference/com/google/android/gms/vision/CameraSource.Builder.html#setAutoFocusEnabled(boolean)

Кроме того, мы с открытым исходным кодом класса CameraSource, который имеет метод автоматической фокусировки, а также. Это один позволяет установить определенный режим фокусировки, в отличие от режима «непрерывного видео», что официальные значения по умолчанию API для:

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/ui/camera/CameraSource.java

+1

Какая версия услуг Google Play будет иметь это и когда мы можем ожидать выпуск? – Mark

+0

Автофокус все еще не работает для 4.1.2 (play-services-vision: 9.2.1) –

+0

Не работает на Samsung 4 с 4.2.2 либо (игровые сервисы 9.4) – Kenny

6

Это работает для меня с помощью Google Play Services 8.4: «com.google .android.gms: play-services: 8.4.0 '

cameraSource = new CameraSource.Builder (это, детектор) .setRequestedPreviewSize (640, 480) .setAutoFocusEnabled (true) .build();

Смежные вопросы