Библиотека Python для съемки изображений с камеры

Я хочу получить одно изображение с камеры (например, встроенной веб-камеры в ноутбуке) с помощью Python.

Я ищу библиотеку, которая делает это возможным в нескольких строках кода (я не собираюсь писать драйвер камеры или что-то в этом роде). Изображение должно быть в каком-то стандартном растровом формате.

Пожалуйста, также

  • список требований (например, установленные пакеты, операционная система),
  • добавить ссылку на документацию
Этот вопрос перенесен в Рекомендации по программному обеспечению . Я отредактировал ваш заголовок, чтобы он был более актуальным, и удалил два требования, которые вы не можете обоснованно ожидать здесь. Вы можете отменить правку, если не согласны.
Для всех ответов обратите внимание на stackoverflow.com/a/34687991/562769
Укажите, пожалуйста, вашу операционную систему: Linux, Mac, Windows...

Ответы (7)

SimpleCV

Монтаж

В системах на базе Debian:

sudo apt-get install python-opencv

Код

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

введите описание изображения здесь

Хотя ситуация с освещением не изменилась, изображение Python намного темнее. Я не уверен, почему это так.

Мое первое предположение состоит в том, что изображение python масштабируется от 0 до 1, тогда как оно должно быть от 0 до 255.
@Dirk: У тебя есть идея, как это исправить?
Умножьте на 255, затем сохраните как png :)
@Dirk: Кажется, это не проблема. Я напечатал один пиксель, и он показал значение RGBA с целыми числами. Поэтому я предполагаю, что используется диапазон 0..255. Однако я не уверен, почему это был RGBA, а не RGB.
Я только что зарегистрировал проблему . Изображение с камеры очень темное для SimpleCV. Посмотрим, знают ли они, как это исправить.

OpenCV

  • Требования:
    • Пакеты: cv2(нет в PyPI)
    • Python 2.X (хотя и не тестировался с 3)
  • ОС: работает на Ubuntu
  • Документация: http://opencv.org/documentation.html

Монтаж

В системах на базе Debian:

sudo apt-get install python-opencv

Код

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 Спасибо, я добавил это. Знаете ли вы, есть ли у других что-то подобное?
cam.stop()в pygame

я только что изменил код @Martin Thoma.

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

для решения проблемы с черным экраном. я надеюсь, что это будет помощь. благодарю вас.

PyGame

Этот ответ частично взят из https://stackoverflow.com/a/11094891/562769 - спасибо Фройо !

Спасибо Phani за помощь в его улучшении.

  • Требования:
    • Пакеты: pygame (не в PyPI)
    • Python 2.X (хотя и не тестировался с 3)
    • ОС: работает на Ubuntu
  • Документация: http://www.pygame.org/docs/

Монтаж

В системах на базе Debian:

sudo apt-get install python-pygame

Код

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()
Здесь также будет полезно добавить a time.sleep(0.1). В противном случае изображения темные
Сон должен быть после cam.start(). Также мне 0.1не хватает моего ноутбука Dell. 0.5работал на меня.
@ Фани Очень интересно. Я тестировал его пару раз, и я думаю, что 0,1 тоже было мало для моего компьютера. Однако после запуска моего скрипта пару раз мне не нужна «спящая» строка кода. Последнее, что я пробовал, это поставить сон между cam = ...и cam.start(). Я (ошибочно) предположил, что он должен быть там, потому что он работал после его изменения.
В Windows 7, py36 я получаю ImportError: cannot import name '_camera'.

захват

Монтаж

pip install ecapture 

Код

from ecapture import ecapture as ec

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

Я бы разделил эту проблему на две части.

  1. Сделать снимок из командной строки

Я надеюсь, что вы используете операционную систему, такую ​​​​как Linux, в которой есть командная строка.
AFAIK gphoto2 может сделать что-то подобное

  1. Используйте модуль подпроцесса Python

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

Чтобы решить проблему с черным экраном, дайте камере прогреться.

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
Именно это я и написал в комментарии выше 2 месяца назад. Если вы считаете, что это должен быть ответ, вы должны хотя бы сделать его вики-ответом сообщества.