从您的IoT设备调用对象检测器 - Wio终端 一旦您的对象检测器发布,就可以从您的IoT设备中使用它。 复制图像分类项目 大部分现成的检测器与您在之前的课程中创建的图像分类器相同。 任务 - 复制图像分类项目 按照制造项目的第2课步骤将ArduCam连接到Wio终端。 您可能还想将摄像头固定在一个位置,例如,将电缆挂在盒子或罐子上,或者使用双面胶带将摄像头固定在盒子上。 使用PlatformIO创建一个新的Wio终端项目,并将其命名为 。 重复制造项目的第2课步骤中的步骤,从摄像头捕获图像。 重复制造项目的第2课步骤,调用图像分类器。这部分代码大部分将被重用以检测对象。 将代码从分类器更改为图像检测器 用于分类图像的代码与用于检测对象的代码非常相似。
一旦您的对象检测器发布,就可以从您的IoT设备中使用它。
大部分现成的检测器与您在之前的课程中创建的图像分类器相同。
按照制造项目的第2课步骤将ArduCam连接到Wio终端。
您可能还想将摄像头固定在一个位置,例如,将电缆挂在盒子或罐子上,或者使用双面胶带将摄像头固定在盒子上。
使用PlatformIO创建一个新的Wio终端项目,并将其命名为stock-counter。
重复制造项目的第2课步骤中的步骤,从摄像头捕获图像。
重复制造项目的第2课步骤,调用图像分类器。这部分代码大部分将被重用以检测对象。
用于分类图像的代码与用于检测对象的代码非常相似。主要区别在于从Custom Vision获得的调用的URL和调用的结果。
在main.cpp文件顶部添加以下包含指令:
#include <vector>
将classifyImage function to detectStock, both the name of the function and the call in the buttonPressed function.
Above the detectStock函数重命名,并声明一个阈值来过滤掉任何概率较低的检测结果:
const float threshold = 0.3f;
与图像分类器不同,后者每种标签只返回一个结果,对象检测器会返回多个结果,因此需要过滤掉概率较低的结果。
在detectStock函数上方声明一个处理预测结果的函数:
void processPredictions(std::vector<JsonVariant> &predictions) { for(JsonVariant prediction : predictions) { String tag = prediction["tagName"].as<String>(); float probability = prediction["probability"].as<float>(); char buff[32]; sprintf(buff, "%s:\t%.2f%%", tag.c_str(), probability * 100.0); Serial.println(buff); } }
这个函数接收一个预测列表,并将其打印到串行监视器上。
在detectStock function, replace the contents of the for循环中,循环遍历预测结果,并添加以下内容:
std::vector<JsonVariant> passed_predictions; for(JsonVariant prediction : predictions) { float probability = prediction["probability"].as<float>(); if (probability > threshold) { passed_predictions.push_back(prediction); } } processPredictions(passed_predictions);
这个循环遍历预测结果,将概率与阈值进行比较。所有概率高于阈值的预测结果都将被添加到list and passed to the processPredictions函数中。
上传并运行您的代码。将摄像头对准货架上的物体并按下C按钮。您将在串行监视器上看到输出:
Connecting to WiFi.. Connected! Image captured Image read to buffer with length 17416 tomato paste: 35.84% tomato paste: 35.87% tomato paste: 34.11% tomato paste: 35.16%
您可能需要调整
阈值以适应您的图像。
您可以在自定义视觉中的预测选项卡中看到拍摄的图像以及这些值。

您可以在code-detect/wio-terminal文件夹中找到此代码。
您的库存计数程序成功了!
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。