Webcam mit dem Himbeergerät (Raspberry Pi 3 Model B)
Um was geht es?
Eine oder mehrere Webcams wird/ werden mit einem Himberrgerät verfrickelt und sendet 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 :-)
Script webcam.sh (das Script zum nachfrickeln)
<source lang=bash>
- !/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" eine Aufnahme in 640*480px |
- |---------------------------------------------------------------------------------------|
- | 2] versieht sie mit einer Einbledung von Datum und Uhrzeit |
- |---------------------------------------------------------------------------------------|
- | 3) speichert diese Aufnahme separat mit Datum und Uhrzeit im Name ab (.jpg) |
- |---------------------------------------------------------------------------------------|
- | 4) sendet die Aufnahme mithilfe von "wput" an einen FTP-Server |
- |---------------------------------------------------------------------------------------|
- | 5) ggf. 1-4 mit weitern Webcams |
- |_______________________________________________________________________________________|
- _________________Erstell 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 etc.___________________________________________________________________|_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 micht richtig übertragen da sie als ASCI versand wurden | 31.12.2015 |
- |----------------------|-----------------------------------------------------------------------------------|---------------|
- | Version 2.2 | Vorbereitung für weiter 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
</source>
Die Technik:
Benötigt werden:
- Himberrgerät (bei mir ist es ein Raspberry Pi 3 Modell B mit dem Ubuntu Mate Image
- microSD(HC) Speicherkarte (hier 32GB) oder eine microSD(HC) Karte + USB HDD/ SSD
- Netzteil mindestens 2A (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, das 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 +5V 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 +5V 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.
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
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>
- !/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>
- wput -nc -B webcam.jpg ftp://USER:Passwort@SERVER
</source>