Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to programmatically capture a webcam photo

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?

like image 837
Cerin Avatar asked Mar 14 '12 23:03

Cerin


People also ask

How do I take a picture with my webcam on Linux?

Open a terminal window. Run Cheese. Cheese should automatically detect your webcam and display live video stream. To record video or take a snapshot, click either on photo or video and select Take a Photo or Start recording.


2 Answers

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.

like image 116
jsbueno Avatar answered Oct 05 '22 10:10

jsbueno


If you want to do this via Python, it looks like you have a few options. The Pygame library has the ability to access cameras.

If that's unsatisfactory, you can go much lower level and access the Video 4 Linux 2 API directly using ioctl calls using Python's fcntl library.

like image 32
Multimedia Mike Avatar answered Oct 05 '22 10:10

Multimedia Mike