Как получить точную метку времени изображения, снятого камерой на платформе Android? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь проделать некоторую работу по переносу визуально-инерциального оценщика состояния на платформу Android, используя камеру и датчики (гироскоп и акселерометр) Android.

Но после того, как я закончил, я только что узналчто-то действительно разочаровало меня в результате, которое было подтверждено, что отметка времени снимка, сделанного камерой, не точна.

Чтобы упростить эту проблему, я сейчас пытаюсь сохранить все снимки, сделанные камерой 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);
    

Не могли бы вы помочь мне решить эту проблему?

...