Dev (Back & Front)ARTIGO

Usando Python pra capturar a webcam

Para juntar imagens da minha webcam, fiz um script para pegá-las sem precisar de um aplicativo gráfico.

Dia desses eu redescobri as imagens da minha webcam. Tirei vários screenshots usando o aplicativo cheese, desde que minha mais nova nasceu. E nem me lembrava disso.

Consegui criar uma videozinho com elas, o que foi bem legal, mostrando o crescimento dela (e minha barba ficando cada vez mais branca).

A ideia inicial era gerar um gif animado, mas o mesmo ficou em 85 MB de tamanho. E sem som.

Então resolvi fazer 2 coisas:

  • Um script pra ficar pegando imagens da webcam sem precisar de um aplicativo gráfico.
  • Gerar via linha de comando o gif animado.

A captura do screenshot, eu consegui fazer utilizando pygame.  O módulo já inclui vários binding pra realizar ações como capturar da webcam e salvar a imagem.  O script ficou assim:

#! /usr/bin/python -u

"""
Not only Obamas _is_ watching you...
Based in: http://stackoverflow.com/questions/15870619/python-webcam-http-streaming-and-image-capture
"""

SAVEDIR = "/home/helio/Pictures/Webcam"

import pygame, sys
import pygame.camera
import time, random

pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0", (640,480))

while True:
   print "Taking a shot:",
   cam.start()
   image = cam.get_image()
   cam.stop()

   timestamp = time.strftime("%Y-%m-%d_%H%M%S", time.localtime())
   filename = "%s/%s.jpg" % (SAVEDIR, timestamp)
   print "saving into %s" % filename

   pygame.image.save(image, filename)
   time.sleep(random.randrange(10) * 60)

 

Chamei de obamawatch.py em homenagem à espionagem da NSA nas nossas vidas, e que o presidente Obama não fez esforço nenhum pra diminuir ou mesmo evitar. É um script super intrusivo, pois tira fotos de tempos em tempos, podendo pegar situações que… humm… não o faça se sentir muito orgulhoso. Então é bom rodar de vez em quando.

Pra juntar as imagens JPEG geradas em um GIF animado, usei o imagemagick com o mogrify. Com o mogrify, na verdade, eu diminuí as imagens pra 320×240 pixels, pra diminuir o tamanho. Então usei o imagemagick pra gera o GIF.

mogrify -resize 320x240 *jpg

gm convert -delay 20 2013-09-07_1* animated-2013-09-07.gif

 

Com isso consegui o resultado abaixo. Bem divertido.

gif

trabalha em telecomunicações na Ericsson. Formado em engenharia elétrica pela UFSC e com MBA em gestão estratégica de TI pela FGV, trilha o mundo do software livre desde 1997, passando por Linux em geral, Debian e FreeBSD. Atualmente, se interessa mais pelo lado de startups do software livre e menos por código, mas sempre dá uma escapadinha para programar em Python.

Ver perfil