Tilføj Webcam til OctoPrint i DietPi

Sådan bruger du mjpg_streamer, så du kan bruge dit (Logitech C310) webcam i OctoPrint

Indledning

Jeg har en Ender 3 stående, som er koblet til en PC. Denne PC har pt. fået installeret DietPi, og med DietPi, har jeg installeret OctoPrint. Normalt har jeg førhen brugt en Raspberry Pi 3, men da den fik strømproblemer, skiftede jeg til en Intel NUC, med en smule flere kræfter. Jeg har dernæst koblet et Logitech C310 til NUC'en, så jeg kan følge mine prints.

Men for at OctoPrint kan følge med, skal man bruge fx. mjpg-streamer, som laver et netværksstream, med billeder fra dit webcam.

Du kan finde en liste over testede webcams inkl. camera_usb_options på OctoPrint Wiki-siden Webcams known to work. camera_usb_options kan være nyttige at kigge på, hvis du vil have optimeret kvaliteten, eller blot finde ud af, hvordan du får dit kamera til at virke med mjpg-streamer. Alt afhængig af hvad du ender ud med, skal du være OBS PÅ, at det kan have indflydelse på kvaliteten af dine 3D-prints, såfremt mjpg-streamer bruger for mange af dine CPU-kræfter. På nettet anbefaler de fleste, at man har mindst en Raspberry Pi 3 kørende, hvis man vil koble et webcam til.

Der findes desuden mange guides på nettet til selv samme, men her får du det på dansk. Vil du blot løbe igennem de enkelte kommandoer, kan du evt. kigge på denne Wiki-side.

Hent og compile

Først skal du hente mjpg-streamer, og compile dette med make:

sudo apt install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=.
make

Test

Inden vi tilføjer vores nye program til systemet, vil jeg anbefale dig at teste om dit webcam virker efter hensigten.

Webcams known to work-Wikisiden, kan du finde de anbefalede camera_usb_options til dit webcam.

I mit tilfælde vil jeg forsøge med: camera_usb_options="-r VGA -f 10"

Og herefter starter jeg programmet, hvor jeg har $camera_usb_options-variablen med i kommandoen:

./mjpg_streamer -i "input_uvc.so $camera_usb_options" -o "output_http.so -w ./www"

Du kan stoppe programmet ved at bruge genvejen Ctrl + C (normalt kendt som SIGINT-signalet), som bruges til at afbryde den nuværende eksekvering.

Herefter kan du tilgå dit stream via:

http://{DietPi-IPAdresse}:8080/?action=stream

Permissions til /dev/video0

Har du permissions-problemer ala. dem som ses nedenfor, skal vi lige have rettet et par ting:

> ./mjpg_streamer -i "input_uvc.so $camera_usb_options" -o "output_http.so -w ./www"
MJPG Streamer Version: git rev: ---
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 10
i: Format............: JPEG
i: TV-Norm...........: DEFAULT
ERROR opening V4L interface: Permission denied

Det nemmeste du kan gøre, er at tilføje din bruger til video-gruppen på dit system, såfremt /dev/video0 er ejet af root:vdeo, som det fremgår nedenfor:

> ls -alh /dev/video0
crw-rw---- 1 root video 81, 0 Feb 27 12:49 /dev/video0

Tilføj din bruger til video-gruppen.

Tilføj din bruger til video-gruppen, såfremt ejerskabet er tildelt root:video.

I dette eksempel kunne man forestille sig, at din bruger er dietpi. Kør derfor følgende kommando:

sudo usermod -aG video dietpi

Log nu af din bruger, og log på igen.

Nu burde du havde fået tildelt rettighederne til gruppen, og kan derfor køre kommandoen igen - uden brug af sudo foran.

Har du fortsat problemer? Prøv at lave en udev-regel

Hvis det ikke virker, blot at tilføje din bruger til video-gruppen, kan det tænkes at /dev/video0 ikke har fået tildelt de ønskede rettigheder. Dette kan du rette op på, med en udev-regel.

Skift til din root-bruger med sudo su, og kør følgende:

echo 'SUBSYSTEM=="video0", GROUP="video", MODE="0660"' > /etc/udev/rules.d/10-webcam.rules

Genstart herefter med sudo reboot, og prøv igen, med din normale bruger.

Installer (Flyt programmet) med make

Er du nået hertil, formoder jeg, at dit sciprt virker, og at du har fået rettet evt. permissions-problemer.

Mens du fortsat står i mappen: ~/mjpg-streamer/mjpg-streamer-experimental, skal du blot installere programmet med:

sudo make install

Programmet bliver gemt som:

/usr/local/bin/mjpg_streamer, og kan køres som mjpg_streamer

Indholdet af www-mappen bliver gemt under stien /usr/local/share/mjpg-streamer/www, og sidst men ikke mindst bibliotekerne, som bliver gemt under /usr/local/lib/mjpg-streamer.

Test evt. om det virker med:

mjpg_streamer -i "input_uvc.so" -o "output_http.so -w ./www" Bemærk at jeg her, har undladt at have camera_usb_options med.

Nu kan du, såfremt du ønsker det, fjerne mjpg_streamer-mappen, som du har gemt i ~.

Auto-start

denne side finder du et script, til at state programmet med, helt automatisk.

Er du doven, kan du hente et dump fra Pastebin med:

curl -o mjpg-streamer.sh https://pastebin.com/raw/Qx8PDuhp

Herefter åbner du scriptet:

nano ~/mjpg-streamer.sh

Hvis du har et behov for fx. flere frames, ændre kvaliteten, eller andet, gøres det i toppen af scriptet. Du kan også ændre fx. porten.

Virker dit webcam uden -y parameteret med mjpg_streamer, skal du desuden huske at ændrer YUV="yes"til YUV="no"cu, da du ikke har et behov for at starte programmet med -y-flagget, som vil kræve ekstra kræfter af din Raspberry Pi.

Tillad at scriptet kan eksekveres:

chmod +x /home/dietpi/mjpg-streamer.sh

Jeg oplevede at der var enkelte karakterer (CR-karakterer), som skabte problemer, så jeg fjernede dem med:

sed -i -e 's/\r$//' mjpg-streamer.sh

Åben crontab for din bruger:

crontab -e

Tilføj linjen:

@reboot /home/dietpi/mjpg-streamer.sh start

Inden du genstarter, kan du evt. selv prøve sciptet med:

./mjpg-streamer.sh start

Nu kan du tilgå streamet via:

{DietPi-IPAdresse}:8081/?action=stream

God fornøjelse med opsætningen af dit webcam. Hvis du har anbefalinger eller tips og tricks, vil jeg meget gerne høre om dem. Se "Velkommen"-siden.