2016-11-05 2 views
1

Mac OSX SierraのOpenCVでWebカメラを開き、そこから画像を表示するとNSExceptionsが表示されます。OpenCV Mac OSX Sierraでカメラを開いて表示しているときにクラッシュする

これは私がエラーモードを解明しようとしているテストコードです。

import cv2 

cam = cv2.VideoCapture(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 

私は取得していますエラーは、私がITERMまたは端末からそれを実行したとき、私は一貫して、このエラーを取得する

2016-11-05 18:15:07.075 Python[1082:24157] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x7fca4ac3a6f0 of class AVCaptureDALDevice was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x7fca4ac42f80> (
<NSKeyValueObservance 0x7fca4ae6df50: Observer: 0x7fca4ae6b410, Key path: open, Options: <New: NO, Old: NO, Prior: NO> Context: 0x7fffc9c99570, Property: 0x7fca4ac3fe30> 
)' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00007fffafde96fb __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x00007fffc45f0a2a objc_exception_throw + 48 
    2 CoreFoundation      0x00007fffafe669a5 +[NSException raise:format:] + 197 
    3 Foundation       0x00007fffb17d1d84 NSKVODeallocate + 293 
    4 AVFoundation      0x00007fffac67dabe -[AVCaptureDeviceInput _setDevice:exceptionReason:] + 304 
    5 AVFoundation      0x00007fffac5ae914 -[AVCaptureDeviceInput dealloc] + 39 
    6 CoreFoundation      0x00007fffafe53a7b -[__NSSingleObjectArrayI dealloc] + 43 
    7 libobjc.A.dylib      0x00007fffc45e5e60 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 808 
    8 CoreFoundation      0x00007fffafd20d66 _CFAutoreleasePoolPop + 22 
    9 CoreFoundation      0x00007fffafd612c5 __CFRunLoopRun + 2229 
    10 CoreFoundation      0x00007fffafd607b4 CFRunLoopRunSpecific + 420 
    11 HIToolbox       0x00007fffaf2fcfbc RunCurrentEventLoopInMode + 240 
    12 HIToolbox       0x00007fffaf2fcdf1 ReceiveNextEventCommon + 432 
    13 HIToolbox       0x00007fffaf2fcc26 _BlockUntilNextEventMatchingListInModeWithFilter + 71 
    14 AppKit        0x00007fffad9e6b79 _DPSNextEvent + 1093 
    15 AppKit        0x00007fffae0fc1c3 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1637 
    16 libopencv_highgui.2.4.dylib   0x000000010d79c0a6 cvWaitKey + 402 
    17 cv2.so        0x000000010cfa3ce1 _ZL16pyopencv_waitKeyP7_objectS0_S0_ + 103 
    18 Python        0x000000010cc001ab PyEval_EvalFrameEx + 27003 
    19 Python        0x000000010cbf963a PyEval_EvalCodeEx + 1617 
    20 Python        0x000000010cbf8fe3 PyEval_EvalCode + 48 
    21 Python        0x000000010cc1cc04 run_mod + 53 
    22 Python        0x000000010cc1cca7 PyRun_FileExFlags + 133 
    23 Python        0x000000010cc1c7f8 PyRun_SimpleFileExFlags + 702 
    24 Python        0x000000010cc2deba Py_Main + 3094 
    25 libdyld.dylib      0x00007fffc4ecd255 start + 1 
    26 ???         0x0000000000000002 0x0 + 2 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
Abort trap: 6 

です。しかし、私はxtermから一貫してそれを取得します。

をすべて呼び出す前にcam.release()を使用すると、同じエラーが発生します。 cap_avfoundation_mac.mm

import cv2 

cam = cv2.VideoCapture(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 
cam.release() 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 
cam.release() 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 
cam.release() 

cam.open(0) 
ret, im = cam.read() 
cv2.imshow('im', im) 
cv2.waitKey(1) 
cam.release() 
+0

私は、Pythonを知っている/使用していないが、あなたは閉じずに複数回 'cam.open'呼び出すように見えます。あれは正しいですか? –

+0

はい、私はこれを 'cam.open(0)'のチェックとリリースで独自に行っています。私は 'cam.release()'が挿入された状態でこれを試しました。 (明確にするために私の質問を更新しました) – ramsey0

+0

'cam.open'をなぜ呼び出すのか、まだ理解していません。最初のフレームには必要ないようです。 –

答えて

0

、機能CvCaptureCAM::stopCaptureDevice、 コメントこの行:

[mCaptureDevice release]; 
関連する問題