2016-11-09 466 views
4

我試圖使用camera2 API我的代碼在底部得到/計算設備相機的視野)。Android camera2傳感器尺寸的CameraCharacteristics API的可靠性如何?

在我上的銀河S7嘗試:

  • 給定的傳感器尺寸被3.2毫米X2.4毫米(使用SENSOR_INFO_PHYSICAL_SIZE)。
  • 在這種情況下,我的計算HFOV是41.7°(給出的焦距是4.2mm),我通過實驗證明是錯誤的。
  • 各種規格文檔提及了1/2.5" 傳感器尺寸(5.76毫米X根據wikipedia4.29毫米) - 這將給我一個HFOV的68.9°,更接近我實驗
  • CameraCharacteristics的值似乎錯誤。

在三星Galaxy A3-2016相同的查詢和實驗是更確鑿的,計算出HFOV似乎相匹配的實驗之一。

有沒有人的經驗或數據共享有關的CameraCharacteristics讀數的可靠性?


的代碼,我習慣了這裏查詢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

開發Scanbot的(又名我帶攝像頭的工作就足夠了)。

根據我的經驗,沒有任何關於Camera API的信息可靠,主要是因爲這個API是硬件和供應商特定相機驅動程序上相對較薄的一層。換言之,API的輸出將取決於供應商決定放在哪裏,而不是(與Android SDK的其他部分不同)由Google管理。

+0

感謝您的反饋,您是否碰巧知道一個簡單的應用程序,可顯示設備的所有CameraCharacteristics值? – rotoglup

+0

不,從未搜索過 –