You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ko/5-retail/lessons/2-check-stock-device/wio-terminal-object-detecto...

5.5 KiB

IoT 기기에서 객체 감지기 호출하기 - Wio Terminal

객체 감지기가 게시되면 IoT 기기에서 사용할 수 있습니다.

이미지 분류기 프로젝트 복사하기

대부분의 재고 감지기는 이전 강의에서 만든 이미지 분류기와 동일합니다.

작업 - 이미지 분류기 프로젝트 복사하기

  1. 제조 프로젝트의 2강의 단계를 따라 ArduCam을 Wio Terminal에 연결하세요.

    카메라를 고정된 위치에 두고 싶을 수도 있습니다. 예를 들어, 케이블을 상자나 캔 위에 걸거나, 양면 테이프로 카메라를 상자에 고정하는 방법이 있습니다.

  2. PlatformIO를 사용하여 새로운 Wio Terminal 프로젝트를 만드세요. 이 프로젝트의 이름을 stock-counter로 지정하세요.

  3. 제조 프로젝트의 2강의 단계를 따라 카메라에서 이미지를 캡처하세요.

  4. 제조 프로젝트의 2강의 단계를 따라 이미지 분류기를 호출하세요. 이 코드의 대부분은 객체를 감지하는 데 재사용됩니다.

분류기 코드를 이미지 감지기로 변경하기

이미지를 분류하는 데 사용한 코드는 객체를 감지하는 코드와 매우 유사합니다. 주요 차이점은 Custom Vision에서 얻은 URL과 호출 결과입니다.

작업 - 분류기 코드를 이미지 감지기로 변경하기

  1. main.cpp 파일 상단에 다음 포함 지시문을 추가하세요:

    #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개의 토마토 페이스트 캔과 35.8%, 33.5%, 25.7%, 16.6%의 4개의 감지 결과

💁 이 코드는 code-detect/wio-terminal 폴더에서 찾을 수 있습니다.

😀 재고 카운터 프로그램이 성공적으로 작동했습니다!

면책 조항:
이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.