Site icon AranaCorp

Transmitir vídeo de um Raspberry Pi para um navegador Web

, , ,

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

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

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 &#169;</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).

Fontes

Exit mobile version