プログラムで Macbook の iSight カメラにアクセスすることは可能ですか? つまり、コマンドで iSight カメラから静止フレームを取得し、それらを使って何かを実行できるようにしたいと考えています。もしそうなら、目的の c を使用してのみアクセスできますか、それとも他の言語も使用できますか?
7 に答える
QTKit Capture のドキュメントを確認してください。
Leopard では、RubyCocoa ブリッジを介してすべてを取得できます。
require 'osx/cocoa'
OSX.require_framework("/System/Library/Frameworks/QTKit.framework")
OSX::QTCaptureDevice.inputDevices.each do |device|
puts device.localizedDisplayName
end
ここには Mac はありませんが、ここにいくつかのドキュメントがあります。
QuickTime API を経由する必要があるようです。このスレッドによると、一見の価値がある「MungGrab」というサンプル プロジェクトがあるはずです。
Apple のメーリング リストを調べてみると、Java でも同じことを行うコードがいくつか見つかります。個々のフレームをキャプチャするのに適した簡単な例を次に示します。ライブ ビデオを表示するのに十分な速さのより複雑な例を次に示します。
これまで言及されていないものの 1 つは、Image Kit の一部であるIKPictureTakerです。これにより、標準のOSが提供する写真を撮るためのパネルが表示され、可能なすべてのフィルター機能などが含まれます。それがあなたの望みかどうかはわかりません。
ココアブリッジなどもあると思いますが、私は経験がありません。
グーグルは、この問題に対処していると思われるスタックオーバーフローに関する別の質問も思いつきました。
isightcapture
あなたがやりたいことを多かれ少なかれ行うというコマンドラインユーティリティがあります。おそらく開発者からコードを入手できます (彼の電子メール アドレスは、ユーティリティをダウンロードしたときに入手できる readme に記載されています)。
ソリューションがpythonicであることを具体的に尋ねた関連する質問から、Andrew Strawのmotmotのcamifaceライブラリを試してみてください。FireWire カメラでも動作しますが、探している isight でも動作します。
チュートリアルから:
import motmot.cam_iface.cam_iface_ctypes as cam_iface
import numpy as np
mode_num = 0
device_num = 0
num_buffers = 32
cam = cam_iface.Camera(device_num,num_buffers,mode_num)
cam.start_camera()
frame = np.asarray(cam.grab_next_frame_blocking())
print 'grabbed frame with shape %s'%(frame.shape,)
ObjC とは別に、PyObjC または RubyCocoa バインディングを使用してアクセスすることもできます。PyObjC の文書化がひどく不十分なため、どの言語にこだわらない場合は、Ruby を使用することをお勧めします (Apple の公式ページでさえ、OS X Leopard に付属していたものではなく、古いバージョンを参照しています)。
Quartz Composer はおそらくそれにアクセスする最も簡単な方法であり、.quartz ファイルは非常に簡単にアプリケーションに埋め込むことができます (そしてデータは ObjC などにパイプアウトされます)。
また、/Developer/Examples/ にこれの例が 1 つまたは 2 つあるはずです。