Я пытаюсь проделать некоторую работу по переносу визуально-инерциального оценщика состояния на платформу Android, используя камеру и датчики (гироскоп и акселерометр) Android.
Но после того, как я закончил, я только что узналчто-то действительно разочаровало меня в результате, которое было подтверждено, что отметка времени снимка, сделанного камерой, не точна.
Чтобы упростить эту проблему, я сейчас пытаюсь сохранить все снимки, сделанные камерой Androidк файлам, с другим CSV-файлом, содержащим все имена файлов изображений и соответствующие им временные метки.
Ниже приведен фрагмент моего кода и то, что я сделал для этой проблемы:
Подключите камеру с помощью 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();
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);
Не могли бы вы помочь мне решить эту проблему?