【发布时间】:2018-07-03 20:17:03
【问题描述】:
所以我发现当我从代码中删除 cv2.imshow("Face",img) 时一切正常,但是在使用它时,服务器由于某种原因崩溃了。当作为不包括 django 代码的纯脚本运行时,代码运行完美。谁能告诉我为什么会这样以及可能的解决方案?谢谢
from django.shortcuts import render, redirect
import cv2
import numpy as np
from settings import BASE_DIR
def index(request):
return render(request, 'index.html')
def create_dataset(request):
userId = request.POST['userId']
faceDetect = cv2.CascadeClassifier(BASE_DIR+'/ml/haarcascade_frontalface_default.xml')
cam = cv2.VideoCapture(0)
id = userId
sampleNum = 0
while(True):
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceDetect.detectMultiScale(gray, 1.3, 5)
for(x,y,w,h) in faces:
sampleNum = sampleNum+1
cv2.imwrite(BASE_DIR+'/ml/dataset/user.'+str(id)+'.'+str(sampleNum)+'.jpg', gray[y:y+h,x:x+w])
cv2.rectangle(img,(x,y),(x+w,y+h), (0,255,0), 2)
cv2.waitKey(500)
cv2.imshow("Face",img)
cv2.waitKey(1)
if(sampleNum>35):
break
cam.release()
cv2.destroyAllWindows()
return redirect('/')
这是堆栈跟踪
- 进程:python2.7 [12301]
- 路径:/Users/USER/*/python
标识符:python2.7
崩溃的线程:3
异常类型:EXC_CRASH (SIGABRT)
- 异常代码:0x0000000000000000, 0x0000000000000000
异常说明:EXC_CORPSE_NOTIFY
应用程序特定信息:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+[NSUndoManager(NSInternal)_endTopLevelGroupings] 只能在主线程上安全调用。” 中止()调用 以 NSException 类型的未捕获异常终止
应用程序特定的回溯 1: 0 核心基础 0x00007fffb40d32cb __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fffc8eeb48d objc_exception_throw + 48 2 CoreFoundation 0x00007fffb40d8042 + [NSException raise:format:arguments:] + 98 3 基础 0x00007fffb5b20be0 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195 4 基础 0x00007fffb5aab093 +[NSUndoManager(NSPrivate)_endTopLevelGroupings] + 170 5 AppKit 0x00007fffb1b374ed-[NSApplication 运行] + 1200 6 QtGui 0x00000001141fbe44 _ZN26QEventDispatcherMacPrivate22ensureNSAppInitializedEv + 128 7 QtGui 0x00000001141fb5ff _ZN19QEventDispatcherMac13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE + 777 8 QtCore 0x0000000114e5dfdc _ZN16QCoreApplication13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE + 80 9 cv2.so 0x000000010e9cf53f cvWaitKey + 207 10 cv2.so 0x000000010e9cfba7 _ZN11GuiReceiver12createWindowE7QStringi + 359 11 cv2.so 0x000000010e9cf9a0 cvNamedWindow + 528 12 cv2.so 0x000000010e9d207a _ZN11GuiReceiver9showImageE7QStringPv + 170 13 cv2.so 0x000000010e9d1f49 cvShowImage + 553 14 cv2.so 0x000000010e9cab55 _ZN2cv6imshowERKNS_6StringERKNS_11_InputArrayE + 581 15 cv2.so 0x000000010dee3454 _ZL18pyopencv_cv_imshowP7_objectS0_S0_ + 404 16 libpython2.7.dylib 0x000000010b9598f4 PyEval_EvalFrameEx + 22980
解决了 ** python manage.py runserver --nothreading --noreload ** 命令的问题。显然整个过程由于某种原因不得不通过主线程。
【问题讨论】:
-
你能从 Django 端发布堆栈跟踪或日志吗?这通常包含有价值的线索。
-
感谢您的回复,我也更新了堆栈跟踪。
标签: django python-2.7 opencv