Руководство по API ToF SDK

Программный стек ToF-камеры Arducam
Arducam ToF SDK — динамическая библиотека на C++. В ней три класса: Camera, Frame и Sensor. Camera управляет захватом изображения и вычислениями, Frame отвечает за память, в которой хранятся данные камеры, а Sensor — конкретная реализация обращения к камере. Sensor вызывается как объект-член класса Camera, и напрямую пользователи с ним обычно не работают.

Установка драйвера
Как установить драйверы и зависимости, описано в отдельном руководстве.
Установка SDK
cd Release/
mkdir build
cd build
cmake ..
sudo make install
sudo ldconfig
log

Пример на C
Порядок работы с SDK
- Создайте экземпляр камеры.
- Запустите камеру.
- Запросите кадр.
- Получите данные кадра.
- Освободите память кадра.
- Остановите камеру.
Пример кода
ArducamDepthCamera tof = createArducamDepthCamera();
FrameBuffer frame;
if (initialize(tof,DEPTH_TYPE))
exit(-1);
if (start(tof))
exit(-1);
FrameFormat format;
if ((frame = requestFrame(tof,200)) != 0x00){
getFormat(frame,DEPTH_FRAME,format);
}
releaseFrame(tof,frame);
uint8_t *preview_ptr = malloc(format.width*format.height*sizeof(uint8_t)) ;
float* depth_ptr = 0;
int16_t *raw_ptr = 0;
float *amplitude_ptr = 0;
for (;;)
{
if ((frame = requestFrame(tof,200)) != 0x00)
{
depth_ptr = (float*)getDepthData(frame);
amplitude_ptr = (float*)getAmplitudeData(frame);
getPreview(preview_ptr,depth_ptr,amplitude_ptr);
releaseFrame(tof,frame);
}
}
if (stop(tof))
exit(-1);
return 0;
Результат

Пример на C++
Порядок работы с SDK
- Создайте экземпляр камеры.
- Инициализируйте экземпляр камеры.
- Запустите камеру.
- Запросите кадр.
- Получите данные кадра.
- Освободите память кадра.
- Остановите камеру.
Пример кода
ArduCam::ArduCamTOFCamera tof;
ArduCam::ArduCamTOFFrame *frame;
if (tof.initialize(ArduCam::RAW_TYPE))
exit(-1);
if (tof.start())
exit(-1);
ArduCam::FrameFormat tofFormat = tof.getFrameFormats();
int16_t *raw_ptr;
for (;;)
{
frame = tof.requestFrame(200);
if (frame != nullptr)
{
raw_ptr = (int16_t *)frame->getFrameData(ArduCam::RAW_FRAME);
cv::Mat raw_frame(720, 240, CV_16S, raw_ptr);
raw_frame.convertTo(raw_frame,CV_32F);
cv::imshow("preview", raw_frame);
if (cv::waitKey(1) == 27)
break;
display_fps();
}
tof.releaseFrame(frame);
}
if (tof.stop())
exit(-1);
return 0;
Результат

Пример на Python
Порядок работы с SDK
- Создайте экземпляр камеры.
- Инициализируйте экземпляр камеры.
- Запустите камеру.
- Запросите кадр.
- Получите данные кадра.
- Освободите память кадра.
- Остановите камеру.
Пример кода
cam = ac.ArducamCamera()
cam.initialize(ac.TOFOutput.RAW)
cam.start()
while True:
frame = cam.requestFrame(200)
buf = frame.getRawData()
cam.releaseFrame(frame)
cv2.imshow("window", buf.astype(np.float32))
key = cv2.waitKey(1)
if key == ord("q"):
cam.stop()
sys.exit(0)
Результат

Справочник API для C
Описание функций — в справочнике по API для C.
Справочник API для C++
Описание классов и методов — в справочнике по API для C++.