[PYTHON] J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.

introduction

Récemment, j'ai découvert RaspberryPI, c'était donc la première fois que j'utilisais RaspberryPI. J'ai décidé de créer une caméra de surveillance qui détecte les mouvements à l'aide d'une webcam.

Aperçu fonctionnel

Le contour de la fonction à créer cette fois est comme ça. ・ Prenez une photo lorsqu'un mouvement est détecté. (Cette fois, je n'utiliserai que des photos.) ・ Après avoir pris une photo, publiez automatiquement la photo prise sur Slack. Seulement ça. Puisque c'est la première fois, je vais faire une chose simple sans avidité.

Présentation des personnages principaux cette fois

・ RaspberryPI: En termes simples, un petit ordinateur ・ Mouvement: logiciel de détection de mouvement (vous pouvez facilement détecter un mouvement à l'aide de ce logiciel) ・ Slack: outil de chat (OK si vous imaginez Skype ou Line)

Se préparer au mouvement

Préparez d'abord la motion.

installation de mouvement

$ sudo apt-get install -y motion

Ensuite, modifiez les paramètres dans motion.conf.

-Tout d'abord, désactivez le paramètre du démon pour le démarrer manuellement à chaque fois dans la phase de développement.

・ Je n'ai pas besoin d'une vidéo, alors je vais m'arrêter.

-Les images étant exportées fréquemment, la carte SD peut se détériorer, donc exporter les photos vers la zone mémoire. (Remarque: la zone sous tmp a été remplacée à l'avance par la zone mémoire.)

C'est la fin des paramètres de mouvement pour le moment. À ce stade, lancez motion avec sudo motion -c / etc / motion / motion.conf '' et Vous pouvez confirmer que la photo est écrite sous / tmp / motion``` par détection de mouvement. C'est facile.

Cependant, c'est la production d'ici. Pour terminer, je dois publier automatiquement les photos sur Slack afin que je puisse être averti sur mon mobile. Alors, voici la partie principale de cet article. À partir de maintenant, nous allons configurer Slack.

Paramètres Slack

Terminez d'abord [Enregistrement du compte Slack](https://slack.com/, «[Enregistrement du compte Slack]»). Ensuite, émettez un Token pour l'API à partir de la [Slack Token Issuing Page](https://api.slack.com/web, «Token Issuing Page»). d4bdbe01-b0e3-9831-10d1-0c395ac7aae1.png

Une fois que vous avez créé un jeton, il est temps d'ajouter la bibliothèque Python Slack à Raspberry PI. Installez Slacker </ b>.

$ sudo pip install slacker

Une fois installé, essayez d'abord TEST de manière interactive.

$ 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 = "xxxx-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxx"
>>> slacker = Slacker(token)
>>> channel_name = "#" + "general"
>>> message = 'C'est une API'
>>> slacker.chat.post_message(channel_name, message)
<slacker.Response object at 0xb64aca50>

Puis je suis venu! J'ai pu confirmer que je pouvais publier sur Slack en toute sécurité. スクリーンショット 2015-12-06 0.00.06.png

Au fait, je n'aime pas le nom du bot, j'ai donc changé le nom d'utilisateur en.


>>> slacker.chat.post_message(channel_name, message, as_user=True)
<slacker.Response object at 0xb6bff910>
>>> slacker.chat.post_message(channel_name, message, username='test')
<slacker.Response object at 0xb64ac210>

J'ai pu confirmer qu'il a bien changé. スクリーンショット 2015-12-05 23.56.44.png

TÉLÉCHARGEMENT D'IMAGE

Cette fois, nous publierons principalement des images, nous allons donc immédiatement TÉLÉCHARGER les images. Quand je me réfère au README de slacker, il semble que la fonction de téléchargement est préparée dans la classe files, donc je vais l'utiliser.

$ 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 = "xxxx-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxx"
>>> slacker = Slacker(token)
>>> channel_name = "#" + "general"
>>> slacker.files.upload('/var/lib/motion/01-20151206004121-00.jpg')
<slacker.Response object at 0xb64b4e50>

Oh! Pas d'erreur! Je pensais que cela avait augmenté, mais Slack n'a pas répondu. .. .. Je suis assez accro à ça ^^; Si vous consultez souvent la page Slack, s'agit-il d'un menu? Il y a un élément appelé Tous les fichiers dans un endroit comme celui-ci. .. .. 6785ecb9-746a-0d95-575b-dc902a1b9d2a.png

Quand je l'ai ouvert, il est monté correctement! スクリーンショット 2015-12-06 1.59.13.png

Je vois, il n'est pas publié si vous le téléchargez simplement. Apparemment, il semble qu'il ne sera publié que si vous épinglez (partagez) l'image téléchargée dans ces fichiers.

Épingle

Pour épingler, les informations du fichier cible sont requises. Alors, enregistrez la valeur de retour lorsque vous téléchargez.

>>> result = slacker.files.upload('/var/lib/motion/01-20151206004057-02.jpg')

Lorsque j'ai essayé d'épingler en utilisant ces informations, une erreur s'est produite.

>>> slacker.pins.add(channel='C0G0XXXXX', file_=result.body['file']['id'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/slacker/__init__.py", line 495, in add
    'timestamp': timestamp,
  File "/usr/local/lib/python2.7/dist-packages/slacker/__init__.py", line 69, in post
    return self._request(requests.post, api, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/slacker/__init__.py", line 61, in _request
    raise Error(response.error)
slacker.Error: file_not_shared

Cela était dû au fait que les canaux n'étaient pas spécifiés dans les informations de fichier. Il semble que vous deviez spécifier le canal qui peut être épinglé lors du téléchargement du fichier à épingler. Vérifiez à nouveau la chaîne.

>>> slacker.channels.list().body
{u'channels': [{u'name': u'general', u'id': u'C0G0XXXXX'....}, ....

Ensuite, spécifiez correctement le canal et effectuez le téléchargement et l'épinglage.

>>> result = slacker.files.upload('/var/lib/motion/01-20151206004057-02.jpg', channels=['C0G0XXXXX'])
>>> slacker.pins.add(channel='C0G0XXXXX', file_=result.body['file']['id'])
<slacker.Response object at 0xb64ee6b0>

C'est fait! 1af3f838-f7e3-765c-c406-2b4342d394eb.png (* Au fait, le petit cadre carré en bas à droite est l'endroit où le mouvement a été détecté.)

Maintenant que la confirmation de l'API est terminée, il est temps de travailler avec motion.

coopération de mouvement

Ensuite, quand il est détecté par le mouvement, nous spécifierons le traitement des événements côté mouvement afin de le poster en relâchement. Quant à la manière de spécifier, motion dispose des options suivantes pour spécifier et exécuter le script prévu au moment de l'événement.

on_event_start
Vous pouvez spécifier le script à démarrer lorsqu'un mouvement est détecté
on_event_end
Vous pouvez spécifier un script à démarrer lorsque la détection de mouvement se termine
on_picture_save
Vous pouvez spécifier un script à démarrer chaque fois que vous enregistrez une photo
on_movie_start
Vous pouvez spécifier un script à démarrer lorsque vous commencez à filmer une vidéo
on_movie_end
Vous pouvez spécifier un script à démarrer lorsque vous avez fini de filmer une vidéo
Cette fois, j'utiliserai on_picture_save pour publier sur Slack.

À propos, lorsque j'ai étudié comment spécifier le chemin du fichier, Il a été dit que les informations de fichier ont été transmises comme argument à ce site.

  • 1 Avec les options motion.conf on_picture_save, on_movie_start, on_movie_end, le nom du fichier est passé à la commande ($ 1).

Par ailleurs, dans le cas de on_picture_save, le chemin du fichier photographié est passé en argument.

Sur cette base, j'ai créé un script Python.

Précisons-le dans conf.

# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
#; on_picture_save value
on_picture_save python /home/pi/slackbot/slack_bot.py %f

Ensuite, n'oubliez pas d'accorder l'autorisation d'exécution.

$ chmod a+x slackbot/slack_bot.py

Maintenant, lancez le mouvement! Les photos sont enregistrées.

sudo motion -c /etc/motion/motion.conf
~~snip~~
[1] [NTC] [ALL] motion_detected: Motion detected - starting event 1
[1] [NTC] [EVT] event_newfile: File of type 1 saved to: /tmp/motion/01-20151208222942-04.jpg
[1] [NTC] [EVT] event_newfile: File of type 1 saved to: /tmp/motion/01-20151208222942-05.jpg
[1] [NTC] [EVT] event_newfile: File of type 1 saved to: /tmp/motion/01-20151208222943-01.jpg
~~snip~~

En parlant de mou. .. ..

Kita━━━ (゚ ∀ ゚) .━━━ !!! C'est un succès! !! J'arrive régulièrement !!! 6b155334-b635-acc5-a46e-95cbd8b62d29.png

Vérification

Ensuite, je voudrais l'installer et le vérifier en tant que caméra de surveillance. J'ai acheté un étui en plastique pour 100 yens et l'ai utilisé comme étui. IMG_4008.jpg

Installons-le à l'extérieur. C'est parfait! Personne ne doute qu'il s'agit d'une caméra de surveillance avec cette apparence. Il semble qu'il n'y ait aucun doute à ce sujet, donc il ne semble y avoir aucun problème en tant que caméra de surveillance. Lol </ b> IMG_4010.jpg

Il y a là un chiffre suspect. .. .. Ensuite, Slack sera averti! スクリーンショット 2015-12-23 16.07.37.png

C'est parfait! De plus, je peux prendre des photos bien mieux que ce à quoi je m'attendais! Ceci complète la caméra de surveillance.

Résumé

J'ai touché Raspberry PI pour la première fois et j'ai été surpris qu'une caméra de surveillance puisse être réalisée si facilement. Au fait, j'avais l'intention d'utiliser le module de caméra infrarouge cette fois, mais je ne pouvais pas bien le démarrer et je ne pouvais pas le faire à temps. orz

De plus, comme je poste sur Slack à chaque fois que je tire, les notifications, etc. seront assez étonnantes orz Donc, à terme, j'aimerais utiliser le module de caméra infrarouge, enregistrer la photo elle-même dans le stockage en nuage, etc., et le notifier avec Slack.

Alors demain, hamano_t aura une touche de bâton. Demain, c'est enfin Noël et le calendrier de l'Avent sera fermé. Je suis désolé pour le post du débutant la veille de la clôture, mais merci d'avoir lu ^^

Postscript

Plus tard, j'ai rendu possible la surveillance des vidéos d'animaux de compagnie sur mon téléphone portable lorsque j'étais loin de chez moi. Veuillez vous y référer également ^^

Essayez d'utiliser le module de caméra infrarouge avec Raspberry Pi Comment rendre Raspberry Pi accessible depuis un réseau externe et surveiller les animaux de compagnie de l'extérieur avec un téléphone portable

Recommended Posts