跳转至

Camera 摄像头(原始数据接入)

SimOne 支持通过 UDP 协议将传感器的物理级原始数据流直接推送至指定 IP 和端口,无需经过 SimOneAPI 逻辑层。开发者可在传感器配置页面填写接收端地址,SimOne 即开始实时推送原始数据,适用于需要自研感知算法或自定义数据处理管线的场景。

注意

示例目录:[SimOne 安装目录]\SimOneAPI\SensorRaw\SensorCamera

用法简述

物理级摄像头数据传输的演示代码,您可以参考此代码来实时发送摄像头仿真图像至您的算法或控制器。

在传感器配置页面正确填写接收端的 IP 和端口,SimOne 将通过 UDP 协议发送数据。

接收图像帧示例

图像数据通过回调函数推送,支持 RGB、JPEG、H.265 和 RLE 分割图等多种格式:

#include <SimOneStreamingAPI.h>
#include <opencv2/opencv.hpp>

// 回调函数:每帧图像数据到达时触发
void dataImageCallback(SimOne_Streaming_Image* pImage)
{
    if (pImage->format == ESimOne_Streaming_Image_Format_RGB) {
        // RGB 格式:直接构造 OpenCV Mat
        cv::Mat img(pImage->height, pImage->width, CV_8UC3, pImage->imageData);
        cv::imshow("Camera RGB", img);
    }
    else if (pImage->format == ESimOne_Streaming_Image_Format_JPEG) {
        // JPEG 格式:先构造缓冲 Mat 再解码
        cv::Mat imgbuf(pImage->height, pImage->width, CV_8UC3, pImage->imageData);
        cv::Mat img = imdecode(imgbuf, CV_LOAD_IMAGE_COLOR);
        cv::imshow("Camera JPEG", img);
    }
    else if (pImage->format == ESimOne_Streaming_Image_Format_H265) {
        // H.265 格式:使用解码器解码后显示
        if (pImage->imageDataSize > 0) {
            decoder.decode((unsigned char*)pImage->imageData, pImage->imageDataSize);
            decoder.play();
        }
    }
}

int main(int argc, char* argv[])
{
    std::string ip = "127.0.0.1";
    int port = 6699;  // 与传感器配置页面填写的端口一致

    // 注册回调,SimOne 将实时推送图像数据至此函数
    SimOneAPI::SetStreamingImageUpdateCB(ip.c_str(), port, dataImageCallback);

    while (true) {
        if (cv::waitKey(1) == 27) break;
        std::this_thread::sleep_for(std::chrono::milliseconds(1));
    }
    return 0;
}

编译环境

CMakeList.txt 支持生成 windows / ubuntu 的项目工程。

使用流程

在 SimOne 中运行用例,在 VS 中运行算法。