[PYTHON] Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye

Un mémorandum quand je l'ai fait parce que j'avais besoin d'une caméra de surveillance dans une pièce sans pilote. La motivation n'est pas d'utiliser un moniteur et un clavier externes

Ce que j'ai utilisé

J'ai utilisé ce qui suit.

Raspbian (OS) Insco

$ #Obtenez le dernier RASPBIAN
$wget https://downloads.raspberrypi.org/raspbian_latest
--2017-09-12 20:02:28--  https://downloads.raspberrypi.org/raspbian_latest
Resolving downloads.raspberrypi.org... 93.93.135.188, 93.93.128.211, 93.93.128.230, ...
Connecting to downloads.raspberrypi.org|93.93.135.188|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip [following]
--2017-09-12 20:02:31--  https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip
Connecting to downloads.raspberrypi.org|93.93.135.188|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://director.downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip [following]
--2017-09-12 20:02:32--  http://director.downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip
Resolving director.downloads.raspberrypi.org... 93.93.130.214, 93.93.130.104, 93.93.128.133, ...
Connecting to director.downloads.raspberrypi.org|93.93.130.214|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1757290390 (1.6G) [application/zip]
Saving to: 'raspbian_latest'

raspbian_latest                               100%[==============================================================================================>]   1.64G   271KB/s    in 2h 4m

2017-09-12 22:06:45 (230 KB/s) - 'raspbian_latest' saved [1757290390/1757290390]

wget https://downloads.raspberrypi.org/raspbian_latest  16.39s user 71.27s system 1% cpu 2:04:16.75 total

$ #Vérifiez le fichier avec SHA1
$openssl sha1 raspbian_latest
SHA1(raspbian_latest)= c35688583510fc93c5deac637976b7a5c9c55689
openssl sha1 raspbian_latest  3.70s user 0.46s system 92% cpu 4.478 total

$ #Dégivrer
$unzip raspbian_latest
Archive:  raspbian_latest
  inflating: 2017-09-07-raspbian-stretch.img
unzip raspbian_latest  32.40s user 4.09s system 87% cpu 41.859 total

$ #Vérifiez le dossier
$ ls -al 
total 13033808
drwxr-xr-x   4 os10  staff         136  9 12 22:38 .
drwxr-xr-x  12 os10  staff         408  9 12 20:02 ..
-rw-r--r--   1 os10  staff  4916019200  9  8 01:23 2017-09-07-raspbian-stretch.img
-rw-r--r--   1 os10  staff  1757290390  9  8 01:30 raspbian_latest

Format de la carte SD et copie de Raspbian

$ #* Montez d'abord la carte SD
$ diskutil list
...
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.8 GB    disk2
   1:             Windows_FAT_32 NO NAME                 15.8 GB    disk2s1

$ #Formater la carte SD
$ diskutil eraseDisk FAT32 RPI /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s2 as MS-DOS (FAT32) with name RPI
512 bytes per physical sector
/dev/rdisk2s2: 30487440 sectors in 1905465 FAT32 clusters (8192 bytes/cluster)
bps=512 spc=16 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=30517248 bspf=14887 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2

$ #Démonter la carte SD
$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

$ sudo dd bs=16m if=2017-09-07-raspbian-stretch.img of=/dev/rdisk2
$ #L'ajout de r au nom de l'appareil est environ 10 fois plus rapide. Le progrès est Ctrl+Vérifiez avec t.
$ #La capacité d'image est de 5 Go et 6 Mo/C'était une vitesse de seconde, donc environ 10 minutes.
load: 2.00  cmd: dd 73563 uninterruptible 0.00u 0.04s
3+0 records in
2+0 records out
33554432 bytes transferred in 5.498053 secs (6102966 bytes/sec)
load: 2.00  cmd: dd 73563 uninterruptible 0.00u 0.07s
...
4916019200 bytes transferred in 461.069118 secs (10662217 bytes/sec)
sudo dd bs=16m if=2017-09-07-raspbian-stretch.img of=/dev/rdisk2  0.01s user 3.18s system 0% cpu 7:43.63 total

Activer SSH

Apparemment, il a été désactivé dans l'état initial récemment

$ cd /Volumes
Macintosh HD boot
$ ls -al 
total 12
drwxr-xr-x@  4 root  wheel   136  9 13 00:54 .
drwxr-xr-x  34 root  wheel  1224  8 13 16:54 ..
lrwxr-xr-x   1 root  wheel     1  8 12 21:44 Macintosh HD -> /
drwxrwxrwx@  1 os10  staff  2048  9 13 00:54 boot

