# VisiCam - Teile mit Kamera passgenau platzieren

VisiCam ist ein extra Programm für Visicut. Es erlaubt das Erkennen des aktuellen Laserbettes und Platzieren von Objekten mit Hilfe einer Webcam und 4 Markern - in jeder Ecke einer.

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/BAWNJ7E3MO7Tm1Io-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/BAWNJ7E3MO7Tm1Io-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/VdGjHdpLlARm0hR1-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/VdGjHdpLlARm0hR1-grafik.png)

## Installation von VisiCam

## Ausgedruckte Marker

[https://raw.githubusercontent.com/t-oster/VisiCam/refs/heads/master/visicam-marker.svg](https://raw.githubusercontent.com/t-oster/VisiCam/refs/heads/master/visicam-marker.svg)

### Erfordernisse

<p class="callout danger">Achtung. Es sind exakt folgende Versionen zu verwenden, da zu alte oder zu neue Versionen keinen Build erlauben.</p>

- [Microsoft Visual C++ 2010 Service Pack 1 Redistributable x64](https://www.microsoft.com/de-de/download/details.aspx?id=26999)
- [Apache Ant](https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.9-bin.zip) 1.9.9
- [OpenCV Library](https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/opencv-2.4.9.exe/download) 2.4.9
- [JavaCV Library](https://repo1.maven.org/maven2/org/bytedeco/javacv/0.8/javacv-0.8-bin.zip) 0.8
- [Oracle Java JDK](https://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-windows-x64.exe "Oracle Java JDK") 1.7u80 (Login notwendig)
- [VisiCam](https://github.com/t-oster/VisiCam) - Commit da73c08

### Anleitungen

- [https://github.com/t-oster/VisiCam](https://github.com/t-oster/VisiCam) (README.md)
- [https://github.com/t-oster/VisiCam/wiki](https://github.com/t-oster/VisiCam/wiki)
- [https://visicut.org](https://visicut.org)

<p class="callout info">Hinweis: VisiCam kann auch als \[Docker Container\](https://github.com/t-oster/VisiCam/blob/master/Dockerfile) installiert werden!</p>

### Step by Step

<details id="bkmrk-git-cloning-cmd-mkdi"><summary>Git cloning</summary>

```bash
cmd
mkdir "C:\Epilog Laser\"
cd "C:\Epilog Laser\"
git clone https://github.com/t-oster/VisiCam.git

```

</details><details id="bkmrk-java-installation-ht"><summary>Java Installation</summary>

[https://download.java.net/java/GA/jdk14.0.2/205943a0976c4ed48cb16f1043c5c647/12/GPL/openjdk-14.0.2\_windows-x64\_bin.zip](https://download.java.net/java/GA/jdk14.0.2/205943a0976c4ed48cb16f1043c5c647/12/GPL/openjdk-14.0.2_windows-x64_bin.zip) herunterladen und in `C:\Epilog Laser\VisiCam\ `entpacken

</details><details id="bkmrk-ant-installation-ant"><summary>ant Installation</summary>

ant [herunterladen](https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.9-bin.zip), nach `C:\Epilog Laser` entpacken und dann `ant` in Umgebungsvariable `%PATH%` (User) einfügen: `C:\Epilog Laser\apache-ant-1.9.9\bin`

<p class="callout warning">Wir benötigen diese alte ant Version, damit Java 1.6 unterstützt wird.</p>

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/xj9CHdqGF6QCcTqv-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/xj9CHdqGF6QCcTqv-grafik.png)

</details><details id="bkmrk-javacv-bibliothek-v0"><summary>Javacv Bibliothek v0.8 einbinden</summary>

Herunterladen von [https://repo1.maven.org/maven2/org/bytedeco/javacv/0.8/javacv-0.8-bin.zip](https://repo1.maven.org/maven2/org/bytedeco/javacv/0.8/javacv-0.8-bin.zip) und Entpacken in `C:\Epilog Laser\VisiCam\lib\javacv-bin`

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/TVPNRCerWePmXWV3-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/TVPNRCerWePmXWV3-grafik.png)

</details><details id="bkmrk-opencv-2.4.9-herunte"><summary>OpenCV Bibliothek 2.4.9 einbinden</summary>

Herunterladen und Installieren von [https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/opencv-2.4.9.exe/download](https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/opencv-2.4.9.exe/download) und dann in Umgebungsvariable `%PATH%` (User) einfügen: `C:\Epilog Laser\opencv\build\x64\vc10\bin`

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/dYoKHPWIrNd1TfYd-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/dYoKHPWIrNd1TfYd-grafik.png)

</details><details id="bkmrk-projekt-kompilieren-"><summary>Projekt kompilieren</summary>

Der Build dauert ca. 10-15 Sekunden

```bash
cmd
cd "C:\Epilog Laser\VisiCam\"
set "JAVACMD=C:\Program Files\Java\jdk1.7.0_80\bin\java.exe"
ant clean
ant -verbose

```

</details>### Starten (manuell)

Folgender Befehl startet VisiCam, aber scheitert im Web GUI mit Fehler: `INTERNAL ERROR: serveFile(): given homeDir is not a directory`

```bash
cmd
cd C:\Epilog Laser\VisiCam\dist
VisiCam.jar

```

Folgender Befehl eignet sich für Testzwecke:

```bash
cmd
cd C:\Epilog Laser\VisiCam\
ant run

```

Die Oberfläche der Anwendung sieht so aus:

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/Vxo6fHdUEus36vtv-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/Vxo6fHdUEus36vtv-grafik.png)

Das Webinterface läuft unter [http://192.168.178.90:8080](http://192.168.178.90:8080) und sieht wie folgt aus:

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/jtCgvibQ95wx4ofh-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/jtCgvibQ95wx4ofh-grafik.png)

- Das aktuelle Kamerabild kann über [http://192.168.178.90:8080/image](http://192.168.178.90:8080/image) abgerufen werden. U.a. ist der Stream auch erreichbar über 
    - [http://127.0.0.1:8080/image](http://127.0.0.1:8080/image)
    - [http://localhost:8080/image](http://localhost:8080/image)

<p class="callout info">Es ist empfehlenswert dem Client-PC eine feste IP-Adresse zuzuweisen oder eine `localhost` Adresse in Visicut zu verwenden, damit der Kamerastream stabil abrufbar bleibt, auch wenn der PC neugestartet wird.</p>

## Kamera Info Popup deaktivieren (Taskleiste)

Als Administrator:

```
regedit
```

```ini
DWORD NoPhysicalCameraLED 0
```

```ini
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OEM\Device\Capture
```

[![431c6ed1-1da0-40e2-be06-62de29090013.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-08/scaled-1680-/Mwmff0tdHsvXUOt1-431c6ed1-1da0-40e2-be06-62de29090013.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-08/Mwmff0tdHsvXUOt1-431c6ed1-1da0-40e2-be06-62de29090013.png)

Danach das System neu starten!

## Starten per Verknüpfung

Wir können folgende Zeilen in eine `start-visicam.cmd` Datei schreiben und zukünftig per Mausklick starten:

```
cd C:\Epilog Laser\VisiCam\
"C:\Epilog Laser\apache-ant-1.9.9\bin\ant.bat" run
```

oder noch besser:

```
cd C:\Epilog Laser\VisiCam
javaw --enable-native-access=ALL-UNNAMED -jar dist\VisiCam.jar
```

Wollen wir die Befehlszeile verstecken, eignet sich folgender Aufruf:

```
cd C:\Epilog Laser\VisiCam
start /min cmd /c "javaw --enable-native-access=ALL-UNNAMED -jar dist\VisiCam.jar"
```

## Starten als Service (bevorzugt)

<p class="callout success">Diese Variante ist narrensicher und ohne nervige Zwischenfenster anwendbar! Die Anwendng startet im Fehlerfall zudem automatisch erneut.</p>

Hierfür installieren wir [NSSM - the Non-Sucking Service Manager](https://nssm.cc/builds "NSSM - the Non-Sucking Service Manager") in `C:\Epilog Laser\nssm 2.24-103-gdee49fc\` und fügen dann `C:\Epilog Laser\nssm-2.24-103-gdee49fc\win64\` in `%PATH%` ein. Dadurch wird `nssm.exe` global verfügbar.

Dann führen wir in einer **privilegierten** Shell aus:

```
nssm install visicam
```

Wir bearbeiten den Dienst mit:

```
nssm edit visicam
```

Hier konfigurieren wir:

- Application:
    
    
    - Path: `C:\Program Files (x86)\Java\jre1.8.0_451\bin\java.exe`
    - Startup Directory: `C:\Epilog Laser\VisiCam`
    - Arguments: `-jar "C:\Epilog Laser\VisiCam\dist\VisiCam.jar"`
    
    Log on:
    
    
    - Log on as 
        - This account: `.\flcadmin`
    
    Shutdown:
    
    
    - Output (stdout): `C:\Epilog Laser\VisiCam\visicam-service.log`
    - Error (stderr): `C:\Epilog Laser\VisiCam\visicam-service.err`
- Auto-Restart on Failure

Wir starten den Dienst mit:

```
nssm start visicam
```

Wir stoppen den Dienst mit:

```
nssm stop visicam
```

## Config

Vor der eigentlichen Kamera-Kalibrierung in Visicut muss zunächst die Kamera auf die eingesetzten Marker über die Visicam-Weboberfläche justiert werden. Alle in der Web GUI angepassten Werte landen in der Konfigurationsdatei `C:\Epilog Laser\VisiCam\visicam.conf`. Die Kalibirierung erfolgt direkt in Visicut.

### Marker setzen und Kamera-Kalibrierung


Die Marker-Dateien (3D-Druck Teil für Z-Achse und Zielscheiben) sind auf unserem [Gitea Server](https://gitea.fablabchemnitz.de/FabLab_Chemnitz/epilog-zing-24/src/branch/main/Marker%20Attachment%20VisiCam) zu finden.

Die Kalibrierung der Kamera erfolgt in Visicut. Hierzu sind folgende Schritte notwendig:

- Einen vollflächig Bett-ausfüllenden Papierzuschnitt in den Laser einlegen (610x313mm) und möglichst ungewölbt fixieren
- Visicut starten
- eine beliebige SVG-Datei laden, damit Laserparameter ("alles cut") angelegt und gespeichert werden können. Wir legen Settings an, die für den Papierzuschnitt geeignet sind (siehe [Gravier- und Schneidparameter](https://wiki.stadtfabrikanten.org/books/laserschneiden-und-gravieren/page/laser-kosten-materialien-gravier-und-schneidparameter "Gravier- und Schneidparameter")) und speichern sie:  
    [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/zbJusqMxepnszsvr-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/zbJusqMxepnszsvr-grafik.png)
- Im Menu-Punkt die Kalibrierung starten und im Folgedialog den Kalibrierjob an den Laser senden und den dortigen Anweisungen folgen (Kamerabild vorher/nachher). Wir verwenden die genaueste Kalibrierung mit 8 Stützpunkten  
    [![Screenshot 2025-06-13 181549.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/LEdauUe8Q2D6oL6s-screenshot-2025-06-13-181549.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/LEdauUe8Q2D6oL6s-screenshot-2025-06-13-181549.png) [![IMG_20250613_181242.jpg](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/T8py90NBDJemgZPN-img-20250613-181242.jpg)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/T8py90NBDJemgZPN-img-20250613-181242.jpg)  
    *Auf diesen Fotos zu sehen: Die vier Eck-Marker, ein 610x313mm großes Stück Papier und ein Kalibrierlaserjob mit 8 Stützpunkten. Zur besseren Sichtbarkeit wurden sie nach dem Lasern mit Textmarker gefärbt, weil das Kamerabild anfangs zu hell gewesen ist.*
- Überprüfen der Kalibrierung  
    [![Screenshot 2025-06-16 205715.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/Fni9F0kw8wckyDXN-screenshot-2025-06-16-205715.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/Fni9F0kw8wckyDXN-screenshot-2025-06-16-205715.png) *Eine fertige und funktionierende Kamerakalibrierung (der ausgeschnittene Kreis deckt sich sehr gut mit dem virtuellen Kreis in Visicut)*

### Anpassung der Webcam-Einstellungen mit FFmpeg (Bild-Finetuning)

Die von uns verwendete Webcam wird automatisch in ihren Einstellungen überschrieben, was ziemlich stört, da das Bild häufig überzeichnet ist und deshalb gelaserte Konturen nicht mehr erkennbar sind. Mit den Windows-eigenen Einstellungen kommen wir nicht weit. Deshalb installieren wir das Tool [`ffmpeg`](https://ffmpeg.org/download.html#build-windows), um die Webcam-Einstellungen mit einem netten GUI zu überschreiben.

[![Screenshot 2025-06-13 181415.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/peW1WXyVpkCwzfuf-screenshot-2025-06-13-181415.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/peW1WXyVpkCwzfuf-screenshot-2025-06-13-181415.png) [![Screenshot 2025-06-13 182124.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/czvjd50PZEhJvFQe-screenshot-2025-06-13-182124.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/czvjd50PZEhJvFQe-screenshot-2025-06-13-182124.png)

*Verschiedene Kamera-Settings in Windows. Weniger brauchbar im Vergleich zu FFmpeg.*

FFmpeg herunterladen und in `%PATH%` einbinden:

[https://ffmpeg.org/download.html#build-windows](https://ffmpeg.org/download.html#build-windows)

USB Kameras auflisten:

```bash
ffmpeg -list_devices true -f dshow -i dummy -hide_banner
```

Zielkamera auswählen und Konfigurationsdialog öffnen:

```bash
set cam="@device_pnp_\\?\usb#vid_32e4&pid_9422&mi_00#8&149655b1&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
ffmpeg -f dshow -show_video_device_dialog true -i video=%cam%
```

<p class="callout info">Diese Infos kommen von [https://github.com/jpalbert/webcam-settings-dialog-windows](https://github.com/jpalbert/webcam-settings-dialog-windows)</p>

[![Screenshot 2025-06-16 122244.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/i80aZZlaMjnOXqrG-screenshot-2025-06-16-122244.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/i80aZZlaMjnOXqrG-screenshot-2025-06-16-122244.png) [![Screenshot 2025-06-16 122252.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/scaled-1680-/uZt5dE0boeXftXtu-screenshot-2025-06-16-122252.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-06/uZt5dE0boeXftXtu-screenshot-2025-06-16-122252.png)

## Troubleshooting

<details id="bkmrk-in-visicut-ist-kein-"><summary>In Visicut ist kein Kamerabild sichtbar</summary>

Die Kameravorschau zeigt kein Bild? Dann den Laserdeckel nach oben klappen, damit die Kamera alle Marker erkennen kann. Sobald alle vier Marker erkannt werden, wird das entzerrte Bild erzeugt und in Visicut angezeigt. Andernfalls kann kein Snapshot erzeugt werden. Ob das Bild verfügbar ist, kann über das Webinterface [http://192.168.178.90:8080](http://192.168.178.90:8080) geprüft werden.

</details>