[PYTHON] Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.

Einführung

Kürzlich habe ich etwas über RaspberryPI gelernt, daher habe ich RaspberryPI zum ersten Mal verwendet. Ich entschied mich für eine Überwachungskamera, die Bewegungen mit einer Webkamera erkennt.

Funktionsübersicht

Der Umriss der Funktion, die dieses Mal erstellt werden soll, ist wie folgt. ・ Nehmen Sie ein Bild auf, wenn eine Bewegung erkannt wird. (Dieses Mal werde ich nur Fotos verwenden.) ・ Nachdem Sie ein Bild aufgenommen haben, senden Sie das aufgenommene Bild automatisch an Slack. Nur das. Da es das erste Mal ist, werde ich eine einfache Sache ohne Gier machen.

Diesmal stellen wir die Hauptfiguren vor

・ RaspberryPI: Einfach gesagt, ein kleiner Computer ・ Bewegung: Bewegungserkennungssoftware (Mit dieser Software können Sie Bewegungen leicht erkennen.) ・ Slack: Chat-Tool (OK, wenn Sie sich Skype oder Line vorstellen)

Vorbereitung auf Bewegung

Bereiten Sie zuerst die Bewegung vor.

Installation von Bewegung

$ sudo apt-get install -y motion

Ändern Sie als Nächstes die Einstellungen in motion.conf.

・ Ich brauche kein Video, also höre ich auf.

Dies ist vorerst das Ende der Bewegungseinstellungen. Führen Sie zu diesem Zeitpunkt die Bewegung mit `sudo motion -c / etc / motion / motion.conf``` und aus Sie können durch Bewegungserkennung bestätigen, dass das Foto unter `/ tmp / motion``` geschrieben ist. Es ist einfach.

Es ist jedoch die Produktion von hier. Zum Abschluss muss ich die Fotos automatisch an Slack senden, damit ich auf meinem Handy benachrichtigt werden kann. Hier ist der Hauptteil dieses Artikels. Von nun an werden wir Slack einrichten.

Slack-Einstellungen

