ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 파일로 저장했다.

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

     

Designed by Tistory.