Как перенаправить на другой URL после обнаружения лица в django - PullRequest
0 голосов
/ 19 января 2020

Общая идея заключается в том, что я хочу перенаправить со страницы на домашнюю страницу после обнаружения лица в Django framework. Пытался манипулировать возвратом, но не смог этого сделать и не оказал никакого влияния. Я понял, что он будет перенаправлять на /camera после обнаружения страницы и не будет перенаправлять на нужную страницу. Это views.py в django.

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 ]

1 голос
/ 19 января 2020

Во-первых, вы должны установить имя для вашего URL. как это:

url(r'^404/', view=views.handler404,name='handler_404')

Тогда вы можете попробовать это:

return redirect('x : handler_404')

- установите ваше django имя приложения вместо x

-handler_404 - это ваш URL-адрес, который я установил

0 голосов
/ 19 января 2020
@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')
0 голосов
/ 19 января 2020
from django.http import HttpResponseRedirect

def view(request):
    return HttpResponseRedirect("/your-url/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...