튜토리얼: Lite를 사용하여 TensorFlow 카메라의 이미지에 대한 샘플 이미지 분류 추론 수행 - AWS IoT Greengrass

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

튜토리얼: Lite를 사용하여 TensorFlow 카메라의 이미지에 대한 샘플 이미지 분류 추론 수행

이 자습서에서는 TensorFlow Lite 이미지 분류 추론 구성 요소를 사용하여 Greengrass 코어 장치의 로컬 카메라 이미지에 대한 샘플 이미지 분류 추론을 수행하는 방법을 보여줍니다. 이 구성 요소에는 다음과 같은 구성 요소 종속성이 포함됩니다.

  • TensorFlow 라이트 이미지 분류 모델 스토어 컴포넌트

  • TensorFlow 라이트 런타임 컴포넌트

참고

이 가이드에서는 라즈베리 파이 또는 NVIDIA Jetson Nano 디바이스용 카메라 모듈에 액세스하지만 ARMv7L, Armv8 또는 AWS IoT Greengrass x86_64 플랫폼의 다른 디바이스도 지원합니다. 다른 기기용으로 카메라를 설정하려면 해당 장치의 관련 설명서를 참조하십시오.

Greengrass 기기에서의 기계 학습에 대한 자세한 내용은 을 참조하십시오. 기계 학습 추론 수행

사전 조건

이 자습서를 완료하려면 먼저 자습서: Lite를 사용하여 TensorFlow 샘플 이미지 분류 추론 수행 완료해야 합니다.

또한 다음 항목이 필요합니다.

  • 카메라 인터페이스가 있는 Linux Greengrass 코어 디바이스. 이 가이드에서는 지원되는 다음 장치 중 하나의 카메라 모듈에 액세스합니다.

    Greengrass 코어 장치 설정에 대한 자세한 내용은 을 참조하십시오. 자습서: AWS IoT Greengrass V2 시작하기

    코어 디바이스는 다음 요구 사항을 충족해야 합니다.

    • Amazon Linux 2 또는 우분투 18.04를 실행하는 Greengrass 코어 디바이스의 경우 GNU C 라이브러리 (glibc) 버전 2.27 이상이 디바이스에 설치되어 있습니다.

    • 라즈베리 파이와 같은 ARMv7L 디바이스에서는 OpenCV-Python에 대한 종속성이 디바이스에 설치되어 있습니다. 다음 명령을 실행하여 종속 항목을 설치합니다.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • 라즈베리파이 OS Bullseye를 실행하는 라즈베리파이 디바이스는 다음 요구사항을 충족해야 합니다.

      • NumPy 1.22.4 이상이 디바이스에 설치되었습니다. Raspberry Pi OS Bullseye에는 이전 버전이 포함되어 있으므로 다음 명령을 실행하여 디바이스에서 업그레이드할 수 있습니다. NumPy NumPy

        pip3 install --upgrade numpy
      • 기기에서 레거시 카메라 스택이 활성화되었습니다. Raspberry Pi OS Bullseye에는 기본적으로 활성화되고 호환되지 않는 새로운 카메라 스택이 포함되어 있으므로 레거시 카메라 스택을 활성화해야 합니다.

        레거시 카메라 스택을 활성화하려면
        1. 다음 명령을 실행하여 Raspberry Pi 구성 도구를 엽니다.

          sudo raspi-config
        2. 인터페이스 옵션을 선택합니다.

        3. 레거시 카메라를 선택하여 레거시 카메라 스택을 활성화합니다.

        4. Raspberry Pi를 재부팅합니다.

  • 라즈베리 파이 또는 엔비디아 젯슨 나노 디바이스의 경우 라즈베리 파이 카메라 모듈 V2 - 8메가픽셀, 1080p. 카메라 설정 방법을 알아보려면 Raspberry Pi 설명서의 Connecting the camera를 참조하십시오.

1단계: 디바이스의 카메라 모듈 구성

이 단계에서는 장치의 카메라 모듈을 설치하고 활성화합니다. 장치에서 다음 명령을 실행합니다.

