К содержимому
  1. Главная
  2. Документация
  3. Камеры для Raspberry Pi
  4. Руководство по API ToF SDK

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

Документация Arducam · перевод arducam-russia.ru

SDK для разработчиков ToF-камеры (время пролёта)

Программный стек ToF-камеры Arducam

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

Структура SDK ToF-камеры Arducam

Установка драйвера

Как установить драйверы и зависимости, описано в отдельном руководстве.

Установка SDK

cd Release/
mkdir build
cd build
cmake ..
sudo make install
sudo ldconfig
log
Сборка и установка SDK ToF-камеры Arducam

Пример на C

Порядок работы с SDK

  1. Создайте экземпляр камеры.
  2. Запустите камеру.
  3. Запросите кадр.
  4. Получите данные кадра.
  5. Освободите память кадра.
  6. Остановите камеру.

Пример кода

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

Пример на C++

Порядок работы с SDK

  1. Создайте экземпляр камеры.
  2. Инициализируйте экземпляр камеры.
  3. Запустите камеру.
  4. Запросите кадр.
  5. Получите данные кадра.
  6. Освободите память кадра.
  7. Остановите камеру.

Пример кода

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;

Результат

Результат работы примера на C++

Пример на Python

Порядок работы с SDK

  1. Создайте экземпляр камеры.
  2. Инициализируйте экземпляр камеры.
  3. Запустите камеру.
  4. Запросите кадр.
  5. Получите данные кадра.
  6. Освободите память кадра.
  7. Остановите камеру.

Пример кода

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)

Результат

Результат работы примера на Python

Справочник API для C

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

Справочник API для C++

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

Запросить цену

Укажите количество — пришлём коммерческое предложение.