Transmissão de vídeo em rede em tempo real com base em OpenCV

Clique em " Xiaobai Aprender Visão " acima , escolha adicionar " estrela " ou " topo "

Produtos secos pesados, entregues imediatamente

Muitos pequenos parceiros não instalam webcams ou câmeras de vigilância em suas casas ou escritórios. Mas às vezes, as pessoas querem poder assistir a vídeos ao vivo a qualquer hora e em qualquer lugar.

A maioria das pessoas escolherá usar câmeras IP (câmeras de protocolo da Internet) em vez de CCTV (circuito fechado de televisão) porque elas têm resolução mais alta e reduzem os custos de cabeamento. Neste artigo, vamos nos concentrar em câmeras IP. Uma câmera IP é uma  câmera digital que pode receber dados de controle e enviar dados de imagem através de uma rede IP , e não requer equipamento de gravação local. A maioria das câmeras IP é baseada em RTSP (Real Time Streaming Protocol), então o próprio navegador da Internet " não o suporta" .

01. Como usar um navegador da web para visualizar mídia de streaming ao vivo

A visão computacional é um campo interdisciplinar que envolve como fazer computadores para obter um entendimento de alto nível de imagens ou vídeos digitais. Para implementar a parte de visão computacional, usaremos o módulo OpenCV em Python e exibiremos o stream em tempo real em um navegador da web, usaremos o  framework Flask . Antes de entrar na parte de codificação, vamos primeiro entender brevemente esses módulos. Se você já estiver familiarizado com esses módulos, pode pular diretamente para a próxima seção.

De acordo com a Wikipedia, Flask é uma micro estrutura da web escrita em Python. É classificado como um microframework porque não requer ferramentas ou bibliotecas específicas. Não tem camada de abstração de banco de dados, validação de formulário ou qualquer outro componente existente de biblioteca de terceiros que forneça funções comuns.

De acordo com GeeksForGeeks, OpenCV é uma enorme biblioteca de código aberto para visão computacional, aprendizado de máquina e processamento de imagens e agora desempenha um papel importante nas operações em tempo real, o que é muito importante nos sistemas atuais.

02. Etapas de operação

Etapa 1 - Instale o Flask e o OpenCV:

Você pode usar os  comandos pip install  flask" e "  pip install opencv-python ". Eu uso PyCharm IDE para desenvolver aplicativos de frasco.

Etapa 2 - importe as bibliotecas necessárias e inicialize o aplicativo Flask:

Agora, importaremos as bibliotecas necessárias e inicializaremos nosso aplicativo flask.

#Import necessary libraries
from flask import Flask, render_template, Response
import cv2
#Initialize the Flask app
app = Flask(__name__)

Etapa 3 - Use OpenCV para capturar vídeo:

Crie um objeto VideoCapture () para acionar a câmera e ler a primeira imagem / quadro do vídeo. Podemos fornecer o caminho do arquivo de vídeo ou usar números para especificar o uso da webcam local. Para acionar a webcam, passamos "0" como parâmetro. Para capturar a fonte em tempo real da câmera IP, fornecemos o link RTSP como parâmetro.

camera = cv2.VideoCapture(0)
'''
for ip camera use - rtsp://username:password@ip_address:554/user=username_password='password'_channel=channel_number_stream=0.sdp' 
for local webcam use cv2.VideoCapture(0)
'''

Etapa 4 - Adicionar janelas e gerar quadros da câmera:

A função gen_frames () entra em um loop no qual retorna continuamente os quadros da câmera como blocos de resposta. Essa função requer que a câmera forneça um quadro e, em seguida, o formate em um bloco de resposta do tipo de conteúdo e o faça produzir imagem / jpeg, conforme mostrado acima. O código é o seguinte:

def gen_frames():  
    while True:
        success, frame = camera.read()  # read the camera frame
        if not success:
            break
        else:
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')  # concat frame one by one and show result


Etapa 5 - Definir a rota do aplicativo para a página padrão do aplicativo da web :

