Общая идея заключается в том, что я хочу перенаправить со страницы на домашнюю страницу после обнаружения лица в 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 не может решить эту проблему, я ценю любые альтернативы.