🏠 FabLab Startseite | Nutzungsbedingungen | Impressum | Wiki

Live-3D-Druck-Webcam

Beim heutigen Selflab sind wir auch die Idee gekommen, die 3D-Drucker auch von zuhause per Webcam überwachen zu können, also haben wir kurzerhand eine Webcam an das schon vorhandene Rapsberry Pi angeschlossen und mittels mjpg-stream einen Stream bereitgestellt. Das Ergebnis sieht man hier: http://fablabtuer.ddns.net:8080. Hier jetzt eine kurze Zusammenfassung wie das funktioniert:

Zunächst muss per ssh oder angeschlossener Tastatur ein Terminal geöffnet werden. Dort überprüft man mithilfe des Befehls
lsusb
ob die angeschlossene Webcam erkannt wird. Einfach vor dem anschließen und nach dem anschließen ausführen, und prüfen ob eine neue Zeile hinzukommt. Bei unserem Beispiel ist das die Zeile
Bus 001 Device 004: ID 041e:4095 Creative Technology, Ltd.

Anschließend installieren wir die Software, die dafür nötig ist. Hierzu zunächst mithilfe von
sudo apt-get update
die Quellen aktualisieren. Anschließend installieren wir von mjpg-stream benötigte Pakete:
sudo apt-get install subversion-tools libjpeg8-dev imagemagick
Subversion um mjpg-stream herunterzuladen und die anderen beiden als benötigte Pakete.

Mit dem Befehl
svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
laden wir das mjpg-streamer Projekt in das aktuell gewählte Verzeichnis (also am Besten vorher in das gewünschte Verzeichnis wechseln).
Anschließend wechseln wir in das neu erzeugte Verzeichnis:
cd mjpg-streamer
und kompilieren den Quellcode mithilfe von
make
Sind die Quellen kompiliert, können wir das Programm mithilfe von
sudo make install
installieren. sudo ist nötig, damit die erzeugten Dateien in die verzeichnisgeschützten Ordner kopiert werden können.
Nun starten wir das installierte Programm das erste Mal und testen, ob alles funktioniert:
sudo mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 15" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080"
Dieser kompliziert aussehende Befehl macht nicht anderes, als mjpg_streamer zu starten mit /dev/video0 als Eingabegerät, der Auflösung 640x480(hier sollte man einen Wert kleiner oder gleich der maximalen Auflösung der Webcam wählen) und der Framerate 15. Gleichzeitig wird ein Webserver als Ausgabe gewählt, der auf Port 8080 gestartet wird. Um das nun zu testen, rufen wir im Browser http://localhost:8080 auf, falls wir auf dem Raspberry pi selbst arbeiten, falls wir per SSH arbeiten, ersetzen wir localhost natürlich durch die IP-Adresse des Raspberrys. Hier sollte nun eine kleine Weboberfläche zu sehen sein mit einem Begrüßungstext. Klickt man in der Menüleiste links auf Stream kann man direkt die Aufnahme der Webcam sehen, wenn alles geklappt hat.

Wenn das erledigt ist, müssen wir nurnoch dafür sorgen, dass das Programm beim Booten automatisch ausgeführt wird, dafür kann man Init-Skripts verwenden. Mit dem Befehl
sudo nano /etc/init.d/mjpg_streamer
(oder auch jedem anderen Texteditor) legen wir eine neue Datei an, diese sollte folgende Zeilen enthalten:

#!/bin/sh # /etc/init.d/mjpg_streamer # # Creation: 04.02.2013 # Last Update: 04.02.2013 # # Written by Georg Kainzbauer (http://www.gtkdb.de) # ### BEGIN INIT INFO # Provides: mjpg_streamer # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: MJPG-Streamer # Description: MJPG-Streamer takes JPGs from Linux-UVC compatible webcams and streams them as M-JPEG via HTTP. ### END INIT INFO start() { echo "Starting mjpg-streamer..." /usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 15" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080" >/dev/null 2>&1 & } stop() { echo "Stopping mjpg-streamer..."

