2016-11-09 4 views
4

기기의 카메라에 대한 FOV를 가져 오거나 계산하려고합니다 (하단의 camera2 API 코드 참조). 주어진 센서 크기가 3.2mm로 2.4mm X (SENSOR_INFO_PHYSICAL_SIZE 사용)된다센서 크기에 대한 Android camera2 CameraCharacteristics API의 안정성은 어느 정도입니까?

  • : 갤럭시 S7 내 시도

    .

  • 이 경우, 계산 된 HFOV는 41.7 ° (초점 거리는 4.2mm)로 실험을 통해 틀린 것으로 입증되었습니다.
  • 다양한 스펙 문서에 언급 1/2.5 "센서 크기 (wikipedia에 따라 5.76mm X 4.29mm) -. 내 실험에 가까운
  • CameraCharacteristics의 값이 다르게 보일, 68.9 °의 나에게 HFOV를 줄 것이다. 삼성 갤럭시 A3-2016에

같은 쿼리와 실험이 더 결정적, 계산 된 HFOV은 실험 하나와 일치하는 것 같다.

CameraCharacteristics 측정 값의 신뢰성에 대해 공유하는 사람의 경험이나 데이터가?


코드는 여기 Scanbot의 CameraCharacteristics ::

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); 
if (characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) 
    continue; 

int support = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); 
if(support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) 
    Log.d("mr", "Camera " + cameraID + " has LEGACY Camera2 support"); 
else if(support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED) 
    Log.d("mr", "Camera " + cameraID + " has LIMITED Camera2 support"); 
else if(support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) 
    Log.d("mr", "Camera " + cameraID + " has FULL Camera2 support"); 
else 
    Log.d("mr", "Camera " + cameraID + " has unknown Camera2 support?!"); 

// voir http://myandroidarchive.tistory.com/5 pour le query android 
// voir http://paulbourke.net/miscellaneous/lens/ pour les maths 
// include every focal length supported by the camera device, in ascending order. 
float[] focalLengths = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS); 
SizeF sensorSize = characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE); 

float w = 0.5f * sensorSize.getWidth(); 
float h = 0.5f * sensorSize.getHeight(); 
Log.d("mr", "Camera " + cameraID + " has sensorSize == " + Float.toString(2.0f*w) + ", " + Float.toString(2.0f*h)); 
for (int focusId=0; focusId<focalLengths.length; focusId++) { 
    float focalLength = focalLengths[focusId]; 
    float horizonalAngle = (float) Math.toDegrees(2 * Math.atan(w/focalLength)); 
    float verticalAngle = (float) Math.toDegrees(2 * Math.atan(h/focalLength)); 
    Log.d("mr", "Camera " + cameraID + "/f" + focusId + " has focalLength == " + Float.toString(focalLength)); 
    Log.d("mr", " * horizonalAngle == " + Float.toString(horizonalAngle)); 
    Log.d("mr", " * verticalAngle == " + Float.toString(verticalAngle)); 
} 

답변

2

개발자를 쿼리하는 데 사용 (일명 나는 충분히 카메라와 함께 일했다).

내 경험에 비추어 볼 때이 API는 하드웨어 및 공급 업체의 특정 카메라 드라이버에 상대적으로 얇은 레이어이기 때문에 카메라 API에 대한 정보는 신뢰할 수 없습니다. 즉, API의 출력은 공급 업체가 결정한 사항에 달려 있으며 Google에서 관리하는 Android SDK의 나머지 부분과 다릅니다.

+0

의견에 감사드립니다. 기기의 모든 CameraCharacteristics 값을 표시하는 간단한 앱을 알고 계십니까? – rotoglup

+0

아니요, 절대 검색하지 않음 –