- RTSP 스트리밍을위한 DVR 준비
- Raspberry Pi 준비
- Raspberry Pi에 OpenCV 및 기타 라이브러리 설치
- CCTV에서 RTSP 비디오 스트리밍을위한 Raspberry Pi 프로그래밍
- Raspberry Pi CCTV 뷰어 테스트
오늘날 대부분의 작업장 및 상업용 건물에는 활동을 모니터링하기 위해 설치된 CCTV 감시 시스템이 있습니다. 그러나 종종 관련 당국이나 보안 담당자가 의심스러운 활동을 찾기 위해 모든 카메라의 라이브 피드를 지속적으로 모니터링하기가 어렵습니다. 컴퓨터 비전과 기계 학습이 빠른 단계로 발전함에 따라 CCTV 시스템을 더 스마트하게 만들 때가되었습니다. 이 기사에서는 Python 및 OpenCV를 사용하여 Raspberry pi로 RTSP 스트리밍을 통해 기존 DVR (예: Hikvision DVR)에서 비디오 피드를 가져 오는 방법에 대해 설명합니다. 이 정보를 얻으면 이러한 비디오 피드에서 OpenCV의 힘을 활용하여 특정 물체를 감지하고 차량 번호판을 읽고 얼굴 인식 등을 읽을 수 있습니다!
이 튜토리얼에서는 건물에 이미 설치되어 있는 Hikvision 4 채널 CCTV DVR 을 사용하겠습니다. 4 개의 카메라 화면을 모두 Raspberry로 스트리밍하고 사용자가 필요에 따라 각 채널 사이를 이동할 수있는 5 인치 터치 스크린 디스플레이에 표시 할 것입니다. 나는 OpenCV의 힘을 고려할 때 이것을 많이 알지 못하며 모션 감지, 나팔 비디오 경고, 사람 추적 등으로 확장 할 계획이 있지만 다른 튜토리얼에서는이 모든 것을 남겨 두겠습니다.
RTSP 스트리밍을위한 DVR 준비
라즈베리 파이 하드웨어와 파이썬 코드에 대해 알아보기 전에 DVR이 RTSP를 지원하는지, 어떻게 접근하는지 확인하는 것이 중요합니다. 절차가 각 DVR 유형에 따라 다르고 많은 히트와 시도를해야하기 때문에 대부분의 시간을 여기에 머물 렀습니다. 하지만 일단 이것을 알아 내면 매번 매력처럼 작동합니다.
먼저 DVR 시스템의 사용자 이름과 비밀번호를 알고 있는지 확인하고 인터넷에 연결되어 있는지 확인하십시오. 또한이 튜토리얼에서는 로컬 네트워크에서만 RTSP를 스트리밍 할 것입니다. 고정 IP가있는 경우 포트 포워딩을 수행하고 다른 네트워크에 대해서도 동일하게 수행 할 수 있습니다. 그러나이 튜토리얼과 관련하여 로컬 네트워크 내에서 모든 작업을 수행 할 것입니다.
1 단계: DVR의 IP 주소를 찾습니다. DVR이 인터넷에 연결되면 자체 IP 주소가 할당됩니다. 이 IP 주소는 라우터 구성 페이지 또는 DVR 화면 자체에서 찾을 수 있습니다 (모니터가 DVR에 연결되어 있다고 가정). 내 공유기의 IP 주소는 http://192.168.11.110/ (안전상의 이유로 변경됨)
2 단계: 원하는 웹 브라우저를 열고 IP 주소를 입력하고 Enter 키를 누릅니다. DVR 로그인 페이지로 이동합니다. DVR의 사용자 이름 (내가 변경됨)과 비밀번호를 입력해야하는 곳. 기본 사용자 이름은 admin이지만 알고 있어야하는 암호입니다. 내 DVR 로그인 화면은 아래와 같으며 외관이 다를 수 있습니다.
3 단계: 성공적으로 로그인 한 후 DVR에서 RTSP 포트 번호를 찾으십시오. 대부분의 경우 기본값은 554이지만 변경 될 수 있습니다. 여기에있는 동안 구성 설정을 사용하여 RTSP를 활성화하는 옵션이 있는지 확인하십시오. 그렇지 않은 경우 건너 뛸 수 있습니다. DVR에 따라 절차가 다르기 때문에 시간을 보내셔야합니다.
4 단계: RTSP 링크를 준비합니다. 기본 RTSP 링크는 다음 형식이됩니다.
rtsp: //
다시 말하지만, DVR 유형에 따라 다르며 Google을 사용하여 자신에게 적합한 것을 찾을 수 있습니다. 일한 사람은 아래 형식을 가졌으므로 이것을 시도해 볼 수도 있습니다.
rtsp: //
어디
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
5 단계: VLC에서 스트림을 재생하여 RTSP 연결이 작동하는지 확인합니다. DVR과 동일한 네트워크에 연결된 컴퓨터에 VLC를 설치하고 실행 한 다음 Ctrl + N 을 눌러 네트워크 스트리밍을합니다. 아래와 같이 URL을 입력하고 OK를 누릅니다.
RTSP 링크가 정상적으로 작동하면 VLC 플레이어에서 CCTV의 라이브 스트림이 아래와 같이 표시됩니다. 오류가 발생하면 올바른 링크를 찾아야합니다.
이 작업을 마치면 더 이상 DVR에 대해 이야기 할 필요가 없습니다. Raspberry pi를 사용할 수 있습니다.
Raspberry Pi 준비
다음으로 5 인치 디스플레이로 라즈베리 파이를 설정해야합니다. 우리가 이미 여러 번 다루었으므로 자세한 내용은 다루지 않겠습니다. 지침을 위해 다음 기사를 읽을 수 있습니다.
- Raspberry Pi 시작하기
- 5 인치 디스플레이와 Raspberry Pi 연결
우리는 Debian Buster OS가 실행중인 Raspberry Pi 3 B +를 사용하고 있습니다. 가능한 경우 Pi 4를 사용하고 열 싱크 또는 팬과 같은 냉각 옵션을 추가하는 것도 좋은 생각 일 수 있습니다. 나는 지금까지 어떤 냉각 절차도 따르지 않았고 내 설정은 다음과 같습니다.
Raspberry Pi에 OpenCV 및 기타 라이브러리 설치
다음 단계는 Raspberry Pi에 OpenCV를 설치하는 것입니다. 이전에 Raspberry pi에서 OpenCV를 컴파일하는 방법에 대해 논의했습니다.
- Raspberry Pi에 OpenCV 설치
- OpenCV 시작하기
위의 링크를 따라 Cmake를 사용하여 OpenCV를 컴파일하거나 apt-get 메소드로 설치할 수 있습니다. OpenCV 프로그래밍이 매우 진지하지 않은 경우 나중에 권장합니다. OpenCV를 설치하기 위해 다음 명령을 사용했습니다.
sudo apt 업데이트 sudo apt install python3-opencv
프로그램에서는 "cvui"라이브러리를 사용하여 4 개의 화면 사이를 탐색 할 수있는 두 개의 버튼이있는 기본 UI를 만들 것입니다. cvui를 설치하려면 아래 명령을 따르십시오.
Python3 pip 설치 cvui
두 패키지를 모두 설치했으면 메인 프로그램에 들어갈 수 있습니다. 설치된 두 패키지가 모두 Pi의 명령 터미널에서 가져 오기 위해 작동하는지 확인하십시오.
CCTV에서 RTSP 비디오 스트리밍을위한 Raspberry Pi 프로그래밍
이 프로젝트의 전체 프로그램은이 페이지 끝에서 찾을 수 있습니다. 이에 대한 설명은 다음과 같습니다. 필요한 헤더 파일을 포함하여 프로그램을 시작합니다.
수입 cv2 수입 cvui
프로그램의 다음 부분은 약간의 편집이 필요합니다. DVR의 사용자 이름과 비밀번호를 입력해야합니다. 5 인치 디스플레이의 경우 너비와 높이가 각각 800과 480이므로 같은 값을 입력했습니다.
rtsp_username = "admin"rtsp_password = "aswinth347653"너비 = 800 높이 = 480 cam_no = 1
계속해서보아야 할 카메라 번호를 변경할 때마다 사용할 카메라 만들기라는 기능이 있습니다.
def create_camera (채널): rtsp = "rtsp: //"+ rtsp_username + ":"+ rtsp_password + "@ 192.168.29.100: 554 / Streaming / channels /"+ channel + "02"cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # 폭 ID 번호는 3 cap.set (4, 480) # 높이 ID 번호는 480 cap.set (10, 100) # 밝기 ID 번호는 10qq 리턴 캡
메인 while 루프 내부에는 캡처 장치에서 프레임을 읽어 전체 화면으로 변환하는 프로그램이 있습니다. 우리 프로그램의 디스플레이 창은 화면으로 호출됩니다.
success, current_cam = cam.read () dim = (너비, 높이) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2.namedWindow ('screen', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('screen ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
그 다음에는 화면에 배치 될 두 개의 버튼에 대한 코드가 있습니다. cvui.button 명령 은 필요한 위치에 버튼을 배치하는 데 사용되고 cvui.mouse 명령 은 마우스 클릭을 감지하는 데 사용됩니다. 우리는 두 가지를 가지고 있는 경우 두 개의 버튼에 대한 문이 버튼을 클릭하면, 각각의 경우 문이 실행됩니다.
if (cvui.button (Full_frame, width-100, height-40, "Next") and cvui.mouse (cvui.CLICK)): print ("Next Button Pressed") cvui.init ('screen') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Full_frame, width-200, height-40, "Previous") 및 cvui.mouse (cvui. CLICK)): print ("이전 버튼 누름") cvui.init ('screen') cam_no = cam_no-1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
if 문 내에서 버튼을 기반으로 cam_no 개수를 늘리거나 줄인 다음 기존 캠을 삭제하고 위에서 설명한 기능을 사용하여 새 캠을 만듭니다. 또한 cvui.init 는 UI 화면을 새로 고치려면 매번 호출 해야합니다.
코드의 마지막 부분은 프레임을 출력으로 표시하고 q를 누르면 출력 화면을 종료하는 것입니다. 키 입력을 기다렸다가 키가 'q'이면 모든 창을 파괴합니다.
cv2.imshow ('screen', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
Raspberry Pi CCTV 뷰어 테스트
코드 테스트는 매우 간단합니다. 파이의 전원을 켜고이 페이지 하단에 제공된 Python 코드를 실행합니다. RTSP 링크가 작동하려면 올바른 자격 증명을 입력했는지 확인하십시오. 안전한 편을 원한다면 buster OS에 사전 설치된 Pi에서 VLC 플레이어를 사용해 볼 수도 있습니다.
VLC에서 작동하는 경우 파이가 동일한 네트워크에 연결되어 있고 RTSP 링크가 정상적으로 작동하는지 확인할 수 있습니다. 그런 다음이 페이지 하단에있는 프로그램을 열고 Python IDE를 사용하여 실행합니다. 자격 증명을 올바르게 입력하면 다음 화면이 표시됩니다. 하단에 두 개의 버튼이있는 라이브 카메라 피드를 보여줍니다.
화면에 TFT 터치 스크린이 있으므로 "이전"및 "다음"버튼을 터치하여 다음 카메라로 이동할 수 있습니다. 이 프로그램은 처음 4 개의 카메라 사이를 반복하도록 작성되었으며, DVR에 4 개 이상의 카메라가 연결되어 있으면 쉽게 수정할 수 있습니다.
이 프로젝트의 전체 작업은 아래 링크 된 비디오에서 찾을 수 있습니다. 튜토리얼을 즐겼기를 바라며 궁금한 점이 있으면 유용한 정보를 배웠기를 바랍니다. 댓글 섹션에 남겨 주시거나 포럼을 사용하여 다른 요구 사항을 게시 할 수도 있습니다. 또한이 설정에 모션 감지 및 비디오 저장 기능을 추가 할 계획이므로 이에 대해서도 계속 지켜봐주십시오.