$ touch ./boot/ssh
$ #Il semble que vous devriez créer un fichier vide appelé ssh dans le dossier de démarrage

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

Connectez Raspeye à Mac

Suivez les étapes ci-dessous pour configurer le partage sur le réseau Mac.

  1. Ouvrez Préférences système> Partage
  2. Cochez la case Partage Internet (Service)
  3. Cochez la case Thunderbolt Ethernet (Ports) dans Vers les ordinateurs utilisant
  4. Démarrez Raspeye et connectez-vous au Mac avec un câble LAN

Connectez-vous à Raspberry avec SSH

$ #Vérifiez l'interface réseau(bridge***Interface avec option Ethernet)
$ ifconfig
...
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether a6:5e:60:ab:ad:64
        inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
        inet6 fe80::a45e:60ff:feab:ad64%bridge100 prefixlen 64 scopeid 0x10
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x2
        member: en6 flags=3<LEARNING,DISCOVER>
                ifmaxaddr 0 port 15 priority 0 path cost 0
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active
$ #Thunderbolt I car inet est IPv4/F devient
$ # -adresse IP: 192.168.2.1
$ # -masque de sous-réseau: 255.255.255.0(/24)
$ # -Adresse de diffusion: 192.168.2.255
$ #L'adresse IP cible est donc 19.168.2.2~Dans la gamme de 244

