Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pilas/video/video.py
diff options
context:
space:
mode:
Diffstat (limited to 'pilas/video/video.py')
-rw-r--r--pilas/video/video.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/pilas/video/video.py b/pilas/video/video.py
new file mode 100644
index 0000000..cdd739d
--- /dev/null
+++ b/pilas/video/video.py
@@ -0,0 +1,95 @@
+# -*- encoding: utf-8 -*-
+'''
+
+import pilas
+try:
+ import opencv
+ from opencv import highgui
+except ImportError:
+ opencv = None
+
+import os
+
+try:
+ from PySFML import sf
+except ImportError:
+ pass
+
+class MissingOpencv(Exception):
+ def __init__(self):
+ self.value = "Open CV no esta instalado, obtengalo en http://opencv.willowgarage.com"
+
+ def __str__(self):
+ return repr(self.value)
+
+def error(biblioteca, web):
+ print "Error, no ecuentra la biblioteca '%s' (de %s)" %(biblioteca, web)
+
+def no_opencv():
+ from pilas.utils import esta_en_sesion_interactiva
+ if esta_en_sesion_interactiva():
+ error('opencv', 'http://opencv.willowgarage.com')
+ else:
+ raise MissingOpencv()
+
+class DeCamara(pilas.actores.Actor):
+ """
+ Nos permite poner en pantalla el video proveniente de la camara web.
+
+ """
+ def __init__(self, ancho=640, alto=480):
+ if opencv is None:
+ no_opencv()
+ return
+ import webcam
+ self.camara = webcam.CamaraWeb
+ self.ultimo_numero_de_cuadro = 0
+ pilas.actores.Actor.__init__(self, 'fondos/pasto.png')
+ pilas.mundo.agregar_tarea_siempre(0.15,self.actualizar_video)
+
+ def actualizar_video(self):
+ cuadro, numero_de_cuadro = self.camara.obtener_imagen(self.ultimo_numero_de_cuadro)
+ self.ultimo_numero_de_cuadro = numero_de_cuadro
+ self.imagen.LoadFromPixels(640, 480, cuadro)
+ return True
+
+class VideoDeArchivo(object):
+ def __init__(self, ruta):
+ if opencv is None:
+ no_opencv()
+ return
+ if not os.path.isfile(ruta):
+ raise IOError('El archiyo no existe')
+ self._camara = highgui.cvCreateFileCapture(ruta)
+ self.fps = highgui.cvGetCaptureProperty(self._camara, highgui.CV_CAP_PROP_FPS)
+ self.altura = highgui.cvGetCaptureProperty(self._camara, highgui.CV_CAP_PROP_FRAME_HEIGHT)
+ self.ancho =highgui.cvGetCaptureProperty(self._camara, highgui.CV_CAP_PROP_FRAME_WIDTH)
+ super(VideoDeArchivo, self).__init__()
+
+ def obtener_imagen(self):
+ imagen_ipl = highgui.cvQueryFrame(self._camara)
+ imagen_ipl = opencv.cvGetMat(imagen_ipl)
+ return opencv.adaptors.Ipl2PIL(imagen_ipl).convert('RGBA').tostring()
+
+
+class DePelicula(pilas.actores.Actor):
+ """
+ Nos permite poner en pantalla un video desde un archivo.
+ Toma como parametro la ruta del video.
+ """
+ def __init__(self, path, ancho=640, alto=480):
+ self._camara = VideoDeArchivo(path)
+ pilas.actores.Actor.__init__(self)
+ self._altura_cuadro = self._camara.altura
+ self._ancho_cuadro = self._camara.ancho
+ subrect = self._actor.GetSubRect()
+ subrect.Right = self._ancho_cuadro
+ subrect.Bottom = self._altura_cuadro
+ self._actor.SetSubRect(subrect)
+ self.centro = ('centro', 'centro')
+ pilas.mundo.agregar_tarea_siempre(1/self._camara.fps,self.actualizar_video)
+
+ def actualizar_video(self):
+ self.imagen.LoadFromPixels(self._ancho_cuadro, self._altura_cuadro, self._camara.obtener_imagen())
+ return True
+'''