gpt4 book ai didi

使用 opencv 访问网络摄像头时 Django 服务器崩溃

转载 作者:行者123 更新时间:2023-12-02 17:08:52 26 4
gpt4 key购买 nike

所以我发现当我从代码中删除 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 ** 命令的问题。显然,由于某种原因,整个过程必须通过主线程。

    最佳答案

    您在这里看到的是对 headless Web 服务器环境的期望与期望访问屏幕的代码之间的不匹配。换句话说,Web 服务器请求处理程序和阻塞 UI 代码通常不兼容。

    您可以在这里做的是删除 cv2.waitKeycv2.imshow调用,而是在完成 cv2.rectangle 后保存额外的图像调用,将该图像名称传递给模板。在模板中,使用该名称作为 src 的一部分。 <img> 的属性元素。然后添加一个额外的请求处理程序以将带注释的图像返回给浏览器。

    关于使用 opencv 访问网络摄像头时 Django 服务器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428356/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com