kookmin-sw / 2019-cap1-2019_4

Flex Ads to implement advertising system in offline market
MIT License
10 stars 7 forks source link

Rekognition의 Time Latency 를 고려한 Inotify S3, Rekognition Trigger 개발 #53

Closed james-sungjae-lee closed 5 years ago

james-sungjae-lee commented 5 years ago

현재 구현된 Inotify 기반의 Event Trigger 는 Rekognition 에서 인식될 때 까지의 Latency 이후에 다음 순차 Event 를 처리하기 때문에 시간이 맞지 않는 문제가 발생한다.

2019_05_07-3

이를 해결하기 위해서 Rekognition 에서 인식된 시점과 가장 가까운 시간에 생성된 Cropped Face Image 를 분석하도록 개발할 필요가 있다.

기본적인 아이디어로, Filename 과 Time 의 두 가지 리스트 자료구조를 생성한 다음

각각의 리스트에 Filename 과 해당 시점의 Time 값을 append 를 이용하여 데이터를 삽입한다.

Rekognition 에서 인식된 user id 가 반환되는 순간, 해당 시점의 Time 값을 가져와, Time List 에 존재하는 가장 가까운 Time 값을 찾아낸다. (혹은 가장 마지막에 append 된 filename 을 가져오는 것으로 대체 가능할 것 같다.)

그 다음 번 s3 업로드 및 Rekognition 분석은 해당 Filename 을 기준으로 진행된다

james-sungjae-lee commented 5 years ago

List 등을 사용하는 등의 다양한 방법으로 접근하였지만, 하나의 프로세스 내에서 제어되는 inotify 의 특성상 해결 불가능 하였다

다양한 시도 끝에 Python 의 Multithreading 을 이용하여 동 시간대에 서로 다른 Process 를 작동하게 함으로써 구현이 가능했다

관련 inotify 테스트 코드는 하단 링크에 작성되어 있다

https://github.com/kookmin-sw/2019-cap1-2019_4/blob/face_recognition/src/face_recognition/inotify_multithreading.py

james-sungjae-lee commented 5 years ago

멀티스레딩을 이용한 구현에 관해 그림으로 정리하면 아래와 같다.

IMG_0760