Skip to main 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)关闭流开关
结构体(struct)成员变量名(public member variable)类型(Type)描述(Description)
DeviceParamcfg_nameconst char *带路径的参数配置文件名
Imagedataconst char *指向存放数据的缓冲区的指针
wuint64_t目标图片宽度
huint64_t目标图片高度
cuint64_t目标图片的通道(通常为3)
lengthuint64_t图片数据所占内存长度
IOConfigng_keeptimeuint32_t信号持续时间
do1SignalType管脚1
do2SignalType管脚1
TcpConfigipconst char *IP地址
portuint16_t端口号
SVSdkMemfdInfosrcYPlaneStrideintYUV数据的宽
srcSliceHeightintYUV数据的高
memCopyStartIndexintStart index值(注:Start index的值与End index相等)
memCopyEndIndexintEnd index值
planeOffsetintYUV偏移值
公共函数(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 & , uint64_t )> 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 ng_keeptime)设置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
SFATALuint8_t日志级别SFATAL(Smart Vision SDK中未使用此级别)
SignalTypeOFFuint8_t关闭信号输出配置
NG_SIGNALuint8_tNG信号输出模式
ALARM_SIGNALuint8_talarm信号输出模式

类Camera

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

warning

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

using namespace Aidlux::SmartVision;

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

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

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

// 无参模式打开相机 
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: 失败。

举例如下:

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

打开流开关(函数start_capture)

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

举例如下:

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

关闭流开关(函数stop_capture)

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

举例如下:

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

结构体DeviceParam

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

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

结构体Image

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

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

结构体IOConfig

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

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

结构体TcpConfig

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

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

结构体SVSdkMemfdInfo

定义数据缓冲区信息。

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

设置日志级别(函数set_log_level

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

举例如下:

//设置日志级别
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
返回值

举例如下:

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

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

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

举例如下:

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

日志级别(枚举SVLogLevel)

成员变量名类型默认值描述
SINFOuint8_t0日志级别SINFO
SWARNINGuint8_t日志级别SWARNING
SERRORuint8_t日志级别SERROR
SFATALuint8_t日志级别SFATAL(未使用)

回调函数GetImageCB

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

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

举例如下:

//获取信号输出配置信息
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 ng_keeptime)
描述设置IO信号输出配置。比如设置do1为NG_SIGNAL,表示管脚1只能发送NG信号。需要注意的是管脚1和管脚2不能同时设置为相同的信号类型(比如都是NG或都是alarm)
参数do1: 管脚1。 do2: 管脚2。 ng_keeptime: 信号持续时间
返回值-1: 失败。 0: 成功

举例如下:

//设置IO信号输出模式
SignalType do2 = NG_SIGNAL;
SignalType do1 = ALARM_SIGNAL;
uint32_t ng_keeptime = 6;
int8_t res = set_io_signal_send_mode(do1 , do2 , ng_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: 成功

举例如下:

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

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

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

举例如下:

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

IO发送NG信号(函数io_send_ng)

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

举例如下:

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

IO发送alarm信号(函数io_send_alarm_raising)

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

举例如下:

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

举例如下:

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

TCP发送NG信号(函数tcp_send_ng)

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

举例如下:

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

TCP发送alarm信号(函数tcp_send_alarm)

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

举例如下:

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

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

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

举例如下:

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

信号类型定义(枚举SignalType)

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

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

APIbool yuv_to_bgr(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata)
描述YUV格式数据转BGR格式数据。通过入参destMat对象来将转出的数据传出。
参数
返回值false: 失败。true: 成功

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

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

举例如下:

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

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

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

举例如下:

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