跳至主要内容

從您的物聯網設備呼叫您的物體檢測器 - Wio Terminal

一旦您的物體檢測器已經發布,它就可以從您的物聯網設備中使用。

複製圖像分類器項目

您的庫存檢測器的大部分與您在前一課中創建的圖像分類器相同。

任務 - 複製圖像分類器項目

  1. 按照製造項目第2課中的步驟,將您的ArduCam連接到您的Wio Terminal。

    您可能還需要將相機固定在一個位置,例如,將電纜掛在盒子或罐子上,或用雙面膠帶將相機固定在盒子上。

  2. 使用PlatformIO創建一個全新的Wio Terminal項目。將此項目命名為stock-counter

  3. 重複製造項目第2課中的步驟,從相機捕獲圖像。

  4. 重複製造項目第2課中的步驟,調用圖像分類器。大部分代碼將被重用來檢測物體。

將代碼從分類器更改為圖像檢測器

您用於分類圖像的代碼與檢測物體的代碼非常相似。主要區別在於您從Custom Vision獲得的URL以及調用的結果。

任務 - 將代碼從分類器更改為圖像檢測器

  1. main.cpp文件的頂部添加以下include指令:

    #include <vector>
  2. classifyImage函數重命名為detectStock,包括函數名稱和在buttonPressed函數中的調用。

  3. detectStock函數上方,聲明一個閾值以過濾掉任何概率較低的檢測結果:

    const float threshold = 0.3f;

    與僅返回每個標籤一個結果的圖像分類器不同,物體檢測器將返回多個結果,因此需要過濾掉任何概率較低的結果。

  4. 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);
    }
    }

    這將接收一個預測結果列表並將其打印到串行監視器。

  5. detectStock函數中,用以下內容替換循環遍歷預測結果的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中並傳遞給processPredictions函數。

  6. 上傳並運行您的代碼。將相機對準架子上的物體並按下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%

    💁 您可能需要將threshold調整到適合您的圖像的值。

    您將能夠看到拍攝的圖像,以及這些值在Custom Vision的Predictions標籤中。

    4 cans of tomato paste on a shelf with predictions for the 4 detections of 35.8%, 33.5%, 25.7% and 16.6%

💁 您可以在code-detect/wio-terminal文件夾中找到此代碼。

😀 您的庫存計數程序成功了!