微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android camera2 CameraCharacteristics API对传感器尺寸的可靠性如何?

我正在尝试使用camera2 API获取/计算设备摄像机的FOV,我的代码位于底部).

在我尝试galaxy S7时:

>给定的传感器尺寸为3.2mm x 2.4mm(使用SENSOR_INFO_PHYSICAL_SIZE).
>在这种情况下,我的计算HFOV是41.7°(给定的焦距是4.2mm),我通过实验证明是错误的.
>各种规格文件提到1 / 2.5“传感器尺寸(根据wikipedia,5.76mm x 4.29mm) – 这将给我一个68.9°的HFOV,更接近我的实验.
> 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));
}

解决方法

Scanbot的开发人员(也就是我用相机工作了).

根据我的经验,关于Camera API的任何内容都不可靠,因为这个API在硬件和供应商特定的相机驱动程序上是一个相对薄的层.换句话说,API的输出将取决于供应商决定放在哪里,而不是(与Android SDK的其他部分不同)由Google管理.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