, , ,
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).