Schließen Sie zuerst die Registrierung des Slack-Kontos ab. Stellen Sie dann ein Token für die API auf der [Slack Token Issuing-Seite] aus (https://api.slack.com/web, "Token Issuing Page"). d4bdbe01-b0e3-9831-10d1-0c395ac7aae1.png

Sobald Sie ein Token erstellt haben, ist es Zeit, die Python Slack-Bibliothek zu Raspberry PI hinzuzufügen. Installieren Sie Slacker </ b>.

$ sudo pip install slacker

Versuchen Sie nach der Installation zunächst interaktiv TEST.

$ 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 = 'Es ist eine API'
>>> slacker.chat.post_message(channel_name, message)
<slacker.Response object at 0xb64aca50>

Dann bin ich gekommen! Ich konnte bestätigen, dass ich sicher bei Slack posten konnte. スクリーンショット 2015-12-06 0.00.06.png

Übrigens mag ich den Namen Bot nicht, deshalb habe ich den Benutzernamen in geändert.


>>> 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>

Ich konnte bestätigen, dass es sich richtig geändert hat. スクリーンショット 2015-12-05 23.56.44.png

Bild HOCHLADEN

Dieses Mal werden wir hauptsächlich Bilder veröffentlichen, sodass wir die Bilder sofort hochladen. Wenn ich mich auf die README-Datei von slacker beziehe, scheint die Upload-Funktion in der Dateiklasse vorbereitet zu sein, also werde ich das verwenden.

$ 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! Kein Fehler! Ich dachte, es ging hoch, aber Slack antwortete nicht. .. .. Ich bin ziemlich süchtig danach ^^; Wenn Sie die Slack-Seite häufig überprüfen, handelt es sich um ein Menü? An einem Ort wie diesem befindet sich ein Element namens Alle Dateien. .. .. 6785ecb9-746a-0d95-575b-dc902a1b9d2a.png

Als ich es öffnete, ging es richtig hoch! スクリーンショット 2015-12-06 1.59.13.png

Ich sehe, es wird nicht gepostet, wenn Sie es einfach hochladen. Anscheinend wird es nicht veröffentlicht, es sei denn, Sie pinnen (teilen) das Bild, das in diese Dateien hochgeladen wurde.

Stift

Zum Anheften sind die Informationen zur Zieldatei erforderlich. Speichern Sie also den Rückgabewert beim Hochladen.

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

Als ich versuchte, anhand dieser Informationen zu pinnen, trat ein Fehler auf.

>>> 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

Dies lag daran, dass in den Dateiinformationen keine Kanäle angegeben wurden. Es scheint, dass Sie den Kanal angeben müssen, der beim Hochladen der Datei auf Pin fixiert werden kann. Überprüfen Sie den Kanal erneut.

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

Geben Sie als Nächstes den Kanal richtig an und führen Sie Upload und Pin durch.

>>> 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>

Es ist fertig! 1af3f838-f7e3-765c-c406-2b4342d394eb.png (* Der kleine quadratische Rahmen unten rechts ist übrigens der Ort, an dem die Bewegung erkannt wurde.)

Nachdem die API-Bestätigung abgeschlossen ist, werden wir endlich mit Motion arbeiten.

Bewegungskooperation

Wenn es als nächstes durch Bewegung erkannt wird, geben wir die Ereignisverarbeitung auf der Bewegungsseite an, um es in den Durchhang zu versetzen. In Bezug auf die Angabe verfügt Motion über die folgenden Optionen, um das zum Zeitpunkt des Ereignisses vorgesehene Skript anzugeben und auszuführen.

on_event_start
Sie können das Skript angeben, das gestartet werden soll, wenn eine Bewegung erkannt wird
on_event_end
Sie können ein Skript angeben, das gestartet werden soll, wenn die Bewegungserkennung endet
on_picture_save
Sie können ein Skript angeben, das jedes Mal gestartet werden soll, wenn Sie ein Foto speichern
on_movie_start
Sie können ein Skript angeben, das gestartet werden soll, wenn Sie mit der Aufnahme eines Videos beginnen
on_movie_end
Sie können ein Skript angeben, das gestartet werden soll, wenn Sie die Videoaufnahme beendet haben
Dieses Mal werde ich on_picture_save verwenden, um auf Slack zu posten.

Übrigens, als ich nachforschte, wie man den Dateipfad angibt, Es wurde gesagt, dass Dateiinformationen als Argument an [diese Site] übergeben wurden (http://maruyosi2nd.seesaa.net/article/388238677.html "Referenz-Site").

  • 1 Mit den Optionen motion.conf on_picture_save, on_movie_start, on_movie_end wird der Dateiname an den Befehl übergeben ($ 1).

Übrigens wird im Fall von on_picture_save der Pfad der Shot-Datei als Argument übergeben.

Darauf basierend habe ich ein [Python-Skript] erstellt (https://github.com/yusukeyamatani/slackbot/blob/master/slack_bot.py).

Geben wir es in conf an.

# 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

Vergessen Sie als nächstes nicht, die Ausführungsberechtigung zu erteilen.

$ chmod a+x slackbot/slack_bot.py

Jetzt beweg dich! Die Fotos werden gespeichert.

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~~

Apropos schlaff. .. ..

Kita━━━ (゚ ∀ ゚) .━━━ !!! Es ist ein Erfolg! !! Ich komme stetig !!! 6b155334-b635-acc5-a46e-95cbd8b62d29.png

Überprüfung

Dann möchte ich es tatsächlich installieren und als Überwachungskamera verifizieren. Ich kaufte eine Plastikhülle für 100 Yen und benutzte sie als Hülle. IMG_4008.jpg

Lassen Sie es uns draußen installieren. Es ist perfekt! Niemand zweifelt daran, dass es sich um eine Überwachungskamera mit diesem Erscheinungsbild handelt. Es scheint, dass es überhaupt keinen Zweifel gibt, also scheint es als Überwachungskamera kein Problem zu geben. Lol </ b> IMG_4010.jpg

Genau dort gibt es eine verdächtige Figur. .. .. Dann wird Slack benachrichtigt! スクリーンショット 2015-12-23 16.07.37.png

Es ist perfekt! Außerdem kann ich viel besser fotografieren als ich erwartet hatte! Damit ist die Überwachungskamera fertig.

Zusammenfassung

Ich berührte Raspberry PI zum ersten Mal und war überrascht, dass eine Überwachungskamera so einfach realisiert werden konnte. Übrigens hatte ich dieses Mal vor, das Infrarotkameramodul zu verwenden, aber ich konnte es nicht gut starten und ich konnte es nicht rechtzeitig schaffen. orz

Da ich jedes Mal, wenn ich fotografiere, auf Slack poste, werden Benachrichtigungen usw. ziemlich erstaunlich sein Schließlich möchte ich das Infrarotkameramodul verwenden, das Foto selbst im Cloud-Speicher speichern usw. und es mit Slack benachrichtigen.

Dann wird hamano_t morgen einen Schlagstock-Touch haben. Morgen ist endlich Weihnachten und der Adventskalender wird geschlossen. Es tut mir leid für den Anfängerbeitrag am Tag vor dem Abschluss, aber danke fürs Lesen ^^

Nachtrag

Zu einem späteren Zeitpunkt konnte ich Videos von Haustieren von außen auf meinem Handy überwachen. Bitte beachten Sie auch dies ^^

Versuchen Sie, das Infrarotkameramodul mit Raspberry Pi zu verwenden So machen Sie Raspberry Pi von einem externen Netzwerk aus zugänglich und überwachen Haustiere von außen mit einem Mobiltelefon

Recommended Posts