Skip to content

Smart Vision SDK for C++

TIP

使用Smart Vision SDK C++ API编译,需要引入Smart Vision SDK 头文件:

#include "smart_vision.hpp"

链接时需要指定Smart Vision SDK so库,例如:

$g++ example.cpp -o demo -lsmartvision -L/usr/local/lib/

Smart Vision SDK 头文件地址: /usr/local/include/aidlux/smartvision/smart_vision.hpp

Smart Vision SDK 库文件地址: /usr/local/lib/libsmartvision.so

C++ API预览

类(class)公共成员函数(public member function)描述(Description)
Cameraint8_t open(GetImageCB cb)以无参模式打开相机
int8_t open(const DeviceParam & dev_param, GetImageCB cb)以有参模式打开相机
void start_capture(void)打开流开关
void stop_capture(void)关闭流开关
void close()关闭相机
结构体(struct)成员变量名(public member variable)类型(Type)描述(Description)
DeviceParamcfg_nameconst char *带路径的参数配置文件路径
cfg_name_sstring带路径的参数配置文件名
dev_nameconst char *相机设备名称
snconst char *相机 SN code
Imagedataconst char *指向存放数据的缓冲区的指针
wint目标图片宽度
hint目标图片高度
cint目标图片的通道(通常为3)
lengthint图片数据所占内存长度
srcWidthint图片内部宽度,通常比最终宽度大
srcHeightint图片内部高度
memCopyStartIndexint指示缓冲区中数据的索引
memCopyEndIndexint指示缓冲区中数据的结束索引
planeOffsetintYUV数据的偏移值
TcpConfigipconst char *IP地址
portuint16_t端口号
SVSdkMemfdInfosrcYPlaneStrideintYUV数据的宽
srcSliceHeightintYUV数据的高
memCopyStartIndexintStart index值(注:Start index的值与End index相等)
memCopyEndIndexintEnd index值
planeOffsetintYUV偏移值
cam_idint相机的ID号
MediaInfodurationint时间ms
widthint宽度
heightint高度
frame_ratefloat帧率
file_sizeuint64_t文件大小
file_namestring文件名
公共函数(public function)描述(Description)
void set_log_level(SVLogLevel log_level)设置日志级别
void set_log_destination(const char* destinationPath, bool also_to_stderr)设置日志文件名及路径
typedef std::function<int8_t(const Image &, const SVSdkMemfdInfo &)> GetImageCB作为open()函数的入参,用于获取相片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。
bool is_bgr(const cv::Mat &image)判断输入的 OpenCV 图像是否为BGR格式。
int start_camera_with_parameter(GetImageCB cb, const char *conf_file, int8_t preview, int8_t idx)打开摄像头,有参形式。
int start_camera_without_parameter(GetImageCB cb, int8_t preview, int8_t idx)打开摄像头,无参形式。
int start_camera(int8_t idx)启动指定索引的摄像头进行预览。
int start_camera(const char* json_param, int8_t idx)通过配置参数启动指定索引的摄像头。
int8_t configure_camera_parameter(const char *conf_file, int8_t activate, int8_t idx = 0)激活启动摄像头配置参数。
int8_t configure_camera_parameter(int8_t activate, const char *json_param, int8_t idx = 0)激活启动摄像头json配置参数。
int8_t configure_camera_parameter_io(GetImageCB cb, const char* json_param, int8_t idx)根据配置差异决定是否需要重启摄像头流。
int8_t configure_camera(const char *file_path, bool set_property, bool validation)根据参数决定是否立即应用设置。
int8_t close_camera(int8_t idx = 0)关闭指定索引摄像头。
int8_t preview_set(int8_t enable, int8_t idx)开启或关闭指定摄像头的预览功能。
int8_t set_off_mode()设置OFF关闭信号输出配置。
int8_t get_tcp_setting(int cam_id, TcpConfig& tcp_setting)获取TCP的设置。
int8_t tcp_send_signal(int cam_id, std::string message)TCP发送信号。
int8_t tcp_send(std::string message, TcpConfig& tcp_setting)TCP发送字符串消息。
int8_t io_send(std::string io_str, std::string io_control_file)指定字符串写入到特定文件。
int8_t send_signal_on(int device_id)发送up信号到指定设备(比如do1,do2, do3),keeptime从配置读。
int8_t send_signal_on(int device_id, int keeptime)发送up信号到指定设备(比如do1,do2, do3),接口传入keeptime。
int8_t send_signal_off(int device_id)发送clear信号到指定设备(比如do1,do2, do3)。
int get_io_keeptime(int device_id)获取指定设备(比如do1,do2, do3)的keeptime。
string get_camera_info(int8_t idx = 0)根据摄像头索引 idx 获取对应配置文件路径,读取并解析 JSON 格式的摄像头配置信息。
string get_camera_default_setting(int8_t idx = 0)通过摄像头索引 idx 加载默认配置,获取完整配置字符串并同步到系统单例。
string get_sensor_model_info(int idx)获取传感器模型信息。
vector<std::string> get_all_cam_ids(bool disable_cache = false)根据是否禁用缓存来决定是从本地配置读取还是实时探测所有摄像头的型号名称。
vector<int> get_all_cam_index()获取所有的index。
unordered_map<int, std::string> get_all_cameras(bool disable_cache = false)调用底层探测逻辑获取所有摄像头信息。
int get_idx_by_loc_id(int loc_id)根据摄像头的物理位置 ID(loc_id)查找其对应的逻辑索引(cam_id或idx)。
int get_loc_id_by_idx(int idx)根据摄像头的逻辑索引(idx)反向查找其所在的物理位置 ID(loc_id)。
int get_cam_index(std::string cam_id)通过相机名称查找其对应的逻辑索引。
string get_cam_id(int cam_index)根据逻辑索引查找并返回对应的相机名称。
cv::Mat image_read(int8_t idx = 0)安全地从指定摄像头读取当前预览帧(JPEG格式)。
int8_t get_camera_status(int8_t idx = 0)通过日志记录并返回指定索引摄像头的当前状态码。
void start_camera_capture(int idx = 0)启动指定摄像头的图像捕获功能。
void stop_camera_capture(int idx = 0)停止指定摄像头的图像捕获。
int get_dst_width(int8_t idx = 0)获取指定摄像头输出图像的目标宽度。
int get_dst_height(int8_t idx = 0)获取指定摄像头输出图像的目标高度。
int8_t notify_sve(SPhase phase_enum)通过HTTP(POST)请求向本地 SVE 服务发送当前任务阶段通知。
int8_t save_result(const char *release_id, const char *release_version,const char *origin_file, const char *mask_file, const char *final_file, const char *additional = "")将图像分析任务的结果文件路径及附加信息打包为 JSON 并上报至本地 SVE 服务。
cv::Mat get_cvimage(const Image &img, int idx = 0)摄像头原始YUV格式的图像数据转换为 OpenCV 可用的BGR三通道矩阵。
void qmm_cleanup(int cam_id = 0)发送特定格式的控制信号来停止指定或全部摄像头服务。
void qmm_cleanup_all()发送特定格式的控制信号来停止指定或全部摄像头服务。
void qmm_cleanup_invalid()清理状态异常的 qmm 进程。
int qmm_status(int idx = 0)检查指定摄像头索引 idx 对应的服务进程是否存活,基于 Redis 心跳机制实现。
int start_record(int idx)安全地启动摄像头视频录制,执行多项前置检查。
int get_record_status(int idx)查询指定摄像头的视频录制状态。
MediaInfo stop_record(int idx)停止摄像头的录制过程,并从内部状态中提取并填充录制结果元数据。
int set_bpp_binning(std::string cam_id, int binning_flag, int hb, int vb, int bpp_flag, int bpp)指定摄像头的像素合并和位深。
void set_cfgname(const std::string &cfg_name_str)设置设备参数类中的配置文件名。
bool isIPFormat(const char* str)判断字符串是否为 IPv4 或(完整格式)IPv6 地址。
bool isFileExists(const std::string& filePath)判断一个文件路径是否对应一个存在的文件(或目录)。
bool createNewSignalFile(const std::string& filePath)创建指定路径的文本文件,并写入默认 JSON 配置。
枚举(ENUM)成员变量名(public member variable)类型(Type)描述(Description)
SVLogLevelSINFOuint8_t日志级别SINFO
SWARNINGuint8_t日志级别SWARNING
SERRORuint8_t日志级别SERROR
SDEBUGuint8_t日志级别SDEBUG
SOFFuint8_t日志级别SOFF
SignalTypeOFFuint8_t关闭信号输出配置
NG_SIGNALuint8_tNG信号输出模式
ALARM_SIGNALuint8_talarm信号输出模式
OK_SIGNALuint8_tok信号输出模式
SignalModeIO_MODEuint8_tIO模式
TCP_MODEuint8_tTCP模式
MODBUS_MODEuint8_tMODBUS模式
UART_MODEuint8_t串口模式
CameraTriggerModeINVALID_TRIGGER_MODE_ENUM0uint8_t无效触发模式
INTERNAL_TRIGGER_MODE_ENUM1uint8_t内触发
EXTERNAL_TRIGGER_MODE_ENUM2uint8_t外触发,外部硬件触发
SOFTWARE_TRIGGER_MODE_ENUM3uint8_t软件触发

