CCTV 설치, FastAPI+OpenCV 녹화, 스트리밍 서버 제작과정 (1) - 사전준비

Yany Choi·2023년 1월 2일
0

펜션

목록 보기
1/3

CCTV를 왜 설치했나

사실 난 인생의 대부분을 아파트에서 살았다... 어릴 때 잠깐 미국에 살때는 단독주택 (2층)에 살기도 하고 콘도에 살기도 하고 그랬었는데 그때는 좀 너무 어릴때라 치안에 대한 걱정 이런건 없을 때였다. 한국에 온지 올해로 13년 됐는데 그 이후에는 아파트에서 살고 있다.

그러다가 대학생이 되고 나서 방학마다 펜션 알바(?)를 하기로 하면서 친척의 전원주택 펜션에 주말마다 와서 일하고 있다.
그런데 동네가 정말 한적하고 밤에는 엄청 어두워서 무섭다... 한번은 보일러실 문 닫는걸 까먹어서 밤에 체크하러 갔다가 안에서 고양이 (남는 잔반 먹는 짬타이거)가 튀어나와서 깜짝 놀라는 바람에 뒤로 자빠지기도 했다...

그리고 결정적으로 펜션으로 사용하는 집은 개량형 한옥 같은 집인데, 문이 다 나무라 문단속도 잘 안된다... 그래서 CCTV를 설치하기로 마음을 먹었는데...............


엄청 비싸다. 게다가 중국산이다.

마침 저번에 궁금해서 샀던 IP카메라가 있기도 하고, 집에 있는 남은 노트북들에 실습한답시고 다 우분투 서버 운영체제로 다 설치해버렸기 때문에 이걸 재활용해서 써먹기로 했다.

사전조사

카메라

일단 IP카메라는 야외용으로 이미 가지고 있었다... 산 이유는 모르겠는데 아무튼 있었다.
모델은 TP링크의 Tapo C310인데, 아는 사람은 알겠지만 중국산이다. 게다가 카메라를 설치해보니 카메라를 세팅하려면 무조건 Tapo 앱을 설치해서 연결해야 하는데, 이 과정에서 비디오가 계속 Tapo 쪽의 클라우드로 넘어간다.
게다가 서버로 스트리밍되는 비디오를 계속 받으려면 RTSP라는 프로토콜로 받아야 하는데, 이걸 사용하려면 앱으로 ID랑 비밀번호를 설정해야한다. 결국 앱으로 초기설정 안하고 사용하는 방법은 없으니 개인정보보호에 민감한 사람은 국산 카메라로 사는걸 추천한다...

그리고 카메라는 카메라마다 설정이 다 다르기 때문에 이 글에서는 카메라로 RTSP 프로토콜을 받을 수 있음을 가정하고 그 이후 절차부터 설명할거다.

개발언어, 프레임워크

마침 OpenCV와 Python을 짬뽕하면 굉장히 쉽게 영상결과물을 출력하고 보관할 수 있다는걸 알았다. 게다가 전 회사에서 FastAPI로 restAPI를 구성했어서 Python으로 백엔드 API를 완성하고, 이걸 React로 만든 앱으로 실시간 스트리밍과 지난 영상 목록을 올려서 지난 영상 다시보기도 가능하게 만들고자 했다.

그리고 restAPI를 구현할 코드와는 별도로 스트림을 계속 받아서 영상으로 저장할 프로세스도 만들어야 하기 때문에 웹 서버와 연결하지 않고 파일로만 저장하는 서비스를 계획했다.

사실 프론트엔드는 그렇게 복잡하기 않아서 React를 굳이 쓸 이유는 없었지만, 최근에 자주 쓰기도 했고 TS로 작성할거니까 익숙한게 장땡이지 싶어 그냥 채용했다.

서버

서버는 12년된 노트북. 요즘은 안나오는 LG의 Xnote 시리즈이다. 내가 초딩일때 엄마가 쓰던 거였는데 오랜만에 보니까 반가웠다.
우분투는 저번에 설치해놨고, 이미 학교에서 하는 프로젝트 때문에 이곳저곳에 쓰고 있었기 때문에 node랑 npm, yarn, NGINX는 다 설치되어있었다. NGINX는 그냥 apt로 설치가능하니까 필요한 사람들은 직접 구글링해서 찾아보면 되겠다.

준비 끝...?

이제 본격적으로 작성을 시작한다!

Git: https://github.com/YanyChoi/cctv-system

profile
생각하자

0개의 댓글