[PYTHON] Ich habe gesehen, dass du nicht arbeitest

Einführung

スクリーンショット 2019-12-04 16.17.55.png Es gibt Leute, die zerschlagen, ohne in einer bestimmten Clubaktivität zu arbeiten. Es ist also eine Geschichte, dass ich es möglich gemacht habe, den Zustand des Clubraums jederzeit zu sehen. Mit OpenCV und WebSocket konnte ich leicht etwas erstellen, das in Echtzeit gesehen werden kann. Ich werde es ablegen.

Betriebsumgebung

CentOS Linux release 7.5.1804 Python 3.6.8 Logicool Web Camera C270

Implementierung

Installieren Sie Folgendes

pip install opencv-python
pip install flask
pip install gevent
pip install gevent-websocket

Verzeichnisaufbau

├ main.py
├ templates/
     ├ index.html

Server: main.py.

Sie können jetzt eine Verbindung zur Kamera herstellen. Es scheint anzugeben, welche Kamera mit einem Argument verbunden werden soll. Wenn nur eine angeschlossen ist, sollte 0 in Ordnung sein.

#Verbinden Sie sich mit der USB-Kamera
capture = cv2.VideoCapture(0)

Laden Sie ein Bild von der Kamera. Bild sind die Bilddaten.

et, frame = capture.read() #Bild von der Kamera lesen

In Bild-JPG konvertieren. Encimg sind die Bilddaten. 90 ist das Kompressionsverhältnis. Geben Sie 1-100 an. Je niedriger das Kompressionsverhältnis, desto höher das Kompressionsverhältnis.

#Parameter bei der Codierung in JPG
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]

result, encimg = cv2.imencode('.jpg', frame, encode_param) #In JPG konvertieren

Ganzes Programm

import cv2
import base64
from flask import Flask, request, render_template
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler

app = Flask(__name__)

#Mit USB-Kamera verbinden
capture = cv2.VideoCapture(0)

#Parameter bei der Codierung in JPG
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]

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

@app.route('/live')
def live():
    if request.environ.get('wsgi.websocket'):
        ws = request.environ['wsgi.websocket']
        while True:
            ret, frame = capture.read() #Bild von der Kamera importieren
            result, encimg = cv2.imencode('.jpg', frame, encode_param) #In JPG konvertieren
            ws.send(base64.b64encode(encimg).decode('ascii')) #Senden Sie ein mit basebsocket in base64 konvertiertes JPG-Bild

   
def main():
    app.debug = True
    server = pywsgi.WSGIServer(("", 8080), app, handler_class=WebSocketHandler)
    server.serve_forever()
    
if __name__ == '__main__':
    main()

Vorderseite: index.html

Aktualisieren Sie einfach das Bild, wenn Sie es erhalten.

<html>
    <head>
        <title>●REC</title>
    </head>
    <body>
        <img id="player" src=""/>
        <script>
            const ws = new WebSocket("wss://localhost/live");
            const player = document.getElementById("player");
            #Bearbeitung zum Zeitpunkt des Eingangs
            ws.onmessage = function(e) {
                player.setAttribute("src", "data:image/jpg;base64,"+e.data)
            }
        </script>
    </body>
</html>

Wenn Sie dies bisher tun können, sollten Sie das Bild sehen können, indem Sie auf localhost: 8080 zugreifen.

Nginx nginx conf.

server{
    listen 80;
    server_name hostname;
    return 301 https://$host$request_uri;
}

server{
    listen 443 ssl;
    client_max_body_size 500M;
    server_name    hostname;

    ssl_certificate         cert.pem;
    ssl_certificate_key     privkey.pem;

    location / {
        proxy_pass    http://localhost:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
    }
}

abschließend

Maßnahmen wurden ergriffen ... Image from iOS (1).jpg

Referenz

Echtzeitkommunikation mit Flask und WebSocket Führen Sie OpenCV3 unter Python3 aus. Vorbereitung für die Einführung in die Bilddatenanalyse.

Recommended Posts

Ich habe gesehen, dass du nicht arbeitest
uWSGI max-Requets-Delta funktioniert nicht wirklich