如何在Android平台上获取相机拍摄的图片的准确时间戳?

时间:2018-06-04 08:25:17

标签: android camera timestamp slam

我正在尝试使用Android的相机和传感器(陀螺仪和加速度计)将视觉 - 惯性状态估算器移植到Android平台。

但是在我完成之后,我发现了一些让我感到非常失望的结果,这已被证实是Camera拍摄的照片时间戳不准确。

为了简化这个问题,我现在尝试将Android相机捕获的所有图片保存到文件中,另一个csv文件包含所有图片文件名及其相应的时间戳。

以下是我的代码的一部分以及我为此问题所做的工作:

  1. 使用SurfaceTexture连接相机,我用它来消除在屏幕上显示图片的时间(虽然可能没用),然后将CallbackWithBuffer添加到this,在拍摄新照片时会调用onPreviewFrame

    mCamera.setPreviewTexture(surfaceTexture);
    int buffersize = mFrameWidth * mFrameHeight
                    * ImageFormat.getBitsPerPixel(previewFormat) * 8;
    previewBuffer = new byte[buffersize];
    mCamera.addCallbackBuffer(previewBuffer);
    mCamera.setPreviewCallbackWithBuffer(this);
    mCamera.startPreview();
    
  2. onPreviewFrame,将所有图片和时间戳放入缓冲区,并使用另一个线程保存图片。 outImage是包含所有图片文件名及其相应时间戳的csv文件,保存图片的真实过程在另一个过程中。第一行是我获取相机拍摄的照片的时间戳

    long realTime = SystemClock.elapsedRealtimeNanos();
    String fileName = "picture_" + realTime + ".jpg";
    outImage.println(realTime + "," + fileName);
    synchronized (buffer) {
        buffer.add(new Pair<String, byte[]>(fileName, data));
    }
    camera.addCallbackBuffer(previewBuffer);
    
  3. 请你帮我解决这个问题吗?

0 个答案:

没有答案