Программный доступ к iSight?

Можно ли программно получить доступ к камере iSight на MacBook? Под этим я подразумеваю, что хотел бы иметь возможность просто захватывать неподвижные кадры с камеры iSight по команде, а затем что-то с ними делать. Если да, то доступен ли он только с помощью цели c или можно использовать и другие языки?

Ответов (7)

Из связанного вопроса, в котором конкретно указано, что решение должно быть питоническим, вы должны попробовать библиотеку camiface motmot от Эндрю Стро. Он также работает с камерами 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,)

Одна вещь, о которой пока не упоминалось, - это IKPictureTaker , который является частью Image Kit. Это приведет к появлению стандартной панели, предоставляемой ОС, чтобы делать снимки, со всеми возможными функциями фильтра и т. Д. Я не уверен, что вы этого хотите.

Я полагаю, вы можете использовать его и на других языках, учитывая, что есть такие вещи, как какао-мосты, но у меня нет опыта с ними.

В Google также возник еще один вопрос о stackoverflow, который, похоже, решает эту проблему.

У меня нет Mac, но здесь есть документация:

http://developer.apple.com/documentation/Hardware/Conceptual/iSightProgGuide/01introduction/chapter_1_section_1.html

Похоже, вам нужно пройти через QuickTime API. Предполагается, что существует образец проекта под названием «MungGrab», на который стоит взглянуть в соответствии с этой веткой .

Помимо ObjC, вы также можете использовать привязки PyObjC или RubyCocoa для доступа к нему. Если вы не разборчивы в выборе языка, я бы сказал, что используйте Ruby, так как PyObjC ужасно плохо документирован (даже официальная страница Apple на нем относится к старой версии, а не к той, которая была в OS X Leopard).

Quartz Composer, вероятно, самый простой способ получить к нему доступ, а файлы .quartz можно довольно легко встраивать в приложения (и данные передаются в ObjC или тому подобное)

Кроме того, я полагаю, что в каталоге / Developer / examples / должно быть несколько примеров.

Есть утилита командной строки, isightcapture которая делает более или менее то, что вы хотите делать. Вероятно, вы могли бы получить код от разработчика (его адрес электронной почты находится в файле readme, который вы получаете при загрузке утилиты).

Вам следует ознакомиться с документацией 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

Если вы покопаетесь в списках рассылки Apple, вы также сможете найти код для этого и на Java. Вот простой пример, подходящий для захвата отдельных кадров , а вот более сложный, достаточно быстрый для отображения видео в реальном времени .