web-dev-qa-db-ja.com

JavaまたはPythonでウェブカメラから単一の画像をキャプチャする

ウェブカメラから単一の画像をキャプチャしてディスクに保存したい。これをJavaまたはPython(できればJava)で行いたい。64ビットWin7と32ビットLinuxの両方で動作するものが欲しい。

編集:Python 3.xであり、2.xではありません

私がこの質問を見る他のどこでも人々が混乱することをどうにかして尋ねたので、私はいくつかのことを明示的に述べるつもりです:

  • 処理を使用したくない
  • 上記以外の言語を使用したくない
  • どんな形、形、形でもこの画像を画面に表示したい
  • Webカメラからのライブビデオフィードを画面に表示したり、そのようなフィードをハードドライブに保存したりしたくない
  • Java Media Frameworkは古すぎます。提案しないでください。
  • 私はむしろJavaCVを使用しませんが、どうしても必要な場合は、OpenCVライブラリから必要なファイルを正確に知り、ライブラリ全体を含めずにこれらのファイルをどのように使用できるかを知りたいですPATH。すべてが1つのディレクトリに含まれている必要があります)
  • 必要に応じて64ビットWin7コンピューターでEclipseを使用できますが、32ビットLinuxでもEclipseをコンパイルして使用できる必要があります。
  • 私がこの主題に関連する何かを何らかの形や形で知っているかもしれない、または知らないと思うなら、私はそれを知らないと仮定して、教えてください

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用のソリューションはまだありません。

36
Matthew G

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

17
thebjorn

@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
65
Froyo

少し前に、私はシンプルな 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();
}
7
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()
4
ShivaGuntuku

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()
2
Andrea S.

Ecaptureを使用して実行できますまず、実行

pip install ecapture

次に、新しいpythonスクリプトタイプ:

    from ecapture import ecapture as ec

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

これからの詳細情報 リンク

0
Yfomnn