类Camera

实例化类Camera对象相关操作。打开相机、抓图等相关的操作都基于实例化Camera对象。

WARNING

如非特殊说明,所有的定义都属于名字空间Aidlux::SmartVision。可通过以下命令在代码中引入:

using namespace Aidlux::SmartVision;

无参模式打开相机(函数open)

APIint8_t open(GetImageCB cb)
描述以无参模式打开相机。
参数输入参数为回调函数。回调函数由客户自定义。关于回调函数请参考回调函数GetImageCB
返回值0: 成功。-1: 失败。

举例如下(Camera为类Camera的实例化对象,下同):

cpp
// 无参模式打开相机 
int8_t res = camera.open(my_get_img_cb);

有参模式打开相机(函数open)

APIint8_t open(const DeviceParam & dev_param, GetImageCB cb)
描述以有参模式打开相机。
参数dev_param为结构体DeviceParam的实例化对象。 cb为回调函数。回调函数由客户自定义。关于回调函数请参考回调函数GetImageCB
返回值0: 成功。-1: 失败。

举例如下:

cpp
// 有参模式打开相机
int8_t res = camera.open(dev_param, my_get_img_cb);

打开流开关(函数start_capture)

APIvoid start_capture(void)
描述打开流开关
参数
返回值

举例如下:

cpp
// 打开流开关
camera.start_capture();

关闭流开关(函数stop_capture)

APIvoid stop_capture(void)
描述关闭流开关
参数
返回值

举例如下:

cpp
//关闭流开关
camera.stop_capture();

关闭相机(函数close)

APIvoid close()
描述关闭相机
参数
返回值

举例如下:

cpp
//关闭流开关
camera.close();

结构体DeviceParam

定义带路径的参数配置文件名。该参数配置文件用于配置相机参数。因此本结构体仅用于有参模式打开相机。

成员变量名类型默认值描述
cfg_nameconst char*带路径的参数配置文件路径
cfg_name_sstring带路径的参数配置文件名
dev_nameconst char*相机设备名称
snconst char*相机SN code

结构体Image

定义图片数据相关信息,包括图片配置信息及指针变量。

成员变量名类型默认值描述
dataconst char*指向存放数据的缓冲区的指针
wint目标图片宽度
hint目标图片高度
cint目标图片的通道(通常为3)
lengthint图片数据所占内存长度
srcWidthint图片内部宽度,通常比最终宽度大
srcHeightint图片内部高度
memCopyStartIndexint指示缓冲区中数据的索引
memCopyEndIndexint指示缓冲区中数据的结束索引
planeOffsetintYUV数据的偏移值

结构体TcpConfig

定义TCP信号输出配置信息。

成员变量名类型默认值描述
ipconst char*IP地址
portuint16_t端口号

结构体SVSdkMemfdInfo

定义数据缓冲区信息。

成员变量名类型描述
srcYPlaneStrideintYUV数据的宽
srcSliceHeightintYUV数据的高
memCopyStartIndexintStart index值(注:Start index的值与End index相等)
memCopyEndIndexintEnd index值
planeOffsetintYUV偏移值
cam_idint相机的ID号

设置日志级别(函数set_log_level)

APIvoid set_log_level(SVLogLevel log_level)
描述设置日志级别。
参数log_level为SVLogLevel类型的枚举,关于SVLogLevel请参考枚举SVLogLevel
返回值

举例如下:

cpp
//设置日志级别
Aidlux::SmartVision::set_log_level(SVLogLevel::SINFO);

设置日志文件名及路径(函数set_log_destination)

APIvoid set_log_destination(const char* destinationPath, bool also_to_stderr)
描述设置日志文件名及路径
参数destinationPath:带路径的日志文件名,默认值为"./aidclog_smart_vision_"。also_to_stderr:是否输出到终端,默认值为false
返回值

举例如下:

cpp
//设置日志文件名及路径
const char* log_path = "./aidclog_smart_vision_";
Aidlux::SmartVision::set_log_destination(log_path);

日志级别(枚举SVLogLevel)

成员变量名类型默认值描述
SINFOuint8_t0日志级别SINFO
SWARNINGuint8_t日志级别SWARNING
SERRORuint8_t日志级别SERROR
SDEBUGuint8_t日志级别SDEBUG
SOFFuint8_t日志级别SOFF

回调函数GetImageCB

APItypedef std::function<int8_t(const Image &, const SVSdkMemfdInfo &)> GetImageCB
描述作为open()函数的入参,用于获取相片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。
参数参数一是结构体Image 的实例化对象,数据由此传入。参数二是缓冲区结构体对象,存储包括缓冲区index、YUV数据宽高等
返回值自定义

举例如下:

cpp
//回调函数定义
int8_t my_get_img_cb(const Image & cap_img, const SVSdkMemfdInfo & mem_info)
{
    ......
    return 0;
}

判断图像是否为BGR格式(函数is_bgr)

APIbool is_bgr(const cv::Mat &image)
描述判断输入的OpenCV图像是否为BGR格式。
参数&image:输入图像的常量引用
返回值true:图像有 3 个通道。false:图像不是 3 个通道

举例如下:

cpp
 Mat image = imread("test.jpg");
bool result = is_bgr(image);

有参形式打开摄像头(函数start_camera_with_parameter)

APIint start_camera_with_parameter(GetImageCB cb, const char *conf_file, int8_t preview, int8_t idx)
描述有参的形式打开摄像头。
参数cb: 图像获取回调函数,用于处理摄像头捕获的图像。conf_file: 包含摄像头设置的配置文件路径。preview: 标识是否开启预览模式。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
int result = start_camera_with_parameter(myImageCallback,"/home/config/camera.json", 1, 0);

无参形式打开摄像头(函数start_camera_without_parameter)

APIint start_camera_without_parameter(GetImageCB cb, int8_t preview, int8_t idx)
描述无参的形式打开摄像头。
参数cb: 图像获取回调函数,用于处理摄像头捕获的图像。preview: 标识是否开启预览模式。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
int result = start_camera_with_parameter(myImageCallback, 1, 0);

打开指定摄像头(函数start_camera)

