Вопрос о частоте кадров на пикамере v2: Согласно документации picamera, следующие частоты кадров возможны для этого оборудования:
Resolution Aspect Ratio Framerates Video Image FoV Binning
1 1920x1080 16:9 0.1-30fps x Partial None
2 3280x2464 4:3 0.1-15fps x x Full None
3 3280x2464 4:3 0.1-15fps x x Full None
4 1640x1232 4:3 0.1-40fps x Full 2x2
5 1640x922 16:9 0.1-40fps x Full 2x2
6 1280x720 16:9 40-90fps x Partial 2x2
7 640x480 4:3 40-90fps x Partial 2x2
Однако при сборе изображений с помощью метода capture_sequence (который в документации упоминается как самый быстрый метод) я не приближаюсь к этим цифрам.
Для скорости 1280x720 максимальная частота кадров составляет 25 кадров в секунду, а для 640x480 — около 60.
Вычисления, которые я выполняю, не имеют значения, то есть их комментирование не имеет значения (вычисления выполняются достаточно быстро, чтобы не быть причиной проблемы). Если бы кто-нибудь увидел некоторые недостатки в том, что я пытаюсь сделать, и решил бы увеличить частоту кадров ... .
import io
import time
import picamera
#import multiprocessing
from multiprocessing.pool import ThreadPool
#import threading
import cv2
#from PIL import Image
from referenceimage import ReferenceImage
from detectobject_stream import detectobject_stream
from collections import deque
from datawriter import DataWriter
backgroundimage=ReferenceImage()
threadn = cv2.getNumberOfCPUs()
pool = ThreadPool(processes = threadn)
pending = deque()
Numberofimages=500
starttime=time.time()
#datawrite=DataWriter()
#datawrite.start()
def outputs():
stream = io.BytesIO()
Start=True
global backgroundimage
for i in range(Numberofimages):
yield stream
#print time.time()-starttime
#start = time.time()
while len(pending) > 0 and pending[0].ready():
timestamps = pending.popleft().get()
#print timestamps
if len(pending)<threadn:
stream.seek(0)
task = pool.apply_async(detectobject_stream, (stream.getvalue(),backgroundimage,Start,0))
pending.append(task)
Start=False
stoptime = time.time()
print stoptime-start
stream.seek(0)
stream.truncate()
#print i
with picamera.PiCamera() as camera:
#camera.resolution = (640, 480)
camera.resolution = (1280, 720)
camera.framerate = 60
camera.start_preview()
time.sleep(2)
start = time.time()
camera.capture_sequence(outputs(),format='bgr',use_video_port=True)
finish = time.time()
print('Captured images at %.2ffps' % (Numberofimages / (finish - start)))
заранее спасибо