[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es

Überblick

Implementieren Sie Folgendes: ・ Starten Sie die Webkamera im Browser ・ Nehmen Sie das Bild des Kamerabildschirms auf -Senden Sie das aufgenommene Bild an den Server und speichern Sie es

Ordnerstruktur

/home/capture_img
|--run.py
|--app
|  |--api.py
|  |--service.py
|  |--static
|  |  |--main.js
|  |--templates
|  |  |--index.html
|--images #Wo soll das aufgenommene Bild gespeichert werden?

Quellcode

run.py

run.py


from app.api import api

if __name__ == '__main__':
    api.run(host='0.0.0.0', port=8000)

app/api.py

app/api.py


from flask import Flask, request, make_response, render_template, url_for

from . import service

api = Flask(__name__)

@api.route('/', methods=['GET'])
def index():
    return render_template('index.html')

@api.route('/capture_img', methods=['POST'])
def capture_img():
    msg = service.save_img(request.form["img"])
    return make_response(msg)

app/service.py

app/service.py


import base64
import numpy as np
import cv2

def save_img(img_base64):
    #binary <- string base64
    img_binary = base64.b64decode(img_base64)
    #jpg <- binary
    img_jpg=np.frombuffer(img_binary, dtype=np.uint8)
    #raw image <- jpg
    img = cv2.imdecode(img_jpg, cv2.IMREAD_COLOR)
    #Pfad zum Speichern des dekodierten Bildes
    image_file="/home/capture_img/images/img0000.jpg "
    #Bild speichern
    cv2.imwrite(image_file, img)
    return "SUCCESS"

templates/index.html

templates/index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>get_capture</title>
</head>
<body>
    <h3>Holen Sie sich eine Aufnahme, indem Sie die Leertaste drücken</h3>
    <video id="video" width="640" height="480" autoplay></video>
    <canvas id="canvas" class="canvas-wrapper"></canvas>
</body>

<script src="{{url_for('static', filename='main.js')}}"></script>

<style>
    /*Leinwand verstecken*/
    #canvas {
        display: none !important;
    }
</style>
</html>

static/main.js

static/main.js


var video = document.getElementById('video');
// getUserMedia()Holen Sie sich Kameramaterial mit
var media = navigator.mediaDevices.getUserMedia({ video: true });
//Gießen Sie in Video-Tags für die Echtzeit-Wiedergabe (Streaming)
media.then((stream) => {
    video.srcObject = stream;
});

var canvas = document.getElementById('canvas');
canvas.setAttribute('width', video.width);
canvas.setAttribute('height', video.height);

video.addEventListener(
    'timeupdate',
    function () {
        var context = canvas.getContext('2d');
        context.drawImage(video, 0, 0, video.width, video.height);
    },
    true
);

//Stellen Sie den Listener so ein, dass die Capture-Erfassung ausgeführt wird, wenn die Leertaste gedrückt wird
document.addEventListener('keydown', (event) => {
    var keyName = event.key;
    if (keyName === ' ') {
        console.log(`keydown: SpaceKey`);
        context = canvas.getContext('2d');
        //Entfernen Sie den Kopf der erfassten base64-Daten
        var img_base64 = canvas.toDataURL('image/jpeg').replace(/^.*,/, '')
        captureImg(img_base64);
    }
});

var xhr = new XMLHttpRequest();

//Erfasste Bilddaten(base64)POST
function captureImg(img_base64) {
    const body = new FormData();
    body.append('img', img_base64);
    xhr.open('POST', 'http://localhost:8000/capture_img', true);
    xhr.onload = () => {
        console.log(xhr.responseText)
    };
    xhr.send(body);
}

Installation der erforderlichen Module

root@ed9f7bedad16:/# pip install opencv-python flask

Lauf

root@ed9f7bedad16:/# python /home/capture_img/run.py
 * Serving Flask app "app.api" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

Funktionsprüfung

Greifen Sie auf http: // localhost: 8000 zu und drücken Sie die Leertaste

スクリーンショット 2020-10-16 23.50.02.png

root@ed9f7bedad16:/# ls /home/capture_img/images/
img0000.jpg

Das aufgenommene Bild wurde gespeichert. img0000.jpg

das ist alles.

Recommended Posts

[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
Starten Sie die Webkamera, machen Sie ein Standbild und speichern Sie es lokal
Senden Sie eine Nachricht von Slack an einen Python-Server
Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
Geben Sie den Bericht mit Python aus DB in PDF aus, hängen Sie ihn automatisch an eine E-Mail an und senden Sie ihn
Senden Sie Protokolldaten vom Server an Splunk Cloud
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
POST das ausgewählte Bild auf der Website mit mehrteiligen / Formulardaten und speichere es in Amazon S3! !!
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Sende Bild mit Python und speichere mit PHP
Installieren Sie mecab auf dem gemeinsam genutzten Sakura-Server und rufen Sie es von Python aus auf
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Terminalzuordnung von der Serverseite zu Amazon SNS (Python + Boto3)
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
Betreiben Sie Firefox mit Selen aus Python und speichern Sie die Bildschirmaufnahme
Lesen Sie das alte Gakushin DC-Antragsformular Word-Datei (.doc) von Python und versuchen Sie, es zu bedienen
Push-Benachrichtigung vom Python-Server an Android
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Senden und Empfangen von Bilddaten als JSON in Python über das Netzwerk
Python - Holen Sie sich in regelmäßigen Abständen die Bitcoin-Rate BTC / JPY von Bitflyer und speichern Sie sie in einer Datei
Übergeben Sie die ausgewählten Elemente in Tablacus Explorer von JScript an Python und benennen Sie sie alle gleichzeitig um
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks
Bildtext und Post to Slack (Python Slackbot)
Organisieren Sie den Ablauf von der Erteilung von Berechtigungen an Python-Benutzer für Migrationen und Migrationen
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
Senden Sie eine Nachricht an Skype und Chatwork in Python
POST-Images von ESP32-CAM (MicroPython) an den Server
Beschneiden Sie Numpy.ndarray und speichern Sie es als Bild
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
[Python] Ich werde FTP auf den FTP-Server hochladen.
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Übergeben Sie ein Array von PHP an PYTHON und führen Sie eine Numpy-Verarbeitung durch, um das Ergebnis zu erhalten
[Python] So entfernen Sie doppelte Werte aus der Liste
Die Wand beim Ändern des Django-Dienstes von Python 2.7 auf Python 3-Serie
So kratzen Sie Bilddaten von Flickr mit Python
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Löschen Sie das cron.log regelmäßig, um ein Wachstum zu verhindern.
[Python] Geben Sie den Bereich des Bildes durch Ziehen der Maus an
Konvertieren Sie das Bild in .zip mit Python in PDF
Ich wollte die Python-Bibliothek von MATLAB verwenden
Senden Sie Daten von Python über die Socket-Kommunikation an Processing
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Der erste Schritt, um Blender von Python verfügbar zu machen
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
POST das Bild mit json und erhalte es mit der Flasche