如何将Python代码添加到我的Django Web应用程序中?

ffx8fchx  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(217)

所以我用django建了一个网站,它应该做的是真实的检测情绪,比如应该有一个开始和停止检测的按钮,它将使用设备的网络摄像头。我已经建立了django项目和应用程序,并编写了Python代码,但我分别编写了它们。
当我试图将python代码添加到我的web应用程序views.py和模板(html)时,问题出现了。这是我的代码,有人能帮我吗?

#mood detection python code
import cv2
import numpy as np
from deepface import DeepFace

def detect_emotions():
    face_cascade_name = cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml'
    face_cascade = cv2.CascadeClassifier()
    if not face_cascade.load(cv2.samples.findFile(face_cascade_name)):
        print("Error loading xml file")

    cap = cv2.VideoCapture(0)

    while True:
        ret, frame = cap.read()
        resized_frame = cv2.resize(frame, (48, 48), interpolation=cv2.INTER_AREA)
        gray_frame = cv2.cvtColor(resized_frame, cv2.COLOR_BGR2GRAY)
        img = gray_frame.astype('float32') / 255.0
        img = np.expand_dims(img, axis=-1)
        img = np.expand_dims(img, axis=0)

        analyze = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)

        cv2.rectangle(frame, (0, 0), (200, 30), (0, 0, 0), -1)
        first_data = analyze[0]
        dominant_emotion = first_data['dominant_emotion']
        text = str(dominant_emotion)
        cv2.putText(frame, text, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)

        cv2.imshow('Real-time Emotion Detection', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    detect_emotions()
#views.py
def detect_mood(request):
    # Call your mood detection function
    results = detect_emotions()

    return JsonResponse(request, 'mood_detection/home.html', {'results': results})
<!--html template-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Real-time Emotion Detection</title>
</head>
<body>
    <h1>Real-time Emotion Detection</h1>
    
    <video id="video" width="640" height="480" autoplay></video>

    <script>
        // Get access to the user's webcam and set up the video stream
        navigator.mediaDevices.getUserMedia({ video: true })
            .then(function (stream) {
                var video = document.getElementById('video');
                video.srcObject = stream;
            })
            .catch(function (error) {
                console.error('Error accessing webcam:', error);
            });
    </script>
</body>
</html>

我已经尝试直接添加mood_detect()函数到views.py,但我认为我没有正确添加它。另外,该函数显示一个窗口,我还必须使用JavaScript为网络摄像头添加一个窗口,这两者是否冲突?如果是这样,我可以做些什么来解决这个问题?
目前,它显示情绪检测窗口单独,我希望它显示在网页本身像其他网络应用程序在线。

unftdfkk

unftdfkk1#

使用Django Channels library,这样你就可以轻松有效地支持流。你在这里的无限while循环while True:应该在consumer方法中,而不是在常规的view中,因为views采用了Http/1.1的 * 请求-响应循环 *。
这是一个关于如何使用Django Channels的教程。

相关问题