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 中运行算法。
