Video Input from a Raspberry Pi B+ Camera Module
In developing my project, FingerSpark, I found a number of conflicting sources on how to access the video feed from the Raspberry Pi B+ using OpenCV, many of which do not work. The following guide is designed to help you quickly and efficiently work recording video into your project. Please note that my methodology was tested using Python 2 with OpenCV.
Step 1: Import OpenCV into your Python File
Assuming that you've successfully installed OpenCV on your Raspberry Pi B+, you need to include
import cv2 at the top of your .py project file. This will allow you to use the OpenCV methods necessary to access the camera module's video feed.
Step 2: Specify Location, Length, and FPS
Next, I would suggest creating global variables for:
1. The location on the Raspberry Pi where you would like to save your video clip, which will include the clip's name (it's usually best to use an absolute path in case you end up moving your project file)
2. The intended duration (in milliseconds) of your video clip
3. The number of frames per second in your video (I successfully tested values up to 90 FPS)
For example, under the previously described import statement:
Step 3: Pass Video Preferences to Raspberry Pi's OS
Next, you need to include code that sends your video preferences to the Pi's operating system, so it can correctly format your video. For example:
stem='raspivid -w 640 -h 480 -fps '
os.system(stem+vid_fps+' -t '+vid_len+' -o '+vid_loc)
Step 4: Capture the Video
Use the VideoCapture method in OpenCV with the video location as the only parameter to capture the video from the camera module. The line of code you write should look like this:
cap = cv2.VideoCapture(vid_loc)
Step 5: Process the Video
read() method on the
cap object you created. To iterate through individual frames, use a
while loop, with a break condition for when the frame position is greater than the total number of frames that you want in your video.
cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) will return the number of the current frame in the video.
Step 6: End the Video
When you have finished iterating through the frames of your video (after your
while loop), call
cap.release() to end the recording.