[PYTHON] Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV

Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV

introduction

`Ceci est un article sur l'environnement Mac, mais la procédure est la même pour l'environnement Windows. Veuillez lire et essayer la partie dépendant de l'environnement. ''

Objectif

Affichez la vidéo en streaming dans le navigateur.

Après avoir lu cet article jusqu'au bout, vous pourrez:

No. Aperçu mot-clé
1 REST API Flask
2 OpenCV cv2

Image complète

Diffusion
IMG_4814.PNG

Environnement d'exécution

environnement Ver.
macOS Catalina 10.15.6
Raspberry Pi 4 Model B 4GB RAM -
Raspberry Pi OS (Raspbian) 10
Python 3.7.3
Flask 1.1.2
opencv-python 4.4.0.42

Code source

Je pense que vous pouvez approfondir votre compréhension en suivant réellement le contenu de l'implémentation et le code source. Veuillez l'utiliser par tous les moyens.

GitHub

Articles Liés

Les paramètres de la caméra

Lancez l'outil de configuration du logiciel Raspberry Pi

command.sh


~$ sudo raspi-config

Caméra activée

  1. Sélectionnez «5 options d'interfaçage»
  2. Sélectionnez "Caméra P1"

Redémarrer

command.sh


~$ sudo reboot

Dépendance OpenCV

HDF5

HDF5 is a file format and library for storing scientific data.

command.sh


~$ sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libhdf5-103

ATLAS

ATLAS is an approach for the automatic generation and optimization of numerical software.

command.sh


~$ sudo apt-get install -y libatlas-base-dev

JasPer

JasPer is a collection of software (i.e., a library and application programs) for the coding and manipulation of images.

command.sh


~$ sudo apt-get install -y libjasper-dev

Mains sur

Télécharger

command.sh


~$ git clone https://github.com/nsuhara/raspi-streaming.git -b master

installer

command.sh


~$ cd raspi-streaming
~$ python -m venv .venv
~$ source .venv/bin/activate
~$ pip install -r requirements.txt
~$ source config

Début du service

command.sh


~$ flask run --host=0.0.0.0 --port=5000

accès

command.sh


~$ open "http://{host}:5000/raspi-streaming/api?process=front_end&request=app_form&secret_key=M7XvWE9fSFg3"

Fin de service

command.sh


~$ Control Key + C

Configuration de l'application

target.sh


/app
├── __init__.py
├── apis
│   ├── templates
│   │   └── app_form.html
│   └── views
│       ├── __init__.py
│       ├── back_end_handler.py
│       ├── camera.py
│       ├── front_end_handler.py
│       └── main_handler.py
├── common
│   ├── __init__.py
│   └── utility.py
├── config
│   ├── __init__.py
│   ├── localhost.py
│   └── production.py
└── run.py

front-end

target.sh


/app
└── apis
     ├── templates
     │   └── app_form.html
     └── views
         └── front_end_handler.py

contrôle frontal

front_end_handler.py


"""app/apis/views/front_end_handler.py
"""
from flask import jsonify, render_template

from app import secret_key


def handler(req):
    """handler
    """
    param1 = req.get('param1')
    param2 = req.get('param2')

    if param1 == 'app_form':
        return _app_form(req=param2)

    return jsonify({'message': 'no route matched with those values'}), 200


def _app_form(req):
    """_app_form
    """
    if req.get('secret_key', '') != secret_key:
        return jsonify({'message': 'no route matched with those values'}), 200
    return render_template('app_form.html', secret_key=req.get('secret_key', ''))

mise en page frontale

app_form.html


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>raspi-streaming</title>

    <style type="text/css">
        html,
        body {
            -webkit-user-select: none;
            width: 100%;
            height: 100%;
        }

        table {
            width: 100%;
            height: 100%;
        }

        table,
        td {
            border: 1px gray solid;
            padding: 10px;
        }

        img.img-option {
            width: 100%;
            /* height: 100%; */
        }
    </style>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script type="text/javascript">
    // nothing to do
    </script>
</head>

<body>
    <table>
        <tr height="5%">
            <td>
                <h1>raspi-streaming</h1>
            </td>
        </tr>
        <tr>
            <td>
                <img class="img-option"
                    src="{{ url_for('raspi-streaming.api', process='back_end', request='video_feed', secret_key=secret_key) }}">
            </td>
        </tr>
    </table>
</body>

</html>

back-end

target.sh


/app
└── apis
     └── views
         ├── back_end_handler.py
         └── camera.py

contrôle back-end

back_end_handler.py


"""app/apis/views/back_end_handler.py
"""
from flask import Response, jsonify

from app import secret_key
from app.apis.views.camera import Camera


def handler(req):
    """handler
    """
    param1 = req.get('param1')
    param2 = req.get('param2')

    if param1 == 'video_feed':
        return _video_feed(req=param2)

    return jsonify({'message': 'no route matched with those values'}), 200


def _video_feed(req):
    """_video_feed
    """
    if req.get('secret_key', '') != secret_key:
        return jsonify({'message': 'no route matched with those values'}), 200
    return Response(_generator(Camera()), mimetype='multipart/x-mixed-replace; boundary=frame')


def _generator(camera):
    """_generator
    """
    while True:
        frame = camera.frame()
        yield b'--frame\r\n'
        yield b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n'

Contrôle de la caméra

camera.py


"""app/apis/views/camera.py
"""
import cv2


class Camera():
    """Camera
    """

    def __init__(self):
        self.video_capture = cv2.VideoCapture(-1)

    def __del__(self):
        self.video_capture.release()

    def frame(self):
        """frame
        """
        _, frame = self.video_capture.read()
        _, image = cv2.imencode('.jpeg', frame)
        return image.tobytes()

Recommended Posts

Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Créez un compteur de voiture avec Raspberry Pi
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
Débutant Python s'ouvre et se ferme avec Raspberry Pi
Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
J'ai essayé de connecter Raspeye et conect + avec l'API Web
Créez une partition, puis installez le système d'exploitation Raspberry Pi
Utiliser une webcam avec Raspberry Pi
J'ai créé un serveur Web avec Razpai pour regarder des anime
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Surveillance des animaux avec Rekognition et Raspberry pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez une application Web simple avec Flask
Faire une minuterie de lavage-séchage avec Raspberry Pi
Créer un service Web avec Docker + Flask
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez votre propre caméra virtuelle avec Python + OpenCV et appliquez des effets originaux
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Créer une socket avec une interface Ethernet (eth0, eth1) (Linux, C, Raspberry Pi)
Créer une carte Web en utilisant Python et GDAL
MQTT Radicon Car avec Arduino et Raspberry
Lancer un serveur Web avec Python et Flask
Créer un système de notification des visiteurs à l'aide de Raspberry Pi
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch
Création d'un environnement distribué avec la série Raspberry PI (Partie 3: Installation et configuration de dnsmasq)
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
GPGPU avec Raspberry Pi
Caméra vidéo Raspberry Pi
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line
DigitalSignage avec Raspberry Pi
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
IoT facile pour démarrer avec Raspeye et MESH
Créez une application graphique native avec Py2app et Tkinter
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Créez un lot d'images et gonflez avec ImageDataGenerator
Créer une visionneuse de modèle 3D avec PyQt5 et PyQtGraph
[Linux] Créez un auto-certificat avec Docker et apache