【发布时间】: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()查看变量中的内容。在控制台中运行它时不会收到错误消息吗? -
所有代码似乎都正常 - 我看不出问题出在哪里。