- 원룸 건물 관리 중 쓰레기 처리 규칙을 위반하는 상황이 발생하여 하루치 CCTV를 돌려봐야 할 상황이 발생했다.
- 많은 시간이 소요되고, 눈 건강에도 악영향이 있다. 이번 경우가 아니어도 CCTV를 봐야 할 일이 종종 생긴다.
- 제공되는 플레이어에는 이벤트 감지 시에만 녹화가 되긴 하지만, 카메라 범위에 걸치는 도로의 움직임도 다 이벤트로 감지하여 효용성이 부족하다.
- 단순히 언제 사람이 등장하는지만 알면 되기 때문에 복잡한 기술이 필요하지 않고, 필요한 기능만큼의 도구를 쉽게 구할 수 없었다.
- opencv-python, mss, numpy, Tkinter를 사용했다.
- 우선 cctv 업체에서 제공하는 플레이어에서 재생되는 영상에서 특정 영역을 선택하여 이벤트를 잘 탐지하는지 확인하였다.
- mss로 모니터를 선택하여 스크린샷을 찍은 후, cv2로 관심 영역을 선택한다.
- 이후 일정 시간(0.5초)마다 스크린샷을 찍어서 이전 스크린샷과 다른 점이 있는지 확인한다.
- 이벤트가 언제 발생했는지 확인하기 위해서 플레이어에서 시간이 나오는 영역을 추가로 지정하여 이벤트 발생 시 해당 영역을 가지고 오도록 했다.
- 사용 대상이 부모님이기 때문에 데스크탑에서 GUI로 쉽게 다룰 수 있도록 Tkinter로 단순하게 만들었다.
-
CCTV 영상이 상시 녹화가 아니라, 이벤트 녹화여서 중간중간 끊겨있는 부분이 있었다. 해당 부분에는 파란색 그라데이션 배경이 카메라 대신 나왔다.
- 이전 스크린샷과 비교해서 이벤트를 감지하기 때문에 파란 화면으로 바뀌는 것도 이벤트로 감지되었다.
- 화면이 파란색 계열 그라데이션임을 이용해서 해당 영역의 RGB 값 중 R 값의 평균이 55이하인 경우는 영상이 아닌 것으로 판단했다.
- R이 제일 높은 부분이 54 정도인 것을 확인했고, 영역을 부분으로 나눠서 그라데이션에 따른 R 평균값 변화도 살펴봤다.
- '녹화된 영상 없음'이라는 하얀색 안내 문구가 있었는데, 하얀색이라서 R값이 255가 되는 부분도 있지만, 그렇게 작게 관심 영역을 설정할 일이 없기도 하고, 평균을 내면 충분히 임계값으로 설정한 55를 넘지 않았다.
-
스크린샷 찍을 모니터를 선택할 때, 개발 환경에서는 모니터가 두개였지만, 부모님이 사용하실 환경에서는 모니터가 하나기 때문에 모니터 리스트의 마지막을 기본값으로 설정했고, UI를 최대한 단순화하기 위해서 모니터 선택 기능을 뺐다.
-
이벤트 발생 시각을 기록할 방법으로 영역을 하나 더 설정하도록 했는데, OCR이나 다른 기술은 과한 느낌이 있어서 사용하지 않았다. 사용할 컴퓨터 사양이 안 좋아서 필수가 아닌 기술을 추가하지 않았다.
-
이벤트 발생 시 해당 사진과 시각을 모아서 화면에 표시해주는데, 저장 기능은 만들지 않았다. 저장 기능이 필수도 아니고, 저장이 필요하다면 특정 영역보다는 전체 화면 영역이 필요하고, 이 프로그램의 기능은 돌려 볼 지점을 대신 찾아주는 것이기 때문에 돌려보면서 원하는 장면을 따로 캡처하는 것이 더 편하다고 생각했다.
- 관심 영역을 여러개 지정하기.
- 현재는 하나의 이벤트에서 연속된 스크린샷을 모두 이벤트로 감지해서 화면에 표시하는데, 최초 이벤트 발생과 연속으로 발생한 이벤트들은 하나의 사건이기 때문에 표시에서 제외하는 것이 UX 측면에서 더 좋을 것 같다.
- 만약 필요하다면 이벤트 발생 시각을 파일로 내보내서 정리해 두거나 추가로 활용할 수 있게 하기.
