프로그래밍 언어
python openCV로 외부 IP cam 영상 제어(onvif)
EHOzlO
2022. 11. 16. 15:28
이번에 일정 시간에 한 번씩 외부에 있는 영상을 사진으로 저장해야 하는 일이 생겼다.
다른 건 비용이 비싸서 최대한 저렴하게 알아본 결과
IP Cam + LTE모뎀으로 조합했다.
IP Cam은 7만원대, LTE모뎀은 16만원대?였나.. 요금제는 고정IP로 매월 3만원대....
더 싸게 할 수도 있긴하던데... 과제비 꿀꺽ㅋ
(카메라 더 비싼걸 살 걸 그랬다... 발열이 있네?;;)
우선 카메라 설정부터 하여 'ispy'라는 프로그램으로 PC에서 접속 확인을 했다.
아래는 셋팅 및 영상 확인 순서.
영상은 파이썬, 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 파일로 저장했다.
일정 시간마다 접속해서 저장만 하면 끝ㅋ