Índice
1. Instale a biblioteca de frascos
2. Use o balão para abrir a página da Web para transmitir o vídeo
2.1 Na área de trabalho do terminal Raspberry Pi, crie uma nova pasta flask
2.2 Na pasta flask, crie uma nova pasta de modelo e o arquivo app.py
2.3 Na pasta template, crie um novo arquivo index.html
2.4 Use o flask para executar o código para fazer upload do vídeo de vigilância
1. Instale a biblioteca de frascos
sudo install apt-get flask
2. Use o balão para abrir a página da Web para transmitir o vídeo
2.1 Na área de trabalho do terminal Raspberry Pi, crie uma nova pasta flask
mkdir flask
2.2 Na pasta flask, crie uma nova pasta de modelo e o arquivo app.py
mkdir template
touch app.py
2.3 Na pasta template, crie um novo arquivo index.html
touch index.html
Após a criação, você pode digitar o comando ls para visualizar o conteúdo da pasta atual e cd + nome da pasta para entrar na próxima pasta.
2.4 Use o flask para executar o código para fazer upload do vídeo de vigilância
Precisamos editar dois arquivos, o primeiro é index.html e o outro é app.py
O primeiro index.html simplesmente escreve a página web, o código é o seguinte:
<!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>
É uma operação simples para obter a codificação de vídeo, o streaming de vídeo Motion JPEG que vem com o flask.
O segundo é o arquivo app.py
código mostra como abaixo:
# 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)
Para explicar brevemente:
@app.route('A',methods=['B']) Este formulário é o roteamento, que pode ser considerado como uma ferramenta interativa entre o flask e o Raspberry Pi, saltando do endereço da página da web para a página da web, ou da página da web O dados no salto para a função.
A é o sufixo do endereço da página da web, B é uma solicitação GET ou POST, quando a página da web recebe o vídeo, é uma solicitação GET e quando o formulário é pressionado, uma solicitação POST (o Raspberry Pi recebe os dados do botão da página da web)
(1) Digite python3 app.py na pasta framboesa torta terminal flask para executar o código
python3 app.py
Ele retornará para obter um endereço de página da Web, conforme mostrado na figura: http://192.168.137.100:5008/
(2) Abrimos a página da web e entramos em http://192.168.137.100:5008/video
video é o A anterior, que é o nome de uma rota
(3) Depois de inserir, podemos obter a página da Web que está sendo monitorada em tempo real.
Isso simplesmente completa a função de vigilância por vídeo.
Fale brevemente sobre o processo de execução do código
app.run executa o endereço IP atual e a porta → executa o vídeo da primeira rota, retorna a página index.html → executa videourl, retorna a função gen() para codificar e transmitir o vídeo.
3. Use o formulário ajax para simular pressionamentos de tecla e transfira dados do balão para a torta de framboesa.
Qual problema o ajax é usado para resolver?
Quando o formulário é pressionado, o vídeo na página atual desaparece ou o vídeo de vigilância não pode ser reproduzido normalmente devido a erros de codificação, ou a página atual é atualizada repetidamente, fazendo com que a câmera seja reaberta e um erro é relatado que a câmera já está ocupado. O Ajax só pode atualizar a página do formulário sem atualizar o vídeo de monitoramento da câmera.
Abaixo está minha versão completa do código index.html e app.py
Esqueci de salvar no computador, não estou no laboratório, vou inventar da próxima vez.