티스토리 뷰

3.12. 파이카메라 순환 스트림에 기록

이는 비디오를 스트림에 녹화하는 것과 비슷하지만, picamera 라이브러리가 제공하는 특별한 종류의 인 메모리 스트림을 사용합니다. PiCameraCircularIO 클래스는 링 버퍼 기반 스트림, 특히 비디오 녹화를 구현합니다. 이렇게하면 비디오의 마지막 n 초를 포함하는 메모리 내 스트림을 유지할 수 있습니다. 여기서 n은 비디오 레코딩의 비트 전송률과 스트림의 기본 링 링 버퍼 크기로 결정됩니다.


이러한 종류의 저장 장치의 일반적인 사용 사례는 동작을 감지하고 모션이 감지 된 위치의 비디오만 디스크에 기록하려는 보안 응용 프로그램입니다. 이 예는 write_now 함수가 True를 반환 할 때까지 20초의 비디오를 메모리에 유지합니다 (이 구현에서는 무작위이지만 이를 일종의 동작 감지 알고리즘으로 바꿀 수 있습니다). write_now가 True를 반환하면 스크립트는 10초 후에 기다립니다 (버퍼에 이벤트 전과 10초 후의 비디오가 포함되도록). 그리고 대기 상태로 돌아 가기 전에 결과 비디오를 디스크에 씁니다.


import io import random import picamera def motion_detected(): # Randomly return True (like a fake motion detection routine) 무작위로 True를 반환합니다 (가짜 모션 감지 루틴과 유사). return random.randint(0, 10) == 0 camera = picamera.PiCamera() stream = picamera.PiCameraCircularIO(camera, seconds=20) camera.start_recording(stream, format='h264') try: while True: camera.wait_recording(1) if motion_detected(): # Keep recording for 10 seconds and only then write the # stream to disk 10 초 동안 기록을 유지 한 다음에만 디스크에 스트림을 기록 camera.wait_recording(10) stream.copy_to('motion.h264') finally: camera.stop_recording()

위의 스크립트에서 특별한 copy_to () 메소드를 사용하여 스트림을 디스크 파일에 복사합니다. 이것은 순환 버퍼에서 첫 번째 키 프레임의 시작을 찾는 것과 같은 세부 사항을 자동으로 처리하고 특정 바이트 수 또는 초를 작성하는 것과 같은 기능을 제공합니다.

참고: 스트림에 적어도 20 초 분량의 동영상이 있음에 유의하십시오. 이는 단지 추정치입니다. 비디오를 녹화하기 위해 H.264 인코더가 지정된 비트 전송률 (기본적으로 17Mbps)보다 적게 필요하면 스트림에서 20 초 이상의 비디오를 사용할 수 있습니다.


댓글
최근에 달린 댓글
글 보관함
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Total
Today
Yesterday
    뽀로로친구에디
    최근에 올라온 글