Skip to content

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)
Cameraint8_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)
DeviceParamcfg_nameconst char *带路径的参数配置文件名
Imagedataconst char *指向存放数据的缓冲区的指针
wuint64_t目标图片宽度
huint64_t目标图片高度
cuint64_t目标图片的通道(通常为3)
lengthuint64_t图片数据所占内存长度
IOConfigdo1_keeptimeuint32_t管脚1信号持续时间
do2_keeptimeuint32_t管脚2信号持续时间
do1SignalType管脚1
do2SignalType管脚2
TcpConfigipconst char *IP地址
portuint16_t端口号
SVSdkMemfdInfosrcYPlaneStrideintYUV数据的宽
srcSliceHeightintYUV数据的高
memCopyStartIndexintStart index值(注:Start index的值与End index相等)
memCopyEndIndexintEnd index值
planeOffsetintYUV偏移值
cam_idint相机索引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)
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信号输出模式
CameraTypeMIPI_CAMERA_ENUM1uint8_tMIPI相机
USB_CAMERA_ENUM2uint8_t普通usb相机
USB_CAMERA_ENUM3uint8_t海康usb相机
CameraTriggerModeINVALID_TRIGGER_MODE_ENUM0uint8_t无效触发模式
INTERNAL_TRIGGER_MODE_ENUM1uint8_t内触发模式
EXTERNAL_TRIGGER_MODE_ENUM2uint8_t外部硬件触发模式
SOFTWARE_TRIGGER_MODE_ENUM3uint8_t软件触发模式
SPhaseOPEN_CAMERA_ING_ENUM1int正在打开相机
OPEN_CAMERA_SUC_ENUM2int相机打开成功
OPEN_CAMERA_FAIL_ENUM3int相机打开失败
LOAD_MODEL_ING_ENUM4int正在加载模型
LOAD_MODEL_SUC_ENUM5int模型加载成功
LOAD_MODEL_FAIL_ENUM6int模型加载失败
WAIT_IMAGE_ING_ENUM7int等待图像

类Camera

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

warning

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

using namespace Aidlux::SmartVision;

无参模式打开相机

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

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

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

有参模式打开相机

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);

打开流开关

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

举例如下:

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

关闭流开关

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

举例如下:

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

关闭相机(函数close)

APIint8_t close()
描述关闭相机。
参数
返回值0:成功。-1:失败。

举例如下:

cpp
//关闭相机
int8_t res = camera.close();

设置相机类型(函数set_camera_type)

APIvoid set_camera_type(CameraType camera_type)
描述设置相机类型
参数camera_type为struct CameraType类型对象。支持类型有: MIPI_CAMERA_ENUM1 / USB_CAMERA_ENUM2 / USB_CAMERA_ENUM3
返回值

举例如下:

cpp
//设置相机类型为海康相机
camera.set_camera_type(USB_CAMERA_ENUM3);

结构体DeviceParam

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

成员变量名类型默认值描述
cfg_nameconst char*带路径的参数配置文件名

结构体Image

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

成员变量名类型默认值描述
dataconst char*指向存放数据的缓冲区的指针
wuint64_t目标图片宽度
huint64_t目标图片高度
cuint64_t目标图片的通道(通常为3)
lengthuint64_t图片数据所占内存长度

结构体IOConfig

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

成员变量名类型默认值描述
do1_keeptimeuint32_t管脚1信号持续时间
do2_keeptimeuint32_t管脚2信号持续时间
do1SignalType管脚1
do2SignalType管脚2

结构体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);

设置日志输出到终端(函数log_to_stderr)

APIvoid log_to_stderr()
描述设置日志文件名及路径
参数设置日志输出到终端。一旦设置则不会再保存日志文件。一般不建议使用。
返回值

举例如下:

cpp
//设置日志文件名及路径
log_to_stderr();

日志级别(枚举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;
}

获取信号输出配置信息(函数get_signal_sending_mode)

APIint8_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对象获取。

举例如下:

cpp
//获取信号输出配置信息
IOConfig iosetting;
TcpConfig tcpsetting;
int8_t res = get_signal_sending_mode(iosetting, tcpsetting);

设置IO信号输出配置(函数set_io_signal_send_mode)

APIint8_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: 成功

举例如下:

cpp
//设置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)

APIint8_t set_tcp_signal_send_mode(const char* ip, uint16_t port)
描述设置TCP信号输出配置。所设ip地址和端口为服务器端的ip地址和端口。
参数ip: 服务器IP地址。 port: 服务器端口号
返回值-1: 失败。0: 成功

