Lorsque je rouvre une webcam dans OpenCV sous Mac OSX Sierra et que j'en affiche des images, j'obtiens NSExceptions.OpenCV se bloque lors de la réouverture de la caméra sous Mac OSX Sierra et de l'affichage
C'est le code de test avec lequel je travaille pour essayer de comprendre le mode d'erreur.
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)
L'erreur que je reçois est
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
Je reçois constamment cette erreur quand je le lance à partir iTerm ou terminal. Mais je l'obtiens de façon incohérente de xterm.
Je reçois également la même erreur lors de l'utilisation cam.release()
avant tous les appels à cam.open(0)
.
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()
Je n'utilise pas/Python sais, mais il semble que vous appelez 'cam.open' plus d'une fois sans fermer. Est-ce exact? –
Oui, je l'ai aussi fait avec les vérifications et les libérations 'cam.open (0)'. J'ai également essayé ceci avec des appels 'cam.release()' insérés. (J'ai mis à jour ma question pour clarifier) – ramsey0
Je ne comprends toujours pas pourquoi vous appelez 'cam.open' du tout - vous ne semblez pas en avoir besoin pour votre première image. –