矩视智能机器视觉软件SDK使用教程(C++版)

1.概述(www.nb-ai.com

  • 该文介绍矩视智能视觉软件SDK(C++版)使用方法。该SDK工具包用于辅助工程师进行AI视觉开发。要进行软件开发,需要从官网下载:

    1. 工作台训练好的模型文件

    2. SDK工具包(C++ 版)

2.环境配置

  • 支持的操作系统: Windows10/11 X64(老SDK也支持Linux系统)

此SDK只支持在Nvidia显卡上运行。不支持 AMD 等其他品牌!

  • 支持的显卡类型:英伟达GPU(支持算力为“6.1”、“7.5”、“8.6”的GPU),2G以上显存。具体型号见工作台的模型下载界面中的“选择硬件”。 

    alt text

     在英伟达官网可以查到显卡算力

  • 支持的显卡驱动版本:不低于cuda version 11.6 (在终端命令窗口中输入“nvidia-smi.exe”即可查询cuda version) 

    alt text

     英伟达显卡驱动下载链接 (备用链接

    alt text

  • 环境依赖:Visual Studio 2017版本及以上。 Visual Studio下载链接。在官网下载好 Visual Studio 后进行安装,注意勾选“使用C++的桌面开发”和“通用Windows平台开发”。

  • 如果您已经下载VS软件:

    1. 请在“工具”-“获取工具和功能”中下载安装包 

      alt text

    2. 在“工作负荷”中,勾选“使用C++的桌面开发”和“通用Windows平台开发”, 然后点击“修改” 

      alt text

3.快速入门

  • 下面给出一个示例,帮助您快速了解如何使用SDK完成C++软件开发。本示例使用VS2019版本给出示例(使用VS2017及以上任一版本均可)

3.1 新建项目

  • 打开 “Visual Studio”,点击“创建新项目” 

    alt text

  • 选择“C++”、"Windows"、"控制台"、“空项目”,点击“下一步” 

    alt text

  • 开始配置项目,更改项目名称和路径,注意名称和路径均不要出现中文字符。点击“创建”。本项目名称为demo_cpp。 

    alt text

3.2 修改运行配置

  • 在红框中勾选“Release” 

    alt text

  • 在红框中勾选“x64” 

    alt text

  • 最终效果为: 

    alt text

3.3 解压SDK

  • 将下载好的SDK文件解压到安全的路径下(因为要引用SDK,所以请不要删除),如下所示: 

    alt text

  • 返回Visual Studio,在“解决资源管理器”中,右键,点击“在文件资源管理器中打开文件夹” 

    alt text

  • 打开后,如下所示(我们代称这个当前路径为proj_root/,之后要用): 

    alt text

  • 在SDK文件夹中,将demo.cpp文件复制,粘贴到proj_root/下: 

    alt text

     

    alt text

3.4 关联源程序

  • 在解决方案中,点击“显示所有文件”图标,如红框所示。 

    alt text

  • 找到“demo.cpp”文件 

    alt text

  • 右键,点击“包括在项目中” 

    alt text

  • 这样就完成了源程序的关联 

    alt text

3.5 添加C/C++附加目录

  • 右键demo_cpp,点击“属性” 

    alt text

  • 这时候弹出属性页。左侧栏选择“VC++目录”,右侧找到包含目录,点击下拉菜单,点击“编辑” 

    alt text

  • 双击空白位置,点击“...”图标,开始加入文件路径 

    alt text

  • 选择SDK中的include文件夹,然后点击“选择文件夹” 

    alt text

  • 发现原来空白的栏出现了文件路径,这代表路径添加成功,点击右下角“确定”,然后点击“应用”来保存更改。 

    alt text

     

    alt text

3.6 添加附加库目录和附加依赖项

  • 继续在属性页,点击“链接器”——“常规”——“附加库目录”——下拉菜单——“编辑” 

    alt text

  • 点击空白栏,然后点击“...”图标来选择目录 

    alt text

  • 选择SDK中的lib文件夹,然后点击“选择文件夹” 

    alt text

  • 此时原来空白的栏会出现一行文件路径,这代表路径添加成功,点击右下角“确定” 

    alt text

  • 继续在属性页,点击“链接器”——“输入”——“附加依赖项”——下拉菜单——“编辑” 

    alt text

  • 添加opencv_world454.libneuro_det_sdk.lib。点击“确定”。 

    alt text

  • “附加依赖项”里出现了刚添加的文件名,这代表附加依赖项添加成功。点击“应用”来保存更改。 

    alt text

3.7 添加C++预处理器参数

  • 继续在属性页,点击“C/C++”——“预处理器”——“预处理器定义”——下拉菜单——“编辑”。 

    alt text

  • 添加_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING,然后点击“确定”。 

    alt text

  • 点击“应用”来保存更改。再次点击“确定”,就把属性页关闭了。 

    alt text

3.8 添加系统环境变量

  • 下面开始添加系统环境变量,打开“此电脑”,空白位置右键,然后选择“属性”,点击“高级系统设置”,点击“环境变量”,出现如下界面。然后选中“Path”,点击“编辑” 

    alt text

  • 点击“新建”,再点击“浏览” 

    alt text

  • 选择SDK文件夹下的bin文件夹: 

    alt text

  • 将此环境变量上移到第一个,然后点击确定 

    alt text

     

    alt text

     操作完成点击“确定”。

3.9 重启Visual Studio

3.10 配置License文件

  • 请将License.txt文件放到proj_root/文件夹下(放置License.txt文件的位置请以当前文档为准) 

    alt text

     关于如何生成License.txt文件,参见: 如何获取License - Neurobot

3.11 修改示例代码

  • proj_root/目录下的demo.cpp文件给出了如何对图片进行预测的一个示例,用户仅需对demo.cpp文件进行简单的修改,即可完成线下图片测试。

  • main函数中,有6行TODO:注释,分别对应测试图片文件夹的路径(image_folder_path),模型文件夹的路径(model_path),模型名称(model_name),设备名称(device_name),设备索引(device_index),和检测阈值(detect_thres)。请修改这六个变量的值。

  • 注意:model_name可以随意起名但是不要重复;device_name只能是"cpu"或者"cuda"device_index一般情况下默认是0,当你有多张显卡的时候,用此索引选择你要使用的显卡;detect_thres是用来筛选检测目标的,如果检测目标的置信度低于此阈值,将被抛弃。阈值的取值范围是[0,1],默认值是-1,也就是0.7。

  • 例如: 

    alt text

     测试图片文件夹的路径 

    alt text

     模型文件夹的路径 

    alt text

  • 除了在Main函数中有六处含有TODO:的注释,其他函数也有含有TODO:的注释,例如:draw_boxdraw_infodisplay_results。请仔细阅读这些注释并根据需求自行修改数值或者代码。

3.12 运行程序

  • 上述已经完成了必要的配置过程,下面开始运行程序。打开项目文件。打开demo.cpp文件,点击“启动”,开始运行程序 

    alt text

  • 如运行成功,命令行界面会展示类似的以下信息:



Test image folder path: D:\nb-ai\test_image
Model path: D:\nb-ai\model\seg_gpu
Model name: test
Device name: cuda
Device index: 0
Detection threshold: -1


The total number of test images: 63
input device: cuda
infer device: cuda
[2023-07-28 19:00:11.522] [logging] [info] [model.cpp:35] [DirectoryModel] Load model: "D:\nb-ai\model\seg_gpu"
[2023-07-28 19:00:11.662] [logging] [info] [inference.cpp:44] {
  ···
}
[2023-07-28 19:00:12.399] [logging] [warning] [trt_net.cpp:24] TRTNet: Using an engine plan file across different models of devices is not recommended and is likely to affect performance or even cause errors.
[2023-07-28 19:00:13.731] [logging] [info] [inference.cpp:56] ["img"] <- ["image"]
[2023-07-28 19:00:13.731] [logging] [info] [inference.cpp:67] ["post_output"] -> ["dets"]
Batch size: 1
Reading the image: D:\nb-ai\test_image\000B16302318AE4F083DC80A6EA69EF75014582.bmp
Image size (height, width): 2048 2448
results in the 0-th image:
  bbox_count=100
Model prediction takes 2.086 seconds

label:                              螺帽
label_index:                        0
confidential score:                 0.99967
(x0, y0):                           (149.44,10.4562)
(x1, y1):                           (580.739,481.435)
row_index:                          0
col_index:                          0
mask_width:                         434
mask_height:                        474
...
  • 测试照片的预测结果会以弹窗形式展示出来,例如: 

    alt text

  • 这样就使用SDK完成了C++软件开发。

4. 调用函数说明

4.1 load_model()

  • 定义:

    • 该函数用于加载模型
  • 参数说明:

参数解释
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文件
6ARG-英伟达显卡报错
7不支持
8越界
9内存不足
10加载模型相关文件不存在
11加载失败
12状态计数
50模型类型错误或无法读取model.conf文件
100模型device_name参数类型错误

4.2 get_batch()

  • 定义:

    • 得到单次处理的样本个数
  • 参数说明:

参数说明
model_name模型名称(名称为英文名称)
  • 返回值:
    • 返回一个int型变量(batch)

4.3 predict_model()

  • 定义:

    • 该函数用于预测待测试图片
  • 参数说明:

参数说明
model_name模型名称(名称为英文名称)
mats一个cv::Mat数组,表示所有的测试图片
out_results一个DetectionResult的二维向量,用来接收预测结果
detect_thres检测阈值,超过检测阈值即视为目标物体。detect_thres=-1代表默认值,默认检测阈值为0.7。
  • 返回值:
    • 返回一个类叫DetectionResult, 如下代码所示:

// Bounding box
// (x0, y0) coordinates represent the top left corner of the bounding box
// (x1, y1) coordinates represent the bottom right corner of the bounding box
struct Boxes {
    float x0;
    float y0;
    float x1;
    float y1;
};


// Detection results
// For OCR and Object Detection tasks, results are bounding box (box), confidence level (score), 
//                                                 and category (label, label_index)
// For Pixel Segmentation task, results are bounding box (box), confidence level (score), category (label, label_index), 
//                                          and pixel segmentation image (mask, mask_width, mask_height)
struct DetectionResult {
    Boxes box;                   // Bounding box containing the detected object
    float score;                 // Score after predicting, ranging from 0 to 1
                                 // The closer the score is to 1, the better the result is
    std::string label;           // The target's label name after predicting
    int label_index;             // Index of the label
    cv::Mat mask;                // Mask of the the detected object
    int row_index;               // Position of the the detected object, used for OCR sort (not useful right now)
    int col_index;               // Position of the the detected object, used for OCR sort (not useful right now)
    int mask_width;              // Width of the mask
    int mask_height;             // Height of the mask
};

状态码(status)具体如下:

状态码定义
0执行成功
1英伟达显卡报错
2不支持
3越界
4内存不足
5用于预测的相关文件不存在
6预测失败
7状态计数
8无法获取预测的标签
9预测的标签和结果数量不符
50授权文件不存在或无权限读取
51授权文件格式不正确
52授权文件指纹不匹配
53未到授权开始时间
54授权过期

4.4 destroy_model()

  • 定义:

    • 该函数用于将模型从显卡中清除
  • 参数说明:

参数说明
model_name模型名称(名称为英文名称)
  • 返回值:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值