举例如下:

cpp
//设置TCP信号输出模式
int8_t res = set_tcp_signal_send_mode(ip, port);

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

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

举例如下:

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

IO发送NG信号(函数io_send_ng)

APIint8_t io_send_ng()
描述IO发送NG信号。
参数
返回值-1:失败。 0:成功

举例如下:

cpp
//IO发送NG信号
int8_t res = io_send_ng();

IO发送alarm信号(函数io_send_alarm_raising)

APIint8_t io_send_alarm_raising()
描述IO发送alarm信号。
参数
返回值-1: 失败。 0: 成功

举例如下:

cpp
// IO发送alarm信号
int8_t res = io_send_alarm_raising();

IO发送alarm清除信号(函数io_send_alarm_clear)

APIint8_t io_send_alarm_clear()
描述IO发送alarm清除信号。
参数
返回值-1: 失败。0: 成功

举例如下:

cpp
// IO发送alarmclear信号
int8_t res = io_send_alarm_clear();

TCP发送NG信号(函数tcp_send_ng)

APIint8_t tcp_send_ng()
描述TCP发送NG信号。
参数
返回值-1: 失败。0: 成功

举例如下:

cpp
// TCP发送NG信号
int8_t res = tcp_send_ng();

TCP发送alarm信号(函数tcp_send_alarm)

APIint8_t tcp_send_alarm()
描述TCP发送alarm信号。
参数
返回值-1: 失败。0: 成功

举例如下:

cpp
// TCP发送alarm信号
int8_t res = tcp_send_alarm();

TCP发送alarm清除信号(函数tcp_send_alarmclear)

APIint8_t tcp_send_alarmclear()
描述TCP发送alarm清除信号。
参数
返回值-1: 失败。0: 成功

举例如下:

cpp
// TCP发送alarmclear信号
int8_t res = tcp_send_alarmclear();

信号类型定义(枚举SignalType)

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

YUV格式数据转BGR格式数据

APIbool 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)

APIbool 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)

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

举例如下:

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

保存任务结果(函数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 = "")
描述打包并上报任务结果信息(原图、掩码图、结果图和附加信息)到本地SVE服务。
参数release_id:任务ID。release_version:任务版本。origin_file:原图路径。mask_file:掩码图路径。final_file:结果图路径。additional:附加信息字符串(可为空)。
返回值0:成功。-1:失败。

举例如下:

cpp
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}"
);
APIint8_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:失败。

举例如下:

cpp
int8_t ret = save_result("task_123", "v1.0", "./", "/var/opt/aidlux/global/");

