fbpixel
Etiquetas: , , ,
0
(0)

, , ,

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 &#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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?