티스토리 뷰
3.2. 파이카메라 스트림으로 캡처
이미지를 파일과 유사한 객체 (socket (), io.BytesIO 스트림, 기존 열린 파일 객체 등)로 캡처하는 것은 사용하는 capture () 메소드의 출력으로 객체를 지정하는 것만 큼 간단합니다. :
from io import BytesIO from time import sleep from picamera import PiCamera # Create an in-memory stream my_stream = BytesIO() camera = PiCamera() camera.start_preview() # Camera warm-up time sleep(2) camera.capture(my_stream, 'jpeg')
이 형식은 위의 경우에 명시적으로 지정됩니다. BytesIO 객체에는 파일 이름이 없으므로 카메라는 사용할 형식을 자동으로 알아낼 수 없습니다.
한 가지 명심해야 할 점은 (파일 이름 지정과 달리) 캡처 후에 스트림이 자동으로 닫히지 않는다는 것입니다. picamera는 스트림을 열지 않았기 때문에 스트림을 닫지 않을 것이라고 가정합니다. 다만, 오브젝트에 flush 메소드가있는 경우, 이것은 캡처 리턴하기 전에 불려갑니다. 한 번 캡처가 반환되면 개체가 여전히 닫혀 있어야하지만 다른 프로세스에서 데이터에 액세스 할 수 있어야 합니다.
from time import sleep from picamera import PiCamera # Explicitly open a new file called my_image.jpg my_file = open('my_image.jpg', 'wb') camera = PiCamera() camera.start_preview() sleep(2) camera.capture(my_file) # At this point my_file.flush() has been called, but the file has # not yet been closed my_file.close()
위의 경우 카메라가 파일 이름에 대해 my_file 객체를 조사 할 때 형식을 지정할 필요가 없었습니다 (구체적으로 제공된 객체에서 이름 속성을 찾습니다). BytesIO와 같은 Python에 내장 된 스트림 클래스를 사용할뿐만 아니라 사용자 정의 출력을 구성 할 수도 있습니다.
댓글