$ #Obtenez une liste d'hôtes qui existent sur le réseau
$ nmap -n -sP 192.168.2.1/24
Starting Nmap 6.47 ( http://nmap.org ) at 2017-09-13 02:37 PHT
Strange error from connect (65):No route to host
Nmap scan report for 192.168.2.1
Host is up (0.0058s latency).
Nmap scan report for 192.168.2.3
Host is up (0.0052s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 0.03 seconds
$ #Cette adresse IP(192.168.2.3)Est comme ça

$ #Connexion SSH
$ ssh [email protected]  # [email protected] local est OK
[email protected]'s password: #PW est framboise
$ # NOTE:Pour L'IDENTIFICATION DE L'HÔTE À DISTANCE A CHANGÉ, supprimez l'empreinte digitale avec la commande suivante
$ # ssh-keygen -R 192.168.2.3

Utiliser VNC

La raison de l'utilisation de VNC est de vérifier l'image capturée

--Paramètres côté framboise

```shell-session
$ #Mettez VNC dans la framboise
$ sudo apt-get update
$ sudo apt-get install tightvncserver
$ tightvncserver #Démarrer le serveur VNC
#Paramètres PW
```

Paramètres Wifi

--Stab l'unité esclave LAN sans fil de Buffalo dans une tarte à la râpe

Les paramètres de la caméra

$ #Connectez la caméra USB à la tarte à la râpe
$ lsusb
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 005: ID 046d:0826 Logitech, Inc. HD Webcam C525
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ #La webcam Logitech est reconnue

$ #Logiciel de capture Insco
$ sudo apt install fswebcam
...
Unpacking fswebcam (20140113-1) ...
Setting up fswebcam (20140113-1) ...
Processing triggers for man-db (2.7.6.1-2) ...

$ #Test de tir
$ pwd
/home/pi
$ fswebcam -r 640x480 -F 1 -S 100 ./test.jpg # -F est le cadre, -S est l'exposition
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Fontconfig warning: ignoring UTF-8: not a valid region tag
Writing JPEG image to 'test.jpg'.
$ # /home/pi/test.L'image est enregistrée au format jpg, alors vérifiez-la avec VNC.

$ #Logiciel de réglage des paramètres de la caméra
$ sudo apt install guvcview
$ # Menu > Sound & Video >Lancer guvcview

Paramètres du capteur de mouvement

$ sudo apt-get install -y motion

$ #Test de tir
$ sudo motion -c /etc/motion/motion.conf
$ # /var/lib/motion/Il est enregistré au format. Vérifier avec GUI

$ #Mise à jour du fichier de configuration(Comme suit)
$ sudo vi /etc/motion/motion.conf
#Exécuter Motion en tant que service
daemon on
#Fonction vidéo désactivée
ffmpeg_output_movies off
#grandeur de la photo
width 640
height 480
#Seuil de détection de mouvement
threshold 3000 
gap 100
#À propos de l'image
locate_motion_mode on #Grattons le point de détection de mouvement
text_double on #Texte en gros

$ sudo vi /etc/default/motion
#Exécuter en tant que démon au démarrage
start_motion_daemon=yes 

Notifier avec Slack

Faites ce qui suit à l'avance

  1. Installez votre application dans votre espace de travail (équipe cible) --Inviter Bot sur le canal cible

Insco, un module dépendant de Python

$ sudo pip install slacker
pi@raspberrypi:~/slack $ sudo pip install slacker

Collecting slacker
  Downloading slacker-0.9.60.tar.gz
Requirement already satisfied: requests>=2.2.1 in /usr/lib/python2.7/dist-packages (from slacker)
Building wheels for collected packages: slacker
  Running setup.py bdist_wheel for slacker ... done
  Stored in directory: /root/.cache/pip/wheels/57/61/2c/99406ad2141fdf3ede576acedad209a3b63b9674af56bbfa19
Successfully built slacker
Installing collected packages: slacker
Successfully installed slacker-0.9.60

Test de publication de message

$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from slacker import Slacker
>>> token = "HOGEHOGE" # OAuth Tokens for Your Team >  Bot User OAuth Access Token
>>> slk = Slacker(token)
>>> cn = "C71DQB3MG" #Le nom du canal est codé. Vous pouvez le voir en regardant l'URL slack
>>> msg = 'C'est une API' 
>>> slk.chat.post_message(cn, msg)
<slacker.Response object at 0xb64aca50>

Test de téléchargement d'image

$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from slacker import Slacker
>>> token = "HOGEHOGE" # OAuth Tokens for Your Team >  Bot User OAuth Access Token
>>> slk = Slacker(token)
>>> cn = "C71DQB3MG"
>>> fn = '/home/pi/hoge.jpg'
>>> comment = "test"
>>> slk.files.upload(fn, channels=[cn], initial_comment=comment) #Publier une image
 <slacker.Response object at 0xb64aca50>

Publication d'images automatique avec Motion

Accrochez le script chaque fois que vous enregistrez une image dans les paramètres Motion

$ sudo vi /etc/motion/motion.conf
#Vous pouvez accrocher des scripts de conf lors de l'enregistrement
on_picture_save python /home/pi/slack/bot.py %f # %f=Nom du fichier image

$ cd /home/pi
$ mkdir slack
$ cd slack
$ vi bot.py #Création de script décrite plus loin
$ chmod a+x /home/pi/slack/bot.py #Accorder l'autorisation d'exécution
$ python ./bot.py /home/pi/test.jpg #tester

bot.py


# -*- coding: utf-8 -*-
import sys
from slacker import Slacker
from datetime import datetime

class Slack(object):

    __slacker = None

    def __init__(self, token):
        self.__slacker = Slacker(token)

    def post_to_file(self, file_path, encoded_ch_name):
        now = datetime.now()
        comment = "Uploaded At: " + now.strftime('%Y-%m-%d %H:%M:%S') + '(UTC)'
        print("Sending a picture")
        self.__slacker.files.upload(file_path, channels=[encoded_ch_name], initial_comment=comment)
        print("Done")

if __name__ == "__main__":

    param = sys.argv
    file_path = param[1]

    token = "" # Bot User OAuth Access Token
    slack = Slack(token)
    encoded_ch_name = "C71DQB3MG"
    slack.post_to_file(file_path, encoded_ch_name)

Faites de Motion un démon

$ #Activé en tant que service
$ sudo systemctl enable motion
$ sudo systemctl list-unit-files -t service #Confirmation des paramètres de la liste de services
$ sudo systemctl is-enabled motion #Vérifier les paramètres de mouvement
motion.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled motion
enabled
$ #OK car il est activé

$ #Changement de niveau d'exécution
$ sudo systemctl set-default multi-user.target #Changer la cible par défaut en mode multi-utilisateur(Le mouvement est activé à la mise sous tension)
$ sudo systemctl get-default
multi-user.target

$ #Démarrez et vérifiez l'état du service
$ sudo systemctl start motion
$ sudo service motion status
● motion.service - LSB: Start Motion detection
   Loaded: loaded (/etc/init.d/motion; generated; vendor preset: enabled)
   Active: active (exited) since Wed 2017-09-13 01:19:37 UTC; 5h 51min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 5219 ExecStop=/etc/init.d/motion stop (code=exited, status=0/SUCCESS)
  Process: 5268 ExecStart=/etc/init.d/motion start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/motion.service

Sep 13 01:19:37 raspberrypi systemd[1]: Starting LSB: Start Motion detection...
Sep 13 01:19:37 raspberrypi motion[5268]: Starting motion detection daemon: motion.
Sep 13 01:19:37 raspberrypi systemd[1]: Started LSB: Start Motion detection.
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [ERR] [ALL] myfopen: Error opening file /var/log/motion/motion.log with mode a: Permission denied
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [EMG] [ALL] motion_startup: Exit motion, cannot create log file /var/log/motion/motion.log: Permission denied

$ #Il semble qu'il n'y ait pas d'autorisation pour l'utilisateur de mouvement, alors changez-le
$ sudo chown motion:motion /var/run/motion
$ sudo chown motion:motion /var/log/motion/motion.log

$ #reconfirmation
$ sudo systemctl start motion
$ sudo systemctl status motion
...
Sep 13 07:17:01 raspberrypi systemd[1]: Starting LSB: Start Motion detection...
Sep 13 07:17:02 raspberrypi motion[5860]: Starting motion detection daemon: motion.
Sep 13 07:17:02 raspberrypi systemd[1]: Started LSB: Start Motion detection.
Sep 13 07:17:03 raspberrypi motion[5866]: [0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
Sep 13 07:17:03 raspberrypi motion[5866]: [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
$ #Cette fois OK

$ #Si vous souhaitez voir l'intégralité du journal de service
$ sudo journalctl -b | less #Vérifiez tous les journaux
$ sudo journalctl -u motion | less #Vérification du journal de mouvement

$ #Autre
$ sudo systemctl stop motion
$ sudo systemctl disable motion

Les références

http://qiita.com/toshihirock/items/8e7f0887b565defe7989 https://medium.com/@tzhenghao/how-to-ssh-into-your-raspberry-pi-with-a-mac-and-ethernet-cable-636a197d055 http://qiita.com/wf9a5m75/items/6712181de189169eb444 http://www.pawprint.net/designresources/netmask-converter.php https://vivibit.net/raspbian-enable-ssh/ https://www.raspberrypi.org/forums/viewtopic.php?t=191252 http://daisukekmr.hatenablog.com/entry/2015/01/22/201919 http://qiita.com/kinpira/items/bf1df2c1983ba79ba455 http://a244.hateblo.jp/entry/2016/10/14/053000 http://qiita.com/Go-zen-chu/items/63f65156c748b34e1678 http://safe-linux.homeip.net/web/motion/motion-03.html https://github.com/yusukeyamatani/slackbot/blob/master/slack_bot.py https://github.com/os/slacker https://github.com/Motion-Project/motion/issues/309 https://raspberrypi.stackexchange.com/questions/41342/how-to-start-motion-in-daemon-mode-on-rpi-running-raspbian-jessie https://raspberrypi.stackexchange.com/questions/43740/how-do-i-change-runlevel-on-model-3

Recommended Posts

Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Utiliser une webcam avec Raspberry Pi
Créer un environnement Tensorflow avec Raspberry Pi [2020]
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
Faire une minuterie de lavage-séchage avec Raspberry Pi
Notification téléphonique lorsque le mouvement de la caméra de surveillance est détecté sur Raspberry Pi
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
GPGPU avec Raspberry Pi
Caméra vidéo Raspberry Pi
DigitalSignage avec 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
Un mémorandum lorsqu'une erreur se produit avec pip install
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Jouez avec le module de caméra Raspberry Pi Zero WH Partie 1
Débutant Python s'ouvre et se ferme avec Raspberry Pi
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
getrpimodel: Reconnaître le modèle Raspberry Pi (A, B, B +, B2, B3, etc.) avec python
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Un mémorandum lors de l'utilisation d'une belle soupe
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Comment télécharger des fichiers sur Cloud Storage à l'aide de Python [Créer une caméra à point fixe avec Raspberry PI # 1]
Un mémorandum lors de l'acquisition automatique avec du sélénium
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
Communication série avec Raspberry Pi + PySerial
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Configuration du système d'exploitation avec Raspberry Pi Imager
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Essayez L Chika avec raspberrypi
Remarques sur la connexion Bluetooth d'un smartphone / PC à Raspeye 4
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Détectez les signaux analogiques avec un convertisseur A / N en utilisant python sur Raspberry Pi 3!
[Travail électronique] J'ai fabriqué un détecteur de son tactile Suica avec Raspberry Pi
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Mesurer la force du signal SIM avec Raspberry Pi
Surveillance des animaux avec Rekognition et Raspberry pi
Connaissance lors de la création d'un bot en utilisant discord.py
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Caméra infrarouge de sécurité Raspberry Pi (édition Python)
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Capteur humain amélioré fabriqué avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Une solution de contournement lors de l'installation de pyAudio avec pip.
Exécuter le servomoteur SG-90 avec Raspberry Pi
Mémorandum de migration avec GORM