2008-08-12 42 views
7

Có thể truy cập máy ảnh iSight trên macbook theo chương trình không? Bởi điều này tôi có nghĩa là tôi muốn có thể chỉ cần lấy khung hình từ máy ảnh iSight trên lệnh và sau đó làm một cái gì đó với họ. Nếu vậy, nó chỉ có thể truy cập được bằng cách sử dụng mục tiêu c, hoặc các ngôn ngữ khác có thể được sử dụng không?Truy cập iSight theo chương trình?

Trả lời

4

Tôi không có một máy Mac ở đây, nhưng có một số tài liệu lên đây:

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

Dường như bạn phải đi qua các API QuickTime. Có nghĩa vụ phải là một dự án mẫu gọi là "MungGrab" có thể đáng xem xét theo this thread.

+2

hi ... Tôi nhận được trang không tìm thấy cho link developer.apple.com mà bạn đề nghị ... bạn có thể cập nhật nó? – Devarshi

+1

Liên kết này vẫn đang phát ra lỗi 404. Bạn có thể cập nhật liên kết hay tốt hơn vẫn cải thiện câu trả lời để nó không dựa vào liên kết. – ChrisF

0

Ngoài ObjC, bạn cũng có thể sử dụng các ràng buộc PyObjC hoặc RubyCocoa để truy cập nó. Nếu bạn không cầu kỳ về ngôn ngữ nào, tôi muốn sử dụng Ruby, vì PyObjC được viết thành tài liệu khủng khiếp (thậm chí trang chính thức của Apple có liên quan đến phiên bản cũ, không phải là phiên bản cũ của OS X Leopard)

Quartz Composer có lẽ là cách dễ nhất để truy cập và các tệp .quartz có thể được nhúng trong các ứng dụng khá dễ dàng (và dữ liệu được chuyển đến ObjC hoặc như vậy)

Ngoài ra, tôi giả sử có một hoặc hai ví dụ điều này trong/Developer/Examples/

1

Có tiện ích dòng lệnh được gọi là isightcapture thực hiện nhiều hơn hoặc ít hơn những gì bạn muốn làm. Bạn có thể nhận được mã từ nhà phát triển (địa chỉ email của anh ấy nằm trong readme bạn nhận được khi bạn tải xuống tiện ích).

9

Bạn nên xem QTKit Capture documentation.

On Leopard, bạn có thể nhận tại tất cả của nó qua cầu RubyCocoa:

require 'osx/cocoa' 
OSX.require_framework("/System/Library/Frameworks/QTKit.framework") 

OSX::QTCaptureDevice.inputDevices.each do |device| 
    puts device.localizedDisplayName 
end 
1

Một điều chưa được đề cập cho đến nay là IKPictureTaker, là một phần của Bộ công cụ hình ảnh. Điều này sẽ đi lên với các hệ điều hành được cung cấp tiêu chuẩn bảng điều khiển để chụp ảnh mặc dù, với tất cả các chức năng lọc có thể vv bao gồm. Tôi không chắc đó có phải là điều bạn muốn hay không.

Tôi cho rằng bạn cũng có thể sử dụng nó từ các ngôn ngữ khác, xem xét có những thứ như cocoa bridges nhưng tôi không có kinh nghiệm với chúng.

Googling cũng đã đưa ra another question on stackoverflow dường như giải quyết vấn đề này.

0

Từ một câu hỏi có liên quan đặc biệt yêu cầu giải pháp là pythonic, bạn nên thử xem thư viện motmot's camiface từ Andrew Straw. Nó cũng hoạt động với máy ảnh firewire, nhưng nó cũng hoạt động với thị lực, đó là những gì bạn đang tìm kiếm.

Từ hướng dẫn:

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,) 
Các vấn đề liên quan