2012-06-19 11 views
23

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.Captura de una sola imagen de mi cámara web en Java o Python

EDIT: Yo uso Python 3.x, no 2.x

porque todos los demás que veo esta pregunta pidió a las personas a manejar a confundirse, voy a exponer algunas cosas de forma explícita:

  • que no quieren usar el procesamiento
  • no quiero utilizar cualquier idioma distinto de los indicados anteriormente
  • sí quiero mostrar esta imagen en la pantalla de cualquier manera o forma
  • No deseo mostrar una transmisión de video en vivo desde mi cámara web en mi pantalla, o guardar dicha información en mi disco duro
  • El Java Media Framework está demasiado desactualizado. No lo sugieras
  • Preferiría no utilizar 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 incluir estos archivos en cualquier tipo de RUTA. Todo debe estar incluido en el directorio)
  • 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 como así
  • Si usted piensa que podría o no podría saber algo relacionado con este tema en cualquier manera o forma, por favor, supongo que no lo sé, y me dicen

EDIT2: Pude obtener el ejemplo de pygame de Froyo trabajando en Linux usando Python 2.7 y pygame 1.9.1. la llamada a pygame.camera.camera_list() no funcionó, pero no fue necesaria 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 aumentar el brillo y así poder ver algo en la imagen que capturé.

Además, necesito llamar a los métodos cam.get_image() y pygame.image.save() tres veces antes de que realmente se guarde la imagen que supuestamente tomé en el primer par de llamadas. Parecían estar atrapados en un búfer extraño. Básicamente, en vez de llamar a cam.get_image() una vez, tuve que llamarlo tres veces cada vez que quería capturar una imagen. Entonces y solo entonces llamé a pygame.image.save().

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

+1

Buffer y problemas de tiempo siempre son algo que tienes que manejar cuando se trata del mundo real (dispositivos de captura incluyen, por ejemplo, http://stackoverflow.com/questions/5595658/python-video-capture-loop). Incluso un simple interruptor de encendido/apagado tiene estos problemas (consulte http://www.labbookpages.co.uk/electronics/debounce.html para obtener una explicación más detallada de las soluciones de hardware y software). – thebjorn

+0

¿El contenido de esta página responderá a su pregunta por casualidad? [Cómo utilizar JavaCV en un applet] (http://code.google.com/p/javacv/wiki/HowToMakeAnApplet) –

+0

Consulte también: [¿Cómo puedo tomar imágenes de la cámara con Python?] (Http: // stackoverflow. com/q/28418962/562769) –

Respuesta

10

En las ventanas que es fácil de interactuar con su cámara web con pygame:

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

No he probado usando pygame en Linux (todas mis sistema Linux son servidores sin X), pero este enlace puede ser útil http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-linux

+1

Nunca antes había usado pygame. Descargué el archivo pygame-1.9.2a0.win32-py3.2.msi desde http://www.pygame.org/download.shtml y lo instalé, luego intenté ejecutar el código en un shell de Python, pero no produjo nada diferente a antes de instalar pygame. No quiero sonar duro, pero no asuma que algo fácil para usted es fácil para mí. Necesito pasos de bebé porque sé casi nada sobre lo que estoy tratando de hacer. –

+0

Además, VideoCapture no admite python-3.2 –

+0

@cgohlke ¡esa página ha sido un salvavidas un par de veces! – thebjorn

47

@thebjorn ha dado una buena respuesta. Pero si quiere más opciones, puede 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 

Obtener la última versión de SimpleCV

instalar pygame:

install pygame 
+0

Al parecer, afirmar esto en la pregunta no es Bastante: Preferiría no utilizar 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 incluir estos archivos en ningún archivo). tipo de RUTA. Todo debe estar incluido en el único directorio) –

+0

OpenCV y SimpleCV son ENORMES. No quiero tener que instalar TODO –

+1

SimpleCV no es compatible con Python 3.x. OpenCV es enorme Si lo deseas, puedes usar pygame. Podría haber usado PIL, pero tampoco admite python 3.x – Froyo

6

Hace un tiempo, escribí Webcam Capture API que se puede usar para eso. El proyecto está disponible en Github.

código 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(); 
} 
+0

Creo que debería haber revelado en su respuesta que usted es el desarrollador de la base de código a la que se vinculó. –

+2

No sé qué cambiaría esto, pero está bien, actualicé la respuesta. –

2
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() 
Cuestiones relacionadas