Object detection using AWS Greengrass + QIoT Suite Lite + QuAI using Raspberry Pi Camera (English)

You need to prepare :

  1. AWS Accont

  2. Raspberry Pi

  3. USB webcam

Scenario-1

  • Camera > AWS Greengrass IoT device > AWS Greengrass Core > QIoT Suite Lite > QuAI > AWS Greengrass Core Lambda > AWS Cloud > AWS S3 bucket

Step-1 : Prepare AWS Greengrass Core

  1. Install AWS Greengrass App in QNAP NAS from App center

  2. Setup your AWS Greengrass Group & Core in QNAP AWS Greengrass App. Please refer this link for more details :
    https://www.qnap.com/en/how-to/tutorial/article/how-to-setup-aws-greengrass-on-qnap-nas/

  3. Create "SendGGImageToQIoT" & "QIoTIntegration" AWS Greengrass Lambda functions as shown below. For this Demo we are using Node.js based Lmabda function. You should also update it's configuration setting's Memeory limit and timeout. Please find Demo Lambda source codes inside this folder AWS_Greengrass_Lambda. (建立Lambda function請參考AWS說明文件 : https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html)

  4. Create a new device inside Greengrass Group Devices section as shown in the below image. Reference : https://docs.aws.amazon.com/greengrass/latest/developerguide/device-group.html
    # Notes : Please keep your device certificates, unzip it and upload to your Raspberry Pi.

  5. Prepare following 3 subscriptions lists

    • Greengrass IoT Device to "SendGGImageToQIoT:9" Lambda for Image Prediction. Setting infomation :

      • Source > GG_Camera
      • Target > SendGGImageToQIoT
      • Topic > cameraImage
    • "QIoTIntegration" Lambda function to IoT Cloud for upload predicted image to S3 Bucket. Setting infomation :

      • Source > QIoTIntegration
      • Target > IoT Cloud
      • Topic > #
    • Greengrass IoT Device to "QIoTIntegration:16" Lambda is trigger Lambda to start. Setting infomation :

      • Source > GG_Camera
      • Target > QIoTIntegration
      • Topic > triggerLambda

    Please refer the following image for these 3 subscriptions list source, destination and topic details

  6. Deploy the Greengrass Group.

  7. Verify Greengrass core daemon status in QNAP Greengrass App

  8. Trigger the QIoTIntegration Lambda function to receive QIoT Suite Lite message. So that, you have to download AWS IoT Python SDK > basicDiscovery.py and execute the following command. Please use GG_Camera device certificate files to trigger this Lambda function

  9. Run this Command :

    ​​​​python basicDiscovery.py -e <youtiothostname>.iot.<region>.amazonaws.com -r root-ca.pem -c XXXXXXXX.cert.pem -k XXXXXXXX.private.key -n GG_Camera -m publish -t triggerLambda -M "{'status':'start'}"
    

Step-2 : Setup AWS Greengrass IoT Device

Install AWSIoTPythonSDK package in your Raspberry Pi (Refer to the instructions here for installation : https://docs.aws.amazon.com/greengrass/latest/developerguide/IoT-SDK.html) and deploy the "send_image_AWSGG.py" source code from this folder RaspberryPi_side to Raspberry Pi and install capture software. Command is :

sudo apt update && sudo apt install fswebcam

Step-3 : Setup Demo QuAI

  1. 開啟NAS上的Container Station

  2. 切換到 Crtare 頁面,於搜尋列搜尋 "qeekdev/aipredict"

  3. 點選 Install 進行安裝

  4. 點擊 Advanced Settings 進入進階設定頁面

  5. 切換到 Network 頁面設定Port,參考下圖設定(若您有服務與此Port相衝突到,請自行更換),完成後請點擊 Create 建立容器 :

  6. 建立完成後,位於左邊的 Overview 功能項目裡,可檢視剛建立完成的新容器,該容器功能為AI辨識照片的服務。

  7. 瀏覽器進入 http://<IP>:8082/api/v1/ 進行測試,操作結果如下 :

其他佈署資訊可參考Dockerhub上的頁面 : https://hub.docker.com/r/qeekdev/aipredict/

Step-4 : Setup QIoT Suite Lite

Create a new IoT Application in QIoT Suite Lite from the Application template file LiveDemo.json import to QIoT Suite Lite or you may create a new IoT Application by yourself. To do so, please follow following steps

# Notes : You need to install “node-red-contrib-file-upload” module to your QIoT Suite Lite Rule, Reference to : How to install other modules in QIoT Suite Lite NodeRED?

  1. Create an IoT App and 2 Things : "cameraPi" and "AWSgreengrass"

  2. And create Thing Resource : cameraPi>"image" and AWSgreengrass>"resolve"


  3. Import rulesJson.json in Node-Red rule engine using Rules tab > Import > Clipboard option. After import you can see the following 2 rules flow

  4. Verify your dashboard

    • 點擊下圖紅框處測試 Dashboard 、 AI Sample Container 和 AWS Greengrass是否有正常運作

    • 觀看右側Debug欄位是否有出現正常log

    • 切換到Dashboard頁面是否有呈現數值及照片

Step-5 : Setup AWS cloud S3 bucket & Rules

  1. Create MoveImageToS3 Node.js Lambda function in AWS Lambda service. (Please find Demo Lambda source codes inside this folder AWS_Greengrass_Lambda)(建立Lambda function請參考AWS說明文件 : https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html)

  2. Create a new S3 bucket "qiotquaiggdemo" in AWS S3 service (建立S3 bucket請參考AWS說明文件 : https://aws.amazon.com/s3/getting-started/?nc1=h_ls)

  3. 參考下圖修改Lambda Function中的S3 Bucket設定,依據您的AWS IAM及S3上的設定填入accessKeyId、secretAccessKey、Bucket等資訊:

  4. Create a Act(rule) in AWS IoT to upload Image to S3 bucket using Rule's action "Invoke a Lambda function passing the message data"

  5. Declare MoveImageToS3 in the function name drop down and update the changes

Step-6 : Start the demo

Setup the camera in Raspberry Pi device and start the program by executing the following command :

python send_image_AWSGG.py -e <host>.iot.<region>.amazonaws.com -r root.ca.pem -c <GG_Camrea_Cert_pem_file> -k GG_Camrea_Cert_private_key_file -n GG_Camera -m publish -t "cameraImage" 
  • -e : Aws IoT Endpoint (In IoT Core home page, under Settings, make a note of the value of Endpoint.)
  • -r : Root CA Path
  • -c : Thing Ceritificate Path
  • -k : Thing Private key Path
  • -n : Thing Name

Step-7 : Verify the demo

  1. In QIoT Suite Lite Dashboard :

  2. In AWS IoT Cloud :

  3. In AWS S3 :

Scenario-2

  • Camera > QIoT Suite Lite IoT device > QIoT Suite Lite > QuAI > AWS Greengrass Core Lambda > AWS Cloud > S3 bucket

The steps in this scenario are same as Scenario-1, just that the application running on Raspberry Pi is different. Please refer QIoT_device_QuAI_Greengrass section to setup the device.

參考步驟 :

  1. Install dependency library and software

    ​​​​pip install paho-mqtt
    ​​​​sudo apt update && sudo apt install fswebcam
    
  2. Follow in Scenario-1> "Step-1" to "Step-5"

  3. Upload RaspberryPi_side floder to Raspberry Pi

  4. Download "resourceinfo.json" from QIoT Suite Lite cameraPi thing and put resourceinfo.json under the "/res" folder

  5. Run command :

    ​​​​python main.py
    
  6. Follow in Scenario-1> "Step-7"

tags: Tutorial
Select a repo