在Django中检测到脸后如何重定向到另一个URL

时间:2020-01-19 13:30:03

标签: python django

总体思路是,我想在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无法解决此问题,我将不胜感激。

3 个答案:

答案 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')