如何在QNAP NAS上使用AWS Greengrass ML
準備工作
- 準備USB WebCam並接上NAS
- 請先完成AWS Greengrass基本設定,參考此教學文章 :
如何在 QNAP NAS 設定 AWS Greengrass
安裝MXNet
參照AWS Greengrass ML文件 : https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-console.html步驟二下載MXNet Intel平台軟體,上傳至NAS Public資料夾:
SSH進入NAS,移動安裝檔並解壓縮(依據安裝磁碟區不同路徑可能也會有所不同)
cd /share/CACHEDEV1_DATA/.qpkg/Greengrass/package/greengrass mv /share/Public/ggc-mxnet-v1.2.1-python-intel.tar . tar -xzf ggc-mxnet-v1.2.1-python-intel.tar
進入Greengrass Container安裝MXNet
system-docker exec -ti greengrass bash cd greengrass/ggc-mxnet-v1.2.1-python-intel/ apt update && apt install sudo unzip ./mxnet_installer.sh -u
執行範例
編輯範例程式
參照AWS Greengrass ML文件步驟二下載MXNet Raspberry平台(執行範例會用到)軟體
解壓縮
ggc-mxnet-v1.2.1-python-raspi.tar.gz
,在解壓縮greengrass-ml-squeezenet-object-classification-raspi-python.tar.gz
編輯
load_model.py
,將底下註釋掉 :''' #Captures an image from the PiCamera, then sends it for prediction def predict_from_cam(self, capfile='cap.jpg', reshape=(224, 224), N=5): if self.camera is None: self.camera = picamera.PiCamera() stream = io.BytesIO() self.camera.start_preview() time.sleep(2) self.camera.capture(stream, format='jpeg') # Construct a numpy array from the stream data = np.fromstring(stream.getvalue(), dtype=np.uint8) # "Decode" the image from the array, preserving colour image = cv2.imdecode(data, 1) return self.predict_from_image(image, reshape, N) '''
並新增 :
#Captures an image from the webcam, then sends it for prediction def predict_from_webcam(self, capfile='cap.jpg', reshape=(224, 224), N=5): print "capture.......\n" cap = cv2.VideoCapture(0) flag, image = cap.read() print "read.......\n" return self.predict_from_image(image, reshape, N)
完成後儲存
參照AWS Greengrass ML文件步驟五建立Lambda Function
編輯Greengrass Group
在Group設定頁面上,選擇Resource
在Local Resources選項中,選擇Add local resource
在Create a local resource頁面上,使用以下值:
Property Value Resource name video Resource type Device Device path /dev/video0 Group owner file access permission Automatically add OS group permissions of the Linux group that owns the resource 在Lambda function affiliations下,點擊Select,選擇greengrassObjectClassification,選擇Read and write access訪問權限,然後點擊Done
剩下上傳model步驟參考AWS Greengrass ML文件 uploading the squeezenet.zip model package to Amazon S3. 段落操作
設定Subscription跟Deploy也請參考:AWS Greengrass ML文件步驟8、9,以及後續測試步驟
(其他)設定AWS Greengrass停止重啟MXNet Library資料不會被移除
預設只要在NAS重開機或是在App Center停止後,Greengrass Container就會被刪除,暫時不被刪除方法請參考如下步驟 :
修改
/share/CACHEDEV1_DATA/.qpkg/Greengrass/Greengrass.sh
檔案(依據安裝磁碟區不同路徑可能也會有所不同) :將Start區間的這行:
COMPOSE_HTTP_TIMEOUT=300 ${DOCKER_COMPOSE} -p $PROJECT_NAME -f $QPKG_PATH/docker-compose.yml up -d >> $QPKG_PATH/compose.log 2>&1
改成 :
COMPOSE_HTTP_TIMEOUT=300 ${DOCKER_COMPOSE} -p $PROJECT_NAME -f $QPKG_PATH/docker-compose.yml up --no-recreate -d >> $QPKG_PATH/compose.log 2>&1
以及Stop區間這行 :
COMPOSE_HTTP_TIMEOUT=300 $DOCKER_COMPOSE -p $PROJECT_NAME -f $QPKG_PATH/docker-compose.yml down >> $QPKG_PATH/compose_down.log 2>&1
改成 :
COMPOSE_HTTP_TIMEOUT=300 $DOCKER_COMPOSE -p $PROJECT_NAME -f $QPKG_PATH/docker-compose.yml stop >> $QPKG_PATH/compose_down.log 2>&1
保存後即可
留言
張貼留言
發表一下意見,互動一下唄!