1. Overview#
이번 문서에서는 local에서 실시간으로 촬영한 얼굴 이미지를 Watson Visual Recognition
으로 분석하여 web UI로 볼 수 있게 구성해 보겠습니다.
다음 문서를 직접 해보고 작성한 문서입니다.
Chapter 6. Face Recognition Terminal: link
2. Prerequisites#
IBM Cloud 계정 : link
IBM Watson 계정 : link
Python설치 : link
Node js설치 : link
Local Test version
Node js
: v10.15.3Python
: v3.7.3
3. Architecture#
프로젝트의 구조는 아래 사진과 같습니다.
- Local에서
Webcam
으로 이미지를 촬영 - Local device의 정보(
org_id
,deviceType
,mac주소
)를IoT Platform
으로 Publish - 이미지파일은
COS
에 PUT Node-RED
에서 메세지를subscribe
하고 있음Node-RED
에서COS
의 이미지를 GET- GET한 이미지를
Watson Visual Recognition
으로 분류 - 결과를
Node-RED
의 web base UI로 뿌려줌
4. STEP#
Create IoT Platform#
Cloud Foundry App인 IoT Platform을 생성해줍니다.
리소스생성 > Internet of Things Platform 스타터
생성하게 되면 아래사진과 같이 iotf-service
와 cloudant
가 서비스로 붙게 됩니다.
이 두 서비스를 이어주고 메세지를 전달해주며 우리가 앞으로 만들 프로그램의 중추역할을 할 코어는 해당 cloud foundry app의 Node-RED
로 구현되어있습니다.
Node-RED
에 몇가지 파일을 추가하기 위해 로컬환경에서 편집을 진행할 수 있도록 Continuous-Delivery
를 추가하도록 하겠습니다.
Configure Continuous-Delivery#
절차는 다음 링크를 참조해주세요.
https://gruuuuu.github.io/simple-tutorial/icos-api/#continuos-delivery
주의해야할 점은 저장소 유형을 “복제"로 해야한다는 것입니다.
git clone을 받아두고 auth까지 되면 다음단계로 넘어가 주세요.
add Node Dependency#
로컬에 clone을 받고나면 directory구조는 다음과 같이 보일것입니다.
dependency를 추가하기 위해 package.json에 다음 라인을 추가해줍시다.
"dependencies": {
...
"node-red-node-random":"0.x",
"node-red-node-smooth":"0.x",
"node-red-contrib-web-worldmap":"1.x",
"node-red-node-geofence":"*",
"node-red-contrib-slacker":"*",
"node-red-node-base64": "*",
"node-red-contrib-play-audio": "*",
"node-red-dashboard":"node-red/node-red-dashboard",
"request":"~2.74.0",
"bluebird": "^3.3.3",
"knox": "latest",
"fs": "latest",
"fs-extra": "latest",
"node-uuid": "latest"
},
그 다음, node-red-contrib-cos.zip의 압축을 풀어서 nodes폴더 하에 옮겨둡니다.
Push하고 Delivery Pipeline
에서 deploy가 성공한 것을 확인할 수 있습니다.
이제 필요한 dependency를 모두 추가하였으니 Node-RED
에서의 Flow를 생성하여야 합니다.
Node-RED Flow#
앱 URL방문을 클릭합니다.
계정을 생성해준뒤, default로 생성되어있는 flow들을 삭제합니다.
그 뒤, face_recognition_nodered_flow.txt를 복사해서 노드로 가져오기 합니다.
불러온 노드의 모습은 다음과 같습니다. 위의 전체 구조와 비교해서 보신다면 더 잘 이해가 되실겁니다.
큰 틀은 완성이 되었습니다. 이제 각 서비스들을 구성해주어야 합니다.
Create Cloud Object Storage#
먼저 로컬에서 생성한 이미지를 저장하기 위해 Cloud Object Storage
를 생성해줍니다. 추가로 사용할 버킷도 미리 생성해 줍니다.
참고 -> link
인증정보 중 AccessKey와 SecretKey는 다른곳에 적어둡니다.
Configure IoT Service#
iotf-service
의 dashboard를 열어주세요.
해당 서비스로 메세지를 보낼 장치를 등록할 것입니다.
디바이스 추가를 클릭합니다.
디바이스를 추가하기 위해선 해당 디바이스의 MAC Address
가 필요합니다.
윈도우에서 MAC주소는 다음 명령어를 통해 알 수 있습니다.
$ getmac /v
물리적 주소라고 적힌 부분이 MAC주소이고, ‘-‘을 빼고 12자리 캐릭터를 디바이스 ID로 적어주시면 됩니다.
디바이스 유형은 Laptop으로 적어줍니다.
저 두가지 항목만 적어주시고 완료버튼을 눌러 디바이스를 추가해줍니다.
디바이스를 추가하고 정보를 확인해보면 다음과 같이 나옵니다.
조직ID와 인증토큰은 다른곳에 잘 저장해둡시다.
로컬에서 iotf-service
로 메세지를 보낼때 사용하게 됩니다.
이제 iotf-service
의 구성은 마무리되었고, 핵심모듈중 하나인 watson visual recognition
서비스를 추가하여야 합니다.
Add Watson Visual Recognition service#
리소스 추가 > visual검색 > Visual Recognition선택
서비스를 생성합니다.
인증정보를 새로 생성하고, 다른 서비스와의 연결을 위해 apikey
를 저장해둡니다.
여기까지 각 서비스들의 구성은 끝나게 됩니다. 이제 따로따로 떨어져있는 서비스들을 Node-RED를 사용해 하나로 엮어야 합니다.
큰 틀은 위에서 구성하였으니 각 서비스 노드만 수정해주면 됩니다.
Fix Node-RED#
노드의 흐름을 잘 따라와주세요.
첫번째로 내 디바이스에서 이벤트가 발생하였을때 iotf-service
에서 이벤트를 수집하는 노드입니다.
내 디바이스가 무엇인지 식별하기 위해 장치의 Mac Address를 Device Id에 작성해줍니다.
반드시 iotf-service
에서 등록했던 장치의 Mac Address여야합니다.
두번째로는 로컬에서 이미지를 저장하고 Visual Recognition
에서 식별할 이미지를 가져올 장소인 COS노드를 수정해줍니다.
cos-config의 노드타입 추가를 선택하고 연필버튼을 클릭해 줍니다.
COS만들때 생성했던 인증정보를 토대로 Access Key
와 Secret Key
, Endpoint
를 적어줍니다. 다음으로 연속적으로 불러올 이미지인 campic.jpg
를 ObjectName으로 적어주고 해당 이미지가 저장되어있을 장소인 Bucket이름을 적어주면 됩니다.
frame단위로 저장할 이미지의 이름:
campic.jpg
해당이미지는 n초단위로 같은이름으로 COS에 저장되고,Visual Recognition
에서 분류되기때문에 거의 실시간의 detection이 가능하다.
마지막으로 COS에서 가져온 이미지를 식별해줄 Watson Visual Recognition
을 연결해줍시다. Face Detection
노드를 클릭하여 API Key
와 Service Endpoint
를 입력해줍니다.
각 항목은 Visual Recognition의 인증정보(apikey
와 url
)를 참조하여 작성하시면 됩니다.
여기까지 각 노드의 구성은 마무리가 되었고 이제 로컬에서 웹캠으로 촬영하는 단계만 남았습니다!
face_detection_terminal.py#
웹캠을 실행하고, iotf-service
에 메세지를 보내고, COS에 이미지를 보내는 프로그램입니다.
소스코드는 이곳
당연히 서비스에 연결하려면 인증정보를 입력해야 합니다.
iotf-service
에 연결하기 위해 수정해야하는 코드입니다.
각 라인에 올바른 값을 넣어주시면 됩니다.
organization은
iotf-service
의 일반설정에서 확인할 수 있습니다.
COS에 연결하기 위해 수정해야하는 코드입니다.
각 라인에 올바른 값을 넣어주세요.
endpoint_url은 COS인증정보의 url을 참조하시면됩니다.
수정이 끝났다면 실행에 필요한 라이브러리들을 받아야 합니다.
paho-mqtt
$ pip install paho-mqtt
OpenCV
$ python -m pip install opencv-python
boto3
aws s3 연결을 하기위해 aws에서 제공하는 S3 SDK$ pip install boto3
(주의) 아무 이미지를 다운받아서 tmp/campic.jpg로 저장해두고 프로그램을 실행시켜야합니다.
프로그램을 실행시키고 Node-RED의 디버그창을 확인해보면 다음과 같이 각 노드에서의 메세지들을 확인할 수 있습니다.
또한 다음 링크로 접속하게되면 UI창을 확인할 수 있습니다.
https://{APP_NAME}.mybluemix.net/ui
웹캠에 보여지는 얼굴을 인식해서 나이와 성별을 예측하는 화면입니다.
끗