it-swarm.com.de

Ein einzelnes Bild von meiner Webcam in Java oder Python aufnehmen

Ich möchte ein einzelnes Bild von meiner Webcam aufnehmen und auf der Festplatte speichern. Ich möchte dies in Java oder Python (vorzugsweise Java) tun. Ich möchte etwas, das auf 64-Bit-Win7 und 32-Bit-Linux funktioniert.

BEARBEITEN: Ich verwende Python 3.x, nicht 2.x.

Da ich diese Frage überall dort sehe, wo es den Leuten gelingt, verwirrt zu werden, werde ich einige Dinge ausdrücklich erwähnen:

  • Ich möchte die Verarbeitung nicht verwenden
  • Ich möchte keine andere Sprache als die oben genannten verwenden
  • Ich möchte dieses Bild in irgendeiner Form auf meinem Bildschirm anzeigen
  • Ich möchte keinen Live-Video-Feed von meiner Webcam auf meinem Bildschirm anzeigen oder einen solchen Feed auf meiner Festplatte speichern
  • Das Java Media Framework ist viel zu veraltet. Schlagen Sie es nicht vor.
  • Ich würde lieber kein JavaCV verwenden, aber wenn ich unbedingt muss, möchte ich genau wissen, welche Dateien aus der OpenCV-Bibliothek ich benötige und wie ich diese Dateien verwenden kann, ohne die gesamte Bibliothek einzubeziehen (und am besten ohne diese Dateien in irgendeiner Form aufzukleben) PATH. Alles sollte in einem Verzeichnis enthalten sein)
  • Ich kann Eclipse bei Bedarf auf dem 64-Bit-Win7-Computer verwenden, aber ich muss es auch kompilieren und unter 32-Bit-Linux verwenden können
  • Wenn Sie glauben, ich könnte etwas in irgendeiner Form zu diesem Thema wissen oder nicht, nehmen Sie bitte an, ich weiß es nicht und sagen Sie es mir

EDIT2: Ich konnte Froyos Pygame-Beispiel unter Linux mit Python 2.7 und Pygame 1.9.1 zum Laufen bringen. Der Aufruf von pygame.camera.camera_list () hat nicht funktioniert, war aber für den Rest des Beispiels nicht erforderlich. Ich musste jedoch cam.set_controls () aufrufen (die Dokumentation dazu finden Sie hier http://www.pygame.org/docs/ref/camera.html ), um die Helligkeit zu erhöhen, damit ich sie tatsächlich nutzen konnte Sieh irgendetwas in dem Bild, das ich aufgenommen habe.

Außerdem muss ich die Methoden cam.get_image () und pygame.image.save () dreimal aufrufen, bevor das Bild, das ich angeblich bei den ersten Aufrufen aufgenommen habe, tatsächlich gespeichert wird. Sie schienen in einem seltsamen Puffer zu stecken. Anstatt cam.get_image () einmal aufzurufen, musste ich es jedes Mal dreimal aufrufen, wenn ich ein Bild aufnehmen wollte. Dann und nur dann habe ich pygame.image.save () aufgerufen.

Leider wird pygame.camera, wie unten angegeben, nur unter Linux unterstützt. Ich habe noch keine Lösung für Windows.

30
Matthew G

Unter Windows ist es einfach, mit Pygame mit Ihrer Webcam zu interagieren:

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

Ich habe Pygame unter Linux noch nicht ausprobiert (alle meine Linux-Boxen sind Server ohne X), aber dieser Link könnte hilfreich sein http://www.jperla.com/blog/post/capturing-frames-from- a-webcam-on-linux

17
thebjorn

@thebjorn hat eine gute Antwort gegeben. Wenn Sie jedoch mehr Optionen wünschen, können Sie OpenCV oder SimpleCV ausprobieren.

mit SimpleCV:

from SimpleCV import Image, Camera

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

mit 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

mit 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")

Installiere OpenCV:

install python-opencv bindings, numpy

Installiere SimpleCV:

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

neueste Version von SimpleCV erhalten

Installiere pygame:

install pygame
61
Froyo

Vor einiger Zeit habe ich einfache Webcam Capture API geschrieben, die dafür verwendet werden können. Das Projekt ist auf Github verfügbar.

Beispielcode:

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
Bartosz Firyn
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()
3
ShivaGuntuku

Ich habe ein Tool geschrieben, mit dem Bilder von einer Webcam vollständig in Python basierend auf DirectShow aufgenommen werden können. Sie finden es hier: https://github.com/andreaschiavinato/python_grabber

Sie können die gesamte Anwendung oder nur die Klasse FilterGraph in dshow_graph.py folgendermaßen verwenden:

from pygrabber.dshow_graph import FilterGraph
import numpy as np
from matplotlib.image import imsave

graph = FilterGraph()
print(graph.get_input_devices())
device_index = input("Enter device number: ")
graph.add_input_device(int(device_index))
graph.display_format_dialog()
filename = r"c:\temp\imm.png"
# np.flip(image, axis=2) required to convert image from BGR to RGB
graph.add_sample_grabber(lambda image : imsave(filename, np.flip(image, axis=2)))
graph.add_null_render()
graph.prepare()
graph.run()
x = input("Press key to grab photo")
graph.grab_frame()
x = input(f"File {filename} saved. Press key to end")
graph.stop()
1
Andrea S.

Dies kann mithilfe von ecapture erfolgen. Führen Sie zuerst aus

pip install ecapture

Dann in einem neuen python Skripttyp:

    from ecapture import ecapture as ec

    ec.capture(0,"test","img.jpg")

Weitere Informationen hierzu Link

0
Yfomnn