videocapture - Capturando una sola imagen de mi cámara web en Java o Python
take a picture with webcam python (4)
@thebjorn ha dado una buena respuesta. Pero si quieres más opciones, puedes probar OpenCV, SimpleCV.
utilizando SimpleCV :
from SimpleCV import Image, Camera
cam = Camera()
img = cam.getImage()
img.save("filename.jpg")
utilizando 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")
Instala OpenCV :
install python-opencv bindings, numpy
Instala SimpleCV :
install python-opencv, pygame, numpy, scipy, simplecv
Obtén la última versión de SimpleCV
Instala pygame :
install pygame
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
Porque en todas partes veo que la pregunta que se hace la gente se confunde, voy a decir algunas cosas explícitamente:
- No quiero usar Procesamiento
- No quiero utilizar ningún otro idioma que no sea el indicado anteriormente.
- Quiero mostrar esta imagen en mi pantalla de cualquier forma, forma o forma.
- No quiero mostrar un video en vivo desde mi cámara web en mi pantalla, o guardar ese video 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 de OpenCV necesito y cómo puedo usar estos archivos sin incluir la biblioteca completa (y preferiblemente sin pegar estos archivos en ningún tipo de archivo). PATH. 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 poder compilarlo y usarlo en Linux de 32 bits.
- Si crees que puedo o no saber algo relacionado con este tema en alguna forma o forma, por favor asume que no lo sé y dímelo.
EDIT2: Pude obtener el ejemplo de Froyo pygame trabajando en Linux usando Python 2.7 y pygame 1.9.1. La llamada 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 poder ver cualquier cosa en el Imagen que capturé.
Además, necesito llamar a los métodos cam.get_image () y pygame.image.save () tres veces antes de que la imagen que supuestamente tomé en el primer par de llamadas en realidad se guarde. 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 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.
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 puede ser útil http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-linux
Hace algún tiempo escribí una simple API de captura de cámara web que puede usarse 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();
}
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()