, , ,
Neste tutorial, vamos ver como transmitir vídeo de uma PiCam numa Raspberry Pi para um navegador web. Quando uma câmara é ligada a um Raspberry Pi, a ideia é poder aceder-lhe a partir de qualquer lugar. Para isso, é necessário configurar um servidor e enviar uma captura do vídeo para a sua interface. Isto permite transmitir o vídeo do Raspberry Pi para um navegador Web ou outra aplicação.
Hardware
- Computador
- Raspberry Pi
- PiCamV2
N.B.: este tutorial pode ser aplicado a qualquer computador com Python e equipado com uma webcam.
Configurar o Raspberry Pi
Configurar a PiCamV2 no seu Raspberry Pi
Primeiro vamos instalar o Flask, que nos permitirá configurar o servidor e servir o vídeo.
sudo apt-get install python3-flask
De seguida, utilizamos o OpenCV para capturar as imagens e processá-las.
pip3 install opencv-python
Código para a transmissão de um vídeo num servidor
Para transmitir o vídeo a partir do Raspberry Pi, vamos configurar um diretório que contém
- uma pasta estática que contém ficheiros css e javascript
- uma pasta de modelos que contém ficheiros html
- o script python
Criar uma página html .
<!DOCTYPE html>
<head>
<title>PiCam Server</title>
<link rel="stylesheet" href='../static/style.css'/>
</head>
<body>
<h1>PiCam Live Streaming</h1>
<div class="img-container">
<img src="{{ url_for('video_feed') }}">
</div>
<footer>AranaCorp All right reserved ©</footer>
</body>
</html>
Criar uma página de estilo ./static/style.css
body{
background-color:#70706F;
}
h1{
color:#3AAA35;
text-align:center;
}
.img-container{
width:50%;
border: 3px solid #3AAA35;
border-radius: 6px;
overflow: hidden;
text-align:center;
margin-left: auto;
margin-right: auto;
padding:20px;
}
img{
width:100%;
}
footer{
background-color: #777;
padding: 10px;
text-align: center;
color: white;
}
Código para transmissão de vídeo PiCamServer.py
#!/usr/bin/env python
# -*- coding: utf-8 -*
#sudo apt-get install python3-flask
#pip3 install opencv-python
from flask import Flask, render_template, Response
import cv2
app = Flask(__name__)
#app.config["CACHE_TYPE"] = "null"
@app.route('/')
def index():
"""Video streaming home page."""
return render_template('index.html')
def gen():
"""Video streaming generator function."""
vs = cv2.VideoCapture(0)
while True:
ret,frame=vs.read()
ret, jpeg = cv2.imencode('.jpg', frame)
frame=jpeg.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
vs.release()
cv2.destroyAllWindows()
@app.route('/video_feed')
def video_feed():
"""Video streaming route. Put this in the src attribute of an img tag."""
return Response(gen(),mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port =5000, debug=True, threaded=True)
Neste código, abrimos um servidor flask na porta 5000 e no endereço local
app.run(host='0.0.0.0', port =5000, debug=True, threaded=True)
Adquirimos o vídeo na função gen(), que chamamos na função video_feed().
Quando fazemos um pedido ao endereço IP do browser, o script chama a função index() em app.route(‘
Uma vez carregada a página, a etiqueta chama o url /video_feed, que lança a função com o mesmo nome.
Recuperar o endereço IP do seu Raspberry Pi
Antes de executar o código, é necessário obter o endereço IP do seu Raspberry Pi usando o comando ifconfig no terminal
ifconfig

Resultados
Pode então executar o código através do Geany ou da linha de comandos no diretório de trabalho
python3 PiCamServer.py
No seu navegador, introduza o endereço IP do seu Raspberry Pi e a porta ligada ao servidor para visualizar o vídeo (aqui: 192.162.1.46:5000).