获取最新日志信息(函数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
// 获取当期相机采集的实时帧率
double fps_v = get_fps();

配置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
// 配置MIPI相机参数
int8_t res = configure_camera("./param.json", true, true);

获取MIPI相机配置(函数get_camera_setting)

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

举例如下:

cpp
// 获取相机配置参数
const char* res = get_camera_setting();

开启MIPI相机全画幅(函数fullsize_enable)

APIint fullsize_enable(bool enable)
描述开启MIPI相机全画幅配置。
参数enable: true 开启, false 关闭。
返回值0: 成功设置 -1: 设置失败

举例如下:

cpp
// 激活MIPI相机fullsize配置
int res = fullsize_enable(true);

设置MIPI相机binning mode(函数set_binning_mode)

APIint set_binning_mode(int mode)
描述设置binning mode。
参数mode: 1: 选择最近的binning mode, 2: 选择2x2 binning mode。MIPI相机默认为0,等效设置1.
返回值0: 成功设置 -1: 设置失败

举例如下:

cpp
// 设置相机binning mode配置参数
int res = set_binning_mode(1);

查询MIPI相机fullsize参数值(函数query_fullsize)

APIstring query_fullsize()
描述查询fullsize值。
参数无.
返回值string类型的fullsize参数值

举例如下:

cpp
// 获取相机fullsize配置参数
string res = query_fullsize();

查询MIPI相机binning mode(函数query_binning_mode)

APIstring query_binning_mode()
描述查询binning mode。
参数无.
返回值string类型的binning mode值

举例如下:

cpp
// 获取相机binning mode配置参数
string res = query_binning_mode();

获取所有相机ID(函数get_all_cam_ids)

APIstd::vector<std::string> get_all_cam_ids()
描述获取所有可用的相机ID。
参数
返回值字符串向量,每个字符串是一个相机ID。

举例如下:

cpp
std::vector<std::string> cam_ids = Aidlux::SmartVision::get_all_cam_ids();

获取所有相机索引(函数get_all_cam_index)

APIstd::vector<int> get_all_cam_index()
描述获取所有可用的相机索引。
参数
返回值整数向量,每个整数是一个相机索引。

举例如下:

cpp
std::vector<int> cam_indices = Aidlux::SmartVision::get_all_cam_index();

根据ID获取相机索引(函数get_cam_index)

APIint get_cam_index(std::string cam_id)
描述将相机ID转换为相机索引。
参数cam_id: 相机ID字符串
返回值相机索引。

举例如下:

cpp
int index = Aidlux::SmartVision::get_cam_index("camera_0");

根据索引获取相机ID(函数get_cam_id)

APIstd::string get_cam_id(int cam_index)
描述将相机索引转换为相机ID。
参数cam_index: 相机索引
返回值相机ID字符串。

举例如下:

cpp
std::string id = Aidlux::SmartVision::get_cam_id(0);

获取照片文件地址(函数get_photo_file_addr)

APIint8_t get_photo_file_addr(std::vector<std::string> &pic_path, int idx = 0)
描述获取HDR功能的照片文件路径。
参数pic_path: 用于存储文件路径的输出向量。idx: 相机索引(默认为0)。
返回值0: 成功。-1: 失败。-2: 失败。

举例如下:

cpp
std::vector<std::string> paths;
int8_t res = Aidlux::SmartVision::get_photo_file_addr(paths, 0);

获取照片BGR数据(函数get_photo_bgr)

APIcv::Mat get_photo_bgr(int idx = 0)
描述获取HDR功能的BGR格式照片数据。
参数idx: 相机索引(默认为0)。
返回值包含BGR图像数据的cv::Mat对象。

举例如下:

cpp
cv::Mat img = Aidlux::SmartVision::get_photo_bgr(0);

获取照片JPG(函数get_photo_jpg)

APIint8_t get_photo_jpg(const char *file_path, int idx = 0)
描述保存HDR功能的照片为JPG文件。
参数file_path: 输出文件路径。idx: 相机索引(默认为0)。
返回值0: 成功。1: 失败。

举例如下:

cpp
int8_t res = Aidlux::SmartVision::get_photo_jpg("/tmp/photo.jpg", 0);

获取模拟增益(函数get_analog_gain)

APIfloat get_analog_gain()
描述获取当前模拟增益值。
参数
返回值模拟增益值。0.0表示失败。

举例如下:

cpp
float gain = Aidlux::SmartVision::get_analog_gain();

获取数字增益(函数get_digital_gain)

APIfloat get_digital_gain()
描述获取当前数字增益值。
参数
返回值数字增益值。0.0表示失败。

举例如下:

cpp
float gain = Aidlux::SmartVision::get_digital_gain();

设置增益(函数set_gain)

APIint set_gain(float analog_gain, float digital_gain)
描述设置模拟和数字增益值。
参数analog_gain: 模拟增益值。digital_gain: 数字增益值。
返回值0: 成功。-1: 失败。

举例如下:

cpp
int res = Aidlux::SmartVision::set_gain(1.5f, 1.0f);

畸变标定(函数distortion_calibration)

APIcv::Mat distortion_calibration(const std::vector<cv::Mat>& images, cv::Size boardSize, cv::Mat& cameraMatrix, float squareSize)
描述使用多张棋盘格图像进行畸变标定。
参数images: 标定图像向量。boardSize: 棋盘格图案大小。cameraMatrix: 输出相机矩阵。squareSize: 棋盘格方块大小。
返回值畸变系数矩阵。

举例如下:

cpp
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)

APIcv::Mat distortion_correction(const cv::Mat &img, const cv::Mat &distCoeffs, cv::Mat &cameraMatrix)
描述使用标定参数校正图像畸变。
参数img: 输入图像。distCoeffs: 畸变系数。cameraMatrix: 相机矩阵。
返回值校正后的图像。

举例如下:

cpp
cv::Mat corrected = Aidlux::SmartVision::distortion_correction(img, distCoeffs, cameraMatrix);

白平衡标定(函数white_balance_calibration)

APIcv::Vec3f white_balance_calibration(const cv::Mat& img)
描述从图像计算白平衡标定系数。
参数img: 输入图像。
返回值RGB增益系数。

举例如下:

cpp
cv::Vec3f gains = Aidlux::SmartVision::white_balance_calibration(img);

白平衡校正(函数white_balance_correction)

