Aşağıdaki PyObjC senaryosu var:Snow Leopard'da iSight çerçevelerini Python ile nasıl yakalarım?
from Foundation import NSObject
import QTKit
error = None
capture_session = QTKit.QTCaptureSession.alloc().init()
print 'capture_session', capture_session
device = QTKit.QTCaptureDevice.defaultInputDeviceWithMediaType_(QTKit.QTMediaTypeVideo)
print 'device', device, type(device)
success = device.open_(error)
print 'device open success', success, error
if not success:
raise Exception(error)
capture_device_input = QTKit.QTCaptureDeviceInput.alloc().initWithDevice_(device)
print 'capture_device_input', capture_device_input, capture_device_input.device()
success = capture_session.addInput_error_(capture_device_input, error)
print 'session add input success', success, error
if not success:
raise Exception(error)
capture_decompressed_video_output = QTKit.QTCaptureDecompressedVideoOutput.alloc().init()
print 'capture_decompressed_video_output', capture_decompressed_video_output
class Delegate(NSObject):
def captureOutput_didOutputVideoFrame_withSampleBuffer_fromConnection_(self, captureOutput, videoFrame, sampleBuffer, connection):
print videoFrame, sampleBuffer, connection
delegate = Delegate.alloc().init()
print 'delegate', delegate
capture_decompressed_video_output.setDelegate_(delegate)
print 'output delegate:', capture_decompressed_video_output.delegate()
success = capture_session.addOutput_error_(capture_decompressed_video_output, error)
print 'capture session add output success', success, error
if not success:
raise Exception(error)
print 'about to run session', capture_session, 'with inputs', capture_session.inputs(), 'and outputs', capture_session.outputs()
capture_session.startRunning()
print 'capture session is running?', capture_session.isRunning()
import time
time.sleep(10)
program raporları hiç hata ama iSight'ım yeşil ışık aktive asla ve temsilcinin kare yakalama geri arama asla denir. Benim elde çıkışı var:
$ python prueba.py
capture_session <QTCaptureSession: 0x1006c16f0>
device Built-in iSight <objective-c class QTCaptureDALDevice at 0x7fff70366aa8>
device open success (True, None) None
capture_device_input <QTCaptureDeviceInput: 0x1002ae010> Built-in iSight
session add input success (True, None) None
capture_decompressed_video_output <QTCaptureDecompressedVideoOutput: 0x104239f10>
delegate <Delegate: 0x10423af50>
output delegate: <Delegate: 0x10423af50>
capture session add output success (True, None) None
about to run session <QTCaptureSession: 0x1006c16f0> with inputs (
"<QTCaptureDeviceInput: 0x1002ae010>"
) and outputs (
"<QTCaptureDecompressedVideoOutput: 0x104239f10>"
)
capture session is running? True
PS: Ben, ben PySight denemelisiniz cevap yok Lütfen ama Xcode 64 bit CocoaSequenceGrabber derleme olamaz çünkü işe yaramaz.
@Dan: pointer için teşekkürler! Bu Mac OS X programlama ile ilk deneyimim ve kesinlikle clueless. Komut dosyasının sonunda, bunun yerine "Plist" e ihtiyaç duymak yerine, AppHelper.runConsoleEventLoop() işlevini çağırmaya çalıştım. Şimdi benim problemim ana iş parçasını ele geçirmesi ve asla geri dönmemesi. Bir modülde güzel bir şekilde müdahaleci olmayan bir şekilde sarmayı umuyordum. –
Bir iş parçacığı oluşturabilir ve iş parçacığıyla işleyebilirsiniz. QT iş parçacığı değildir, ancak bu bağlamda, tüm QT öğelerinizi bir iş parçacığında yapmanız gerekir, bu da ana iş parçacığı değildir. Zamanlayıcılara da bakabilirsin, ama muhtemelen bunun için hala bir ana döngüye ihtiyacın var. – Dan
Görünüşe göre, ana iş parçacığı olmalı. Eğer Thread (target = AppHelper.runConsoleEventLoop) .start() 'yi kullanırsam, bir sürü hata alıyorum ve hiçbir şey işe yaramıyor: ' 2009-10-20 12: 58: 32.075 Python [2054: 4903] *** __NSAutoreleaseNoPool(): Nesnenin 0x1018065b0 sınıfı NSCFString, hiçbir havuz yokken otomatik olarak yayınlandı - yalnızca sızdırıyor 2009-10-20 12: 58: 32.078 Python [2054: 4903] *** __NSAutoreleaseNoPool(): Nesne 0x101821130 sınıf NSCFString, havuz yerinde - sadece sızıntı 2009-10-20 12: 58: 32.078 Python [2054: 4903] *** __NSAutoreleaseNoPool(): Nesne 0x101828df0 sınıf NSCFString autorelease ' –