차곡차곡 성 쌓기
article thumbnail

배경

동기들과 프로젝트를 진행하는 중 얼굴 인식을 통한 화원관리 기능을 구현하기 위해 기존에 존재하는 여러 얼굴 인식 모델을 찾아봤었다. 이때 내가 구현해야 되는 것은 Face recognition으로 인식이 아닌 식별이었다. 얼굴 인식에는 face detectoin, fece recogntion 등 용어가 존재하는데 헷갈리므로 용어 정리를 하고가자!

1. Face Detection

사람의 얼굴 자체를 감지하는 일이다. 사진이나 영상에서 사람이 얼굴이 있는지, 어디에 있는지 찾는 작업이다.

 

2. Face Recognition

누구의 얼굴인지를 식별하는 작업이다. 이 중 속하는 개념으로 face verification과 face indentification이 있다.

 

• Face verification

입력값이 1:1 매칭으로  특정인물인지 아닌지 판단하는 일이다. 

 

• Face Identification (해야 되는 것!)

입력값이 학습된 여러 얼굴 중 어떤 얼굴에 해당되는지 알아내는 일이다. 

 

이 중 내가 구현해야 되는 것은 구체적으로 Face Identification였다. 지도 교수님의 조언으로 얼굴 인식 모델 중 사전 학습이 되어 있는 FaceNet 모델을 알게된 후 프로젝트에 적용하기 위해 열심히 구글링 했다. 

 

 

 

문제

대부분의 얼굴 인식 모델은 파이썬으로 활용되기 때문에 JavaScript 기반의 라이브러리가 정말 없다. 본 프로젝트는 JavaScript으로 개발이 되어야 했기 때문에  어떻게든 찾아야 했다. 그 중 2가지를 찾아었는데  첫번째는 'face-api.js'이다.

 

1. 'face-api.js

하지만 이 모델은 Face Detetion 용으로 얼굴 감지 전용 모델이다. Pass...

 

GitHub - justadudewhohacks/face-api.js: JavaScript API for face detection and face recognition in the browser and nodejs with te

JavaScript API for face detection and face recognition in the browser and nodejs with tensorflow.js - GitHub - justadudewhohacks/face-api.js: JavaScript API for face detection and face recognition ...

github.com

 

 

2. node-facenet

또 찾아낸 것이 node js 기반의 node-facenet 라이브러리다. 참고로 해당 프로젝트를 개발할 당시 정말 웹에 대해 아무것도 모르는  무지성 3학년이었다...  js문법만 공부했지 node js가 뭔지 어떻게 쓰는지 하나도 몰랐다. 그래도 기능 구현을 하기 위해 튜토리얼 보면서 처음 npm 설치하고 따라 했는데 아무리 해도 안되길래 왜 안되지?? 하고 있었는데 README를 자세히 보니 윈도우 지원 안했다..🥲

팀원들 중 아무도 맥북을 쓰는 사람도 없었기에 결국 다른 방법을 찾기로 했다. 이 경험 이후 리드미를 더 자세히 보고 있다.

 

GitHub - huan/node-facenet: Solve face verification, recognition and clustering problems: A TensorFlow backed FaceNet implementa

Solve face verification, recognition and clustering problems: A TensorFlow backed FaceNet implementation for Node.js. - GitHub - huan/node-facenet: Solve face verification, recognition and clusteri...

github.com

 

 

3. 결국 Python으로

아무리 찾아도 js 기반의 FaceNet 라이브러리를 찾을 수 없었다.(당시 2022년 기준으로 지금은 존재할 수도 있다.) 결국 이미 라이브러리가 많은 python으로 프로젝트 중 얼굴 인식 부분만 개발하기로 결정했다. 또한 서로 다른 언어들로 구성된 모듈들이 통신하기 위해 MQTT 프로트콜을 도입했다. 

 

MQTT 프로토콜
IoT 표준 프로토콜 (Publish-Subscribe) 기반의 메시지 송수신 프로토콜

 

 

MQTT 프로토콜을 도입했던 이유는 첫 째로 해당 프로젝트는 여러 라즈베리 파이를 이용한 프로젝트여서 IoT간 통신할 수 있는 프로토콜이 필요하여 동시에 사용할 수 있는 장점이 있었다.두 번째는 사용해본 경험이 있기 때문이었다. 

 

 

MQTT의 장점

  • publish / subscribe 패턴을 사용하여 디바이스 간 이벤트 기반 통신에 적합
  • 지속적인 연결을 통해 데이터를 실시간으로 주고 받을 수 있다. 반면 HTTP는 각 요청마다 새로운 연결을 맺저야 하므로 비교적 많은 overhead가 발생
  • IoT 기기 간의 효율적이고 경량의 통신에 적합

=> 작은 규모의 데이터 전송 및 실시간 통신에 MQTT 적합.

 

 

 

많이 참고했던 글은 아래 링크의 게시물이었다. 다음 게시물에서 파이썬에서 어떻게 얼굴 인식을 구현했는지 다룰 것이다.

 

케라스의 FaceNet을 이용한 얼굴 인식 시스템 개발 방법

원글 Jason Brownlee 번역 JKIsaacLee 최근 수정일 2019년 10월 2일

jkisaaclee.kro.kr

 

 


 

 

728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!