【问题标题】:Haar Cascades Eye Detection Does Not Work On Python Django Webpage?Haar Cascades 眼睛检测在 Python Django 网页上不起作用?
【发布时间】:2021-05-18 23:37:40
【问题描述】:

我尝试使用带有 OpenCV 眼睛检测的 Django 在网页上显示实时流网络摄像头。

from imutils.video import VideoStream
import imutils
import cv2,os,urllib.request
import numpy as np
from django.conf import settings

eyes_detection = cv2.CascadeClassifier('haar/haarcascade_eye.xml')

class VideoCamera(object):
    def __init__(self):
        self.video = cv2.VideoCapture(0)

    def __del__(self):
        self.video.release()

    def get_frame(self):
        success, image = self.video.read()

        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        eyes_detected = eyes_detection.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
        for (x, y, w, h) in eyes_detected:
            cv2.rectangle(image, pt1=(x, y), pt2=(x + w, y + h), color=(0,255,0), thickness=2)
        frame_flip = cv2.flip(image,1)
        ret, jpeg = cv2.imencode('.jpg', frame_flip)
        return jpeg.tobytes()

上面的代码不会显示视频流,但是,如果我删除第 20-23 行(gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 可以显示视频。如何显示视频流在网页上进行眼睛检测?

下面是我的views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.http.response import StreamingHttpResponse
from main.tryhaar import VideoCamera
import cv2

def gen(tryhaar):
    while True:
        frame = tryhaar.get_frame()
        yield (b'--frame\r\n'
                b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

def video_feed(request):
    return StreamingHttpResponse(gen(VideoCamera()),
                    content_type='multipart/x-mixed-replace; boundary=frame')

【问题讨论】:

  • 您是否尝试逐行添加代码?首先仅添加第 20 行、下一个 21 等。您可以使用 print() 查看变量中的内容。在控制台中运行它时不会收到错误消息吗?
  • 所有代码似乎都正常 - 我看不出问题出在哪里。

标签: python html django


【解决方案1】:

所有问题都可以生成文件.xml。您需要该文件的正确路径。

所有文件.xml - cv2.data.haarcascades 的文件夹路径都有一个特殊变量,您可以将它与文件名一起使用(不带haar/)来创建正确的路径。

eyes_detection = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

或使用os.path.join

eyes_detection = cv2.CascadeClassifier(os.path.join(cv2.data.haarcascades, 'haarcascade_eye.xml'))

【讨论】:

  • OMG 非常感谢,它确实可以这样工作。它能够检测到眼睛。非常感谢。在我的终端上它说:[WARN:3] videoio(MSMF): OnReadSample() is called with error status: -1072873821 [WARN:3] videoio(MSMF): async ReadSample() call is failed with error status: -1072873821我不知道这是什么,但它有效。
  • 我从未见过这种类型的错误。可能是硬件问题。在新页面上创建新问题 - 您将有更多空间用于代码和描述。新的人会看到它。
  • 好的。非常感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多