python openCV로 외부 IP cam 영상 제어(onvif)

프로그래밍 언어 2022. 11. 16. 15:28

이번에 일정 시간에 한 번씩 외부에 있는 영상을 사진으로 저장해야 하는 일이 생겼다.

 

다른 건 비용이 비싸서 최대한 저렴하게 알아본 결과

IP Cam + LTE모뎀으로 조합했다.

IP Cam은 7만원대, LTE모뎀은 16만원대?였나.. 요금제는 고정IP로 매월 3만원대....

더 싸게 할 수도 있긴하던데... 과제비 꿀꺽ㅋ

(카메라 더 비싼걸 살 걸 그랬다... 발열이 있네?;;)

 

 

 

우선 카메라 설정부터 하여 'ispy'라는 프로그램으로 PC에서 접속 확인을 했다.

아래는 셋팅 및 영상 확인 순서.

ID와 비번, 지금은 로컬 네트워크라 192대역으로 IP 입력함
이렇게 되면 완료

 

 

 

영상은 파이썬, openCV로 제어했다.

 

openCV는 알다시피

> pip install opencv-python

 

코드는 복붙이 정석이지..ㅋㅋㅋㅋ

import cv2
import datetime
import os


def writeVideo():
    #현재시간 가져오기
    currentTime = datetime.datetime.now()
   
    #RTSP를 불러오는 곳
    video_capture = cv2.VideoCapture('rtsp://userID:password12@192.168.100.98:554/stream1')
   
    # 웹캠 설정
    video_capture.set(3, 1280)  # 영상 가로길이 설정
    video_capture.set(4, 720)  # 영상 세로길이 설정
    fps = 12
    # 가로 길이 가져오기
    streaming_window_width = int(video_capture.get(3))
    # 세로 길이 가져오기
    streaming_window_height = int(video_capture.get(4))  
   
    #현재 시간을 '년도 달 일 시간 분 초'로 가져와서 문자열로 생성
    fileName = str(currentTime.strftime('%Y %m %d %H %M %S'))

    #파일 저장하기 위한 변수 선언
    path = f'C:\\Users\\USER\\Desktop\\Projects\\05 Sewage Level Meter\\SourceCode\\python\\Cam\\sourceCode\\{fileName}.avi'
   
    # DIVX 코덱 적용 # 코덱 종류 # DIVX, XVID, MJPG, X264, WMV1, WMV2
    # 무료 라이선스의 이점이 있는 XVID를 사용
    fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
   
    # 비디오 저장
    # cv2.VideoWriter(저장 위치, 코덱, 프레임, (가로, 세로))
    out = cv2.VideoWriter(path, fourcc, fps, (streaming_window_width, streaming_window_height))

    while True:
        ret, frame = video_capture.read()
        # 촬영되는 영상보여준다. 프로그램 상태바 이름은 'streaming video' 로 뜬다.
        cv2.imshow('streaming video', frame)
       
        # 영상을 저장한다.
        out.write(frame)
       
        # 1ms뒤에 뒤에 코드 실행해준다.
        k = cv2.waitKey(1) & 0xff
        #키보드 esc 누르면 종료된다.
        if k == 27:
            cv2.imwrite(f'C:\\Users\\USER\\Desktop\\Projects\\05 Sewage Level Meter\\SourceCode\\python\\Cam\\sourceCode\\shot.png', frame)
            break
    video_capture.release()  # cap 객체 해제
    out.release()  # out 객체 해제
    cv2.destroyAllWindows()

if __name__ == "__main__":
    writeVideo()

 

https://pcseob.tistory.com/25 (소스 참고. 감사합니다ㅋㅋ)

 

 

소스에서

video_capture = cv2.VideoCapture('rtsp://userID:password123@192.168.100.98:554/stream1')

이 부분의 주소를 ispy 사진 밑에서 두번째 란에 ID와 주소를 넣으면 된다.

 

 

실행 결과>

 

 

esc 키 누르면 끝나는 지점에 마지막 Frame을 png 파일로 저장했다.

일정 시간마다 접속해서 저장만 하면 끝ㅋ

 

설정

트랙백

댓글