Table des matières
1. Installez la bibliothèque de flacons
2. Utilisez le flacon pour ouvrir la page Web pour transmettre la vidéo
2.1 Sur le bureau du terminal Raspberry Pi, créez un nouveau dossier flask
2.2 Dans le dossier flask, créez un nouveau dossier de modèle et un fichier app.py
2.3 Dans le dossier du modèle, créez un nouveau fichier index.html
2.4 Utilisez flask pour exécuter le code pour télécharger la vidéo de surveillance
1. Installez la bibliothèque de flacons
sudo install apt-get flask
2. Utilisez le flacon pour ouvrir la page Web pour transmettre la vidéo
2.1 Sur le bureau du terminal Raspberry Pi, créez un nouveau dossier flask
mkdir flask
2.2 Dans le dossier flask, créez un nouveau dossier de modèle et un fichier app.py
mkdir template
touch app.py
2.3 Dans le dossier du modèle, créez un nouveau fichier index.html
touch index.html
Après la création, vous pouvez entrer la commande ls pour afficher le contenu du dossier en cours, et cd + nom du dossier pour entrer dans le dossier suivant.
2.4 Utilisez flask pour exécuter le code pour télécharger la vidéo de surveillance
Nous devons éditer deux fichiers le premier est index.html et l'autre est app.py
Le premier index.html écrit simplement la page web, le code est le suivant :
<!DOCTYPE html>
<html>
<head>
<title>HHH</title>
</head>
<body>
<div class="header" id="demo">
<div class="title"><h2>CTRL</h2></div>
<form action="/video" method="post" enctype="multipart/form-data">
<img src="{
{videourl}}">
<br>
</form>
</div>
</body>
</html>
Il s'agit d'une simple opération pour obtenir l'encodage vidéo, le streaming vidéo Motion JPEG fourni avec la fiole.
Le second est le fichier app.py
code afficher comme ci-dessous:
# coding: utf-8
from flask import Flask,render_template,Response,request,url_for
import cv2
import numpy as np
import time
import os
app = Flask(__name__)
@app.route('/video', methods=['GET', 'POST'])
def videoshow():
return render_template('index.html',videourl=url_for('video_feed'))
@app.route('/video_feed',methods=['GET', 'POST'])
def video_feed():
return Response(gen(),mimetype='multipart/x-mixed-replace; boundary=frame')
def gen():
cap = cv2.VideoCapture(0)
cap.set(3,600)
cap.set(4,480)
cap.set(5,40)
while True:
ret, img = cap.read()
ret, jpeg = cv2.imencode('.jpg',img) # 对图像进行编码输出 jpeg
yield(b'--frame\r\n'+b'Content-Type: image/jpeg\r\n\r\n' + jpeg.tobytes() + b'\r\n\r\n')
if __name__ == '__main__':
app.run(host='192.168.137.99', port=5008, debug=True)
Pour expliquer brièvement :
@app.route('A',methods=['B']) Ce formulaire est un routage, qui peut être considéré comme un outil interactif entre flask et Raspberry Pi, sautant de l'adresse de la page Web à la page Web, ou de la page Web The données sur le saut à la fonction.
A est le suffixe de l'adresse de la page Web, B est une requête GET ou POST, lorsque la page Web reçoit la vidéo, il s'agit d'une requête GET, et lorsque le formulaire est pressé, une requête POST (le Raspberry Pi reçoit les données du bouton de la page Web)
(1) Entrez python3 app.py dans le dossier du flacon du terminal raspberry pie pour exécuter le code
python3 app.py
Il reviendra pour obtenir une adresse de page Web comme indiqué dans la figure : http://192.168.137.100:5008/
(2) Nous ouvrons la page Web et entrons http://192.168.137.100:5008/video
vidéo est le A précédent, qui est le nom d'un itinéraire
(3) Après la saisie, nous pouvons obtenir la page Web qui est surveillée en temps réel.
Cela complète simplement la fonction de vidéosurveillance.
Parlez brièvement du processus d'exécution du code
app.run exécute l'adresse IP et le port actuels → exécute la première route vidéo, renvoie la page Web index.html → exécute videourl, renvoie la fonction gen() pour encoder et transmettre la vidéo.
3. Utilisez le formulaire ajax pour simuler les frappes au clavier et transférer les données du flacon à la tarte aux framboises.
Quel problème ajax utilise-t-il pour résoudre?
Lorsque vous appuyez sur le formulaire, la vidéo de la page actuelle disparaît ou la vidéo de surveillance ne peut pas être lue normalement en raison d'erreurs d'encodage, ou la page actuelle est actualisée à plusieurs reprises, provoquant la réouverture de la caméra, et une erreur est signalée que la caméra est déjà occupé. Ajax peut uniquement actualiser la page du formulaire sans actualiser la vidéo de surveillance de la caméra.
Vous trouverez ci-dessous ma version complète du code index.html et app.py
J'ai oublié de le sauvegarder dans l'ordinateur, je ne suis pas au laboratoire, je le rattraperai la prochaine fois.