Written by: Helio Loureiro
Category: Python
Hits: 13704

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 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 idéia inicial era gerar um gif animado, mas o mesmo ficou em 85 MB de tamanho.  E sem som.

Então resolvi fazer 2 coisas:

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 diminui as imagens pra 320x240 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.