Capturar una sola imagen desde mi webcam en Java o Python


Quiero capturar una sola imagen de mi cámara web y guardarla en el disco. Quiero hacer esto en Java o Python (preferiblemente Java). Quiero algo que funcione tanto en Win7 de 64 bits como en Linux de 32 bits.

EDITAR: Uso Python 3.x, no 2.x

Debido a que en cualquier otro lugar donde vea esta pregunta, la gente se las arregla para confundirse, voy a declarar algunas cosas explícitamente:

  • No quiero usar Procesamiento
  • No quiero usar ningún otro lenguaje que no sean los indicado anteriormente
  • quiero mostrar esta imagen en mi pantalla de cualquier manera, forma o forma
  • No quiero mostrar una transmisión de video en vivo desde mi cámara web en mi pantalla, o guardar dicha transmisión en mi disco duro
  • El Java Media Framework está demasiado desactualizado. No lo sugieras.
  • Preferiría no usar JavaCV, pero si es absolutamente necesario, quiero saber exactamente qué archivos de la biblioteca OpenCV necesito, y cómo puedo usar estos archivos sin incluir toda la biblioteca (y preferiblemente sin pegar estos archivos en ningún tipo de RUTA. Todo debe ser incluido en el directorio one)
  • Puedo usar Eclipse en la computadora Win7 de 64 bits si es necesario, pero también tengo que ser capaz de compilar y usarlo en Linux de 32 bits
  • Si usted piensa que podría o no podría saber algo relacionado con este tema en cualquier forma o forma, por favor asuma que no lo sé, y dígame

EDIT2: Pude conseguir el ejemplo de pygame de Froyo trabajando en Linux usando Python 2.7 y pygame 1.9.1. el pygame.camara.la llamada a camera_list () no funcionó, pero fue innecesaria para el resto del ejemplo. Sin embargo, tuve que llamar a Cam.set_controls() (para lo cual puede encontrar la documentación aquí http://www.pygame.org/docs/ref/camera.html ) para subir el brillo para poder ver realmente cualquier cosa en la imagen que capturé.

Además, necesito llamar a la cámara.get_image() y pygame.imagen.save () métodos tres veces antes de la imagen I supuestamente tomó el primer par de llamadas en realidad se guarda. Parecían estar atrapados en un búfer extraño. Básicamente, en lugar de llamar a Cam.get_image() una vez, tuve que llamar tres veces, cada vez que quería capturar una imagen. Entonces y sólo entonces llamé a Pygame.imagen.guardar().

Desafortunadamente, como se indica a continuación, pygame.camera solo es compatible con Linux. Todavía no tengo una solución para Windows.

Author: Matthew G, 2012-06-19

4 answers

En Windows es fácil interactuar con tu webcam con pygame:

from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')

No he intentado usar pygame en linux (todos mis linux boxen son servidores sin X), pero este enlace podría ser útil http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-linux

 13
Author: thebjorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-19 05:08:17

@thebjorn ha dado una buena respuesta. Pero si quieres más opciones, puedes probar OpenCV, SimpleCV.

Usando SimpleCV :

from SimpleCV import Image, Camera

cam = Camera()
img = cam.getImage()
img.save("filename.jpg")

Usando OpenCV :

from cv2 import *
# initialize the camera
cam = VideoCapture(0)   # 0 -> index of camera
s, img = cam.read()
if s:    # frame captured without any errors
    namedWindow("cam-test",CV_WINDOW_AUTOSIZE)
    imshow("cam-test",img)
    waitKey(0)
    destroyWindow("cam-test")
    imwrite("filename.jpg",img) #save image

Usando pygame :

import pygame
import pygame.camera

pygame.camera.init()
pygame.camera.list_camera() #Camera detected or not
cam = pygame.camera.Camera("/dev/video0",(640,480))
cam.start()
img = cam.get_image()
pygame.image.save(img,"filename.jpg")

Instalar OpenCV:

install python-opencv bindings, numpy

Instalar SimpleCV:

install python-opencv, pygame, numpy, scipy, simplecv

Obtenga la última versión de SimpleCV

Instalar pygame:

install pygame
 55
Author: Froyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-19 05:29:54

Hace algún tiempo escribí simple Webcam Capture API que se puede utilizar para eso. El proyecto está disponible en Github.

Código de ejemplo:

Webcam webcam = Webcam.getDefault();
webcam.open();
try {
  ImageIO.write(webcam.getImage(), "PNG", new File("test.png"));
} catch (IOException e) {
  e.printStackTRace();
} finally {
  webcam.close();
}
 6
Author: Bartosz Firyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-21 18:32:04
import cv2
camera = cv2.VideoCapture(0)
while True:
    return_value,image = camera.read()
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    cv2.imshow('image',gray)
    if cv2.waitKey(1)& 0xFF == ord('s'):
        cv2.imwrite('test.jpg',image)
        break
camera.release()
cv2.destroyAllWindows()
 2
Author: ShivaGuntuku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-01 12:54:29