Face Recognition Terminal
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.3
Python
: 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
웹캠에 보여지는 얼굴을 인식해서 나이와 성별을 예측하는 화면입니다.
끗
댓글남기기