Python-Bibliothek zum Aufnehmen von Kamerabildern

Ich möchte mit Python ein einzelnes Bild von einer Kamera (z. B. einer eingebauten Webcam in einem Notebook) erhalten.

Ich suche nach einer Bibliothek, die dies in wenigen Codezeilen ermöglicht (ich möchte keinen Kameratreiber oder ähnliches schreiben). Das Bild sollte in einem Standard-Bitmap-Format vorliegen.

Bitte auch

  • Anforderungen auflisten (z. B. installierte Pakete, Betriebssystem),
  • Fügen Sie einen Link zur Dokumentation hinzu
Diese Frage wurde zu Softwareempfehlungen migriert . Ich habe Ihren Titel so bearbeitet, dass er hier themenbezogener ist, und zwei Anforderungen entfernt, von denen Sie vernünftigerweise nicht erwarten können, dass sie hier erfüllt werden. Sie können die Bearbeitung rückgängig machen, wenn Sie nicht einverstanden sind.
Für alle Antworten beachten Sie bitte stackoverflow.com/a/34687991/562769
Bitte teilen Sie uns Ihr Betriebssystem mit: Linux, Mac, Windows ...

Antworten (7)

Einfacher Lebenslauf

Installation

Auf Debian-basierten Systemen:

sudo apt-get install python-opencv

Code

import time
from SimpleCV import Camera

cam = Camera()
time.sleep(0.1)  # If you don't wait, the image will be dark
img = cam.getImage()
img.save("simplecv.png")

SimpleCV-Bild

Geben Sie hier die Bildbeschreibung ein

Obwohl sich die Beleuchtungssituation nicht geändert hat, ist das Python-Bild viel dunkler. Ich bin mir nicht sicher, warum das so ist.

Meine erste Vermutung ist, dass das Python-Bild von 0-1 skaliert ist, obwohl es 0-255 sein sollte.
@Dirk: Hast du eine Idee wie man das beheben kann?
Mit 255 multiplizieren, dann als PNG speichern :)
@Dirk: Das scheint nicht das Problem zu sein. Ich habe ein einzelnes Pixel gedruckt und es zeigte den RGBA-Wert mit ganzen Zahlen. Ich denke also, dass ein Bereich von 0..255 verwendet wird. Ich bin mir jedoch nicht sicher, warum es RGBA und nicht RGB war.
Ich habe gerade ein Problem gemeldet. Das Kamerabild ist für SimpleCV sehr dunkel . Mal sehen, ob sie wissen, wie man es repariert.

OpenCV

Installation

Auf Debian-basierten Systemen:

sudo apt-get install python-opencv

Code

import time
import cv2
camera_port = 0
camera = cv2.VideoCapture(camera_port)
time.sleep(0.1)  # If you don't wait, the image will be dark
return_value, image = camera.read()
cv2.imwrite("opencv.png", image)
del(camera)  # so that others can use the camera as soon as possible
@PadraicCunningham Danke, ich habe es hinzugefügt. Wissen Sie, ob die anderen etwas Ähnliches haben / brauchen?
cam.stop()im Pygame

Ich habe gerade den @Martin Thoma Code geändert.

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()

um das Problem mit dem schwarzen Bildschirm zu lösen. ich hoffe es wird geholfen. Danke.

PyGame

Diese Antwort stammt teilweise von https://stackoverflow.com/a/11094891/562769 - danke Froyo !

Danke an Phani für die Hilfe, es zu verbessern.

  • Anforderungen:
    • Pakete: pygame (nicht in PyPI)
    • Python 2.X (nicht mit 3 getestet)
    • Betriebssystem: Funktioniert auf Ubuntu
  • Dokumentation: http://www.pygame.org/docs/

Installation

Auf Debian-basierten Systemen:

sudo apt-get install python-pygame

Code

import pygame
import pygame.camera
import time

pygame.camera.init()
pygame.camera.list_cameras()
cam = pygame.camera.Camera("/dev/video0", (640, 480))
cam.start()
time.sleep(0.1)  # You might need something higher in the beginning
img = cam.get_image()
pygame.image.save(img, "pygame.jpg")
cam.stop()
Es ist nützlich, auch hier ein hinzuzufügen time.sleep(0.1). Ansonsten sind die Bilder dunkel
Der Schlaf muss danach sein cam.start(). Auch für mich 0.1reicht mein Dell-Laptop nicht aus. 0.5hat bei mir funktioniert.
@Phani Sehr interessant. Ich habe es ein paar Mal getestet und ich denke, 0,1 war auch für meinen Computer zu niedrig. Nachdem ich mein Skript ein paar Mal ausgeführt habe, benötige ich die Codezeile "sleep" jedoch nicht. Das Letzte, was ich versucht habe, war, den Schlaf zwischen cam = ...und zu verschieben cam.start(). Ich bin (fälschlicherweise) davon ausgegangen, dass es da sein muss, weil es nach dem Ändern funktioniert hat.
Unter Windows 7, py36, bekomme ich ImportError: cannot import name '_camera'.

entkommen

Installation

pip install ecapture 

Code

from ecapture import ecapture as ec

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

Ich würde dieses Problem in zwei Teile schneiden.

  1. Machen Sie ein Foto von der Befehlszeile aus

Ich hoffe, Sie verwenden ein Betriebssystem wie Linux, das über eine Befehlszeile verfügt.
AFAIK gphoto2 kann so etwas tun

  1. Verwenden Sie das Python-Unterprozessmodul

    subprocess.call(['yourtoo', 'arg1, ...])

Lassen Sie die Kamera aufwärmen, um das Problem mit dem schwarzen Bildschirm zu lösen.

import time 
import cv2
camera_port = 0
camera = cv2.VideoCapture(camera_port)
time.sleep(0.1)
return_value, image = camera.read()
cv2.imwrite("opencv.jpg", image)
del(camera)  # so that others can use the camera as soon as possible
Genau das habe ich vor 2 Monaten im Kommentar oben geschrieben. Wenn Sie denken, dass es eine Antwort sein sollte, sollten Sie es zumindest zu einer Community-Wiki-Antwort machen.