APIcv::Mat white_balance_correction(const cv::Mat& img, const cv::Vec3f& calibCoeff)
描述使用标定系数调整图像白平衡。
参数img: 输入图像。calibCoeff: 白平衡标定系数。
返回值白平衡校正后的图像。

举例如下:

cpp
cv::Mat corrected = Aidlux::SmartVision::white_balance_correction(img, gains);

获取模式值(函数get_mode_value)

APIint8_t get_mode_value()
描述获取当前信号输出模式。
参数
返回值0: OFF, 1: IO_MODE, 2: TCP_MODE, 3: MODBUS_MODE, 4: UART_MODE, -1: 失败。

举例如下:

cpp
int8_t mode = Aidlux::SmartVision::get_mode_value();

IO发送(函数io_send)

APIint8_t io_send(std::string io_str, std::string io_control_file)
描述将字符串写入特定IO控制文件。
参数io_str: 要写入的字符串。io_control_file: IO控制文件路径。
返回值0: 成功。-1: 失败。

举例如下:

cpp
int8_t res = Aidlux::SmartVision::io_send("1", "/sys/aidlux/io_out/output_1p");

任务阶段类型定义(枚举SPhase)

成员变量名描述
OPEN_CAMERA_ING_ENUM11正在打开相机
OPEN_CAMERA_SUC_ENUM22相机打开成功
OPEN_CAMERA_FAIL_ENUM33相机打开失败
LOAD_MODEL_ING_ENUM44正在加载模型
LOAD_MODEL_SUC_ENUM55模型加载成功
LOAD_MODEL_FAIL_ENUM66模型加载失败
WAIT_IMAGE_ING_ENUM77等待图像

相机触发模式(枚举CameraTriggerMode)

成员变量名描述
INVALID_TRIGGER_MODE_ENUM00无效触发模式
INTERNAL_TRIGGER_MODE_ENUM11内触发模式
EXTERNAL_TRIGGER_MODE_ENUM22外部硬件触发模式
SOFTWARE_TRIGGER_MODE_ENUM33软件触发模式

相机参数模式(枚举CameraParamMode)

成员变量名描述
WITH_PARAM_MODE0带参数模式
WITHOUT_PARAM_MODE1无参数模式

信号模式(枚举SignalMode)

成员变量名描述
IO_MODE0IO信号模式
TCP_MODE1TCP信号模式
MODBUS_MODE2MODBUS信号模式
UART_MODE3UART信号模式

结构体USBCamera

成员变量名类型描述
usb_typeintUSB类型(0: 无, 2: USB 2.0, 3: USB 3.0)
widthint图像宽度
heightint图像高度
fpsint帧率
bus_idstd::string总线ID
vendor_idstd::string供应商ID
device_idstd::string设备ID
product_idstd::string产品ID
vendor_product_idstd::string供应商产品ID
manufacturerstd::string制造商名称
video_pathstd::string视频设备路径
resolutionstd::string分辨率字符串
creation_timestampstd::string创建时间戳
buffers[4]void*内存映射缓冲区指针
size[4]int缓冲区大小
config_pathstd::string配置文件路径
video_liststd::vectorstd::string视频路径列表

结构体HIKCamera

成员变量名类型描述
widthint图像宽度
heightint图像高度
fpsint帧率
trigger_modeint触发模式(0: 连续, 1: 软件)
config_pathstd::string配置文件路径

结构体CameraParam

成员变量名类型描述
camera_typeCameraType相机类型
exposure_timeuint64_t曝光时间(微秒)
gainfloat增益值
widthint图像宽度
heightint图像高度
cint通道数
fpsint帧率
trigger_modeCameraTriggerMode触发模式
resolution_arraystd::vectorstd::string支持的分辨率列表
resolution_idxuint8_t当前分辨率索引
horizontal_flipbool水平翻转使能
vertical_flipbool垂直翻转使能

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)

举例如下:

cpp
RS485_IO &io = RS485_IO::getInstance();
io.send_do1();

IO类

IO操作的静态类。

SendNGType枚举

成员变量名描述
INVALID_NG_TYPE0无效类型
IO_NG_TYPE1IO NG类型
MODBUS_NG_TYPE2MODBUS NG类型
TCP_NG_TYPE3TCP NG类型

SendNGConfig结构体

成员变量名类型描述
vol_timeuint32_t电平持续时间(用于IO)
reg_addruint32_t寄存器地址(用于MODBUS)
ipstd::stringIP地址(用于TCP)
portuint16_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)创建新的信号配置文件。