Capturer une seule image de ma webcam en Java ou en Python

je veux capturer une seule image de ma webcam et la sauvegarder sur disque. Je veux le faire en Java ou Python (de préférence Java). Je veux quelque chose qui fonctionne à la fois sur 64-bit Win7 et 32-bit Linux.

EDIT: j'utilise Python 3.x, Pas 2.x

parce que partout ailleurs je vois cette question posée aux gens qui parviennent à se confondre, je vais énoncer quelques choses explicitement:

  • je ne veux pas utiliser de Traitement de
  • je ne veux pas utiliser tout langue autre que celles mentionnées ci-dessus
  • je veux afficher cette image sur mon écran en aucune manière, la forme ou la forme
  • Je ne veux pas afficher un flux vidéo en direct de ma webcam sur mon écran, ou enregistrer un tel flux sur mon disque dur
  • le cadre Java Media est beaucoup trop dépassé. Ne pas le suggérer.
  • je préférerais ne pas utiliser JavaCV, mais si je le dois absolument, je veux savoir exactement quels fichiers de la bibliothèque OpenCV j'ai besoin, et comment je peux les utiliser les fichiers sans inclure la bibliothèque entière (et de préférence sans coller ces fichiers dans n'importe quelle sorte de chemin. Tout devrait être inclus dans le répertoire)
  • je peux utiliser Eclipse sur L'ordinateur Win7 64 bits si besoin est, mais je dois aussi pouvoir le compiler et L'utiliser sur Linux 32 bits aussi bien
  • si vous pensez que je pourrais ou ne pourrais pas savoir quelque chose en rapport avec ce sujet d'une façon ou d'une autre, s'il vous plaît supposer que je ne le sais pas, et dire moi

EDIT2: j'ai pu obtenir l'exemple pygame de Froyo pour Linux en utilisant Python 2.7 et pygame 1.9.1. le pygame.caméra.camera_list() l'appel n'a pas fonctionné, mais c'était inutile pour le reste de l'exemple. Cependant, j'ai dû appeler cam.set_controls () (pour lequel vous pouvez trouver la documentation ici http://www.pygame.org/docs/ref/camera.html) pour augmenter la luminosité afin que je puisse voir n'importe quoi dans l'image que j'ai capturée.

Aussi, I besoin d'appeler le cam.get_image () et pygame.image.les méthodes de save() trois fois avant que l'image que j'ai supposée avoir prise sur la première paire d'appels soit sauvegardée. Ils semblaient être coincés dans une zone tampon bizarre. En gros, au lieu d'appeler cam.get_image() une fois, j'ai dû appeler trois fois, à chaque fois que je voulais capturer une image. Alors, et seulement alors j'ai appelé pygame.image.enregistrer.)(

Malheureusement, comme indiqué ci-dessous, pygame.camera n'est supporté que sous Linux. Je n'ai pas encore une solution pour Windows.

27
demandé sur Matthew G 2012-06-19 08:40:52

4 réponses

Sur windows, il est facile d'interagir avec votre webcam avec pygame:

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

Je n'ai pas essayé d'utiliser pygame sur linux( tous mes Linux boxen sont des serveurs sans X), mais ce lien pourrait être utile http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-linux

13
répondu thebjorn 2012-06-19 05:08:17

@thebjorn a donné une bonne réponse. Mais si vous voulez plus d'options, vous pouvez essayer OpenCV, SimpleCV.

en utilisant SimpleCV:

from SimpleCV import Image, Camera

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

en utilisant 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

en utilisant 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")

Installer OpenCV:

install python-opencv bindings, numpy

Installer SimpleCV:

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

obtenir la dernière version de SimpleCV

Installer pygame:

install pygame
55
répondu Froyo 2012-06-19 05:29:54

Il y a quelque temps j'ai écrit simple API de Capture de Webcam qui peut être utilisée pour cela. Le projet est disponible sur Github.

exemple de code:

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
répondu Bartosz Firyn 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
répondu ShivaGuntuku 2016-06-01 12:54:29