APIint start_camera(int8_t idx)
描述无参的形式打开摄像头。
参数idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
int result = Aidlux::SmartVision::start_camera(0);

通过配置文件打开指定摄像头(函数start_camera)

APIint start_camera(const char* json_param, int8_t idx)
描述无参的形式打开摄像头。
参数json_param:JSON 格式字符串。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
 const char* config = R"({
        "width": 1280,
        "height": 720,
        "fps": 30,
        "format": "MJPG"
    })";

// 启动第0个摄像头,使用上述配置
int result = Aidlux::SmartVision::start_camera(config, 0);

激活配置摄像头参数(函数configure_camera_parameter)

APIint8_t configure_camera_parameter(const char *conf_file, int8_t activate, int8_t idx = 0)
描述通过配置文件激活摄像头参数。
参数conf_file:向摄像头配置文件路径的字符串。activate:0不激活,1激活。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
const char* config_path = "/home/user/camera_config_1080p.json";
int8_t result = Aidlux::SmartVision::configure_camera_parameter(config_path, 1, 0);

激活json配置摄像头参数(函数configure_camera_parameter)

APIint8_t configure_camera_parameter(int8_t activate, const char* json_param, int8_t idx)
描述通过json配置文件激活摄像头参数。
参数activate:0不激活,1激活。json_param:JSON 格式字符串。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
const char* config = R"({
        "width": 1280,
        "height": 720,
        "fps": 25,
        "exposure": -4,
        "brightness": 50
    })";
int8_t result = Aidlux::SmartVision::configure_camera_parameter(1, config, 0);

重启摄像头流(函数configure_camera_parameter_io)

APIint8_t configure_camera_parameter_io(GetImageCB cb, const char* json_param, int8_t idx)
描述根据配置差异决定是否需要重启摄像头流。
参数cb:函数回调。json_param:JSON 格式字符串。idx:摄像头索引。
返回值0:成功。-1: 失败。

举例如下:

cpp
void myImageCallback(cv::Mat img) 
{
    cv::imshow("Camera IO Config", img);
    cv::waitKey(1);
}
const char* new_config = R"({
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "format": "H264"
    })";
int8_t result = Aidlux::SmartVision::configure_camera_parameter_io(myImageCallback, new_config, 0);

应用设置是否启动(函数configure_camera)

APIint8_t configure_camera(const char *file_path, bool set_property, bool validation)
描述过传入配置文件路径来配置摄像头,并根据参数决定是否立即应用设置。
参数file_path:摄像头配置文件的路径(如 /home/config/cam1.json),包含分辨率、帧率等参数。set_property:是否在加载后立即激活/应用参数。validation:参数被忽略(未使用)。
返回值0:成功。-1: 失败。

举例如下:

cpp
const char* config_file = "/home/user/1080p_config.json";
int8_t result = Aidlux::SmartVision::configure_camera(config_file, true, false);

关闭指定索引摄像头(函数close_camera)

APIint8_t close_camera(int8_t idx)
描述关闭指定索引的摄像头。
参数idx:摄像头索引。
返回值0:请求发送成功。

举例如下:

cpp
int8_t result = Aidlux::SmartVision::close_camera(0);

预览功能(函数preview_set)

APIint8_t preview_set(int8_t enable, int8_t idx)
描述开启或关闭指定摄像头的预览功能。
参数enable:0开启,1关闭。idx:摄像头索引。
返回值0:成功。非0: 失败。

举例如下:

cpp
int8_t result = Aidlux::SmartVision::preview_set(1, 0);

设置OFF关闭信号输出配置(函数set_off_mode)

APIint8_t set_off_mode()
描述设置OFF关闭信号输出配置。
参数
返回值-1: 失败。0: 成功。

举例如下:

cpp
//设置OFF关闭信号输出模式
int8_t res = set_off_mode();

配置TCP(函数get_tcp_setting)

APIint8_t get_tcp_setting(int cam_id, TcpConfig& tcp_setting)
描述获取TCP的设置
参数cam_id:相机的ID号。 tcpsetting: 类TcpConfig的实例化对象。包含TCP输出类的信息。
返回值-1: 失败。0: 成功。

举例如下:

cpp
int8_t cam_id = 0;
TcpConfig tcpsetting;
int8_t res = get_signal_sending_mode(cam_id, tcpsetting);

获取TCP的设置(函数tcp_send_signal)

APIint8_t tcp_send_signal(int cam_id, std::string message)
描述TCP发送信号到指定相机。
参数cam_id:相机的ID号。 message: 字符串数据信息。
返回值-1: 失败。0: 成功。

举例如下:

cpp
int8_t cam_id = 0;
string message = "hello world";
int8_t res = get_signal_sending_mode(cam_id, tcpsetting);

TCP信息内容发送(函数tcp_send)

APIint8_t tcp_send(std::string message, TcpConfig& tcp_setting)
描述发送TCP类信息到指定的字符串。
参数message: 字符串数据信息。 tcpsetting: 类TcpConfig的实例化对象。包含TCP输出类的信息。
返回值-1: 失败。0: 成功。

举例如下:

cpp
string message = "hello world";
TcpConfig tcpsetting;
int8_t res = tcp_send(message, tcpsetting);

IO数据发送(函数io_send)