Raspberry Pi (Armv7l)
  1. 카메라 모듈용 picamera 인터페이스를 설치합니다. 다음 명령을 실행하여 이 자습서에 필요한 카메라 모듈과 기타 Python 라이브러리를 설치합니다.

    sudo apt-get install -y python3-picamera
  2. Picamera가 성공적으로 설치되었는지 확인하세요.

    sudo -u ggc_user bash -c 'python3 -c "import picamera"'

    출력에 오류가 포함되어 있지 않으면 검사가 성공한 것입니다.

    참고

    기기에 설치된 Python 실행 파일이 다음과 python3.7 같은 경우 이 자습서의 명령에 python3.7 대신 python3 를 사용하십시오. 종속성 오류를 피하기 위해 pip 설치가 올바른 python3.7 또는 python3 버전에 매핑되는지 확인하십시오.

  3. 디바이스를 재부팅합니다.

    sudo reboot
  4. Raspberry Pi 구성 도구를 엽니다.

    sudo raspi-config
  5. 화살표 키를 사용하여 [Interfacing Options]를 열고 카메라 인터페이스를 활성화합니다. 메시지가 나타나면 디바이스 재부팅을 허용합니다.

  6. 다음 명령어를 실행하여 카메라 설정을 테스트합니다.

    raspistill -v -o test.jpg

    그러면 Raspberry Pi의 미리 보기 창이 열리고, 현재 디렉터리에 test.jpg라는 이름의 사진이 저장되며, 카메라에 대한 정보가 Raspberry Pi 터미널에 표시됩니다.

  7. 다음 명령을 실행하여 런타임 구성요소가 만든 가상 환경에서 추론 구성요소가 카메라에 액세스할 수 있도록 하는 심볼릭 링크를 생성합니다.

    sudo ln -s /usr/lib/python3/dist-packages/picamera "MLRootPath/greengrass_ml_tflite_venv/lib/python3.7/site-packages"

    이 자습서의 ML RootPath 기본값은 입니다. /greengrass/v2/work/variant.TensorFlowLite/greengrass_ml 이 위치의 greengrass_ml_tflite_venv 폴더는 에서 자습서: Lite를 사용하여 TensorFlow 샘플 이미지 분류 추론 수행 처음으로 추론 구성 요소를 배포할 때 생성됩니다.

Jetson Nano (Armv8)
  1. 다음 명령을 실행하여 카메라 설정을 테스트합니다.

    gst-launch-1.0 nvarguscamerasrc num-buffers=1 ! "video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1" ! nvjpegenc ! filesink location=test.jpg

    이렇게 하면 현재 test.jpg 디렉터리에 이름이 지정된 이미지가 캡처되고 저장됩니다.

  2. (선택 사항) 장치를 재부팅합니다. 이전 단계에서 gst-launch 명령을 실행할 때 문제가 발생하는 경우 기기를 재부팅하면 문제가 해결될 수 있습니다.

    sudo reboot
참고

Jetson Nano와 같은 Armv8 (AArch64) 기기의 경우 런타임 구성요소로 만든 가상 환경에서 추론 구성요소가 카메라에 액세스할 수 있도록 심볼릭 링크를 만들지 않아도 됩니다.

2단계: 기본 알림 주제 구독 확인

에서 자습서: Lite를 사용하여 TensorFlow 샘플 이미지 분류 추론 수행 AWS IoT MQTT 클라이언트가 해당 주제에 대해 TensorFlow Lite 이미지 분류 구성 요소가 게시한 MQTT 메시지를 감시하도록 AWS IoT 콘솔에서 구성하도록 구성했습니다. ml/tflite/image-classification AWS IoT콘솔에서 이 구독이 존재하는지 확인하십시오. 그렇지 않은 경우 Greengrass 코어 1단계: 기본 알림 주제 구독 디바이스에 구성 요소를 배포하기 전에 다음 단계에 따라 이 주제를 구독하십시오.

3단계: TensorFlow Lite 이미지 분류 구성 요소 구성을 수정하고 배포합니다.

