누가 로그인하고 장치를 사용했는지 기록을 유지해야 했습니다.
비디오 캡처 장치를 만들어 봅시다.
import cv2
import datetime
saveDir="저장경로"
t = str(datetime.datetime.now())(:19)
t = t.replace('-', '_')
t = t.replace(' ', '_')
t = t.replace(':', '_')
fName="/" + t + '.avi' + saveDir
먼저 저장 경로를 미리 설정해 둡시다.
디바이스 사용자의 영상을 녹화하기 위해서는 사용시간이 중요합니다.
현재 시간을 기록하여 파일명으로 사용하겠습니다.
year_month_day_hour_minute_second 형식으로 저장되는데 위의 코드는 효율적이지 않다고 생각합니다.
내부 datetime 메소드가 있을 수 있지만 검색이 번거로워 제가 아는대로만 작성했습니다.
avi, mp4 등 여러 확장자(컨테이너)가 있지만 저는 mp4를 사용하겠습니다.
OpenCV의 VideoWriter를 사용하기 위해서는 fourcc, fps, framesize 등을 설정해야 합니다.
fourcc = cv2.VideoWriter_fourcc(*'X264')
fps = cap.get(cv2.CAP_PROP_FPS)
w = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
record = cv2.VideoWriter(fName, fourcc, fps, w, h)
fourcc는 4자리 코드입니다.
사용할 코덱을 결정하려면 아래 표를 참조하십시오.
H.264 코덱을 사용 중이고 코덱 libopenh264를 열 수 없다는 오류가 발생하면 OpenCV 패키지에 코덱이 포함되어 있지 않음을 의미합니다.
사용을 원하시면 아래 Github 페이지에서 다운받아 사용하세요.
https://github.com/cisco/openh264/releases/tag/v1.6.0.
코덱을 설정한 후 입력 영상에 따라 초당 프레임 수(fps), 영상 높이, 폭 등을 수신합니다.
누군가 장치에 로그인했다고 가정하고 이제 비디오를 녹화해 봅시다.
if cap.isOpened() :
while True :
ret, img = cap.read()
if ret:
cv2.imshow('img', img)
cv2.moveWindow('img', 100, 100)
key = cv2.waitKey(10)
# 종료 키
if key == ord('q') or key == ord('Q'):
break
else :
print('end of record')
break
cap.release()
record.release()
cv2.destroyAllWindows()
isOpened는 개체가 초기화되었는지 여부를 나타내는 부울 값을 반환합니다.
cap.read()에서 ret는 비디오 프레임이 입력되면 부울을 반환합니다.
img의 경우 이미지의 프레임이 numpy 배열 형식으로 저장됩니다.
waitKey 아래의 종료 키 부분은 편의를 위한 것입니다.
while 문을 가리고 메모리를 해제합니다.
다른 하드웨어 또는 요청으로 인해 지연이 있는 경우 카메라 또는 비디오 녹화가 중단 없이 계속될 수 있습니다.
자유롭게 게시하십시오.
이제 소켓 통신을 통해 영상을 날리거나 특정 폴더에 직접 저장하면 기기 사용 기록과 함께 영상을 얻을 수 있다.
이렇게 하면 Raspberry Pi에 연결하여 홈 카메라, 애완동물 시점 카메라 등을 만들 수 있습니다.