APIint8_t io_send(std::string io_str, std::string io_control_file)
描述将指定的字符串数据写入到一个由路径指定的系统文件中。
参数io_str:要写入文件的字符串数据。 io_control_file: 目标文件的完整路径(如 /sys/class/gpio/gpio17/value。
返回值-1: 失败。0: 成功。

举例如下:

cpp
std::string gpio_value_path = "/sys/class/gpio/gpio17/value";
std::string value = "1";
int8_t result = Aidlux::SmartVision::io_send(valuhttps://docs.gitlab.cn/jh/user/project/merge_requests/creating_merge_requests.htmle, gpio_value_path);

数字输出控制(函数send_signal_on)

APIint8_t send_signal_on(int device_id)
描述根据传入的设备 ID,从配置中获取对应的信号保持时间。
参数device_id: 设备编号(1, 2, 3 分别对应 DO1, DO2, DO3)。
返回值-1: 失败。0: 成功。

举例如下:

cpp
int8_t res = send_signal_on(1);

数字输出控制(函数send_signal_on 带保持时间)

APIint8_t send_signal_on(int device_id, int keeptime)
描述启动一个独立线程来管理信号的持续时间和状态。
参数device_id: 设备编号(1, 2, 3 分别对应 DO1, DO2, DO3)。keeptime: 信号保持时间。
返回值-1: 失败。0: 成功。

举例如下:

cpp
int8_t res = send_signal_on(1, 5000);

信号类型定义(枚举SignalType)

成员变量名类型默认值描述
OFFuint8_t0关闭信号输出配置
NG_SIGNALuint8_tNG信号输出模式
ALARM_SIGNALuint8_talarm信号输出模式
OK_SIGNALuint8_tok信号输出模式

信号类型定义(枚举SignalMode)

成员变量名类型默认值描述
IO_MODEuint8_t0IO模式
TCP_MODEuint8_t1TCP模式
MODBUS_MODEuint8_t2MODBUS模式
UART_MODEuint8_t3串口模式

信号类型定义(枚举CameraTriggerMode)

成员变量名类型默认值描述
INVALID_TRIGGER_MODE_ENUM0uint8_t0无效触发模式
INTERNAL_TRIGGER_MODE_ENUM1uint8_t内触发
EXTERNAL_TRIGGER_MODE_ENUM2uint8_t外触发,外部硬件触发
SOFTWARE_TRIGGER_MODE_ENUM3uint8_t软件触发

YUV格式数据转BGR格式数据(函数yuv_to_bgr)

APIbool yuv_to_bgr(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata, int idx)
描述YUV格式数据转BGR格式数据。通过入参destMat对象来将转换后的数据传出。
参数destMat: 输出的BGR图像。srcSliceHeight: 原始图像高度。srcYPlaneStride: Y平面的行字节数。planeOffset: UV平面的偏移量。memdata: 输入的YUV数据。idx: 相机的索引。
返回值false: 失败。true: 成功

举例如下:

cpp
int idx = 0;
cv::Mat sdk_frame;

int8_t my_get_img_cb(const Aidlux::SmartVision::Image & cap_img, const SVSdkMemfdInfo &index)
{
    t_count++;
    cout << "Image - w: " << cap_img.w << ", h: " << cap_img.h << "Image - w: " << cap_img.srcWidth << ", h: " << cap_img.srcHeight << ", length: " << cap_img.length << ", rt fps: " << cap_img.rt_fps << ", ma fps: " << cap_img.ma_fps << endl;
    // 添加处理程序,当data_sign为真才处理
    if(data_sign){
        bool res = yuv_to_bgr(sdk_frame, cap_img.srcHeight, cap_img.srcWidth, cap_img.planeOffset, (void *)cap_img.data, idx);
        data_sign = false;
    }
    return 0;
}

获取SDK版本信息(函数get_build_version)

APIconst char *get_build_version()
描述获取sdk版本信息。
参数
返回值sdk版本信息。

举例如下:

cpp
// 获取SDK版本信息
const char* res = get_build_version();

标识构建时间(函数get_build_meta)

APIconst char *get_build_meta(void)
描述构造时间。
参数
返回值编译时期的时间戳 。

举例如下:

cpp
// 获取SDK版本信息
const char* res = get_build_meta();

标识代码版本(函数get_build_id)

APIconst char *get_build_id(void)
描述标识代码版本。
参数
返回值Git 代码仓库的提交哈希。

举例如下:

cpp
// 获取SDK版本信息
const char* res = get_build_id();

获取最新日志信息(函数log_last_msg)

APIconst char* log_last_msg(SVLogLevel log_level)
描述获取最新日志信息。
参数SVLogLevel日志级别。
返回值最新的一条日志记录。

举例如下:

cpp
// 获取最新日志信息
const char* res = log_last_msg(log_level);

获取FPS帧率(函数get_fps)

APIdouble get_fps(int idx)
描述获取callback函数中的实时帧率,其能代表相机采集数据的帧率。
参数相机类型索引idx。MIPI相机:0 ~2。默认值为0。
返回值帧率值

举例如下:

cpp
// 获取当期相机采集的实时帧率
int idx = 0;
double fps_v = get_fps(idx);

配置MIPI相机(函数configure_camera)

APIint8_t configure_camera(const char *file_path, bool set_property = false, bool validation = true)
描述设置相机参数。
参数file_path: 配置文件。 set_property:是否即时生效(true:是 false:否)。 validation: 是否校验参数(true:是 false:否)
返回值0: 成功设置 1: 设置失败。

举例如下:

cpp
// 获取当期相机采集的实时帧率
double res = configure_camera("./param.json", true, true);

获取相机配置(函数get_camera_setting)

APIstd::string get_camera_setting(int8_t idx = 0)
描述获取相机配置参数。
参数idx: 相机索引。 默认值为0。当前可不用输入参数值,使用默认值即可。
返回值json格式字符串。

举例如下:

cpp
const char* res = get_camera_setting();

获取摄像头配置(函数get_camera_info)

APIstring get_camera_info(int8_t idx)
描述根据摄像头索引 idx 获取对应配置文件路径,读取并解析 JSON 格式的摄像头配置信息。
参数idx: 相机索引。
返回值成功:返回一个包含摄像头配置信息的 JSON 格式字符串。失败:返回一个 空字符串 ("")。

举例如下:

cpp
std::string info = Aidlux::SmartVision::get_camera_info(0);

获取完整配置(函数get_camera_default_setting)

APIstring get_camera_default_setting(int8_t idx)
描述通过摄像头索引 idx 加载默认配置,获取完整配置字符串并同步到系统单例。
参数idx: 相机索引。
返回值成功:返回一个包含摄像头配置信息的 JSON 格式字符串。失败:返回一个 空字符串 ("")。

举例如下:

cpp
std::string setting = Aidlux::SmartVision::get_camera_default_setting(0);

获取传感器模型信息(函数get_sensor_model_info)

APIstd::string get_sensor_model_info(int idx)
描述获取传感器模型信息。
参数idx: 相机索引。
返回值成功:返回一个包含传感器模型信息的字符串。失败:返回一个 空字符串 ("")。

举例如下:

cpp
std::string setting = Aidlux::get_sensor_model_info(0);

获取所有的cam_id(函数get_all_cam_ids)

APIstd::vector<std::string> get_all_cam_ids(bool disable_cache)
描述根据是否禁用缓存来决定是从本地配置读取还是实时探测所有摄像头的型号名称。
参数disable_cache(true:强制重新探测摄像头,清空缓存。false:优先使用缓存数据,不重新启动探测)。
返回值包含所有成功识别摄像头的 SensorName 字符串列表。

举例如下:

cpp
auto camera_list = get_all_cam_ids(false);// 使用缓存

获取所有的index(函数get_all_cam_index)

APIstd::vector<int> get_all_cam_index()
描述get_all_cam_index。
参数
返回值所有相机的索引集合。

举例如下:

cpp
auto camera_list = get_all_cam_index();

获取摄像头信息(函数get_all_cameras)

APIstd::unordered_map<int, std::string> get_all_cameras(bool disable_cache)
描述调用底层探测逻辑获取所有摄像头信息。
参数disable_cache(true:强制重新探测摄像头,清空缓存。false:优先使用缓存数据,不重新启动探测)。
返回值键(key)是摄像头的 物理位置 ID(如 0,1,2),值(value)是对应的传感器名称。

举例如下:

cpp
auto cameras = get_all_cameras(false); // 使用缓存

获取所有的cam_id(函数get_idx_by_loc_id)

APIint get_idx_by_loc_id(int loc_id)
描述根据摄像头的物理位置 ID(loc_id)查找其对应的逻辑索引(cam_id或idx)。
参数loc_id:物理位置标识。
返回值成功:对应的逻辑索引。失败:-1。

举例如下:

cpp
int idx = get_idx_by_loc_id(1); // 假设 loc_id=1 对应 idx=0 → 返回 0

获取所有的loc_id(函数get_loc_id_by_idx)

APIint get_loc_id_by_idx(int idx)
描述根据摄像头的逻辑索引(idx)反向查找其所在的物理位置 ID(loc_id)。
参数idx: 相机索引。
返回值成功:对应的 loc_id。失败:-1。

举例如下:

cpp
int loc_id = get_loc_id_by_idx(0); // 假设 idx=0 来自 loc_id=1 → 返回 1

获取逻辑索引(函数get_cam_index)

APIint get_cam_index(std::string cam_id)
描述通过相机名称查找其对应的逻辑索引。
参数cam_id: 相机名称。
返回值成功:对应的逻辑索引(如 0, 1,2)。失败:-1。

举例如下:

cpp
int idx = get_cam_index("OV5645");

获取相机名称(函数get_cam_id)

APIstd::string get_cam_id(int cam_index)
描述根据逻辑索引查找并返回对应的相机名称。
参数cam_index:相机逻辑索引。
返回值成功:对应的相机名称。失败:空字符串""。

举例如下:

cpp
std::string cam_name = get_cam_id(0);

获取预览帧(函数image_read)

APIcv::Mat image_read(int8_t idx)
描述安全地从指定摄像头读取当前预览帧(JPEG格式)。
参数idx:相机的逻辑索引。
返回值成功:包含 JPEG 图像数据的矩阵(可用于 imdecode)。失败:空矩阵cv::Mat()。

举例如下:

cpp
cv::Mat jpg_data = Aidlux::SmartVision::image_read(0);

获取当前相机状态(函数get_camera_status)

APIint8_t get_camera_status(int8_t idx)
描述通过日志记录并返回指定索引摄像头的当前状态码。
参数idx:相机的逻辑索引。
返回值摄像头的状态码具体含义由 CameraSIns 定义。

举例如下:

cpp
int8_t status = Aidlux::SmartVision::get_camera_status(0);

启动图像捕获(函数start_camera_capture)

APIvoid start_camera_capture(int idx)
描述启动指定摄像头的图像捕获功能。
参数idx:相机的逻辑索引。
返回值

举例如下:

cpp
Aidlux::SmartVision::start_camera_capture(0);

停止图像捕获(函数stop_camera_capture)

APIvoid stop_camera_capture(int idx)
描述停止指定摄像头的图像捕获。
参数idx:相机的逻辑索引。
返回值

举例如下:

cpp
Aidlux::SmartVision::stop_camera_capture(0);

获取目标宽度(函数get_dst_width)

APIint get_dst_width(int8_t idx)
描述获取指定摄像头输出图像的目标宽度。
参数idx:相机的逻辑索引。
返回值成功:返回目标宽度(如 1920, 1280 等)。失败:-1或0。

举例如下:

cpp
int width = Aidlux::SmartVision::get_dst_width(0);

获取目标高度(函数get_dst_height)

APIint get_dst_height(int8_t idx)
描述获取指定摄像头输出图像的目标高度。
参数idx:相机的逻辑索引。
返回值成功:返回目标高度(如 1080, 720 等)。失败:-1或0。

举例如下:

cpp
int width = Aidlux::SmartVision::get_dst_height(0);

发送任务通知(函数notify_sve)

APIint8_t notify_sve(SPhase phase_enum)
描述通过HTTP(POST)请求向本地 SVE 服务发送当前任务阶段通知。
参数phase_enum:表示当前任务阶段的枚举值(OPEN_CAMERA_ING_ENUM1 = 1,OPEN_CAMERA_SUC_ENUM2)。
返回值0:请求成功发送并收到响应。 -1:初始化失败或发生错误。

举例如下:

cpp
int8_t res = notify_sve(SPhase::OPEN_CAMERA_ING_ENUM1);

上传内容到sve服务(函数save_result)

APIint8_t save_result(const char *release_id, const char *release_version, const char *origin_file, const char *mask_file, const char *final_file, const char *additional)
描述将图像分析任务的结果文件路径及附加信息打包为 JSON 并上报至本地 SVE 服务。
参数release_id:发布/任务 ID。release_version:版本号。origin_file:原始图像文件路径。mask_file:掩码图像文件路径。final_file:最终结果图像文件路径。additional:额外的 JSON 字符串(可为空)。
返回值0:成功。 -1:失败。

举例如下:

cpp
int8_t ret = save_result(
    "task_123",                    // release_id
    "v1.0",                        // release_version
    "/tmp/origin.jpg",             // origin_file
    "/tmp/mask.png",               // mask_file
    "/tmp/final.jpg",              // final_file
    "{\"defect_size\":23.5,\"confidence\":0.98}"  // additional (JSON string)
);

图像转换(函数get_cvimage)

APIcv::Mat get_cvimage(const Image &img, int idx)
描述摄像头原始YUV格式的图像数据转换为 OpenCV 可用的BGR三通道矩阵。
参数const Image &img:包含原始图像数据的结构体。idx:相机的逻辑索引。
返回值成功:转换后的 BGR 图像矩阵。失败:返回空矩阵(cv::Mat()。

举例如下:

cpp
int cam_idx = 0;
struct Image {
    uint8_t* data;         // 指向YUV数据起始地址
    int srcWidth;          // 图像宽度
    int srcHeight;         // 图像高度
    int planeOffset[3];    // Y,U,V各平面的偏移量
    // 其他字段...
};
cv::Mat bgr_image = Aidlux::SmartVision::get_cvimage(img, cam_idx);

关闭摄像头服务(函数qmm_cleanup)

APIvoid qmm_cleanup(int cam_id)
描述发送特定格式的控制信号来停止指定或全部摄像头服务。
参数cam_id:相机逻辑索引。
返回值"5" + to_string(cam_id) → 例如 "50" 表示停止 0 号摄像头。调用 qmm_message(_signal) 发送控制指令输出调试日志。

举例如下:

cpp
// 停止 0 号摄像头
qmm_cleanup(0);

关闭摄像头服务(函数qmm_cleanup_all)

APIvoid qmm_cleanup_all()
描述发送特定格式的控制信号来停止指定或全部摄像头服务。
参数
返回值- 循环3个摄像头,对每个索引调用 qmm_message("5" + to_string(i)),每次发送都输出日志。

举例如下:

cpp
qmm_cleanup_all();

清理异常进程(函数qmm_cleanup_invalid)

APIvoid qmm_cleanup_invalid()
描述清理状态异常的 qmm 进程。
参数
返回值

举例如下:

cpp
qmm_cleanup_all();

进程检查(函数qmm_cleanup)

APIint qmm_status(int idx)
描述检查指定摄像头索引 idx 对应的服务进程是否存活,基于 Redis 心跳机制实现。
参数idx:相机的逻辑索引。
返回值2:服务正在运行 0:未注册 4:服务异常。

举例如下:

cpp
int status = qmm_status(0);

关闭摄像头服务(函数start_record)

APIint start_record(int idx)
描述安全地启动摄像头视频录制,执行多项前置检查。
参数idx:相机的逻辑索引。
返回值0:成功。 -1:失败。

举例如下:

cpp
int cam_idx = 0;
if (Aidlux::SmartVision::get_camera_status(cam_idx) == 2)
{
    int ret = Aidlux::SmartVision::start_record(cam_idx);
    if (ret == 0) {
        CLOGI("成功启动!");
    } else {
        CLOGE("启动录制失败,请检查预览是否开启或帧率设置");
    }
} else {
    CLOGE("摄像头未运行,请先调用start_camera_capture()");
}

录制状态检测(函数get_record_status)

APIint get_record_status(int idx)
描述查询指定摄像头的视频录制状态。
参数idx:相机的逻辑索引。
返回值0:正在录制。 -1:录制失败。

举例如下:

cpp
int cam_idx = 0;
int record_status = Aidlux::SmartVision::get_record_status(cam_idx);
if (record_status == 0) {
    CLOGI("摄像头 %d 正在录制视频...", cam_idx);
} else {
    CLOGI("摄像头 %d 当前未录制", cam_idx);
}

停止录制(函数stop_record)

APIMediaInfo stop_record(int idx)
描述停止摄像头的录制过程,并从内部状态中提取并填充录制结果元数据。
参数idx:相机的逻辑索引。
返回值MediaInfo:一个包含录制结果信息的结构体,即使未成功录制也可能返回默认值。

举例如下:

cpp
int cam_idx = 0;
// 停止录制并获取信息
MediaInfo record_info = Aidlux::SmartVision::stop_record(cam_idx);

像素合并和位深(函数set_bpp_binning)

APIint set_bpp_binning(string cam_id, int binning_flag, int hb, int vb, int bpp_flag, int bpp)
描述指定摄像头的像素合并和位深。
参数cam_id:摄像头唯一标识符。binning_flag:是否启用 binning(0=关闭,1=开启)。hb:水平方向合并倍数(如 2 表示每 2 像素合并为 1)。vb:垂直方向合并倍数(如 2 表示每 2 行合并为 1)。bpp_flag:是否启用自定义位深(0=使用默认,1=启用 bpp 设置)。bpp:目标位深值(常见值:8、10、12、16 bit)。
返回值0:成功。 -1:失败。

举例如下:

cpp
// 示例:配置 camera0 启用 2x2 binning 和 12-bit 输出
int ret = set_bpp_binning
(
    "camera0",   // cam_id
    1,           // binning_flag: 开启
    2,           // hb: 水平 2 合 1
    2,           // vb: 垂直 2 合 1
    1,           // bpp_flag: 自定义位深
    12           // bpp: 12-bit 输出
);

设置配置文件名(函数set_cfgname)

APIvoid DeviceParam::set_cfgname(const string &cfg_name_str)
描述设置设备参数类中的配置文件名。
参数cfg_name_str (const string &):要设置的配置文件名(如 "camera_config.json")。
返回值

举例如下:

cpp
Aidlux::SmartVision::DeviceParam device_param;
// 设置配置文件名
device_param.set_cfgname("my_camera_config.json");

地址判断(函数isIPFormat)

APIbool isIPFormat(const char* str)
描述判断字符串是否为 IPv4 或(完整格式)IPv6 地址。
参数str (const char*):待检测的字符串。
返回值true:字符串匹配IPv4或IPv6。false:格式不匹配或为空指针。

举例如下:

cpp
std::cout << isIPFormat("192.168.1.1") << std::endl;

文件判断(函数isFileExists)

APIbool isFileExists(const std::string& filePath)
描述判断一个文件路径是否对应一个存在的文件(或目录)。
参数str (const char*):待检测的字符串。
返回值true:文件存在。false:文件不存在。

举例如下:

cpp
std::string path1 = "/data/camera_config.json";
std::string path2 = "/data/nonexistent.txt";
if (isFileExists(path1)) {
    CLOGI("文件存在:%s", path1.c_str());
} else {
    CLOGE("文件不存在:%s", path1.c_str());
}

if (isFileExists(path2)) {
    CLOGI("文件存在:%s", path2.c_str());
} else {
    CLOGE("文件不存在:%s", path2.c_str());
}

创建并写入配置文件(函数createNewSignalFile)

APIbool createNewSignalFile(const std::string& filePath)
描述创建指定路径的文本文件,并写入默认 JSON 配置。
参数str (const char*):待检测的字符串。
返回值true:文件存在。false:文件不存在。

举例如下:

cpp
std::string signalPath = "/tmp/my_service_signal.json";

if (createNewSignalFile(signalPath)) {
    CLOGI("信号文件创建成功:%s", signalPath.c_str());
    // 输出:{"mode":0}
} else {
    CLOGE("无法创建信号文件,请检查路径和权限");
}