Einrichten einer Webcam in Repetier-Server für Mac

Um eine Webcam in Repetier-Server zu verwenden, musst du die Daten als JPG oder MJPG streamen. Du kannst spezielle IP-Webcams verwenden oder eine einfache Software, die deine Webcam in eine Streaming-Webcam verwandelt. Gerne kannst du auch andere Software als die hier beschriebene verwenden.

mjpg_stream_webcam

Leider kennen wir derzeit keine einfach zu installierende Software, um einen mjpg-Stream von einem OS X-Gerät zu erhalten. Eine Sache, die wir gefunden haben, ist diese Python-Software, die eigentlich genau das tut, was man braucht. Ohne zusätzliche Konfiguration ist die Verwendung etwas umständlich, daher zeige ich hier eine Lösung, um sie perfekt in Repetier-Server 1.2.1 oder neuer zu integrieren. In diesen Server-Versionen ist es erlaubt, auch einen mjpg-Stream als Quelle für statische Bilder zu verwenden, so dass es gut funktionieren wird.

  1. Installiere die Software von https://github.com/meska/mjpeg_stream_webcam an einem Ort deiner Wahl.
  2. Füge im Streamer-Ordner ein Skript wie folgt mit deinem bevorzugten Editor hinzu:
    #!/bin/bash
    CMD=$1
    PORT=5001
    # Build in camera is 0
    CAMERA=0
    
    PID=$(ps aux | grep "\-\-port $PORT" | awk '{print $2}')
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    cd $DIR
    
    if [ "$PID" != "" ]; then
      echo "Killing running instance"
      kill -HUP $PID
    fi
    if [ "$CMD" == "start" ]; then
      echo "Starting webcam"
     while :
     do
      .env/bin/python mjpegsw.py --camera $CAMERA --port $PORT --ipaddress 0.0.0.0 > /dev/null 2>/dev/null
        EXIT=$?
        if [ "$EXIT" != "139" ]; then
          exit 1
        fi
      done
    fi
  3. Ände die Berechtigung der erstellten Steuerdatei, damit sie ausführbar ist.:
    chmod 755 control
  4. Teste, ob das Skript funktioniert:
    path_to_dir/control start

    sollte die Webcam auf allen IPs mit dem angegebenen Port starten. In diesem Beispiel sollte https://12.0.0.1:5001 nun die Webcam im Browser anzeigen. Teste als nächstes, ob auch das Anhalten funktioniert:

    path_to_dir/control
  5. Jetzt gibt es ein Problem mit der weiteren Integration in die Mac-Sicherheit. Es wäre schön, die Webcam automatisch zu starten, wenn der Drucker aktiviert wird. Alle Serverversionen vor 1.2.2 haben diese Sicherheitsfunktion nicht aktiviert, so dass sie nicht innerhalb des Servers gestartet werden kann. In 1.2.2 haben wir dieses Flag hinzugefügt, so dass es integriert werden kann. Bei der ersten Benutzung erhältst du eine Frage von OS X, ob der Server auf die Webcam zugreifen darf. Beantworte diese Frage mit ja, sonst funktioniert sie nicht. Bei mir musste ich den später beschriebenen Startbefehl zweimal ausführen, als ich die Frage bekam, da das Skript aufgrund des Berechtigungsproblems bereits beendet war. Das ist also normal.
  6. Erstelle oder füge den Start- und Stopp-Befehl als ausführbare Datei in /Library/Application Support/Repetier-Server/database/extcommands.xml hinzu – sie könnte bereits einige Inhalte enthalten, die ich mit … markiert habe, also füge die beiden execute-Tags nur hinzu, wenn die Datei existiert. Wenn sie nicht existiert, kopiere alles und entfernen die … Passe außerdem your_path so an, dass er auf das richtige Steuerprogramm verweist:
    <config>
        ...
        <execute name="startwebcam" sync="false" stopOnFail="false" allowParams="false">your_path/mjpeg_stream_webcam-master/control start</execute>
    <execute name="stopwebcam" sync="false" stopOnFail="false" allowParams="false">your_path/mjpeg_stream_webcam-master/control</execute>
    </config>
  7. Die Datei extcommands.xml wird nur beim Start gelesen, also starte den Server neu:
    sudo launchctl unload /Library/LaunchDaemons/com.repetier-server.RepetierServer.plist
    sudo launchctl load /Library/LaunchDaemons/com.repetier-server.RepetierServer.plist
  8. Teste, ob es funktioniert. Bei der ersten Benutzung solltest du gefragt werden, ob du den Zugriff auf die Kamera erlauben willst. Beantworte diese Frage mit ja, rufe dann den Startbefehl erneut auf – nun sollte es funktionieren:
    @execute startwebcam
  9. Jetzt, wo du ihn innerhalb des Servers starten kannst, solltest du zu Druckereinstellungen G-Codes Ereignisabhängig Sende bei Druckeraktivierung gehen und füge folgendes hinzu:
    @execute startwebcam
    Dann bei Sende bei Druckerdeaktivierung:
    @execute stopwebcam
    Speichere nun und gehe zurück zum Drucker. Deaktiviere den Drucker im Kontextmenü des Druckers und du solltest sehen, dass die Webcam nicht mehr funktioniert. Aktiviere sie und sie sollte wieder erscheinen.
  10. Gehe zurück zu Druckereinstellungen Webcam und füge eine Webcam URL für statische und dynamische Bilder URL hinzu: http://127.0.0.1:5001/cam.mjpg
    Passe den Port an, falls du ihn im Steuerskript geändert hast. Du solltest jetzt die Webcam sehen, wenn der Drucker aktiviert ist – speichere und gehe zurück zum Drucker. Jetzt läuft die Webcam jedes Mal, wenn der Drucker aktiviert wird.

Standardmäßig verwendet es die native Auflösung. Wenn dies zu viel Bandbreite/CPU verbraucht oder du einfach kleinere Bilder willst, kannst du mjpegsw.py bearbeiten – am Ende siehst du

capture = cv2.VideoCapture(params['camera'])

Danach füge

capture.set(3,640);
capture.set(4,480);

ein. 640 und 480 sind die gewünschte Breite und Höhe. Achte darauf, die gleiche Einrückung zu verwenden!