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) |
---|---|---|
Camera | int8_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) |
---|---|---|---|
DeviceParam | cfg_name | const char * | 带路径的参数配置文件名 |
Image | data | const char * | 指向存放数据的缓冲区的指针 |
w | uint64_t | 目标图片宽度 | |
h | uint64_t | 目标图片高度 | |
c | uint64_t | 目标图片的通道(通常为3) | |
length | uint64_t | 图片数据所占内存长度 | |
IOConfig | ng_keeptime | uint32_t | 信号持续时间 |
do1 | SignalType | 管脚1 | |
do2 | SignalType | 管脚1 | |
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偏移值 |
公共函数(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) |
---|---|---|---|
SVLogLevel | SINFO | uint8_t | 日志级别SINFO |
SWARNING | uint8_t | 日志级别SWARNING | |
SERROR | uint8_t | 日志级别SERROR | |
SFATAL | uint8_t | 日志级别SFATAL(Smart Vision SDK中未使用此级别) | |
SignalType | OFF | uint8_t | 关闭信号输出配置 |
NG_SIGNAL | uint8_t | NG信号输出模式 | |
ALARM_SIGNAL | uint8_t | alarm信号输出模式 |
类Camera
实例化类Camera对象相关操作。打开相机、抓图等相关的操作都基于实例化Camera对象。
warning
如非特殊说明,所有的定义都属于名字空间Aidlux::SmartVision。可通过以下命令在代码中引入:
using namespace Aidlux::SmartVision;
无参模式打开相机(函数open)
API | int8_t open(GetImageCB cb) |
---|---|
描述 | 以无参模式打开相机。 |
参数 | 输入参数为回调函数。回调函数由客户自定义。关于回调函数请参考回调函数GetImageCB |
返回值 | 0: 成功。-1: 失败。 |
举例如下(Camera为类Camera的实例化对象,下同):
// 无参模式打开相机
int8_t res = camera.open(my_get_img_cb);
有参模式打开相机(函数open)
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);
打开流开关(函数start_capture)
API | void start_capture(void) |
---|---|
描述 | 打开流开关 |
参数 | 无 |
返回值 | 无 |
举例如下:
// 打开流开关
camera.start_capture();
关闭流开关(函数stop_capture)
API | void stop_capture(void) |
---|---|
描述 | 关闭流开关 |
参数 | 无 |
返回值 | 无 |
举例如下:
//关闭流开关
camera.stop_capture();
结构体DeviceParam
定义带路径的参数配置文件名。该参数配置文件用于配置相机参数。因此本结构体仅用于有参模式打开相机。
成员变量名 | 类型 | 默认值 | 描述 |
---|---|---|---|
cfg_name | const char* | 带路径的参数配置文件名 |
结构体Image
定义图片数据相关信息,包括图片配置信息及指针变量。
成员变量名 | 类型 | 默认值 | 描述 |
---|---|---|---|
data | const char* | 指向存放数据的缓冲区的指针 | |
w | uint64_t | 目标图片宽度 | |
h | uint64_t | 目标图片高度 | |
c | uint64_t | 目标图片的通道(通常为3) | |
length | uint64_t | 图片数据所占内存长度 |
结构体IOConfig
定义IO信号输出配置信息。
成员变量名 | 类型 | 默认值 | 描述 |
---|---|---|---|
ng_keeptime | uint32_t | 信号持续时间 | |
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偏移值 |
设置日志级别(函数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 | |
SFATAL | uint8_t | 日志级别SFATAL(未使用) |
回调函数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 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)
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信号输出模式 |
YUV格式数据转BGR格式数据(函数yuv_to_bgr)
API | bool yuv_to_bgr(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata) |
---|---|
描述 | YUV格式数据转BGR 格式数据。通过入参destMat 对象来将转出的数据传出。 |
参数 | 无 |
返回值 | false: 失败。true: 成功 |
获取SDK版本信息(函数get_build_version)
API | const char *get_build_version() |
---|---|
描述 | 获取sdk版本信息。 |
参数 | 无 |
返回值 | sdk版本信息 |
举例如下:
// 获取SDK版本信息
const char* res = get_build_version();
获取最新日志信息(函数log_last_msg)
API | const char* log_last_msg(SVLogLevel log_level) |
---|---|
描述 | 获取最新日志信息。 |
参数 | SVLogLevel日志级别 |
返回值 | 最新的一条日志记录 |
举例如下:
// 获取最新日志信息
const char* res = log_last_msg(log_level);