How to programmatically capture a webcam photo

Cerin picture Cerin · Mar 15, 2012 · Viewed 53.8k times · Source

What's the simplest way in Ubuntu 11.10 to programmatically guide (either from Bash or Python) the user to capture a webcam photo of themselves?

I can launch a simple app like Cheese, but I don't see an easy way to immediately detect or retrieve the photo it captures. I can also access and record the webcam stream directly via OpenCV, but I'd have to reinvent the GUI to communicate with the user.

Is there any kind of script that's a happy medium, where I can launch it, and it prints on stdout the filename of the image the user took?

Answer

jsbueno picture jsbueno · Mar 15, 2012

I like using pygame for that - it does not require you to open a Pygame SDL window, unlike when you want to use it to capture keyboard events, for example.

import pygame.camera
pygame.camera.init()
cam = pygame.camera.Camera(pygame.camera.list_cameras()[0])
cam.start()
img = cam.get_image()
import pygame.image
pygame.image.save(img, "photo.bmp")
pygame.camera.quit()

Though Pygame will only save uncompressed "bmp" files - you may want to combine it with PIL to write to other formats.