পিকামেরার সাথে 0.025 সেকেন্ডে ছবি তোলার জন্য আপনার 80fps এর চেয়ে বড় বা সমান ফ্রেম-রেট দরকার। 80 টি বরং 40fps (যে 1 / 0.025 = 40 দেওয়া আছে) প্রয়োজন হওয়ার কারণটি হ'ল বর্তমানে এমন কিছু সমস্যা রয়েছে যার ফলে প্রতিটি অন্যান্য ফ্রেমটি মাল্টি-ইমেজ এনকোডারকে এড়িয়ে যেতে পারে ফলে কার্যকর ক্যাপচার হারটি ক্যামেরার ফ্রেমরেটের অর্ধেক হিসাবে বাতাসে আপ হয়ে যায়।
পাই এর ক্যামেরা মডিউলটি পরবর্তী ফার্মওয়্যারের ক্ষেত্রে 80fps সক্ষম (পিকামেরা ডক্সে ক্যামেরা মোডগুলি দেখুন ) তবে কেবলমাত্র একটি ভিজিএ রেজোলিউশনে (ফ্রেমেট্রেটস সহ উচ্চতর রেজোলিউশনের জন্য অনুরোধ> 30 এফপিএস) ভিজিএ থেকে অনুরোধিত রেজোলিউশনে উত্সাহিত করবে, তাই এটি এমন একটি সীমাবদ্ধতা আপনি এমনকি 40fps এও মুখোমুখি হবেন)। আপনি যে সমস্যার মুখোমুখি হবেন তা হ'ল এসডি কার্ডের গতি সীমাবদ্ধতা। অন্য কথায়, আপনার সম্ভবত কোনও নেটওয়ার্ক পোর্ট বা ইন-মেমরি স্ট্রিমের মতো দ্রুত কিছু ক্যাপচার করা দরকার (ধরে নিবেন যে সমস্ত চিত্র আপনার ক্যাপচার করতে হবে তা র্যামের সাথে মাপসই হবে)।
নিম্নলিখিত স্ক্রিপ্টটি আমাকে পাইরে ওভারক্লকিং সহ 900 মেগাহার্টজ সেট করে 38 ডলার (যেমন পিক প্রতি 0.025s এর উপরে) ক্যাপচার রেট দেয়:
import io
import time
import picamera
with picamera.PiCamera() as camera:
# Set the camera's resolution to VGA @40fps and give it a couple
# of seconds to measure exposure etc.
camera.resolution = (640, 480)
camera.framerate = 80
time.sleep(2)
# Set up 40 in-memory streams
outputs = [io.BytesIO() for i in range(40)]
start = time.time()
camera.capture_sequence(outputs, 'jpeg', use_video_port=True)
finish = time.time()
# How fast were we?
print('Captured 40 images at %.2ffps' % (40 / (finish - start)))
আপনি যদি প্রতিটি ফ্রেমের মধ্যে কিছু করতে চান তবে capture_sequence
আউটপুটগুলির তালিকার পরিবর্তে জেনারেটর ফাংশন সরবরাহ করেও এটি সম্ভব :
import io
import time
import picamera
#from PIL import Image
def outputs():
stream = io.BytesIO()
for i in range(40):
# This returns the stream for the camera to capture to
yield stream
# Once the capture is complete, the loop continues here
# (read up on generator functions in Python to understand
# the yield statement). Here you could do some processing
# on the image...
#stream.seek(0)
#img = Image.open(stream)
# Finally, reset the stream for the next capture
stream.seek(0)
stream.truncate()
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.framerate = 80
time.sleep(2)
start = time.time()
camera.capture_sequence(outputs(), 'jpeg', use_video_port=True)
finish = time.time()
print('Captured 40 images at %.2ffps' % (40 / (finish - start)))
মনে রাখবেন যে উপরের উদাহরণে, পরবর্তী ক্যাপচারের আগে প্রক্রিয়াজাতকরণ ক্রমিকভাবে ঘটে চলেছে (অর্থাত্ যে কোনও প্রক্রিয়াকরণ আপনি অবশ্যই পরবর্তী ক্যাপচারটি বিলম্ব করবেন)। থ্রেডিং ট্রিকগুলির সাহায্যে এই বিলম্বকে কমিয়ে আনা সম্ভব তবে এটি করার ক্ষেত্রে নির্দিষ্ট পরিমাণে জটিলতা জড়িত।
আপনি প্রক্রিয়াজাতকরণের জন্য আনডকোড হওয়া ক্যাপচারগুলিও দেখতে চাইতে পারেন (যা এনকোডিংয়ের ওভারহেডটি সরিয়ে জেপিইজিগুলি ডিকোডিং করে)। তবে, মনে রাখবেন যে পাই এর সিপিইউ ছোট (বিশেষত ভিডিওকোর জিপিইউয়ের সাথে তুলনা করা)। আপনি 40fps এ ক্যাপচার করতে সক্ষম হবেন, তবে উপরে উল্লিখিত সমস্ত কৌশলগুলি সহ আপনি 40fps এ এই ফ্রেমের কোনও গুরুতর প্রক্রিয়াকরণ করতে সক্ষম হবেন এমন কোনও উপায় নেই। এই হারে ফ্রেম প্রসেসিংয়ের একমাত্র বাস্তব উপায় হ'ল একটি দ্রুত কম্পিউটারে ফ্রেমগুলি দ্রুত মেশিনে প্রেরণ করা বা জিপিইউতে প্রক্রিয়াজাতকরণ করা।