Smart Vision 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) |
|---|---|---|
| Camera | int8_t open(GetImageCB cb) | 以无参模式打开相机 |
int8_t open(const DeviceParam & dev_param, GetImageCB cb) | 以有参模式打开相机 | |
void start_capture(void) | 打开流开关 (注:USB及海康相机不支持流开关,下同) | |
void stop_capture(void) | 关闭流开关 | |
int8_t close() | 关闭相机 | |
void set_camera_type(CameraType camera_type) | 设置相机类型,类型有: MIPI_CAMERA_ENUM1 / USB_CAMERA_ENUM2 / USB_CAMERA_ENUM3,默认为MIPI类型。 |
| 结构体(struct) | 成员变量名(public member variable) | 类型(Type) | 描述(Description) |
|---|---|---|---|
| DeviceParam | cfg_name | const char * | 带路径的参数配置文件名 |
| Image | data | const char * | 指向存放数据的缓冲区的指针 |
| w | uint64_t | 目标图片宽度 | |
| h | uint64_t | 目标图片高度 | |
| c | uint64_t | 目标图片的通道(通常为3) | |
| length | uint64_t | 图片数据所占内存长度 | |
| IOConfig | do1_keeptime | uint32_t | 管脚1信号持续时间 |
| do2_keeptime | uint32_t | 管脚2信号持续时间 | |
| do1 | SignalType | 管脚1 | |
| do2 | SignalType | 管脚2 | |
| TcpConfig | ip | const char * | IP地址 |
| port | uint16_t | 端口号 | |
| SVSdkMemfdInfo | srcYPlaneStride | int | YUV数据的宽 |
| srcSliceHeight | int | YUV数据的高 | |
| memCopyStartIndex | int | Start index值(注:Start index的值与End index相等) | |
| memCopyEndIndex | int | End index值 | |
| planeOffset | int | YUV偏移值 | |
| cam_id | int | 相机索引ID |
| 公共函数(public function) | 描述(Description) |
|---|---|
void set_log_level(SVLogLevel log_level) | 设置日志级别 |
void set_log_destination(const char* destinationPath, bool also_to_stderr) | 设置日志文件名及路径 |
void log_to_stderr() | 设置日志输出到终端。一旦设置则不会再保存日志文件。一般不建议使用。 |
typedef std::function<int8_t(const Image &, const SVSdkMemfdInfo &)> GetImageCB | 作为open()函数的入参,用于获取相片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。 |
int8_t get_signal_sending_mode(IOConfig & iosetting, TcpConfig & tcpsetting) | 获取信号输出配置信息。需根据返回值来判断获取的是IO配置还是TCP配置。如返回值是1,则返回的是IO配置,需从iosetting对象获取 |
int8_t set_io_signal_send_mode(SignalType do1 , SignalType do2 , uint32_t do1_keeptime = 0, uint32_t do2_keeptime = 0) | 设置IO信号输出配置。比如设置do1为NG_SIGNAL,表示管脚1只能发送NG信号。需要注意的是管脚1和管脚2不能同时设置为相同的信号类型(比如都是NG或都是alarm) |
int8_t set_tcp_signal_send_mode(const char* ip, uint16_t port) | 设置TCP信号输出配置。所设ip地址和端口为服务器端的ip地址和端口。 |
int8_t set_off_mode() | 设置OFF关闭信号输出配置。 |
int8_t io_send_ng() | IO发送NG信号。 |
int8_t io_send_alarm_raising() | IO发送alarm信号。 |
int8_t io_send_alarm_clear() | IO发送alarm清除信号。 |
int8_t tcp_send_ng() | TCP发送NG信号。 |
int8_t tcp_send_alarm() | TCP发送alarm信号。 |
int8_t tcp_send_alarmclear() | TCP发送alarm清除信号。 |
| 枚举(ENUM) | 成员变量名(public member variable) | 类型(Type) | 描述(Description) |
|---|---|---|---|
| SVLogLevel | SINFO | uint8_t | 日志级别SINFO |
| SWARNING | uint8_t | 日志级别SWARNING | |
| SERROR | uint8_t | 日志级别SERROR | |
| SDEBUG | uint8_t | 日志级别SDEBUG | |
| SOFF | uint8_t | 日志级别SOFF(关闭日志输出) | |
| SignalType | OFF | uint8_t | 关闭信号输出配置 |
| NG_SIGNAL | uint8_t | NG信号输出模式 | |
| ALARM_SIGNAL | uint8_t | alarm信号输出模式 | |
| OK_SIGNAL | uint8_t | ok信号输出模式 | |
| CameraType | MIPI_CAMERA_ENUM1 | uint8_t | MIPI相机 |
| USB_CAMERA_ENUM2 | uint8_t | 普通usb相机 | |
| USB_CAMERA_ENUM3 | uint8_t | 海康usb相机 | |
| CameraTriggerMode | INVALID_TRIGGER_MODE_ENUM0 | uint8_t | 无效触发模式 |
| INTERNAL_TRIGGER_MODE_ENUM1 | uint8_t | 内触发模式 | |
| EXTERNAL_TRIGGER_MODE_ENUM2 | uint8_t | 外部硬件触发模式 | |
| SOFTWARE_TRIGGER_MODE_ENUM3 | uint8_t | 软件触发模式 | |
| SPhase | OPEN_CAMERA_ING_ENUM1 | int | 正在打开相机 |
| OPEN_CAMERA_SUC_ENUM2 | int | 相机打开成功 | |
| OPEN_CAMERA_FAIL_ENUM3 | int | 相机打开失败 | |
| LOAD_MODEL_ING_ENUM4 | int | 正在加载模型 | |
| LOAD_MODEL_SUC_ENUM5 | int | 模型加载成功 | |
| LOAD_MODEL_FAIL_ENUM6 | int | 模型加载失败 | |
| WAIT_IMAGE_ING_ENUM7 | int | 等待图像 |
类Camera
实例化类Camera对象相关操作。打开相机、抓图等相关的操作都基于实例化Camera对象。
warning
如非特殊说明,所有的定义都属于名字空间Aidlux::SmartVision。可通过以下命令在代码中引入:
using namespace Aidlux::SmartVision;
无参模式打开相机
| API | int8_t open(GetImageCB cb) |
|---|---|
| 描述 | 以无参模式打开相机。 |
| 参数 | 输入参数为回调函数。回调函数由客户自定义。关于回调函数请参考回调函数GetImageCB |
| 返回值 | 0: 成功。-1: 失败。 |
举例如下(Camera为类Camera的实例化对象,下同):
// 无参模式打开相机
int8_t res = camera.open(my_get_img_cb);有参模式打开相机
| API | int8_t open(const DeviceParam & dev_param, GetImageCB cb) |
|---|---|
| 描述 | 以有参模式打开相机。 |
| 参数 | dev_param为结构体DeviceParam的实例化对象。 cb为回调函数。回调函数由客户自定义。关于回调函数请参考回调函数GetImageCB |
| 返回值 | 0: 成功。-1: 失败。 |
举例如下:
// 有参模式打开相机
int8_t res = camera.open(dev_param, my_get_img_cb);打开流开关
| API | void start_capture(void) |
|---|---|
| 描述 | 打开流开关 |
| 参数 | 无 |
| 返回值 | 无 |
举例如下:
// 打开流开关
camera.start_capture();关闭流开关
| API | void stop_capture(void) |
|---|---|
| 描述 | 关闭流开关 |
| 参数 | 无 |
| 返回值 | 无 |
举例如下:
//关闭流开关
camera.stop_capture();关闭相机(函数close)
| API | int8_t close() |
|---|---|
| 描述 | 关闭相机。 |
| 参数 | 无 |
| 返回值 | 0:成功。-1:失败。 |
举例如下:
//关闭相机
int8_t res = camera.close();设置相机类型(函数set_camera_type)
| API | void set_camera_type(CameraType camera_type) |
|---|---|
| 描述 | 设置相机类型 |
| 参数 | camera_type为struct CameraType类型对象。支持类型有: MIPI_CAMERA_ENUM1 / USB_CAMERA_ENUM2 / USB_CAMERA_ENUM3 |
| 返回值 | 无 |
举例如下:
//设置相机类型为海康相机
camera.set_camera_type(USB_CAMERA_ENUM3);结构体DeviceParam
定义带路径的参数配置文件名。该参数配置文件用于配置相机参数。因此本结构体仅用于有参模式打开相机。
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| cfg_name | const char* | 带路径的参数配置文件名 |
结构体Image
定义图片数据相关信息,包括图片配置信息及指针变量。
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| data | const char* | 指向存放数据的缓冲区的指针 | |
| w | uint64_t | 目标图片宽度 | |
| h | uint64_t | 目标图片高度 | |
| c | uint64_t | 目标图片的通道(通常为3) | |
| length | uint64_t | 图片数据所占内存长度 |
结构体IOConfig
定义IO信号输出配置信息。
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| do1_keeptime | uint32_t | 管脚1信号持续时间 | |
| do2_keeptime | uint32_t | 管脚2信号持续时间 | |
| do1 | SignalType | 管脚1 | |
| do2 | SignalType | 管脚2 |
结构体TcpConfig
定义TCP信号输出配置信息。
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ip | const char* | IP地址 | |
| port | uint16_t | 端口号 |
结构体SVSdkMemfdInfo
定义数据缓冲区信息。
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| srcYPlaneStride | int | YUV数据的宽 | |
| srcSliceHeight | int | YUV数据的高 | |
| memCopyStartIndex | int | Start index值(注:Start index的值与End index相等) | |
| memCopyEndIndex | int | End index值 | |
| planeOffset | int | YUV偏移值 | |
| cam_id | int | 相机索引ID |
设置日志级别(函数set_log_level
| API | void set_log_level(SVLogLevel log_level) |
|---|---|
| 描述 | 设置日志级别。 |
| 参数 | log_level为SVLogLevel类型的枚举,关于SVLogLevel请参考枚举SVLogLevel |
| 返回值 | 无 |
举例如下:
//设置日志级别
Aidlux::SmartVision::set_log_level(SVLogLevel::SINFO);设置日志文件名及路径(函数set_log_destination)
| API | void set_log_destination(const char* destinationPath, bool also_to_stderr) |
|---|---|
| 描述 | 设置日志文件名及路径 |
| 参数 | destinationPath:带路径的日志文件名,默认值为"./aidclog_smart_vision_"。also_to_stderr:是否输出到终端,默认值为false |
| 返回值 | 无 |
举例如下:
//设置日志文件名及路径
const char* log_path = "./aidclog_smart_vision_";
Aidlux::SmartVision::set_log_destination(log_path);设置日志输出到终端(函数log_to_stderr)
| API | void log_to_stderr() |
|---|---|
| 描述 | 设置日志文件名及路径 |
| 参数 | 设置日志输出到终端。一旦设置则不会再保存日志文件。一般不建议使用。 |
| 返回值 | 无 |
举例如下:
//设置日志文件名及路径
log_to_stderr();日志级别(枚举SVLogLevel)
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| SINFO | uint8_t | 0 | 日志级别SINFO |
| SWARNING | uint8_t | 日志级别SWARNING | |
| SERROR | uint8_t | 日志级别SERROR | |
| SDEBUG | uint8_t | 日志级别SDEBUG | |
| SOFF | uint8_t | 日志级别SOFF(关闭日志输出) |
回调函数GetImageCB
| API | typedef std::function<int8_t(const Image & , const SVSdkMemfdInfo &)> GetImageCB |
|---|---|
| 描述 | 作为open()函数的入参,用于获取相片资源。此函数由使用者自定义。接口仅提供类型定义来规范回调函数的定义。 |
| 参数 | 参数一是结构体Image 的实例化对象,数据由此传入。参数二是缓冲区结构体对象,存储包括缓冲区index、YUV数据宽高等 |
| 返回值 | 自定义 |
举例如下:
//回调函数定义
int8_t my_get_img_cb(const Image & cap_img, const SVSdkMemfdInfo & mem_info)
{
......
return 0;
}获取信号输出配置信息(函数get_signal_sending_mode)
| API | int8_t get_signal_sending_mode(IOConfig & iosetting, TcpConfig & tcpsetting) |
|---|---|
| 描述 | 获取信号输出配置信息。需根据返回值来判断获取的是IO配置还是TCP配置。如返回值是1,则返回的是IO配置,需从iosetting对象获取。 |
| 参数 | iosetting:类IOConfig的实例化对象。包含IO输出类的信息。tcpsetting: 类TcpConfig的实例化对象。包含TCP输出类的信息。 |
| 返回值 | -1:获取配置失败。 0: 配置为OFF,即未设置。1: 获取的是IO配置,返回信息从iosetting对象获取。2: 获取的是TCP配置,返回信息从tcpsetting对象获取。 |
举例如下:
//获取信号输出配置信息
IOConfig iosetting;
TcpConfig tcpsetting;
int8_t res = get_signal_sending_mode(iosetting, tcpsetting);设置IO信号输出配置(函数set_io_signal_send_mode)
| API | int8_t set_io_signal_send_mode(SignalType do1 , SignalType do2 , uint32_t do1_keeptime = 0, uint32_t do2_keeptime = 0) |
|---|---|
| 描述 | 设置IO信号输出配置。比如设置do1为NG_SIGNAL,表示管脚1只能发送NG信号。需要注意的是管脚1和管脚2不能同时设置为相同的信号类型(比如都是NG或都是alarm) |
| 参数 | do1: 管脚1。 do2: 管脚2。 do1_keeptime: 管脚1信号持续时间。do2_keeptime: 管脚2信号持续时间。 |
| 返回值 | -1: 失败。 0: 成功 |
举例如下:
//设置IO信号输出模式
SignalType do2 = NG_SIGNAL;
SignalType do1 = ALARM_SIGNAL;
uint32_t do1_keeptime = 6;
uint32_t do2_keeptime = 0;
int8_t res = set_io_signal_send_mode(do1, do2, do1_keeptime, do2_keeptime);设置TCP信号输出配置(函数set_tcp_signal_send_mode)
| API | int8_t set_tcp_signal_send_mode(const char* ip, uint16_t port) |
|---|---|
| 描述 | 设置TCP信号输出配置。所设ip地址和端口为服务器端的ip地址和端口。 |
| 参数 | ip: 服务器IP地址。 port: 服务器端口号 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
//设置TCP信号输出模式
int8_t res = set_tcp_signal_send_mode(ip, port);设置OFF关闭信号输出配置(函数set_off_mode)
| API | int8_t set_off_mode() |
|---|---|
| 描述 | 设置OFF关闭信号输出配置。 |
| 参数 | 无 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
//设置OFF关闭信号输出模式
int8_t res = set_off_mode();IO发送NG信号(函数io_send_ng)
| API | int8_t io_send_ng() |
|---|---|
| 描述 | IO发送NG信号。 |
| 参数 | 无 |
| 返回值 | -1:失败。 0:成功 |
举例如下:
//IO发送NG信号
int8_t res = io_send_ng();IO发送alarm信号(函数io_send_alarm_raising)
| API | int8_t io_send_alarm_raising() |
|---|---|
| 描述 | IO发送alarm信号。 |
| 参数 | 无 |
| 返回值 | -1: 失败。 0: 成功 |
举例如下:
// IO发送alarm信号
int8_t res = io_send_alarm_raising();IO发送alarm清除信号(函数io_send_alarm_clear)
| API | int8_t io_send_alarm_clear() |
|---|---|
| 描述 | IO发送alarm清除信号。 |
| 参数 | 无 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
// IO发送alarmclear信号
int8_t res = io_send_alarm_clear();TCP发送NG信号(函数tcp_send_ng)
| API | int8_t tcp_send_ng() |
|---|---|
| 描述 | TCP发送NG信号。 |
| 参数 | 无 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
// TCP发送NG信号
int8_t res = tcp_send_ng();TCP发送alarm信号(函数tcp_send_alarm)
| API | int8_t tcp_send_alarm() |
|---|---|
| 描述 | TCP发送alarm信号。 |
| 参数 | 无 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
// TCP发送alarm信号
int8_t res = tcp_send_alarm();TCP发送alarm清除信号(函数tcp_send_alarmclear)
| API | int8_t tcp_send_alarmclear() |
|---|---|
| 描述 | TCP发送alarm清除信号。 |
| 参数 | 无 |
| 返回值 | -1: 失败。0: 成功 |
举例如下:
// TCP发送alarmclear信号
int8_t res = tcp_send_alarmclear();信号类型定义(枚举SignalType)
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| OFF | uint8_t | 0 | 关闭信号输出配置 |
| NG_SIGNAL | uint8_t | NG信号输出模式 | |
| ALARM_SIGNAL | uint8_t | alarm信号输出模式 | |
| OK_SIGNAL | uint8_t | ok信号输出模式 |
YUV格式数据转BGR格式数据
| API | bool yuv_to_bgr(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata) |
|---|---|
| 描述 | YUV格式数据转BGR格式数据。通过入参destMat对象来将转换后的数据传出。 |
| 参数 | 无 |
| 返回值 | false: 失败。true: 成功 |
YUV格式数据转BGR格式数据(函数yuv_to_bgr_y)
| API | bool yuv_to_bgr_y(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata) |
|---|---|
| 描述 | YUV格式数据转BGR格式数据。通过入参destMat对象来将转换后的数据传出。相比函数yuv_to_bgr,该函数只转Y plane数据,即黑白色数据,也可称单通道数据。 |
| 参数 | 无 |
| 返回值 | false: 失败。true: 成功 |
获取SDK版本信息(函数get_build_version)
| API | const char *get_build_version() |
|---|---|
| 描述 | 获取sdk版本信息。 |
| 参数 | 无 |
| 返回值 | sdk版本信息 |
举例如下:
// 获取SDK版本信息
const char* res = get_build_version();保存任务结果(函数save_result)
| API | 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 = "") |
|---|---|
| 描述 | 打包并上报任务结果信息(原图、掩码图、结果图和附加信息)到本地SVE服务。 |
| 参数 | release_id:任务ID。release_version:任务版本。origin_file:原图路径。mask_file:掩码图路径。final_file:结果图路径。additional:附加信息字符串(可为空)。 |
| 返回值 | 0:成功。-1:失败。 |
举例如下:
int8_t ret = save_result(
"task_123",
"v1.0",
"/tmp/origin.jpg",
"/tmp/mask.png",
"/tmp/final.jpg",
"{\"defect_size\":23.5,\"confidence\":0.98}"
);| API | int8_t save_result(const char *release_id, const char *release_version, const char *srcAddr = "./", const char *dstAddr = "/var/opt/aidlux/global/") |
|---|---|
| 描述 | 将结果目录按任务ID和版本信息整理打包并输出到目标目录。 |
| 参数 | release_id:任务ID。release_version:任务版本。srcAddr:源目录(默认./)。dstAddr:目标目录(默认/var/opt/aidlux/global/)。 |
| 返回值 | 0:成功。-1:失败。 |
举例如下:
int8_t ret = save_result("task_123", "v1.0", "./", "/var/opt/aidlux/global/");获取最新日志信息(函数log_last_msg)
| API | const char* log_last_msg(SVLogLevel log_level) |
|---|---|
| 描述 | 获取最新日志信息。 |
| 参数 | SVLogLevel日志级别 |
| 返回值 | 最新的一条日志记录 |
举例如下:
// 获取最新日志信息
const char* res = log_last_msg(log_level);获取FPS帧率(函数get_fps)
| API | double get_fps(int idx) |
|---|---|
| 描述 | 获取callback函数中的实时帧率,其能代表相机采集数据的帧率。 |
| 参数 | idx:相机索引。范围:MIPI相机为0~2。默认值为0。 |
| 返回值 | 帧率值 |
举例如下:
// 获取当期相机采集的实时帧率
double fps_v = get_fps();配置MIPI相机(函数configure_camera)
| API | int8_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: 设置失败 |
举例如下:
// 配置MIPI相机参数
int8_t res = configure_camera("./param.json", true, true);获取MIPI相机配置(函数get_camera_setting)
| API | const char *get_camera_setting(int idx) |
|---|---|
| 描述 | 获取相机配置参数。 |
| 参数 | idx: 相机索引。 默认值为0。当前可不用输入参数值,使用默认值即可。 |
| 返回值 | json格式字符串 |
举例如下:
// 获取相机配置参数
const char* res = get_camera_setting();开启MIPI相机全画幅(函数fullsize_enable)
| API | int fullsize_enable(bool enable) |
|---|---|
| 描述 | 开启MIPI相机全画幅配置。 |
| 参数 | enable: true 开启, false 关闭。 |
| 返回值 | 0: 成功设置 -1: 设置失败 |
举例如下:
// 激活MIPI相机fullsize配置
int res = fullsize_enable(true);设置MIPI相机binning mode(函数set_binning_mode)
| API | int set_binning_mode(int mode) |
|---|---|
| 描述 | 设置binning mode。 |
| 参数 | mode: 1: 选择最近的binning mode, 2: 选择2x2 binning mode。MIPI相机默认为0,等效设置1. |
| 返回值 | 0: 成功设置 -1: 设置失败 |
举例如下:
// 设置相机binning mode配置参数
int res = set_binning_mode(1);查询MIPI相机fullsize参数值(函数query_fullsize)
| API | string query_fullsize() |
|---|---|
| 描述 | 查询fullsize值。 |
| 参数 | 无. |
| 返回值 | string类型的fullsize参数值 |
举例如下:
// 获取相机fullsize配置参数
string res = query_fullsize();查询MIPI相机binning mode(函数query_binning_mode)
| API | string query_binning_mode() |
|---|---|
| 描述 | 查询binning mode。 |
| 参数 | 无. |
| 返回值 | string类型的binning mode值 |
举例如下:
// 获取相机binning mode配置参数
string res = query_binning_mode();获取所有相机ID(函数get_all_cam_ids)
| API | std::vector<std::string> get_all_cam_ids() |
|---|---|
| 描述 | 获取所有可用的相机ID。 |
| 参数 | 无 |
| 返回值 | 字符串向量,每个字符串是一个相机ID。 |
举例如下:
std::vector<std::string> cam_ids = Aidlux::SmartVision::get_all_cam_ids();获取所有相机索引(函数get_all_cam_index)
| API | std::vector<int> get_all_cam_index() |
|---|---|
| 描述 | 获取所有可用的相机索引。 |
| 参数 | 无 |
| 返回值 | 整数向量,每个整数是一个相机索引。 |
举例如下:
std::vector<int> cam_indices = Aidlux::SmartVision::get_all_cam_index();根据ID获取相机索引(函数get_cam_index)
| API | int get_cam_index(std::string cam_id) |
|---|---|
| 描述 | 将相机ID转换为相机索引。 |
| 参数 | cam_id: 相机ID字符串 |
| 返回值 | 相机索引。 |
举例如下:
int index = Aidlux::SmartVision::get_cam_index("camera_0");根据索引获取相机ID(函数get_cam_id)
| API | std::string get_cam_id(int cam_index) |
|---|---|
| 描述 | 将相机索引转换为相机ID。 |
| 参数 | cam_index: 相机索引 |
| 返回值 | 相机ID字符串。 |
举例如下:
std::string id = Aidlux::SmartVision::get_cam_id(0);获取照片文件地址(函数get_photo_file_addr)
| API | int8_t get_photo_file_addr(std::vector<std::string> &pic_path, int idx = 0) |
|---|---|
| 描述 | 获取HDR功能的照片文件路径。 |
| 参数 | pic_path: 用于存储文件路径的输出向量。idx: 相机索引(默认为0)。 |
| 返回值 | 0: 成功。-1: 失败。-2: 失败。 |
举例如下:
std::vector<std::string> paths;
int8_t res = Aidlux::SmartVision::get_photo_file_addr(paths, 0);获取照片BGR数据(函数get_photo_bgr)
| API | cv::Mat get_photo_bgr(int idx = 0) |
|---|---|
| 描述 | 获取HDR功能的BGR格式照片数据。 |
| 参数 | idx: 相机索引(默认为0)。 |
| 返回值 | 包含BGR图像数据的cv::Mat对象。 |
举例如下:
cv::Mat img = Aidlux::SmartVision::get_photo_bgr(0);获取照片JPG(函数get_photo_jpg)
| API | int8_t get_photo_jpg(const char *file_path, int idx = 0) |
|---|---|
| 描述 | 保存HDR功能的照片为JPG文件。 |
| 参数 | file_path: 输出文件路径。idx: 相机索引(默认为0)。 |
| 返回值 | 0: 成功。1: 失败。 |
举例如下:
int8_t res = Aidlux::SmartVision::get_photo_jpg("/tmp/photo.jpg", 0);获取模拟增益(函数get_analog_gain)
| API | float get_analog_gain() |
|---|---|
| 描述 | 获取当前模拟增益值。 |
| 参数 | 无 |
| 返回值 | 模拟增益值。0.0表示失败。 |
举例如下:
float gain = Aidlux::SmartVision::get_analog_gain();获取数字增益(函数get_digital_gain)
| API | float get_digital_gain() |
|---|---|
| 描述 | 获取当前数字增益值。 |
| 参数 | 无 |
| 返回值 | 数字增益值。0.0表示失败。 |
举例如下:
float gain = Aidlux::SmartVision::get_digital_gain();设置增益(函数set_gain)
| API | int set_gain(float analog_gain, float digital_gain) |
|---|---|
| 描述 | 设置模拟和数字增益值。 |
| 参数 | analog_gain: 模拟增益值。digital_gain: 数字增益值。 |
| 返回值 | 0: 成功。-1: 失败。 |
举例如下:
int res = Aidlux::SmartVision::set_gain(1.5f, 1.0f);畸变标定(函数distortion_calibration)
| API | cv::Mat distortion_calibration(const std::vector<cv::Mat>& images, cv::Size boardSize, cv::Mat& cameraMatrix, float squareSize) |
|---|---|
| 描述 | 使用多张棋盘格图像进行畸变标定。 |
| 参数 | images: 标定图像向量。boardSize: 棋盘格图案大小。cameraMatrix: 输出相机矩阵。squareSize: 棋盘格方块大小。 |
| 返回值 | 畸变系数矩阵。 |
举例如下:
std::vector<cv::Mat> calib_images;
cv::Mat cameraMatrix;
cv::Mat distCoeffs = Aidlux::SmartVision::distortion_calibration(calib_images, cv::Size(9, 6), cameraMatrix, 0.02f);畸变校正(函数distortion_correction)
| API | cv::Mat distortion_correction(const cv::Mat &img, const cv::Mat &distCoeffs, cv::Mat &cameraMatrix) |
|---|---|
| 描述 | 使用标定参数校正图像畸变。 |
| 参数 | img: 输入图像。distCoeffs: 畸变系数。cameraMatrix: 相机矩阵。 |
| 返回值 | 校正后的图像。 |
举例如下:
cv::Mat corrected = Aidlux::SmartVision::distortion_correction(img, distCoeffs, cameraMatrix);白平衡标定(函数white_balance_calibration)
| API | cv::Vec3f white_balance_calibration(const cv::Mat& img) |
|---|---|
| 描述 | 从图像计算白平衡标定系数。 |
| 参数 | img: 输入图像。 |
| 返回值 | RGB增益系数。 |
举例如下:
cv::Vec3f gains = Aidlux::SmartVision::white_balance_calibration(img);白平衡校正(函数white_balance_correction)
| API | cv::Mat white_balance_correction(const cv::Mat& img, const cv::Vec3f& calibCoeff) |
|---|---|
| 描述 | 使用标定系数调整图像白平衡。 |
| 参数 | img: 输入图像。calibCoeff: 白平衡标定系数。 |
| 返回值 | 白平衡校正后的图像。 |
举例如下:
cv::Mat corrected = Aidlux::SmartVision::white_balance_correction(img, gains);获取模式值(函数get_mode_value)
| API | int8_t get_mode_value() |
|---|---|
| 描述 | 获取当前信号输出模式。 |
| 参数 | 无 |
| 返回值 | 0: OFF, 1: IO_MODE, 2: TCP_MODE, 3: MODBUS_MODE, 4: UART_MODE, -1: 失败。 |
举例如下:
int8_t mode = Aidlux::SmartVision::get_mode_value();IO发送(函数io_send)
| API | int8_t io_send(std::string io_str, std::string io_control_file) |
|---|---|
| 描述 | 将字符串写入特定IO控制文件。 |
| 参数 | io_str: 要写入的字符串。io_control_file: IO控制文件路径。 |
| 返回值 | 0: 成功。-1: 失败。 |
举例如下:
int8_t res = Aidlux::SmartVision::io_send("1", "/sys/aidlux/io_out/output_1p");任务阶段类型定义(枚举SPhase)
| 成员变量名 | 值 | 描述 |
|---|---|---|
| OPEN_CAMERA_ING_ENUM1 | 1 | 正在打开相机 |
| OPEN_CAMERA_SUC_ENUM2 | 2 | 相机打开成功 |
| OPEN_CAMERA_FAIL_ENUM3 | 3 | 相机打开失败 |
| LOAD_MODEL_ING_ENUM4 | 4 | 正在加载模型 |
| LOAD_MODEL_SUC_ENUM5 | 5 | 模型加载成功 |
| LOAD_MODEL_FAIL_ENUM6 | 6 | 模型加载失败 |
| WAIT_IMAGE_ING_ENUM7 | 7 | 等待图像 |
相机触发模式(枚举CameraTriggerMode)
| 成员变量名 | 值 | 描述 |
|---|---|---|
| INVALID_TRIGGER_MODE_ENUM0 | 0 | 无效触发模式 |
| INTERNAL_TRIGGER_MODE_ENUM1 | 1 | 内触发模式 |
| EXTERNAL_TRIGGER_MODE_ENUM2 | 2 | 外部硬件触发模式 |
| SOFTWARE_TRIGGER_MODE_ENUM3 | 3 | 软件触发模式 |
相机参数模式(枚举CameraParamMode)
| 成员变量名 | 值 | 描述 |
|---|---|---|
| WITH_PARAM_MODE | 0 | 带参数模式 |
| WITHOUT_PARAM_MODE | 1 | 无参数模式 |
信号模式(枚举SignalMode)
| 成员变量名 | 值 | 描述 |
|---|---|---|
| IO_MODE | 0 | IO信号模式 |
| TCP_MODE | 1 | TCP信号模式 |
| MODBUS_MODE | 2 | MODBUS信号模式 |
| UART_MODE | 3 | UART信号模式 |
结构体USBCamera
| 成员变量名 | 类型 | 描述 |
|---|---|---|
| usb_type | int | USB类型(0: 无, 2: USB 2.0, 3: USB 3.0) |
| width | int | 图像宽度 |
| height | int | 图像高度 |
| fps | int | 帧率 |
| bus_id | std::string | 总线ID |
| vendor_id | std::string | 供应商ID |
| device_id | std::string | 设备ID |
| product_id | std::string | 产品ID |
| vendor_product_id | std::string | 供应商产品ID |
| manufacturer | std::string | 制造商名称 |
| video_path | std::string | 视频设备路径 |
| resolution | std::string | 分辨率字符串 |
| creation_timestamp | std::string | 创建时间戳 |
| buffers[4] | void* | 内存映射缓冲区指针 |
| size[4] | int | 缓冲区大小 |
| config_path | std::string | 配置文件路径 |
| video_list | std::vectorstd::string | 视频路径列表 |
结构体HIKCamera
| 成员变量名 | 类型 | 描述 |
|---|---|---|
| width | int | 图像宽度 |
| height | int | 图像高度 |
| fps | int | 帧率 |
| trigger_mode | int | 触发模式(0: 连续, 1: 软件) |
| config_path | std::string | 配置文件路径 |
结构体CameraParam
| 成员变量名 | 类型 | 描述 |
|---|---|---|
| camera_type | CameraType | 相机类型 |
| exposure_time | uint64_t | 曝光时间(微秒) |
| gain | float | 增益值 |
| width | int | 图像宽度 |
| height | int | 图像高度 |
| c | int | 通道数 |
| fps | int | 帧率 |
| trigger_mode | CameraTriggerMode | 触发模式 |
| resolution_array | std::vectorstd::string | 支持的分辨率列表 |
| resolution_idx | uint8_t | 当前分辨率索引 |
| horizontal_flip | bool | 水平翻转使能 |
| vertical_flip | bool | 垂直翻转使能 |
RS485_IO类
RS485 IO控制的单例类。
| API | 描述 |
|---|---|
static RS485_IO &getInstance() | 获取单例实例 |
int8_t send_do1() | 发送DO1拉升指令(COM0) |
int8_t send_do1_clear() | 发送DO1下降指令(COM0) |
int8_t send_do2() | 发送DO2拉升指令(COM1) |
int8_t send_do2_clear() | 发送DO2下降指令(COM1) |
举例如下:
RS485_IO &io = RS485_IO::getInstance();
io.send_do1();IO类
IO操作的静态类。
SendNGType枚举
| 成员变量名 | 值 | 描述 |
|---|---|---|
| INVALID_NG_TYPE | 0 | 无效类型 |
| IO_NG_TYPE | 1 | IO NG类型 |
| MODBUS_NG_TYPE | 2 | MODBUS NG类型 |
| TCP_NG_TYPE | 3 | TCP NG类型 |
SendNGConfig结构体
| 成员变量名 | 类型 | 描述 |
|---|---|---|
| vol_time | uint32_t | 电平持续时间(用于IO) |
| reg_addr | uint32_t | 寄存器地址(用于MODBUS) |
| ip | std::string | IP地址(用于TCP) |
| port | uint16_t | 端口号(用于TCP) |
其他公开接口
以下接口在V1源码中为公开接口,补充列出用于快速索引。
| API | 描述 |
|---|---|
const char *get_build_meta(void) | 获取构建元信息(如构建时间戳)。 |
const char *get_build_id(void) | 获取当前构建对应的Git哈希。 |
bool is_process_running(pid_t processId) | 检查指定进程ID是否仍在运行。 |
bool check_camera_running_status() | 检查默认相机运行状态。 |
bool check_camera_running_status(int idx) | 检查指定索引相机运行状态。 |
void init_log_configuration() | 初始化日志实时配置。 |
void start_log_callback() | 启动日志配置回调监听。 |
void svsdk_notification_callback(const std::string &event, const std::string &module, const std::string &message) | SDK通知回调处理入口。 |
void set_log_level(SVLogLevel log_level, std::string logger_name) | 按指定logger名称设置日志级别。 |
std::string get_global_logger() | 获取全局logger名称。 |
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 = "") | 上报原图/掩码/结果图及附加信息给本地服务。 |
int8_t save_result(const char *release_id, const char *release_version, const char *srcAddr = "./", const char *dstAddr = "/var/opt/aidlux/global/") | 将结果目录按版本信息打包并输出到目标目录。 |
int8_t notify_sve(SPhase phase_enum) | 向SVE上报当前任务阶段。 |
int8_t get_usb_camera_type() | 获取当前USB相机类型(0/2/3)。 |
int get_dst_width() / int get_dst_width(int idx) | 获取目标输出宽度。 |
int get_dst_height() / int get_dst_height(int idx) | 获取目标输出高度。 |
cv::Mat read_image(const std::string& image_path) | 读取图片文件为OpenCV Mat对象。 |
std::array<std::array<double, 3>, 3> computeCCM3x3FromImage(const cv::Mat &bgr, const cv::Point2f corners[4], double innerScale = 0.5) | 从色卡图像计算3x3 CCM矩阵(每行和为1)。 |
std::array<int, 18> ccmToAndroidColorTransform(const cv::Mat &bgr, const cv::Point2f corners[4], int denom = 10000, double innerScale = 0.5) | 将CCM转换为Android color transform参数。 |
cv::Mat get_cvimage(const Image &img, int idx = 0) | 将SDK Image对象转换为cv::Mat。 |
bool is_bgr(const cv::Mat &image) | 检查图像是否为BGR格式。 |
cv::Mat get_roi_pic(const cv::Mat &obj, const cv::Rect &location) | 按ROI区域裁剪图像。 |
int8_t io_send_ng_clear() | IO发送NG清除信号。 |
int8_t io_send_ok() | IO发送OK信号。 |
int8_t io_send_ok_clear() | IO发送OK清除信号。 |
int8_t io_send_alarm(std::string alarm_message) | IO发送带消息的报警信号。 |
int8_t tcp_send(std::string message) | 通过TCP发送自定义字符串消息。 |
bool isIPFormat(const char* str) | 检查字符串是否为合法IP格式。 |
bool isFileExists(const std::string& filePath) | 检查文件是否存在。 |
bool createNewSignalFile(const std::string& filePath) | 创建新的信号配置文件。 |