Raspberry Pi mit USB Webcam als Überwachungskamera

Dieses Thema im Forum "Linux & BSD" wurde erstellt von muhhaha, 6. März 2019 .

  1. 6. März 2019
    Moin,

    ich will an meinen Raspberry eine Webcam anschließen, über ein Aufnahmeprogramm Bild und Ton aufnehmen und auf einer ebenfalls angeschlossenen externen Festplatte speichern.
    Aufnahme mit 1080p und 30 fps und die Dateien sollen immer 1 Stunde lang sein und dann die nächste erstellen.

    Klingt eigentlich nicht so kompliziert, aber irgendwie komm ich nicht weiter, deswegen muss ich euch mal um Hilfe bitten.
    Ich hab den Raspberry Pi 3 Model B

    Momentan hab ich MotionEyeOS drauf, aber bin überhaupt nicht zufrieden. Das Bild ist super unscharf und es sind nur 4-5 fps obwohl ich auf 1080/30fps eingestellt habe. Auch haben die Dateien keinen Ton. Und mir gefällt nicht, dass man das nur über den Browser steuern kann, ich will das eigentlich gar nicht "online" haben oder streamen oder so, sondern nur lokal.

    Ich hatte auf dem Raspberry vorher LibreELEC laufen (für das AddOn Incursion). Gesteuert hab ich das über ne Funk-Tastatur. Das hat mir eigentlich ganz gut gefallen, also im Prinzip würd ich mir ein Programm wünschen, bei dem ich die beiden gleichzeitig nutzen kann, dass das Überwachungssetup quasi immer im Hintergrund läuft und ich das direkt über ein Interface aufm TV/Raspberry steuern kann.

    Ich hoffe ihr habt ein paar Ideen

    Danke
     
  2. 6. März 2019
    Du benötigst eigentlich nur FFMPEG. Wenn die Webcam funktioniert also der Treiber geht und zb auf /dev/video0 zugegriffen werden kann oder wo auch immer das Device verzeichnet ist.


    Code:
    ffmpeg -f v4l2 -t 01:00:00 -framerate 30 -video_size 1920x1080 -i /dev/video0 output.mkv
    das script speicherst du einfach als videoaufnahme.sh gibst ihm chmod +x und lässt es einfach per cronjob jede stunde ausführen. das script läuft genau eine stunde. danach wird das video überschrieben wenn das script neu startet.
     
    muhhaha gefällt das.
  3. 8. März 2019
    Wow, danke für die schnelle Antwort!

    Vielleicht hätte ich vorher noch dazu sagen sollen, dass ich bisher so fast gar keine Erfahrungen mit Linux habe

    Also ich glaube ich verstehe was du meinst, aber ich weiß ehrlich gesagt nicht, wie ich das umsetzten soll. Von welchem OS gehst du denn aus, bzw. welches würdest du empfehlen oder ist das egal? Wo erstelle ich das Script und wo muss es gespeichert werden? Wo mach ich das mit dem Cronjob? Ja ich weiß, ich hab eigentlich gar keine Ahnung, am besten du erklärst es mir wie einem Kleinkind

    Wo kann ich in deinem Script definieren, wo die erstellte Datei gespeichert wird? Und eigentlich wollte ich eher, dass die alte Datei nicht überschrieben wird, sondern, dass eine neue erstellt wird. Solange bis der Speicherplatz voll ist, dann kann die erste überschrieben werden, dann die zweite, also dass es quasi eine Endlosschleife ist, aber für einen gewissen Zeitraum die Dateien verfügbar sind. Wenn das nicht geht oder zu kompliziert ist, dann einfach bei Speicher-Voll stoppen und ich muss manuell dafür sorgen dass immer genug Speicherplatz vorhanden ist.
    Ist es möglich, dass Datum und Uhrzeit klein in einer Ecke angezeigt werden? Oder dass die Dateinamen entsprechend betitelt werden?
    Ich weiß, viele Fragen und wahrscheinlich werden auch noch mehr kommen^^

    Danke aber auf jeden Fall schonmal
     
  4. 8. März 2019
    OS wär egal, debianbasis (ubuntu) ist halt praktisch für mich. ich weis nicht was standart wäre bei rapsbarry?

    Code:
    #!/bin/bash
    nowx=`date '+%Y-%m-%d-%H-%M'`
    filename = "/home/output$nowx.mkv"
    ffmpeg -f v4l2 -t 01:00:00 -framerate 30 -video_size 1920x1080 -i /dev/video0 $filename
    
    du öffnest einfach einen editor und fügst oberen code ein, speicherst es in irgend ein verzeichnis zb /usr/local/bin/meinscript.sh
    danach verpasst du dem script ausführrecht, mit chmod +x /usr/local/bin/meinscript.sh

    danach öffnest du den /etc/crontab

    dort fügst du eine zeile hinzu:

    Code:
    17 * * * * root /usr/local/bin/meinscript.sh > /dev/null 2>&1 
    dann wird zu jeder stunde um 17 nach, das script ausgeführt.

    das script erstellt immer eine neue video datei mit größe 1stunde. wie man das mit festplatte voll und überschreiben macht, ka da müsste ich jetzt länger suchen. aber man könnte einfach ein zweiten cronjob machen der einfach alle paar tage die videodateien löscht.


    eine etwas komplexere anleitung gibt es auch hier: Raspberry Pi Überwachungskamera mit Webcam betreiben
     
    muhhaha gefällt das.
  5. 10. März 2019
    bei mir scheiters schon am Beginn^^

    Also das Script erstellen ist klar, aber das Abspeichern ist schwieriger als gedacht. Wenn ich die SD Karte (16 GB) anschließe, wird mir nur eine kleine Partition mit 512 MB angezeigt. In der Datenträgerverwaltung kann ich die andere Partition zwar sehen, aber finde keine möglichkeit die "sichtbar" zu machen. Habs dann über cmd versucht (list disk / list partition usw) und da wurde mir die versteckte Partition (mit 14 GB) angezeigt, aber bei "set id=1" kam nur eine Fehlermeldung. Bei list volume wurde kein Volume auf bzw für diese Partition angezeigt.
    Ich hab dann die .sh Datein einfach mal auf die SD Karte gezogen und den Raspberry wieder gestartet. Achso, ich hab wieder Libreelec als OS installiert. Wenn ich da aber im File Manager bin, finde ich meine .sh Datei nicht mehr

    Um Zugang zum Raspberry zu haben (über SSH), habe ich mir PuTTY geholt. Das klappt soweit auch. wenn ich da dann als command "find" eingebe, listet er mir ja alle Dateinamen auf. Und in dieser Liste ist die .sh Datei auch nicht zu finden. Wenn ich mir die Verzeichniss anzeigen lassen will kommt:
    Code:
    [NAME]:~ # ls
    backup music screenshots videos
    lost+found pictures tvshows
    aber immerhin, mit lsusb wird mir die WebCam angezeigt

    hast du ne Idee, wie ich die Datei "ins System" bekomme?

    PS: den Link hatte ich auch schon gesehen, aber da kann man nur Bilder und keine Videos erstellen
     
  6. 10. März 2019
    Du musst den Speicher erst mounten. dann ist er als "ordner" verfügbar und du kannst quasi den pfad vom script anpassen.

    auflisten welche speicher vorhanden sind:
    ls -la /dev/sd*

    danach: sudo mount /dev/sdX1 /mnt

    wobei X der Buchstabe ist für den Speicher, vermutlich b weil a dein system-speicher ist.
    dann sollte im ordner /mnt alles sein was auf der SD gespeicher ist.

    die sd karte sollte am besten in einem linux-format sein, ist sie mit windows ntfs formatiert dann beim mounten "-t ntfs" beifügen. oder "fat" falls sie fat32 ist.
     
    muhhaha gefällt das.
  7. 10. März 2019
    Zuletzt bearbeitet: 10. März 2019
    da kommt

    Code:
    [NAME]:~ # ls -la /dev/sd*
    brw-rw---- 1 root disk 8, 0 Jun 22 2018 /dev/sda
    brw-rw---- 1 root disk 8, 1 Jun 22 2018 /dev/sda1
    
    wie kann ich da unterscheiden, welcher welcher ist, oder hab ichs falsch eingegeben?

    \Edit

    Code:
    [NAME]:~ # cd ../..
    [NAME]:/ # ls
    bin etc lib opt run storage tmp var
    dev flash media proc sbin sys usr
    
    \\Edit

    Code:
    [NAME]:/ # df
    Filesystem 1K-blocks Used Available Use% Mounted on
    devtmpfs 377276 0 377276 0% /dev
    /dev/mmcblk0p1 524008 141312 382696 27% /flash
    /dev/mmcblk0p2 14579669 49538 14526035 0% /storage
    /dev/loop0 128512 128512 0 100% /
    tmpfs 382908 0 382908 0% /dev/shm
    tmpfs 382908 6660 376248 2% /run
    tmpfs 382908 0 382908 0% /sys/fs/cgroup
    tmpfs 382908 16 382892 0% /var
    tmpfs 382908 0 382908 0% /tmp
    /dev/sda1 122191836 92672 122099164 0% /var/media/Virus Stick
    
    ich schätze mal sda1 ist mein Stick der gerade angeschlossen ist (da wo die Dateien dann abgespeichert werden sollen), also ich hab den Stick "Virus" benannt^^
     
  8. 11. März 2019
    Nachdem mir aufgefallen ist, dass ja mein Stick angezeigt wird, hab ichs jetzt anders germacht. Ich habe die .sh Datei auf den Stick gezogen, diesen angesteckt und dann konnte ich die .sh Datei auch über PuTTY finden.
    Kopieren ging leider nicht wirklich, mir wurde angezeigt, dass ich für /usr/bin keine Rechte habe bzw da nur Read-only ist.
    Über das Interface am TV (also den File Manager von Kodi) konnte ich die .sh Datei aber vom Stick ist Profile Directory kopieren.
    also sie ist jetzt /storage/.kodi/userdata/[NAME].sh
    Die Ausführrechte habe ich (glaube) auch schon gemacht, zumindest kam nach
    [NAME]:/ # chmod +x /storage/.kodi/userdata/[NAME].sh
    keine Fehlermeldung, aber auch keine Bestätigung.

    Problem ist jetzt der nächste Schritt. Habe noch nicht rausgefunden, wie ich das mit dem chrontab mache. Wo genau bzw wie kann ich den öffnen?
     
  9. 11. März 2019
    mit einem editor zb nano öffnen /etc/crontab und dort entsprechend eine zeile einfügen, wie oben beschrieben. es gibt auch gute erleuterungen dazu: Cronjob auf dem Raspberry Pi einrichten - raspberry.tips

    du kannst das script testen in dem du es einfach ausführest ob es was aufnimmt. dazu ./pfad/datei.sh also am anfang punkt-slash
     
    muhhaha gefällt das.
  10. 11. März 2019
    Klappt leider nicht. Also mit "find -name [DATEI]" zeigt er mir ja den genauen Pfad an, aber wenn ich genau das eingebe (mit Punkt davor), dann kommt "not found"
    Bild

    Warum die auch in "flash" ist weiß ich nicht, aber da kommt auch "not found". wenn ich das mit der Datei versuche die noch auf dem Sick ist, kommt "Permission denied"
     
  11. 12. März 2019
    ich würde die datei in /usr/local/bin/ speichern, das ist das verzeichnis für ausführbare dateien des nutzers. wenn die dann chmod +x wurde, kann sie auch überall aufgerufen werden einfach durch den namen. "datei.sh" eingeben und enter, wie bei allen anderen programmen.

    evtl als root wechseln bzw einloggen.
     
    muhhaha gefällt das.
  12. 12. März 2019
    Vielleicht bin ich auch einfach zu blöd, aber ich bin mir relativ sicher, dass in /usr keinen "local" Ordner gibt, zumindest wurde mir keiner angezeigt als ich in /usr war und "ls -a" eingegeben hab.
    Deshalb hab ich ja versucht die Datei in /usr/bin zu kopieren, aber da kam dann die Fehlermeldung "read-only".
    Wenn ich es richtig verstehe bin ich als root eingeloggt, zumindest ist das der Benutzername den ich zum einloggen eingeben muss.
     
  13. 12. März 2019
    füg evtl oben in das script noch #!/bin/bash in die erste zeile ein.
    evtl chmod u+x auf die datei anwenden.

    wenn dann der richtige pfad angegeben wird zur datei, muss auch ein ausführen möglich sein. wenn die datei im selben verzeichnis liegt kann man es auch direkt mit ./datei.sh ausführen ohne den absoluten pfad anzugeben, dieser ist aber wichtig für den crontab. speicher doch die datei einfach in das /home/pi verzeichniss in ein nutzerordner.
    irgend ein pfad muss ja dann gehen ^^ bzw der richtig sein. bekommst du schon hin, probier einfach weiter.
     
    muhhaha gefällt das.
  14. 13. März 2019
    Bild
    also das Verzeichnis scheint es wirklich nicht zu geben.

    steht das nicht schon drin?
    also das hier ist der Code wie er gerade ist (und du oben gepostet hattest)
    Code:
    #!/bin/bash
    nowx=`date '+%Y-%m-%d-%H-%M'`
    filename = "/home/output$nowx.mkv"
    ffmpeg -f v4l2 -t 01:00:00 -framerate 30 -video_size 1920x1080 -i /dev/video0 $filename
    hab gerade versucht die eine .sh Datei aus dem /flash Ordner zu löschen, klappt aber auch nicht, da read-only.
    ich dachte als "root" hätte ich alle Berechtigungen und könnte alles machen?
    Bild

    also ich habe die .sh Datei jetzt nach /storage/.kodi/addons verschoben.
    habe in einem anderem Forum gelesen, dass es Probleme geben kann, wenn man Scripte im Windwos Editor schreibt. Das soll durch "dos2unix /storage/downloads/[NAME].sh" behoben werden.
    sieht jetzt so aus
    Bild
    ich glaube es funktioniert, nur noch nicht ganz^^

    kannst du mir erklären, was genau in der dritten Zeile definiert wird? Also ja der Name von der Datei, aber warum home zb?
    aber es geht schonmal weiter vielen Dank für deine Mühe, hätte ned gedacht, dass das so kompliziert wird^^
     
  15. 13. März 2019
    filenamex="/home/output$nowx.mkv"

    ohne leerzeichen und den variablen namen auf filenamex ändern, evtl gibt es einen systembefehl der ungünstigerweise auch filename heißt.
    entsprechend auch die ffmpeg zeile die variable anpassen und das x anfügen.

    und ffmpeg musst du erst runterladen über den packetmanager. Bei Debian wäre das einfach apt-get install ffmpeg
     
    muhhaha gefällt das.
  16. 13. März 2019
    einfach nur um sicher zugehen, kannst du mir den Code nochmal so aufschreiben wie du es meinst? bin mir jetzt nicht sicher was ich außer dem x anfügen in der 4. Zeile noch ändern soll?

    sollte eigentlich installiert sein. zumindest seh ich es hier:
    Bild
     
  17. 14. März 2019
    Code:
    #!/bin/bash
    nowx=`date '+%Y-%m-%d-%H-%M'`
    filenamex="/home/output$nowx.mkv"
    ffmpeg -f v4l2 -t 01:00:00 -framerate 30 -video_size 1920x1080 -i /dev/video0 $filenamex
    wenn er sagt das er ffmpeg nicht findet dann könntest du auch den pfad dazu angeben im script. also /.kodi/addons/tools.ffmpeg-tools/bin/ffmpeg

    probier einfach ob du das überhaupt ausführen kannst
     
    muhhaha gefällt das.
  18. 14. März 2019
    ähm, ich weiß nicht was jetzt passiert ist^^

    also die Änderungen mit dem x anfügen hatte ich gestern schon gemacht, aber da kam immernoch der Error (ffmpeg not found)
    ich hatte danach auch nochmal reboot gemacht.
    jetzt hab ich die .sh Datei einfach nochmal ausgeführt (ohne dass sich was zu gestern geändert hat) und es kommt was ganz anderes^^

    Bild

    bin jetzt nur nicht sicher, was ich mit der neuen Info anfangen kann^^
    aber er sagt ja, dass es die Cam nicht findet. Die wird mir hier angezeigt
    Bild
    (ka ob das schwärzen der ID's überhaupt was bringt^^)
     
  19. 14. März 2019
    dann ist die webcam nicht installiert oder unter anderem device.
    probier mal:
    sudo modprobe bcm2835-v4l2

    und schau mit
    ls /dev/video*
    ob da ein device vorhanden ist, ohne das geht natürlich nichts. sollte es ein anderer pfad zum device sein dann entsprechend anpassen im script.

    ich hab im script halt einfach video0 angenommen wenn sonst nichts angeschlossen ist... es könnte auch /dev/vid0 oder so sein, einfach mal suchen und probieren.

    der befehl: v4l2-ctl -V
    sollte auch infos zur cam auswerfen wenn es geht.

    hier ist auch noch eine anleitung und einige kommentare mit problemen und lösungen verschiedener hardware: Raspberry Pi: Überwachungskamera Livestream einrichten
     
    muhhaha gefällt das.
  20. 15. März 2019
    ich glaub dafür ist das OS zu abgespeckt, die ganzen Befehle gehen nicht
    Bild

    ls /dev/video* -> No such file or directory
    v4l2-ctl -V -> No such file or directory

    ich denke, dass die Cam unter "/dev/bus/usb/001/004" ist. zumindest würde das zu dem passen, was bei "lsusb" angezeigt wird.
    wenn ich das Script dahingehend ändere, kommt folgendes:
    Bild
     
  21. 15. März 2019
    ja ich denke da wirst du wohl ein anderes OS aufspielen müssen, am besten das normale Raspbian
     
    muhhaha gefällt das.
  22. 15. März 2019
    Zuletzt bearbeitet: 15. März 2019
    also ich habe jetzt NOOBS raufgezogen und mir LibreELEC und Raspbian installiert.
    hatte einige Startschwierigkeiten, da egal was ich machen wollte (Datei vom Stick auf den Desktop kopieren) -> es kam immer eine Fehlermeldung, dass ich keine Berechtigung habe.
    bin jetzt als root angemeldet und konnte die sh-Datei auch endlich nach /usr/local/bin kopieren. hab dann den chmod u+x gemacht
    wenn ich jetzt die Datei ausführe kommt folgendes:
    Code:
    bash: ./XXXX.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
    /Edit: ich glaube ich habe auf dem Stick keine Schreibrechte, selbst wenn ich versuche einen neuen Ordner zu erstellen kommt "Die Operation ist nicht erlaubt"
    werde aus dem Internet gerade aber auch nicht schlau wie ich das ändere
     
  23. 16. März 2019
    möglicherweise ist die Speicherstick nur in Read-Only gemountet.

    mkdir /mnt
    sudo mount -o remount,rw /dev/(speicherstick zb sda1 oder sdb1 etc) /mnt

    dann wäre der stick in den ordner /mnt gemountet mit schreibrechten.
     
    muhhaha gefällt das.
  24. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.