Webcam-Server einrichten

Aus Roebke Wiki
Zur Navigation springen Zur Suche springen

Motion

Bietet sowohl Motiondetection, als auch Livestream!!

Übersicht der Befehle: https://motion-project.github.io/motion_config.html#OptTopic_Motion_Detection

ausführliche Doku http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuideOneLargeDocument

sudo apt-get install motion

in /etc/default/motion den Dämon anschalten

sudo nano /etc/default/motion
start_motion_daemon=yes

In der /etc/motion/motion.conf

sudo nano /etc/motion/motion.conf

Zugriff auf den Stream auch von anderen Rechner als Localhost ermöglichen.

# Restrict webcam connections to localhost only (default: on)
webcam_localhost off

Speicherort ändern

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /tmp/motion

Speicherort für Snapshots und Motiontracker unterschiedlich, erst tagrget_dir setzen und dann im Filenamen für das jpg den Unterordner angeben

target_dir /tmp/motion
jpeg_filename motion/motion-%Y-%m-%d-%H:%M:%S
snapshot_filename snapshot/snapshot-%Y-%m-%d-%H:xx

Nach jeder Änderung neu starten

/etc/init.d/motion restart

Motion detection anschalten

# Output 'normal' pictures when motion is detected (default: on)
# Valid values: on, off, first, best, center

