【问题标题】:Any chances to reduce shutter time with android NDK camera access?有没有机会通过 android NDK 相机访问来减少快门时间?
【发布时间】:2012-09-18 17:06:05
【问题描述】:

我编写了一个从相机捕捉实时预览的 Android 应用程序。短快门时间很重要,至少应该保持不变。

目前我使用以下代码来实现低快门时间:

Parameters params = camera.getParameters();
params.setSceneMode(Parameters.SCENE_MODE_SPORTS);
params.setWhiteBalance(Parameters.WHITE_BALANCE_DAYLIGHT);
params.setFlashMode(Parameters.FLASH_MODE_OFF);
params.setFocusMode(Parameters.FOCUS_MODE_INFINITY);

params.setPreviewFpsRange(9000, 29453);
params.setPreviewFrameRate(29453);
params.setJpegQuality(100);
params.setPreviewFormat(ImageFormat.NV21);

params.setPreviewSize(1280,720);
params.setAntibanding(Parameters.ANTIBANDING_OFF);
params.setExposureCompensation(params.getMinExposureCompensation());
params.set("iso", 1250);
camera.setParameters(params);

我的手机固件似乎不支持 setSceneMode()(getSupportedSceneModes 返回一个空列表)。 “ISO”-设置可能没有效果(没有看图片,只是计算了帧率)。刚刚在某个地方找到了这段代码并使用了它……也许它只是错误的字符串?

目前发生的情况是:帧速率在 9 到 29,453 fps 之间变化,这是唯一支持的帧速率范围。所以params.setPreviewFpsRange(29453, 29453); 也不起作用。 帧速率在良好光照条件下(正常白天、室内、直接朝向窗户)很高(20-30 fps),而在中等/低光照条件下(日光、室内、直接远离窗户)变得非常低(8-10 fps)条件。

更详细:我不需要高帧率,但需要低快门时间。收集的数据应用于室内导航(或:第一步中的室内定位)。该应用程序需要在一个人正常行走时拍照,而无需该人关心他/她如何携带手机。该人甚至可能正在跑步或“摆动”电话(就像您通常在走路时移动手臂一样)。所以通常会有很多“运动模糊”,只要快门时间太长。这种情况与“我想拍张照片”的情况有很大不同,照片试图让相机保持稳定。我们实际上并不想获得“好照片”,而是想以某种方式不时检测墙壁的一些边缘。我预计图片中有很多“噪音”,但无论如何希望这都能正常工作......

想法是,使用 NDK 可能有机会更好地控制相机参数。有没有人体验过 NDK 并且可以回答我是否值得尝试?

附加信息:我正在使用 HTC Desire Z(也称为“T-Mobile G2”或“HTC Vision”)作为测试设备。

【问题讨论】:

    标签: android android-ndk camera


    【解决方案1】:

    简短的回答是“不”。更长的答案从一个问题开始:您的应用不关心捕获,而只使用 YUV 预览帧,对吗?

    作为没有根访问权限的标准下载应用程序,您无权直接访问相机(或其他)设备。您只有 setParameters() API 来影响相机的行为,因此对于通过此 API 公开哪些相机功能,您完全受制于 OEM。

    即使在有根设备上,您的功能也会受到限制,但现在受限于设备驱动程序和特定相机 ISP 的规格。

    在这两种情况下,您都应该从非常仔细地选择目标设备开始。我相信某些 Android 手机允许比 HTC Vision 更多的相机控制。例如,三星 S2 http://pfittech.com/rom_pfittech_jb.html 的修改版在 1080p 下拥有稳定的 25 FPS。

    【讨论】:

    • 我想避免对图片进行任何不必要的压缩。因此预览 YUV 帧很好。即使只有灰度图片(Y-Layer)也可以。我已经扎根了测试设备。作为一个研究项目,这部分是可以的......但如果我可以避免对 root 访问的需要,我会接受它;-)。 -- 你说的“修改版”是什么意思(自定义ROM?)...有一些同事用S2...也许值得一试。
    • 是的,该链接指向 S2 的自定义 ROM,已针对最高性能进行了调整。无论如何,对于一个研究项目,我会搜索具有最多功能/开放式摄像头的设备,而 HTC Desire Z 不是。
    • OTOH,如果我是你,我不会放弃 capture 路线。也许它会给你带来更好的结果。也许当你打电话给takePicture()时,“快门”(我把它放在引号中是因为这不是真正的快门,而是Camera ISP的不同因素对运动模糊的影响)会更短?您无法以 30 FPS 的速度拍摄照片,但正如您解释您的算法一样,每秒获得一次相对清晰的图像可能会很好。
    • 刚刚测试了我的同事 Galaxy S3。普通相机应用程序中预览的“运动模糊”要好得多(场景模式:运动)。 “摆动”手机时只有轻微的运动模糊。 -- 将尝试 takePicture() ... 大约 2-3 fps 应该可以;由于研究项目刚刚结束,我目前必须在没有大学财政支持的情况下完成我的博士学位。所以我目前使用我的私人硬件。我考虑为此购买另一部智能手机……如果确实需要,并且一些过早的结果显示可用的结果。
    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多