ウェブカメラから単一の画像をキャプチャしてディスクに保存したい。これをJavaまたはPython(できればJava)で行いたい。64ビットWin7と32ビットLinuxの両方で動作するものが欲しい。
編集:Python 3.xであり、2.xではありません
私がこの質問を見る他のどこでも人々が混乱することをどうにかして尋ねたので、私はいくつかのことを明示的に述べるつもりです:
EDIT2:Python 2.7およびpygame 1.9.1を使用して、Linuxで動作するFroyoのpygameの例を取得できました。pygame.camera.camera_list()呼び出しは機能しませんでしたが、例の残りの部分。ただし、cam.set_controls()を呼び出す必要がありました(このドキュメントについては、こちらを参照してください http://www.pygame.org/docs/ref/camera.html )明るさを上げて、キャプチャした画像に実際に何かが見えるようにします。
また、最初の呼び出しペアで撮影した画像が実際に保存される前に、cam.get_image()およびpygame.image.save()メソッドを3回呼び出す必要があります。彼らは奇妙なバッファに詰まっているように見えた。基本的に、cam.get_image()を1回呼び出す代わりに、イメージをキャプチャするたびに3回呼び出す必要がありました。その後、pygame.image.save()を呼び出しました。
残念ながら、以下で述べるように、pygame.cameraはLinuxでのみサポートされています。 Windows用のソリューションはまだありません。
Windowsでは、pygameを使用してWebカメラを簡単に操作できます。
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')
Linuxでpygameを使用したことはありません(私のlinux boxenはすべてXのないサーバーです)が、このリンクは役に立つかもしれません http://www.jperla.com/blog/post/capturing-frames-from- a-webcam-on-linux
@thebjornが良い答えをくれました。ただし、さらにオプションが必要な場合は、OpenCV、SimpleCVを試すことができます。
SimpleCVを使用:
from SimpleCV import Image, Camera
cam = Camera()
img = cam.getImage()
img.save("filename.jpg")
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
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")
インストールOpenCV:
install python-opencv bindings, numpy
インストールSimpleCV:
install python-opencv, pygame, numpy, scipy, simplecv
SimpleCV の最新バージョンを取得
インストールpygame:
install pygame
少し前に、私はシンプルな Webcam Capture API を書いた。このプロジェクトはGithubで入手できます。
サンプルコード:
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()
DirectShowに基づいて、Webカメラから完全にPythonで画像をキャプチャするツールを作成しました。ここで見つけることができます: https://github.com/andreaschiavinato/python_grabber 。
次の方法で、アプリケーション全体またはdshow_graph.pyのクラスFilterGraphのみを使用できます。
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()
Ecaptureを使用して実行できますまず、実行
pip install ecapture
次に、新しいpythonスクリプトタイプ:
from ecapture import ecapture as ec
ec.capture(0,"test","img.jpg")
これからの詳細情報 リンク