Motion detection pausieren, anschalten, Status anzeigen ( http://www.lavrsen.dk/foswiki/bin/view/Motion/RemoteControlHttp)

http://localhost:8080/0/detection/pause
http://localhost:8080/0/detection/start
http://localhost:8080/0/detection/
output_normal best

Snapshotfunktion

# Make automated snapshot every N seconds (default: 0 = disabled)
snapshot_interval 1800

die Ausgabe von swf-files unterbinden, der default ist hier "on", nicht off, wie im Kommentar beschrieben

# Use ffmpeg to encode mpeg movies in realtime (default: off)
ffmpeg_cap_new off

Alle Dateien älter als 30 Tage löschen (jedenTag, per cron)

sudo crontab -e
0 0 * * * find /var/www/cap/ -iname "*201*" -mtime +30 -delete

Anleitung basierend auf der Anleitung von Kai, aber mit Daemon

Motion wie unten beschrieben einrichten. Die /etc/init.d/motion von einer existierenden Installation kopieren und die Pfade anpassen:

sudo /etc/init.d/motion
PATH_BIN=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/
DAEMON=/usr/local/bin/motion

Die conf an den Platz kopieren an den sie die modifizierte motion erwatet

sudo mv /home/pi/motion/motion-mmalcam.conf /etc/motion.conf

jetzt müsste der Daemon funktionieren.

Die Raspberry Kamera sollte mittlerweile funktionieren

http://www.pcwelt.de/ratgeber/Mit_dem_Raspberry_Pi_die_Wohnung_ueberwachen-Sicherheit-8638548.html


Die Kamera von RaPi verwenden Anleitung von JAN KARRES

klappt nicht :-( motion lässt sich zwar normal starten, wenn conf verschoben wurde, aber das initscript funzt nicht.

Raspberry Pi: Kamera Modul mit Motion Tracking http://jankarres.de/2013/12/raspberry-pi-kamera-modul-mit-motion-tracking/

GESCHRIEBEN VON JAN KARRES IN RASPBERRY PI Mit dem Kamera Modul für den Raspberry Pi wurde ein Stück Hardware vorgestellt mit dem man viel spielen kann. Möchte man nur Bilder bzw. Videos aufnehmen, wenn sich auf dem aufgenommenen Bildbereich etwas bewegt, so kommt sogenanntes Motion Tracking zum Einsatz. Längere Zeit war dies mit dem Raspberry Pi Kamera Modul nicht möglich. Jedoch hat dozencrows ein Fork der Software Motion veröffentlicht, welche mit dem Kamera Modul zurechtkommt. Im Folgenden erkläre ich wie man Motion Tracking für das Raspberry Pi Kamera Modul installiert und einrichtet, sodass am Ende kurze Videos aus Bildern zusammengesetzt aufgenommen werden.

Voraussetzung: Raspbian oder vergleichbare Distribution installiert, welche aktuell ist wie auch angeschlossenes und in raspi-config aktiviertes Kamera-Modul

Step 1 (optional)

Wenn gewünscht, sollten wir zunächst das Licht, welches leuchtet, wenn man mit dem Raspberry Pi Kamera Modul aufnimmt, deaktivieren. Dazu müssen wir in der Datei /boot/config.txt einen Parameter setzen und anschließend den Raspberry Pi neustarten.

sudo nano /boot/config.txt
disable_camera_led=1

Anschließend folgenden Befehl ausführen

sudo reboot

Step 2

Darauffolgend müssen wir einige Software Pakete installieren, welche Motion benötigt. Motion selbst installieren wir nicht über den Paketmanager, da wir die angepasste Version von dozencrows benötigen.

sudo apt-get install ffmpeg libav-tools libavcodec53 libavdevice53 libavfilter2 libavformat53 libavutil51 libdc1394-22 libdirac-encoder0 libgsm1 libmp3lame0 libmysqlclient18 libopencv-core2.3 libopencv-imgproc2.3 libpostproc52 libpq5 libraw1394-11 libschroedinger-1.0-0 libspeex1 libswscale2 libtheora0 libva1 libvpx1 libx264-123 libxvidcore4 mysql-common libjpeg62 screen

Step 3

Nun laden wir die bereits kompilierte, von dozencrows angepasste, Version von Motion herunter. Der aktuelle Downloadlink steht im Git Repository des Projektes.

wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz
tar zxvf motion-mmal.tar.gz
sudo mv motion /usr/local/bin/

Step 4

Wir erstellen nun einen Ordner samt Unterordner für alle Dateien, die seitens Motion benötigt bzw. erzeugt werden und verschieben die Config in diesen Ordner.

mkdir /home/pi/motion
mkdir /home/pi/motion/video
sudo mv motion-mmalcam.conf /home/pi/motion/motion-mmalcam.conf
cd motion

Step 5

Wir müssen nun die Konfigurationsdatei von Motion anpassen. Dabei ersetzen wir die Zeilen aus der ersten Box jeweils durch die Zeilen in der zweiten Box. Die in dieser Anleitung angepassten Werte sind so gesetzt, dass das Motion Tracking funktioniert. Jedoch ist es auf jeden Fall empfehlenswert, sich auch die anderen Werte anzusehen, da man einiges mehr ein-, aus- und umschalten kann.

sudo nano motion-mmalcam.conf
target_dir /home/pi
output_pictures on
logfile /home/pi/motion.log
framerate 2

ersetzen durch

target_dir /home/pi/motion/video
output_pictures off
logfile /home/pi/motion/motion.log
framerate 4

Step 6

Jetzt können wir Motion schon mittels folgenden Kommandos starten.

sudo motion -c /home/pi/motion/motion-mmalcam.conf

Motion läuft nun auf dem Raspberry Pi. Das System nimmt Bilder auf, sobald sich in dem aufgenommenen Bildbereich etwas bewegt und fügt diese zu einem Video zusammen. Diese Videos findet man in dem Verzeichnis /home/pi/motion/video. Das Video besteht aus max. 4 Frames pro aufgenommener Sekunde (ein höherer Wert führt meiner Erfahrung nach zu Ausfällen/Lags) und hat eine Auflösung von 1024×576 Pixel.

Möchte man nun noch, dass Motion automatisch beim Hochfahren des Raspberry Pis gestartet wird, so muss man folgenden Schritt noch beachten.

Step 7 (optional)

Wir legen einen Screen von Motion in eine Crontab, die beim Start des Raspberry Pis ausgeführt wird. Dies bewerkstelligen wir, indem wir folgende Zeile in eine neue Zeile am Ende des Crontab Files schreiben.

crontab -e
@reboot screen -S Motion -dmS sudo motion -c /home/pi/motion/motion-mmalcam.conf

Aufnahme stoppen

Mittels des folgenden Kommandos können wir die Aufnahme mit Motion Tracking wieder stoppen.

screen -S Motion -X quit

Fertig! Motion ist eingerichtet, nimmt auf und startet automatisch. Viel Erfolg beim Beobachten!

weitere Optimierungen

Ich nutze Scripte um die Bilder nach dem Speichern direkt in Ordner für den jeweiligen Tag zu schieben. Hierfür nutze ich NICHT das aktuelle Datum, sondern das Erstellungsdatum (bzw. das der letzten Änderung) des Bildes, das den Vorteil hat, dass man es auch nutzen kann, wenn das Script länger nicht gelaufen ist, oder für die initiale Sortierung.

Script zum Verschieben

#!/usr/bin/env bash
path="/var/www/cap/motion"
for FILE in $path/*.jpg 
do 
 if [ -f $FILE ]
  then
  cp $FILE /var/www/cap/last_motion.jpg
  DATETIME=$(stat -c%z $FILE) 
  DATE=$(cut -d\  -f1 <<<$DATETIME) 
  mkdir -p $path/$DATE
  mv $FILE $path/$DATE
 fi
done

mich hat das lastsnap.jpg genervt, weil ich Probelme mit der Berechtigung und Anzeige unter MiniGal hatte, deshalb weg damit. Ä Tännchen!! Es ist ein Link deshalb muss -h statt -f verwendet werden!

#!/usr/bin/env bash
if [ -h /var/www/ORDNER/lastsnap.jpg ]
 then
       rm /var/www/ORDNER/lastsnap.jpg
       #echo "existiert"
fi

Das Script kommt jeweils in die entsprechenden Ordner, das Pfad muss dann allerdings angepasst werden. Um die Scripte in einem Rutsch starten zu können, nutze ich das hier.

.startscripte.sh

#!/usr/bin/env bash
/var/www/cap/motion/.move.sh 
/var/www/cap/snapshot/.move.sh 
/var/www/cap/.remove_lastsnap.sh 


.remove_lastsnap.sh

#!/usr/bin/env bash
if [ -h /var/www/cap/lastsnap.jpg ]
 then
       rm /var/www/cap/lastsnap.jpg
fi

.move.sh in motion

#!/usr/bin/env bash
path="/var/www/cap/motion"
for FILE in $path/*.jpg 
do 
 if [ -f $FILE ]
  then
  cp $FILE /var/www/cap/last_motion.jpg
  DATETIME=$(stat -c%z $FILE) 
  DATE=$(cut -d\  -f1 <<<$DATETIME) 
  mkdir -p $path/$DATE
  mv $FILE $path/$DATE
fi
done


.move.sh in snapshot

#!/usr/bin/env bash 
path="/var/www/cap/snapshot"
for FILE in $path/*.jpg 
 do 
 if [ -f $FILE ]
  then
  cp $FILE /var/www/cap/last_motion.jpg
  DATETIME=$(stat -c%z $FILE) 
  DATE=$(cut -d\  -f1 <<<$DATETIME) 
  mkdir -p $path/$DATE
  mv $FILE $path/$DATE
fi
done

Scripte ausführbar machen!!


in der /etc/motion/motion.conf muss dass dann noch hier eingetragen werden.

# 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 /var/www/ORDNER/.startscripte.sh

Um das Ganze dann im Web noch darstellen zu können habe ich dann MiniGal installiert http://www.minigal.dk/minigal-nano.html , den Ordner photos im Verzeichnis von MiniGal gelöscht und einen Link (ln -s) auf den Ordner gesetzt in dem ich die Bilder eh speicher. Details zu *MiniGal


2 Kameras nutzen

von http://strobelstefan.org/?p=5368

Ich habe mir die Konfiguration recht einfach gemacht. An meinem Pi war bereits das Kamera-Modul angeschlossen und sämtliche UV4L-Pakete installiert. Deshalb funktionieren die nachfolgenden Befehle bei mir "out-of-the-box" und meine Webcam wurde auch sofort erkannt.

Mit dem Befehl kann man prüfen, ob die USB-Kamera auch vom Pi erkannt wird

lsusb

In der Liste sollte irgendwo die Logitec-Kamera auftauchen.

Eine Überprüfung wo die beiden Kameras, Webcam und Pi-Kameraboard, zu finden sind ist mit dem Befehl möglich.

v4l2-ctl --list-devices

Bei mir wurde die USB-Kamera auf /dev/video0 eingebunden und das Pi-Kameraboard war auf /dev/video1 zu finden. Diese beiden Informationen sind für die weitere Konfiguration zwingend erforderlich.

Thread-Dateien anlegen

Ich habe mir das Leben einfach gemacht und meine bestehende motion.conf-Datei einfach zweimal kopiert und in thread1.conf und thread2.conf umbenannt. Anschließend habe ich die motion.conf editiert. Dort müssen die folgenden Parameter auskommentiert werden. Diese sind pro Kamera in der jeweiligen thread-Datei anschließend einzutragen.


# Videodevice to be used for capturing  (default /dev/video0)
# for FreeBSD default is /dev/bktr0
# CHANGED
; videodevice /dev/video0
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
# CHANGED
;target_dir /mnt/pics/motion
# The mini-http server listens to this port for requests (default: 0 = disabled)
# CHANGED
;webcam_port 8081

Besonders wichtig, in der motion-conf findet ihr am Ende die Einstellungen für die thread-Dateien.

# Remember: If you have more than one camera you must have one
# thread file for each camera. E.g. 2 cameras requires 3 files:
# This motion.conf file AND thread1.conf and thread2.conf.
# Only put the options that are unique to each camera in the
# thread config files. 
; thread /usr/local/etc/thread1.conf
; thread /usr/local/etc/thread2.conf
; thread /usr/local/etc/thread3.conf
; thread /usr/local/etc/thread4.conf

Tragt ein, wo ihr die thread-Dateien für eure Kamera ablegt, damit Motion diese auch findet. Dabei könnt ihr den Pfad beliebig wählen, z.B. das Home-Verzeichnis eures Benutzers.

; thread /usr/local/etc/thread1.conf

wird dann zu thread /usr/local/etc/thread1.conf thread1.conf

In dieser Datei müsst ihr nur die folgenden Parameter prüfen und auf die Kamera abstimmen

videodevice /dev/video0
target_dir /mnt/pics/motion1
webcam_port 8081
text_left Camera 1
# Image width (pixels). Valid range: Camera dependent, default: 352

width Wert-Eintragen

# Image height (pixels). Valid range: Camera dependent, default: 288

height Wert-Eintragen

Auch die Eisntellngen für den E-Mail-Versand, solltet ihr das aktiviert haben, lässt sich individuell pro thread-Datei anpassen.

thread2.conf


videodevice /dev/video1
target_dir /mnt/pics/motion2
webcam_port 8082

t ext_left Camera 2

# Image width (pixels). Valid range: Camera dependent, default: 352
width Wert-Eintragen
# Image height (pixels). Valid range: Camera dependent, default: 288
height Wert-Eintragen

Nach den Anpassungen lässt sich Motion wie gewohnt starten und die Kamera-Streams auf den beiden Ports 8081 und 8082 anschauen.

Webcam-Server

Vorlage: http://hacktivision.com/index.php/2009/06/16/setting-up-an-ubuntu-webcam-server

Anleitung für Debian, daher fehlt "sudo". Webcamserver installieren.


apt-get install webcam-server

Wenn nicht in der Quelle enthalten hier downloaden Ubuntu-- https://launchpad.net/ubuntu/maverick/i386/webcam-server/0.50-4 ... oder

cd /tmp
wget http://launchpadlibrarian.net/38433364/webcam-server_0.50-4_i386.deb # für PC (Ubuntu)
wget http://ftp.de.debian.org/debian/pool/main/w/webcam-server/webcam-server_0.50-3_armel.deb #Dockstar -- arm
sudo dpkg -i webcam-server_0.50-4_i386.deb

noch ein paar Pakete nachinstallieren

sudo apt-get install apache2-mpm-worker dov4l

USB-Webcam anschliessen und überprüfen, ob sie erkannt wird (dov4l -q) !Tipp: wenn "lsusb" nicht installiert ist "usbutils" nachinstallieren. Weitere Pakete installieren

sudo apt-get -y install libv4l-0 libjpeg62


Erstellen eines Startscriptes

nano /etc/init.d/webcam-server

Beispielscript

#!/bin/sh
SERVER_BIN=webcam-server
LOCK_FILE=/var/lock/$SERVER_BIN
RTRN=0
OPTIONS='-v -g 640x480 -p 8888 -c DockstarCam'
start() {
[ -f $LOCK_FILE ] && echo "$SERVER_BIN already started"
[ -f $LOCK_FILE ] && return
echo -n "Starting $SERVER_BIN: "
export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
nohup $SERVER_BIN $OPTIONS > /dev/null 2>/dev/null &
RTRN=$?
[ $RTRN -eq 0 ] && echo Started! || echo FAIL
[ $RTRN -eq 0 ] && touch $LOCK_FILE
}
stop() {
[ -f $LOCK_FILE ] || echo "$SERVER_BIN is not running"
[ -f $LOCK_FILE ] || return
echo -n "Stopping $SERVER_BIN: "
pkill -f "$SERVER_BIN $OPTIONS"
RTRN=$?
rm -f $LOCK_FILE
[ $RTRN -eq 0 ] && echo Stopped! || echo FAIL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
RTRN=1
esac
exit $RTRN

Now you just need to make your startup script run when Ubuntu starts up. Use the following commands: Mit den folgenden Kommandos wird das Script beim Systemstart ausgeführt

chmod +x /etc/init.d/webcam-server
update-rc.d webcam-server defaults

Hier habe ich eine Fehlermenldung bekommen, die ich noch analysieren muss:

root@dockstar:~# update-rc.d webcam-server defaults
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'webcam-server' missing LSB tags and over

Webcam-server starten

/etc/init.d/webcam-server start

Unter http://localhost:8888/ ist nun ein Bild zu sehen. In Firefox, CTRL+SHIFT+R, gedrückt halten, dann wird das Bild permanent refreshed, oder in die Standardseiten einbauen.

andere funktionierende Methode

Quelle:

folgende Pakete installieren

apt-get install apache2-mpm-worker dov4l

USB-Webcam anschliessen und überprüfen, ob sie erkannt wird (dov4l -q) !Tipp: wenn "lsusb" nicht installiert ist "usbutils" nachinstallieren. Weitere Pakete installieren

apt-get -y install libv4l libjpeg62

Installieren des Webcam-Servers

cd /tmp
wget http://ftp.de.debian.org/debian/pool/main/w/webcam-server/webcam-server_0.50-3_armel.deb
dpkg -i webcam-server_0.50-3_armel.deb
cp -apr /usr/share/doc/webcam-server/applet/ /var/www/

Die Datei "webcam.html" in /var/www/applet wie folgt ändern und die IP der Dockstar eintragen

nano /var/www/applet/webcam.html
<html>
<head>
<title>WebCam</title>
</head>
<APPLET CODE = "WebCamApplet.class" archive="applet.jar" WIDTH = "640"
HEIGHT = "480">
<param name=URL value="http://<Ip_der_DS>:8888">
<param name=FPS value="10">
<param name=width value="320">
<param name=height value="240">
</APPLET>
</body>
</html>

Folgendes Start-Skript erstellen

cd /root
nano webcam-server-start.sh

Inhalt

#!/bin/sh
export LD_PRELOAD=/usr//lib/libv4l/v4l1compat.so
webcam-server -s -q 100 -g 320x240 -c "%d-%m-%Y %H:%M:%S"
exit

Rechte vergeben

chmod 755 webcam-server-start.sh

Dockstar neu starten, danach Script starten

./webcam-server-start.sh

Mit einem Internet-Browser aufrufen "http://Ip_der_DS/applet/webcam.html" und freuen. Problem an dieser Methode ist, dass das SCript jedes Mal neu gestartet werden muss und das Applet nicht besonders sauber läuft. Wenn es schnell gehen muss, nach dieser Methode einrichten und dann das Bild in die StandardWebcamseiten einbinden "http:dockstar:8888"

Quellen, weitere Links

Quellen: