Tomar foto de webcam con Python

Bienvenido al blog de Parzibyte. Vas a encontrar tutoriales y tips de programación, bases de datos, redes, electrónica e informática general. Ejemplos de código, aplicaciones gratuitas y open source

Tomar foto de webcam con Python

Introducción

Ya vimos cómo tomar una foto de la cámara web o de cualquier dispositivo utilizando Javascript. En aquel post, guardábamos la foto con PHP. Hoy veremos cómo tomar una foto con Python y guardarla en el sistema.

Nota: te invito a leer cómo tomar la foto y guardarla en PHP.

Requisitos

Tener instalado Python y pip. Aquí hay un tutorial para instalar Python 3.

Instalando OpenCV

Para poder acceder a la cámara del dispositivo, necesitamos el paquete de OpenCV. Para ello, ejecutamos lo siguiente en la línea de comandos:

pip install opencv-python

Voy a ejecutarlo en mi consola:

Si en tu caso no sale esto, no hay problema. La imagen se ve así porque ya lo había instalado previamente, pero lo desinstalé para efectos de este tutorial. Con que diga Successfully installed opencv-python… te puedes dar por satisfecho.

Accediendo a cámara

Muy bien, ahora sí podemos trabajar. El código es realmente sencillo. Accedemos a la cámara 0, vemos si se pudo abrir correctamente y si es así entonces escribimos el resultado en una imagen. En caso de que no se haya abierto la cámara, lo indicamos.

Código fuente

Aclaración sobre las cámaras

En este caso, accedemos a la cámara 0. Imaginemos que todas las cámaras del dispositivo son un arreglo. Los arreglos comienzan en 0. Si queremos acceder a la segunda cámara, utilizamos 1. Para la tercera, utilizamos 2. Y así sucesivamente, dependiendo del número de cámaras que tengamos.

Ejecutando código

Mi computadora sólo tiene una cámara, así que accedo el código que ejecuto es el mismo que puse allá arriba. Lo llamo desde mi computadora:

Tomar foto con Python y cámara web | Ejecución

Tomar foto con Python y cámara web | Ejecución

Lo ejecuté en D:\desarrollo_python, así que la foto se guardó ahí. En mis documentos iré a esa ubicación:

Foto guardada con éxito

Foto guardada con éxito

Y aquí dejo la foto que tomé:

No pienses que no funciona, simplemente mi cámara está cubierta. Pero si quieres, puedes seguir el tutorial y verás que no genera ningún problema.

Tomar foto con distinto nombre

Cada que llamamos al código de arriba, se sobrescribe la foto si ya existe. Si quisiéramos que tuviera un nombre distinto, podemos generar un id único utilizando uuid. La verdad no sé cómo funciona, sólo sé que genera un id que no se repite.

Por consecuencia, el código se modificaría así:

Y al ejecutarlo múltiples veces:

Fotos con distintos nombres

Fotos con distintos nombres

Por cierto, uuid ya viene incluido, no necesitamos utilizar pip para instalarlo.

Bonus

Luego de escribir esta entrada, me dije… ¿podemos guardar la foto en un servidor? la respuesta es sí, y aquí explico cómo hacerlo al menos con PHP.

Conclusión

Qué manera más fácil de tomar una foto. También podemos tomar vídeos, múltiples fotos, etcétera. De hecho, opencv sirve para muchas cosas más allá de tomar simples fotos. Aquí dejo el enlace a la documentación oficial.

Con esto terminamos por hoy.

 

7 comentarios

  1. […] Si te gusta programar en Python, te invito a leer cómo tomar una foto de la cámara web, utilizando Python. […]

  2. francisco dice:

    Haciendo los ejercicios al momento de ver la foto que genera me sale una foto en negro, igual cuando hago el ejercicio de mostrar tipo vídeo con videocapture también me muestra en negro la imagen, sabes por que pasa esto? uso windows

    • parzibyte dice:

      No lo sé, ¿en la consola no sale nada? tal vez el problema está en tu cámara, prueba tomando una foto con la aplicación nativa de tu PC para descartar errores de hardware

      • francisco dice:

        Si hice la captura de varias fotos directamente con el programa nativo de mi pc y si pude tomar fotos, no se si exista alguna restricción o incompatibilidad tengo python 3.6 y opencv 3.4.3.18, numpy 1.15.3. no se si me hagan falta otras referencias soy nuevo en esto. muchas gracias

        • parzibyte dice:

          Me parece que numpy no es necesario para esto. ¿Estás implementando el código tal y como está en los ejemplos? en caso de que sí, prueba cambiando la cámara a -1 de la siguiente manera:
          cap = cv2.VideoCapture(-1)

          • francisco dice:

            jaja, resulta que desactive un momento mi antivirus y solucionado todo. después de haber intentado de todo. muchas gracias!

          • parzibyte dice:

            Jaja qué bien, no se me habría ocurrido; ya que al menos Eset te avisa si una app quiere acceder a tu cámara web y supongo que tu antivirus no te notificó. En fin, gracias a ti por comentar tu solución. Saludos 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: