Webcam mit dem Himbeergerät (Raspberry Pi 3 Model B)

Aus Fingers Wiki
(Weitergeleitet von Webcam mit dem Himberrgerät)
Zur Navigation springen Zur Suche springen

Um was geht es?

Eine oder mehrere Webcams wird/werden mit einem Himbeergerät verfrickelt und senden dann aller 10 Sekunden ein Bild zu einem FTP Server. Gleichzeitig werden die Bilder nach Datum und Uhrzeit sortiert lokal abgespeichert, so dass im Nachgang ein Zeitraffer erzeugt werden kann. Hier mal eine Beispielaufnahme meiner Zimmerdecke :-)

Webcam.jpg













Script webcam.sh (das Script zum nachfrickeln)

#!/bin/sh

 if [ $(pgrep -cf $0) -le 2 ] 
then
       echo "not runnig"
       while [ 1 -eq 1 ]; d
# |#!/bin/bash
#
#  ______________________________Was macht das Script?____________________________
# |                                                                               |
# | 1) erzeugt von einer USB-Webcam mithilfe von "fswebcam" ein Bild in 640*480px |
# |-------------------------------------------------------------------------------|
# | 2] versieht es mit einer Einblendung von Datum und Uhrzeit                    |
# |-------------------------------------------------------------------------------|
# | 3) speichert dieses Bild separat mit Datum und Uhrzeit im Name ab   (.jpg)    |
# |-------------------------------------------------------------------------------|
# | 4) sendet das Bild mithilfe von "wput" an einen FTP-Server                    |
# |-------------------------------------------------------------------------------|
# | 5) ggf. 1-4 mit weiteren Webcams                                              |
# |_______________________________________________________________________________|
#
#  ______________Erstellt von___________________
# |                                             |
# |     Chemnitzsurfer für Fingers Welt         |
# |                                             |
# |***********Igor mehr Strom!!!!!!*************|
# |_____________________________________________
#
#  ________________Installation:________________
# | 1)        sudo apt-get update               |
# |---------------------------------------------|
# | 2)        sudo apt-get upgrade              |
# |---------------------------------------------|
# | 3)        sudo apt-get install ftp          |
# |---------------------------------------------|
# | 4)        sudo apt-get install fswebcam     |
# |---------------------------------------------|
# | 5)        sudo apt-get install wput         |
# |---------------------------------------------|
# | 6) ***OPTIONAL MUSS DER TREIBER FÜR DIE     |
# |    WEBCAM MANUELL INSTALLIERT WERDEN***     |
# |---------------------------------------------|
# | 7)  Vor der ersten Verwendung unter         |
# |     "/home/pi" die Ordner "webcam1",        |
# |     "webcam2", "webcam3" usw. erstellen.    |
# |     Dort werden dann die Bilder für eine    |
# |     spätere Nutzung abgespeichert.          |
# |---------------------------------------------|
# | 7) diesen script manuell oder via           |
# |  Cronjob ausführen                          |
# |_____________________________________________|
#
# ___VERSIONSÜBERSICHT:___
#
#  ___Version___|_Änderungen __________________________________________|_Datum_________
# | Version 1.0 | 1. Test                                              | 27.12.2015    |
# |-------------|------------------------------------------------------|---------------|
# | Version 2.0 | Verwendung von fswebcam und wput                     | 31.12.2015    |
# |-------------|------------------------------------------------------|---------------|
# | Version 2.1 | Bugfix Bilder wurden nicht richtig übertragen da sie | 31.12.2015    |
# |             | als ASCII versandt wurden                            |               |
# |-------------|------------------------------------------------------|---------------|
# | Version 2.2 | Vorbereitung für weitere Webcams                     | 31.12.2015    |
# |-------------|------------------------------------------------------|---------------|
# | Version 3.0 | Bilder werden separat nach Muster                    |               |
# |             | Jahr_Monat_Tag_Stunde_Minute_Sekunde.jpg in          | 01.01.2016    |
# |             | die jeweiligen Ordner webcam1, webcam2, webcam3      |               |
# |             | gespeichert.                                         |               |
# |-------------|------------------------------------------------------|---------------|
# | Version 4.0 | Script führt hochladen aller 10 Sekunden selber aus  | 08.01.2017    |
# |____________________________________________________________________|_______________|
#
# ___1.Webcam___
#
# ___Erfassung des Bildes von der Webcam, einfügen von Datum und Uhrzeit___
#
fswebcam -r 640*480 -d  /dev/video0 -v /home/pi/webcam.jpg -v /home/pi/webcam1/$(date +%Y_%m_%d_%k_%M_%S).jpg -s--timestamp
#
# ___lädt das Bild auf den FTP-Server hoch___
#
wput -nc -B webcam.jpg  ftp://USER:Passwort@SERVER
#
# ___2.Webcam_(deaktiviert,_bei_Bedarf_"#"_vor_den_Zeilen_entfernen___
#
# ___Erfassung des Bildes von der Webcam, einfügen von Datum und Uhrzeit___
#
#fswebcam -r 640*480 -d  /dev/video1 -v /home/pi/webcam2.jpg  -v /home/pi/webcam2/$(date +%Y_%m_%d_%k_%M_%S).jpg -s--timestamp
#
# ___lädt das Bild auf den FTP-Server hoch___
#
#wput -nc -B webcam2.jpg  ftp://USER:Passwort@SERVER
#
# ___3.Webcam_(deaktiviert,_bei_Bedarf_"#"_vor_den_Zeilen_entfernen___
#
# ___Erfassung des Bildes von der Webcam, einfügen von Datum und Uhrzeit___
#
#fswebcam -r 640*480 -d  /dev/video2 -v /home/pi/webcam3.jpg  -v /home/pi/webcam2/$(date +%Y_%m_%d_%k_%M_%S).jpg -s--timestamp
#
# ___lädt das Bild auf den FTP-Server hoch___
#
#wput -nc -B webcam3.jpg  ftp://USER:Passwort@SERVER 
       sleep  10
       done
else
        echo "running, do nothing"
 fi

Die Technik:

Benötigt werden:

  • Himbeergerät (bei mir ist es ein Raspberry Pi 3 Modell B mit dem Ubuntu Mate Image
  • microSD(HC) Speicherkarte (hier 32 GB) oder eine microSD(HC) Karte + USB HDD/ SSD
  • Netzteil mindestens 2 A (je nachdem ob ein WLAN/Surfstick verwendet wird und ob die Webcam evtl. IR LEDs besitzt mehr) Da die Adern in üblichen microUSB Kabeln sehr dünn sind, kann es passieren, dass der Pi eine Unterspannung erkennt (bei dem Raspberry Pi2B durch ein regenbogenfarbiges Viereck in der oberen rechten Bildecke). Bei mir brachte folgendes Abhilfe:
(Zählung von den LEDs zu den USB Ports) 

Die ersten zwei Pins in der oberen Reihe sind +5 V Anschlüsse gefolgt von einem Massepin. Über diese kann der Pi auch mit Strom versorgt werden.(Den folgenden Abschnitt sollte man, wenn man später die GPIO Leiste für was anderes nutzen will vll. nicht machen) An einen der zwei +5 V Pins und an dem Massepin habe ich einfach meine Zuleitung (ein Stück H07RN-F 2G 0,75mm² von einer alten Handlampe) angelötet. Zusätzlich habe ich noch den dritten Pin auf der unteren Leiste (GPIO03, SCL1/ I²C) über einen alten Taster mit dem Massepin verbunden. Über diesen Taster kann der Pi neu gestartet, nachdem er heruntergefahren wurde.

  • Zugang zum weltweiten Gewebe (Surfstick, WLAN, LAN)
  • Webcam mit brauchbare Auflösung (hier eine 5 Jahre alte Logitech mit interpolierten 720p und später evtl. noch eine Webcam mit IR LEDs)

Hier mal ein Bild vom ersten Testaufbau.

1.testsystem.PNG













HOW TO

1) Surfstick / WLAN / LAN zum funktionieren bringen
=> bei Surfsticks bei denen beim Einstecken nur ein Laufwerksfenster geöffnet wird (Huwai) hilft es folgenden Befehl im Terminal auszuführen und anschließend den Pi neu zustarten. <source lang=bash> sudo apt-get install usb-modeswitch</source>

2) Anleitung unter der Rubrik Installation im Script folgen.
3) Script im Ordner /home/pi als webcam.sh abspeichern, die Daten des FTP-Servers einpflegen und ggf. mit
<source lang=bash>

sudo chmod +x webcam.sh</source> 
das Script ausführbar machen.

4) Das Script testweise manuell mit
<source lang=bash> bash webcam.sh</source>
ausführen um zu tesen ob die Webcam richtig erkannt wurde und der Upload klappt.

Der Cronjob

Der Cron-Daemon ist ein Dienst, der automatisch Skripte und Programme zu vorgegebenen Zeiten starten kann. Der auszuführende Befehl wird in einer Tabelle, der "crontab", gespeichert. Es gibt eine systemweite Datei /etc/crontab, die nur mit Root-Rechten bearbeitet werden kann. Zusätzlich kann jeder Benutzer eine eigene Crontab erstellen, die man dann im Verzeichnis /var/spool/cron/crontabs/ findet.Diese Tabelle besteht aus sieben bzw. sechs Spalten. Die ersten fünf dienen der Zeitangabe (Minute, Stunde, Tag, Monat, Wochentage) für einen Cronjob, dann folgt (nur in der systemweiten Crontab) der Benutzername, unter dem der Befehl ausgeführt werden soll, und die letzte enthält den Befehl. Die einzelnen Spalten werden durch Leerzeichen oder Tabulatoren getrennt. <ref>Zitat von https://wiki.ubuntuusers.de/Cron/</ref>

Der Cronbefehl wird wie folgt aufgebaut


Um das Script bei Systemstart zu starten muss der Befehl @reboot genutzt werden

Bekannte Bugs

Es wird immer mal wieder ein schwarzes Bild hochgeladen und das script gibt z.B. GD Error: gd-jpeg: JPEG library reports unrecoverable error: Unsupported marker type 0x0fCaptured frame in 0.00 seconds. als Fehlermeldung aus

Fehler fswebcam.jpg

Mögliche Ursachen

  • Unterspannung an der Kamera (wird zumindest in div. Raspi Foren als mögliche Ursache genannt => evtl. Abhilfe durch einen aktiven USB Hub oder durch eine externe Stromversorgung
  • Hardwaredefekt an der Kamera (tritt bei mir nur an einer billigen 20€ Webcam auf)
  • Probleme mit dem Treiber

Weiterverarbeitung der lokal gespeicherten Bilder

unter Ubuntu MATE

Zeitraffervideos

Was wird gebraucht

1) ffmpeg muss installiert sein
2) 1 kleines Script
3) die Bilder von der Webcam in den jeweiligen Ordnern

Wie wird es gemacht?

1) im Terminal eine Bash Datei erstellen (z.B. mit nano name.sh) <source lang=bash>

  1. !/bin/bash

a=1 for i in `ls -rt *.jpg`; do new=$(printf "%04d.jpg" ${a}) cp ${i} ./renamed/${new} let a=a+1 done </source> 2) im Ordner wo die Bilder gespeichert sind (z.B. Webcam1) einen weiteren Ordner erstellen mit dem Namen "renamed" 3) dort ein Terminal öffnen und mit <source lang=bash> ffmpeg -f image2 -i %04d.jpg -r 25 -vb 4096k timelapse.mpg </source> aus den Bildern eine Zeitrafferaufnahme erstellen. ( Bei 400 Bildern, was ca. 1:10 h in Realzeit und etwa 15-20 Sekunden im fertigen Zeitraffer entspricht, wird bei einer Auflösung von 640*480 ca. 10 MB für den fertigen mpg Film gebraucht

Beispiel https://www.youtube.com/watch?v=yJ9WOImWrcI

FAQ

Wie viel Speicherplatz brauche ich?
Ein gespeichertes Bild in 640*480 hat ein Größe von ca. 30-50kB, was pro Stunde etwa 18 MB und am Tag ca. 400-500MB bedeutet. Das heißt auch, das falls ein Surfstick mit Tagesflat genutzt werden soll, muss diese ebenfalls mind. 500 MB haben. (Durch die Drosselung kann es im worst case zu timeouts kommen)

Brauche ich unbedingt einen Raspberry Pi?
Nein, aber etwas, das mindestens einen USB Anschluss für die Webcam hat, Zugang zum Internet und einen halbwegs aktuelle Ubuntuversion (oder Debian)

Ich will keien Upload, sondern nur die Bilder lokal Speichern
Einfach den Teil im Script auskommentieren [mit einem # am Zeilenanfang] der für das hochladen verantwortlich ist
FTP Upload ein
<source lang=bash> wput -nc -B webcam.jpg ftp://USER:Passwort@SERVER </source>
FTP Upload aus
<source lang=bash>

  1. wput -nc -B webcam.jpg ftp://USER:Passwort@SERVER

</source>