O roteamento se refere ao padrão de URL do aplicativo (por exemplo, myapp.com/home ou myapp.com/about). @ app.route ("/") é um decorador Python fornecido pelo Flask, que é usado para atribuir URLs em nossos aplicativos para facilitar a operação.

@app.route('/')
def index():
    return render_template('index.html')

O decorador nos informa @app, desde que o usuário visite um determinado domínio de aplicativo ( localhost: 5000 no servidor local) .route (), a função index () é executada. O Flask usa a biblioteca de modelos Jinja para renderizar modelos. Em nosso aplicativo, usaremos modelos para renderizar HTML, que serão exibidos no navegador.

Etapa 6 - Definir a rota de aplicação do feed de vídeo:

@app.route('/video_feed')
def video_feed():
    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

A rota "/ video_feed" retorna uma resposta de streaming. Como esse fluxo retorna a imagem a ser exibida na página da web, o URL roteado está no atributo "src" da tag da imagem (consulte "index.html" abaixo). O navegador atualizará automaticamente os elementos da imagem exibindo o fluxo de imagem JPEG nele, porque a maioria / todos os navegadores suportam respostas de várias partes

Vamos dar uma olhada em nosso arquivo index.html :

<body>
<div class="container">
    <div class="row">
        <div class="col-lg-8  offset-lg-2">
            <h3 class="mt-5">Live Streaming</h3>
            <img src="{
    
    { url_for('video_feed') }}" width="100%">
        </div>
    </div>
</div>
</body>

Etapa 7-Inicie o servidor Flask :

if __name__ == "__main__":
    app.run(debug=True)

Chame app.run () e hospede o aplicativo da web localmente em [localhost: 5000] .

"Debug = True" garante que não precisamos executar o aplicativo sempre que fizermos uma alteração, apenas atualize a página da web enquanto o servidor ainda está em execução para ver as alterações.

Estrutura do projeto:

O projeto é salvo em uma pasta chamada "Detecção de Câmera". Executamos o arquivo "app.py". Após rodar este arquivo, nosso aplicativo será hospedado na porta 5000 do servidor local.

  • Basta digitar "localhost: 5000" no navegador da web depois de executar "app.py" para abrir seu aplicativo da web

  • app.py - este é o aplicativo Flask que criamos acima

  • Modelos - esta pasta contém nosso arquivo "index.html". Isso é necessário no Flask ao renderizar o modelo. Todos os arquivos HTML são colocados nesta pasta.

Vamos ver o que acontece quando executamos 'app.py':

Ao clicar no URL fornecido, nosso navegador abrirá um feed ativo. Como usei o VideoCapture (0) acima , o resumo da webcam será exibido no navegador:

Existem fluxos de vídeo em tempo real de câmeras IP / câmeras de rede, que podem ser usados ​​para fins de segurança e vigilância.

Link do código: https://github.com/NakulLakhotia/Live-Streaming-using-OpenCV-Flask

Grupo de troca

Bem-vindo ao grupo de leitores de contas públicas para se comunicar com colegas. Atualmente, existem grupos WeChat, como SLAM, visão 3D, sensores, direção autônoma, fotografia computacional, detecção, segmentação, reconhecimento, imagens médicas, GAN e competições de algoritmo (serão subdivididos gradualmente no futuro). Faça a varredura da seguinte conta WeChat para adicionar grupos, observações: "apelido + escola / empresa + direção de pesquisa", por exemplo: "Zhang San + Shanghai Jiaotong University + Visual SLAM". Siga as observações de formato, caso contrário, não será aprovado. Após a adição bem-sucedida, você será convidado a entrar no grupo WeChat relevante de acordo com a direção da pesquisa. Por favor, não envie propagandas no grupo, caso contrário você será convidado para o grupo, obrigado pela sua compreensão ~


Acho que você gosta

Origin blog.csdn.net/qq_42722197/article/details/109665279
Recomendado
Clasificación