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.
CentOS Linux release 7.5.1804 Python 3.6.8 Logicool Web Camera C270
Installieren Sie Folgendes
pip install opencv-python
pip install flask
pip install gevent
pip install gevent-websocket
├ main.py
├ templates/
├ index.html
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()
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;
}
}
Maßnahmen wurden ergriffen ...
Echtzeitkommunikation mit Flask und WebSocket Führen Sie OpenCV3 unter Python3 aus. Vorbereitung für die Einführung in die Bilddatenanalyse.