📖 Scenario: You have a Raspberry Pi with a camera module attached. You want to take a clear photo and save it as a file on your Raspberry Pi.
🎯 Goal: Build a simple Python program that captures a still image using the Raspberry Pi camera and saves it as photo.jpg.
📋 What You'll Learn
Use the picamera library to control the camera
Create a camera object
Capture a still image and save it as photo.jpg
Print a message confirming the photo was taken
💡 Why This Matters
🌍 Real World
Taking photos with a Raspberry Pi camera is useful for projects like security cameras, time-lapse photography, or nature monitoring.
💼 Career
Understanding how to control hardware like cameras programmatically is valuable for roles in embedded systems, robotics, and IoT development.
Progress0 / 4 steps
1
Import the picamera library and create a camera object
Write code to import the picamera library and create a camera object called camera using picamera.PiCamera().
Raspberry Pi
Hint
Use import picamera to bring in the camera library. Then create the camera object with camera = picamera.PiCamera().
2
Set the resolution for the camera
Add a line to set the camera resolution to (1024, 768) by assigning this tuple to camera.resolution.
Raspberry Pi
Hint
Use camera.resolution = (1024, 768) to set the picture size.
3
Capture a still image and save it as photo.jpg
Use the capture method of camera to take a photo and save it as photo.jpg.
Raspberry Pi
Hint
Call camera.capture('photo.jpg') to take and save the photo.
4
Print confirmation message
Add a print statement to display the message "Photo saved as photo.jpg" after the photo is captured.
Raspberry Pi
Hint
Use print("Photo saved as photo.jpg") to show the message.
Practice
(1/5)
1. What is the main purpose of the capture() method in the PiCamera library when capturing still images?
easy
A. To take a photo and save it to a file
B. To start the camera preview on the screen
C. To stop the camera and release resources
D. To adjust the camera's brightness settings
Solution
Step 1: Understand the role of capture()
The capture() method is used to take a still photo with the Raspberry Pi camera.
Step 2: Identify what capture() does with the photo
It saves the captured image to a file path you specify, storing the photo on disk.
Final Answer:
To take a photo and save it to a file -> Option A
Quick Check:
capture() saves image = C [OK]
Hint: Remember: capture() means take and save a photo [OK]
Common Mistakes:
Confusing capture() with start_preview()
Thinking capture() only shows image without saving
Mixing capture() with camera stop methods
2. Which of the following is the correct syntax to start the camera preview using PiCamera in Python?
easy
A. camera.startPreview()
B. camera.preview.start()
C. start.camera_preview()
D. camera.start_preview()
Solution
Step 1: Recall the PiCamera method to start preview
The correct method to start the camera preview is start_preview() called on the camera object.
Step 2: Check method name and syntax
The method is lowercase with underscore: camera.start_preview(). Other options have wrong casing or order.
Final Answer:
camera.start_preview() -> Option D
Quick Check:
Correct method name = A [OK]
Hint: Use underscores and lowercase for PiCamera methods [OK]
Common Mistakes:
Using camelCase instead of snake_case
Reversing method and object order
Adding extra dots or missing underscores
3. What will be the output of this code snippet when run on a Raspberry Pi with a camera connected?
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(2)
camera.capture('/home/pi/image.jpg')
camera.stop_preview()
medium
A. The program throws an error because sleep is too short
B. The camera preview shows for 2 seconds, then saves image.jpg
C. No image is saved because stop_preview() is called too early
D. The preview never starts because start_preview() is missing
Solution
Step 1: Analyze the preview and sleep timing
The preview starts, then the program waits 2 seconds allowing the camera to adjust.
Step 2: Capture and save the image after preview
After waiting, the image is captured and saved to '/home/pi/image.jpg', then preview stops.
Final Answer:
The camera preview shows for 2 seconds, then saves image.jpg -> Option B
Quick Check:
Preview + sleep + capture = A [OK]
Hint: Preview then sleep before capture ensures good image [OK]
Common Mistakes:
Assuming sleep is too short causes error
Thinking stop_preview() prevents saving
Believing start_preview() is missing
4. Identify the error in this code snippet that tries to capture an image:
from picamera import PiCamera
camera = PiCamera()
camera.capture('photo.jpg')
camera.start_preview()
medium
A. The preview should start before capturing the image
B. The capture method requires a full file path, not just filename
C. PiCamera must be imported after starting preview
D. The camera object is not created correctly
Solution
Step 1: Check the order of preview and capture
The preview should start before capturing to allow camera to adjust and focus.
Step 2: Identify the mistake in code order
Here, capture is called before start_preview(), which can cause poor image quality or errors.
Final Answer:
The preview should start before capturing the image -> Option A
Quick Check:
Preview before capture = B [OK]
Hint: Always start preview before capture for proper image [OK]
Common Mistakes:
Calling capture before preview starts
Assuming filename alone is invalid path
Thinking import order affects capture
5. You want to capture multiple images with unique filenames using PiCamera in a loop. Which code snippet correctly saves images as 'image1.jpg', 'image2.jpg', and 'image3.jpg'?
hard
A. for i in range(1,4):
camera.capture('image{}.jpg'.format(i+1))
B. for i in range(3):
camera.capture('image{i+1}.jpg')
C. for i in range(1,4):
camera.capture(f'image{i}.jpg')
D. for i in range(1,4):
camera.capture('image' + i + '.jpg')
Solution
Step 1: Understand how to create unique filenames in a loop
Using an f-string with f'image{i}.jpg' correctly inserts the loop variable into the filename.
Step 2: Check each option for correct syntax and output
for i in range(1,4):
camera.capture(f'image{i}.jpg') uses f-string with range(1,4) producing 'image1.jpg', 'image2.jpg', 'image3.jpg'. for i in range(3):
camera.capture('image{i+1}.jpg') uses single quotes without f-string, so filename is literal. for i in range(1,4):
camera.capture('image' + i + '.jpg') tries to add string and int without conversion, causing error. for i in range(1,4):
camera.capture('image{}.jpg'.format(i+1)) adds 1 to i incorrectly, producing 'image2.jpg', 'image3.jpg', 'image4.jpg'.
Final Answer:
for i in range(1,4):
camera.capture(f'image{i}.jpg') -> Option C
Quick Check:
f-string with correct range = D [OK]
Hint: Use f-strings and range starting at 1 for numbered files [OK]
Common Mistakes:
Using string concatenation without converting int to str
Forgetting f-string syntax for variable insertion
Incorrect range causing wrong filenames
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.