总体思路是,我想在Django框架中检测到人脸后从页面重定向到主页。试图操纵退货,但没有成功,没有任何影响。我意识到它会在检测到页面后重定向到/camera
,而不会重定向到所需页面。这是Django中的views.py。
import cv2
import threading
from django.views.decorators import gzip
from django.shortcuts import render, redirect, render_to_response, HttpResponse
from django.contrib.auth import authenticate, login as _login, logout as _logout
from django.http import JsonResponse,HttpResponseRedirect
from django.http import StreamingHttpResponse
def handler404(request):
response = render_to_response('404.html', {})
response.status_code = 404
return response
def home(request):
if not request.user.is_authenticated:
return redirect(login)
return render(request, "home.html" )
class VideoCamera(object):
def __init__(self):
self.video = cv2.VideoCapture(0 + cv2.CAP_DSHOW)
self.video.set(3, 640) # set video widht
self.video.set(4, 320) # set video height
# Define min window size to be recognized as a face
minW = 0.2*self.video.get(3)
minH = 0.2*self.video.get(4)
(self.grabbed, self.frame) = self.video.read()
threading.Thread(target=self.update, args=()).start()
def __del__(self):
self.video.release()
def get_frame(self):
image = self.frame
minW = 0.2*self.video.get(3)
minH = 0.2*self.video.get(4)
face_cascade = cv2.CascadeClassifier('static/haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.3,
minNeighbors = 4,
minSize = (int(minW), int(minH)),
)
for (x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
if any(map(len, faces)):
image=0
return image
else:
ret, jpeg = cv2.imencode('.jpg', image)
return jpeg.tobytes()
def update(self):
while True:
(self.grabbed, self.frame) = self.video.read()
cam = VideoCamera()
def gen(camera):
while True:
frame = cam.get_frame()
print(frame)
if(frame==0):
#threading.Thread(target=cam.update, args=()).join()
cam.__del__
//i want to redirect to home page here
break
else:
yield(b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
return frame
@gzip.gzip_page
def livefe(request):
try:
return StreamingHttpResponse(gen(VideoCamera()), content_type="multipart/x-mixed-replace;boundary=frame")
except:
return redirect(handler404)
这是urls.py的一部分
url(r'^home/', view=views.home),
url(r'^404/', view=views.handler404),
url(r'^camera/', view=views.livefe),
感谢您的帮助。谢谢。如果django无法解决此问题,我将不胜感激。
答案 0 :(得分:1)
首先,您应该为网址设置名称。像这样:
url(r'^404/', view=views.handler404,name='handler_404')
然后您可以尝试以下方法:
return redirect('x : handler_404')
-设置您的Django应用名称,而不是x
-handler_404是您设置的URL名称
答案 1 :(得分:0)
from django.http import HttpResponseRedirect
def view(request):
return HttpResponseRedirect("/your-url/")
答案 2 :(得分:0)
@gzip.gzip_page
def livefe(request):
try:
return StreamingHttpResponse(gen(VideoCamera()), content_type="multipart/x-mixed-replace;boundary=frame")
except:
return redirect('../handler_404') #return redirect('../url-name')