오늘은 python과 opencv를 이용해서 ip 카메라(cctv)로부터 영상 신호를 받는 방법에 대해 공유하고자 합니다.
우선 usb 카메라(흔히 우리가 부르는 웹캠)를 통해 영상 신호를 받을 때는 이런 코드가 사용됩니다. python+opencv를 사용해보신 분에게는 아주 익숙한 한 줄일 것입니다.
capture = cv2.VideoCapture(0)
그런데 만약 ip 카메라로부터 신호를 받을 때는 다음과 같은 코드를 사용해야 합니다. 필요한 url은 각자 상황에 따라 다를 것입니다. 사용하시는 ip 카메라의 메뉴얼 등의 문서를 참고하시면 됩니다. 192.168.0.33:554/h264major는 제 상황에 맞는 코드라는 것을 기억해주세요.
capture = cv2.VideoCapture('rtsp://192.168.0.33:554/1/h264major')
보통 ip 카메라의 영상을 스트리밍할 때는 위와 같이 rtsp 프로토콜이 사용됩니다. rtsp는 real time streaming protocol의 약어로 그대로 번역하자면 실시간 스트리밍 프로토콜입니다. 프로토콜이라는 것은 통신규약이니까 rtsp는 간단히 실시간으로 동영상을 송수신할 때 지켜야할 규약이라고 생각하면 될 것 같습니다.
만약 username과 password가 필요한 경우에는 아래와 같은 방식으로 코딩해주면 됩니다.
capture = cv2.VideoCapture('rtsp://username:password@192.168.0.33:554/1/h264major')
usb 카메라만 연결해서 사용해보다가 ip 카메라도 연결해보니 재밌네요.
(이 글은 2022-04-26에 마지막으로 수정되었습니다)
관련 글
[1] [python] 외장 웹캠을 사용할 때 cv2.VideoCapture(1)로 했는데 안되면?
참고자료
[1] https://stackoverflow.com/questions/49978705/access-ip-camera-in-python-opencv
'Dev > python' 카테고리의 다른 글
[pandas] 특정 컬럼 값 기준으로 데이터프레임 정렬하기, sort_values 메소드 (0) | 2022.04.26 |
---|---|
[pandas] 판다스 데이터프레임 loc, at, iloc, iat 메소드 비교 (0) | 2022.04.24 |
[python] 파이썬 리스트에 최대 몇 개의 요소가 들어갈 수 있을까? (10) | 2022.04.19 |
[python] UnicodeDecodeError: 'cp949' codec can't decode byte 0xed in position 135: illegal multibyte sequence 에러 해결법 (0) | 2022.04.18 |
[flask+jinja2] 반올림하기, round 필터 (0) | 2022.03.19 |
[python+plotly] 그래프 x축, y축 값 범위 설정하기 (0) | 2022.03.18 |
[python+plotly] px.scatter 플롯에 추세선 넣기 (0) | 2022.03.17 |
[pyqt5] 야구 중계에 스트라이크 존이 제공되지 않을 때 시청자를 위한 가이드 앱 (2) | 2022.03.16 |