1.概述(www.nb-ai.com)
2.环境配置
-
支持的操作系统: Windows10/11 X64
-
软件依赖:
此SDK只支持在Nvidia显卡上运行。不支持 AMD 等其他品牌!
-
支持的显卡类型:英伟达GPU(支持算力为“6.1”、“7.5”、“8.6”的GPU)。具体型号见工作台的模型下载界面中的“选择硬件”。
在英伟达官网可以查到显卡算力
-
支持的显卡驱动版本:不低于cuda version 11.6 (在终端命令窗口中输入“nvidia-smi.exe”即可查询cuda version)
3.快速入门
- 下面给出一个示例,帮助您快速了解如何使用SDK完成 LabView 软件开发。本示例使用LabView(2022 Q3版本)以及 LabView Vision Development模块(2022 Q3版本)。
3.1 解压SDK
- 将下载好的SDK文件解压到安全的路径下,如下所示:
3.2 添加环境变量
-
下面开始添加系统环境变量,打开“此电脑”,空白位置右键,然后选择“属性”,点击“高级系统设置”,点击“环境变量”,出现如下界面。然后选中“Path”,点击“编辑”
-
点击“新建”,再点击“浏览”
-
选择SDK文件夹下的
bin
文件夹: -
将此环境变量上移到第一个
操作完成点击“确定”。
3.3 配置License文件
- 请将
License.txt
文件放到SDK文件夹下(放置License.txt
文件的位置请以当前文档为准) 关于如何生成License.txt
文件,参见: 如何获取License - Neurobot
3.4 修改并运行示例代码
-
双击打开SDK文件夹下
dllrun0525.vi
文件,如下: -
点击
test image path
旁文件夹图标选择单张测试图片 -
修改模型名称
-
点击
model path
旁文件夹图标选择存放模型文件的文件夹 -
选择
device name
(用CPU处理请选择cpu
;用GPU处理请选择cuda
) -
设置
detect threshold
(检测阈值,超过检测阈值即视为目标物体。detect threshold = -1
代表默认值,默认检测阈值为0.7
) -
选择
color mode
(彩色图像(RGB)请选择color
;灰度图像请选择gray
) -
点击左上角运行(run)按钮,运行程序
结果如下:
-
如果程序出现报错,请查看这四个地方分析出错的原因:
is img
,is loaded
,load() return
和predict() return
。is img
亮绿灯表示图片加载成功,反之图片加载失败;is loaded
亮绿灯表示模型已经加载,反之模型未被加载;load() return
显示0的时候表示模型加载成功;反之模型加载失败;predict() return
显示0的时候表示模型预测成功,反之模型预测失败。调用函数说明章节定义了load() return
和predict() return
的各种返回值。注意:如果程序出现报错,找到问题并修改好,再次运行依然出错的话,请重启LabView再运行!!!
4. 推理结果格式
- 模型对单张图片的推理结果是一个
string
类型,存在predict results
里,如下所示: - 单张照片的推理结果可以有多个,单个结果的具体格式为:
x0,y0,x1,y1,score,label,label_index,row_index,col_index;mask_width;mask_height;
注意:结果之间由“,”或者“;”间隔,中间没有空格
变量 | 定义 |
---|---|
x0 | 检测矩形框(bounding box)的左上角的x值 |
y0 | 检测矩形框(bounding box)的左上角的y值 |
x1 | 检测矩形框(bounding box)的右下角的x值 |
y1 | 检测矩形框(bounding box)的右下角的y值 |
score | 检测结果的置信度(confidence score) |
label | 检测结果的标签 |
label_index | 检测结果的标签索引 |
row_index | 用于OCR的自动排列,在开发中,暂时可以忽略 |
col_index | 用于OCR的自动排列,在开发中,暂时可以忽略 |
mask_width | 用于像素分割,在开发中,暂时可以忽略 |
mask_height | 用于像素分割,在开发中,暂时可以忽略 |
5. 调用函数说明
dllrun0525.vi
文件引用了SDK文件夹下几个VI文件,其中重要的是:DestroyModel_525.vi
,LoadModel_525.vi
和PredictModel_525.vi
。 这三个文件分别引用了neurobot_LabVIEW_Model_SDK_CN_V3.0\bin\neuro_det_sdk.dll
中的load_model()
,newPredict_modelVec()
和destroy_model()
函数 (可以打开Block Diagram进行查看)。
5.1 load_model()
int load_model(const char* model_name, const char* model_path, const char* device_name = "cuda", const int device_index = 0);
-
定义:
- 该函数用于加载模型
-
参数说明:
参数 | 解释 |
---|---|
model_name | 模型名称 |
model_path | 模型所在路径 |
device_name | 选择CPU处理:device_name="cpu"; 选择GPU处理:device_name="cuda" |
device_index | 加载模型的显卡设备号。默认值为0(默认设备号),您也可以修改为其他设备号。 |
- 返回值:
- 返回一个int型变量。0代表执行成功,其他数字为错误码,具体如下:
返回值 | 定义 |
---|---|
0 | 执行成功 |
1 | 配置文件找不到 |
2 | 未找到batch参数 |
3 | 未找到dete_thres参数 |
4 | 未找到class参数 |
5 | 缺少运行所需dll文件 |
6 | ARG-英伟达显卡报错 |
7 | 不支持 |
8 | 越界 |
9 | 内存不足 |
10 | 加载模型相关文件不存在 |
11 | 加载失败 |
12 | 状态计数 |
50 | 模型类型错误或无法读取model.conf文件 |
100 | 使用错误的模型类型 |
5.2 newPredict_modelVec()
int newPredict_modelVec(const char* model_name, uchar* ImgVec, int length, int row, int col, char* ret, float detect_thres = -1.0);
-
定义:
- 该函数用于预测待测试图片
-
参数说明:
参数 | 说明 |
---|---|
model_name | 模型名称(名称为英文名称) |
ImgVec | 图像rgb数组(u8数组) |
length | 图像rgb数组长度 |
row | 图像高 |
col | 图像宽 |
ret | 预测返回值 |
detect_threshold | 检测阈值,超过检测阈值即视为目标物体。detectThreshold=-1代表默认值,默认检测阈值为0.7。 |
- 返回值:
- 返回一个int型变量。0代表执行成功,其他数字为错误码,具体如下:
状态码(status)具体如下:
状态码 | 定义 |
---|---|
0 | 执行成功 |
1 | 英伟达显卡报错 |
2 | 不支持 |
3 | 越界 |
4 | 内存不足 |
5 | 用于预测的相关文件不存在 |
6 | 预测失败 |
7 | 状态计数 |
50 | 授权文件不存在或无权限读取 |
51 | 授权文件格式不正确 |
52 | 授权文件指纹不匹配 |
53 | 未到授权开始时间 |
54 | 授权过期 |
55 | 系统时间曾经回滚 |
56 | 无写授权文件权限 |
57 | 授权相关未知错误 |
58 | 授权文件版本与SDK版本不同 |
59 | 标签数目超出限制 |
5.3 destroy_model()
void destroy_model(const char* model_name);
-
定义:
- 该函数用于将模型从显卡中清除
-
参数说明:
参数 | 说明 |
---|---|
model_name | 模型名称(名称为英文名称) |
- 返回值:
- 无