요즘 신종 코로나19(COVID-19) 로 인하여 국내외가 어지럽습니다. 한국에서도 많은 수의 확진자가 발생하고 있으며, 공항, 병원 등을 비롯한 많은 곳에 열감지 카메라들이 설치되고 있습니다. 하지만 많은 곳에서 카메라 옆에 사람이 상주하여 카메라를 계속 모니터링 하고있습니다.

저는 IT 개발자로서 알고있는 지식으로 더 편하고, 빠르고, 정확하게 판단하고 알려주는 서비스를 만들고 싶다는 생각을 하게 되었습니다.

doorman

Thermal camera

더 화소수가 많고 성능이 좋은 카메라는 비싸고, 특히 중국에서 배송이 되야 하므로, 즉시 구할수 있는 8x8 의 해상도를 가진 열화상 카메라를 구매했습니다.

AMG8833 센서를 부착한 Adafruit AMG8833 IR Thermal Camera Breakout 입니다.

amg8833

python + pygame 으로 만든 샘플 코드 입니다.

Raspberry pi

처음에는 AWS Deeplens 가 고려되었으나, 열감지 카메라가 GPIO 를 통해 정보를 받으므로 다른 대안을 찾아야 했습니다. 그래서 책상 서랍에 있던 라즈베리파이를 선택 했습니다.

다행이도 라즈베리파이 케이스가 레고호환이어서 라즈베리 카메라와 열감지 카메라를 레고 거치대에 설치할 수 있었습니다.

raspberrypi

라즈베리파이에 python 으로 된 프로그램을 설치하고, Amazon S3 Bucket 에 사진을 업로드 할수 있는 권한도 부여 했습니다.

자세한 코드는 여기를 참고 하세요.

Slack App

슬랙에 알림을 받거나, 슬랙에서 사용자 이름을 지정 하기 위하여 설정법 에 따라 Slack App 을 만들어 줬습니다.

slack-04

Lambda Backend

Amazon S3 Bucket 에 사진이 업로드 되면 Trigger 에 의하여 AWS Lambda Function 이 호출되야 합니다. 그리고 Lambda function 에서는 Amazon Rekognition 으로 안면인식을 수행하여 사람별로 Amazon DynamoDB 에 저장 합니다.

이번에는 Serverless framework 을 이용하여 개발 및 배포를 했습니다.

자세한 코드는 여기를 참고 하세요.

Amplify Frontend

DynamoDB 에 저장된 이름과 사진을 웹을 통해 서비스 합니다. 이 앱은 AWS Amplify 를 이용하여 개발 및 배포를 했습니다.

Forntend 는 JavascriptReact 를 사용 했습니다. 그리고 Rest API 를 사용하여 Backend 에서 만든 DynamoDB 를 조회 하였고, 이 역시 AWS Lambda Function 으로 생성 하였습니다.

인식은 하였으나 이름을 모르는 사람은 Unknown 으로 저장 하였고, 이름을 저장 하는 폼을 위해 Amazon Cognito 를 사용해서 인증을 처리 했습니다. Amplify 를 통해 손 쉽게 로그인 및 가입 페이지를 직접 코딩하지 않고도 적용할 수 있었습니다.

doorman-web

자세한 코드는 여기를 참고 하세요.

Architecture

doorman-arch

감사합니다.