kill -9 $(pidof mjpg_streamer) >/dev/null 2>&1

}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo “Usage: $0 {start|stop|restart}”
;;
esac
exit 0

Dieses Skript müssen wir nun ausführbar machen mit:
sudo chmod 755 /etc/init.d/mjpg_streamer
und in den Systemstart integrieren:
sudo update-rc.d mjpg_streamer defaults
Wenn das funktioniert sollte nach einem Neustart
sudo reboot
die Webcam über die selbe URL verfügbar sein.

Damit das ganze auch über das Internet verfügbar ist, muss ein DYN-DNS Dienst verwendet werden, um der wechselnden IP-Adresse des Routers eine statische Domain zuzuweisen, außerdem muss eine Portfreigabe des Ports 8080 des Routers (oder eines anderen frei gewählten Ports) auf den Port 8080 des Raspberry pi eingerichtet werden. Hierfür unbedingt darauf achten, dass dem Raspberry Pi innerhalb des Netzwerks eine gleichbleibende IP zugewiesen wird!

Die Original-Anleitung findet ihr hier: http://www.gtkdb.de/index_36_2098.html

2 „Gefällt mir“

Sieht gut aus.

Allerdings würde ich nach dem update noch ein Upgrade einfügen, damit die anderen Programme auch gleich upgedatet sind.

sudo apt-get update
sudo apt-get upgrade

:sunglasses:

Bei der Gelegenheit könnt ihr auch gleich mal auf die neue Raspbian Jessie mit Pixel updaten
und etwas aufräumen:

sudo apt-get dist-upgrade

reboot nicht vergessen.

:thumbsup:

EDIT:
Hab ich jetzt schnell gemacht :slight_smile:

Für den Livestream nimmst du direkt:

http://fablabtuer.ddns.net:8080/?action=stream

1 „Gefällt mir“

Ich bekomm den Stream über den Router leider nicht gedrosselt.
Wir müssen also die Framerate reduzieren.
Entweder statt stream über Picture oder mal schauen ob es reicht, wenn wir die FPS ncoh weiter runter drehen

Die Framerate reduzieren müsste ja reichen, einfach mit

nano /etc/init.d/mjpg_streamer

und dann die Zeile

/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 15" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080" >/dev/null 2>&1 &

zu

/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 5" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080" >/dev/null 2>&1 & 

ändern, oder 2 oder welche fps man halt haben möchte.
Um den Systemstart-job zu ändern:

sudo update-rc.d mjpg_streamer defaults

Nach einem reboot müsste die Kamera dann mit der niedrigeren fps aufnehmen und senden. Das kann ich bei Gelegenheit im Lab gerne machen :wink:

Wir sind evtl. nachher da. Vielleicht schaffe ich dass dann.
Ich hoffe das es an den Frames liegt.

EDIT :
Jaaaa, so geht das :smiley:
Wesentlich weniger Traffic!! :sunglasses: :thumbsup:
2fps reicht zum Zuschauen. Könte man sogar noch auf 1fps reduzieren.
Mal schauen wie hoch der Traffic steigt wenn mehrere Leute schauen :slight_smile:

1 „Gefällt mir“

Eventuell wird es bei mehreren Streams (Druker, Drucker, Drucker, Laser, Alex LiveStreamEisenbahn :smiley: …) doch wieder etwas viel.
Vielleicht macht es mehr Sinn pro Sec, oder alle 10 Sec. ein Bild online zu speichern, welches dann abgerufen wird.
Momentan läuft der Traffic ja über den Pi. In dem Fall würde der Traffic über den jeweiligen Provider laufen.
(Geht sowas mit Picload, etc. ?).

1 „Gefällt mir“

Eigentlich kann man dafür eine kleine PHP-Anwendung schreiben, dann reicht ein einfaches POST-Formular vom PI aus um die Dateien hochzuladen und der Upload ist auf das eine Bild pro Sekunde beschränkt. Ist vielleicht einfacher als eine ähnliche Anwendung zu finden :wink:
Die Anwendung die das anzeigt wäre dann auch einfach zu schreiben, ein wenig HTML und Javascript. Wäre eine Überlegung wert oder?