이 단계에서는 TensorFlow Lite 이미지 분류 구성 요소를 구성하고 코어 장치에 배포합니다.

  1. AWS IoT Greengrass콘솔 탐색 메뉴에서 구성 요소를 선택합니다.

  2. 구성 요소 페이지의 퍼블릭 구성 요소 탭에서 aws.greengrass.TensorFlowLiteImageClassification을(를) 선택합니다.

  3. aws.greengrass.TensorFlowLiteImageClassification 페이지에서 배포를 선택합니다.

  4. 배포에 추가에서 다음 중 하나를 선택합니다.

    1. 이 구성 요소를 대상 디바이스의 기존 배포에 병합하려면 기존 배포에 추가를 선택한 다음 수정하려는 배포를 선택합니다.

    2. 대상 디바이스에서 새 배포를 생성하려면 새 배포 생성을 선택합니다. 디바이스에 기존 배포가 있는 경우 이 단계를 선택하면 기존 배포가 대체됩니다.

  5. 대상 지정 페이지에서 다음 작업을 수행합니다.

    1. 배포 정보 아래에서 친숙한 배포 이름을 입력하거나 수정합니다.

    2. 배포 대상 아래에서 배포 대상을 선택하고 다음을 선택합니다. 기존 배포 수정 시 배포 대상을 변경할 수 없습니다.

  6. 구성 요소 선택 페이지의 공용 구성 요소에서 aws.greengrass.TensorFlowLiteImageClassification 구성 요소가 선택되었는지 확인하고 다음을 선택합니다.

  7. 구성 요소 구성 페이지에서 다음을 수행하십시오.

    1. 추론 구성 요소를 선택하고 구성 요소 구성을 선택합니다.

    2. 구성 업데이트에서 병합할 구성 상자에 다음 구성 업데이트를 입력합니다.

      { "InferenceInterval": "60", "UseCamera": "true" }

      이 구성 업데이트를 통해 구성 요소는 장치의 카메라 모듈에 액세스하여 카메라로 촬영한 이미지를 추론합니다. 추론 코드는 60초마다 실행됩니다.

    3. 확인을 선택하고 다음을 선택합니다.

  8. 고급 설정 구성 페이지에서 기본 구성 설정을 유지하고 다음을 선택합니다.

  9. 검토 페이지에서 [Deploy] 를 선택합니다.

  1. deployment.json파일을 생성하여 TensorFlow Lite 이미지 분류 구성 요소의 배포 구성을 정의합니다. 이 파일은 다음과 같아야 합니다.

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }
    • targetArn 필드에서 targetArn을(를) 다음 형식으로 배포 대상으로 지정할 사물 또는 사물 그룹의 Amazon 리소스 이름(ARN)으로 바꿉니다.

      • 사물: arn:aws:iot:region:account-id:thing/thingName

      • 사물 그룹: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • 이 자습서에서는 구성 요소 버전 2.1.0을 사용합니다. aws.greengrass.TensorFlowLiteImageClassification구성 요소 객체에서 2.1.0을 다른 버전의 TensorFlow Lite 이미지 분류 구성 요소를 사용하도록 바꾸십시오.

    이번 구성 업데이트를 통해 구성 요소는 장치의 카메라 모듈에 액세스하여 카메라로 촬영한 이미지를 추론합니다. 추론 코드는 60초마다 실행됩니다. 다음 값을 바꾸십시오.

  2. 다음 명령을 실행하여 TensorFlow Lite 이미지 분류 구성 요소를 기기에 배포합니다.

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 단계에서는 구성 요소 로그를 확인하여 배포가 정상적으로 완료되었는지 확인하고 추론 결과를 확인합니다.

4단계: 추론 결과 보기

구성 요소를 배포한 후에는 Greengrass 코어 디바이스의 구성 요소 로그와 콘솔의 MQTT 클라이언트에서 추론 결과를 볼 수 있습니다. AWS IoT AWS IoT 구성 요소가 추론 결과를 게시하는 주제를 구독하려면 을 참조하십시오. 2단계: 기본 알림 주제 구독 확인

주제
    • AWS IoTMQTT 클라이언트 - 추론 구성 요소가 기본 알림 주제에 게시하는 결과를 보려면 다음 단계를 완료하십시오.

      1. AWS IoT콘솔 탐색 메뉴에서 Test, MQTT 테스트 클라이언트를 선택합니다.

      2. 구독에서 원하는 항목을 선택합니다. ml/tflite/image-classification

    • 구성 요소 로그 - 구성 요소 로그에서 추론 결과를 보려면 Greengrass 코어 장치에서 다음 명령을 실행합니다.

      sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    구성 요소 로그나 MQTT 클라이언트에서 추론 결과를 볼 수 없는 경우 배포가 실패했거나 코어 디바이스에 도달하지 못한 것입니다. 이는 코어 기기가 인터넷에 연결되어 있지 않거나 구성 요소를 실행하는 데 필요한 권한이 없는 경우 발생할 수 있습니다. 코어 장치에서 다음 명령을 실행하여 AWS IoT Greengrass Core 소프트웨어 로그 파일을 확인합니다. 이 파일에는 Greengrass 코어 기기 배포 서비스의 로그가 포함되어 있습니다.

    sudo tail -f /greengrass/v2/logs/greengrass.log

    자세한 설명은 머신 러닝 추론 문제 해결 섹션을 참조하세요.

    다음 단계

    이 자습서에서는 카메라로 촬영한 이미지에 대한 샘플 이미지 분류를 수행하는 사용자 지정 구성 옵션과 함께 TensorFlow Lite 이미지 분류 구성 요소를 사용하는 방법을 보여줍니다.

    공용 구성 요소의 구성을 사용자 지정하거나 사용자 지정 기계 학습 구성 요소를 만드는 방법에 대한 자세한 내용은 을 참조하십시오머신 러닝 구성 요소 사용자 지정.