TetaTricks/chap/webcam.tex

168 lines
5.6 KiB
TeX
Raw Normal View History

2020-09-29 19:41:53 +11:00
% --------------------------------------------------------------------
% nouveau juillet 2014 à mixart-myrys
% --------------------------------------------------------------------
\chapter{Webcam}
2020-11-02 05:32:45 +11:00
\label{chap:webcam}
2020-09-29 19:41:53 +11:00
\index{webcam}
2020-11-03 09:08:45 +11:00
Sous Linux, c'est quand même un peu tordu%
\footnote{Avis personnel !}, dans le même genre
que la pile son, quoi...
Nous allonc commencer par les principes et outils
de base, puis passer à plus
2020-09-29 19:41:53 +11:00
simple : juste tenter de prendre une photo avec une
\textsl{webcam} classique en USB, et d'enregistrer cette
image.
2020-11-02 05:32:45 +11:00
% --------------------------------------------------------------------
\section{v4l2}\index{v4l2}
\textsl{Video For Linux, second edition.}
2024-09-18 03:53:09 +11:00
%
% PLEASE EXPLAIN !
%
2020-11-03 09:08:45 +11:00
\begin{verbatim}
2024-08-08 21:48:06 +11:00
tth@delirium:~$ v4l2-ctl --list-formats-ext
2020-11-03 09:08:45 +11:00
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
\end{verbatim}
2020-11-10 12:40:30 +11:00
Question : quelle méthode utiliser pour avoir la même chose avec
2024-08-08 21:48:06 +11:00
des lignes de code écrites en C ?
Il faut certainement passer par une suite d'appels
\texttt{ioctl}\index{ioctl} après ouverture du device,
mais la documentation est difficile à \textsl{greper}.
2024-09-12 02:25:44 +11:00
% --------------------------------------------------------------------
% nouveau : Tue Sep 3 11:14:13 UTC 2024
\section{libwebcam} \index{libwebcam}
\begin{quote}
The Webcam Library libwebcam is designed to simplify
the development of webcam applications, primarily on Linux but
with an option to be ported to other platforms, in particular
Solaris. It realizes part of what the unwritten Video4Linux user
space library was always supposed to be: an easy to use library
that shields its users from many of the difficulties and problems
of using the V4L2 API directly.
\end{quote}
2024-09-18 03:53:09 +11:00
% --------------------------------------------------------------------
% nouveau du Tue Sep 17 08:03:49 UTC 2024
\section{UVC} \index{UVC}
\begin{quote}
L'USB video device class (aussi appelé USB video class abrégé en UVC)
est un protocole de gestion de périphériques électroniques vidéo via
les ports de type USB\index{USB}.
Il permet de gérer les flux vidéo dans différents encodages, les images fixes,
ainsi que le contrôle des appareils qui le permettent.
\end{quote}
2024-09-23 01:51:49 +11:00
Le jour\footnote{Lundi 17 septembre 2024} même
où je me penche sur cette techno, premier souci~:
2024-09-18 03:53:09 +11:00
\textsl{Le pilote pour les WebCams UVC
standard utilisé pour les caméras USB modernes
nest pas encore au point et nest pas inclus dans les
versions publiées de Haiku.}
2024-08-08 21:48:06 +11:00
% --------------------------------------------------------------------
\section{GameBoy camera}
%
% trouvé dans pleroma
%
Voilà (désolé dur de faire moins technique en 500 charactères):
\texttt{sudo modprobe v4l2loopback exclusive\_caps\=1 video\_nr\=7 %
card\_label="WebcamVirtuelle"}
On créé un périphérique de caméra virtuelle sur /dev/video7
\texttt{ffmpeg -video\_size 352x288 -i /dev/video0 -i ./palette.png
-lavfi fps=10,scale=w=128:h=112,paletteuse=dither=bayer,format=yuyv422
-f v4l2 /dev/video7}
On fait une chaîne ffmpeg de la webcam réelle vers la virtuelle,
en redimensionnant en 128x112 1/2
puis en appliquant un algorithme de dithering et une palette de
couleurs (juste un PNG carré avec les différentes couleurs à utiliser
pour le dithering, je peux le fournir si besoin).
Enfin on force un format pour la webcam de destination et on sort
sur son fichier (/dev/video7 comme défini tout à l'heure).
C'est pas propre (et il faudrait que je change d'algorithme pour le
scaling parce qu'il y a un effet de flou désagréable), MAIS ça
fonctionne et le rendu ressemble.
2020-11-10 12:40:30 +11:00
2020-11-02 05:32:45 +11:00
% --------------------------------------------------------------------
2020-09-29 19:41:53 +11:00
\section{vgrabbj}
\index{vgrabbj}
2020-11-10 12:40:30 +11:00
2020-09-29 19:41:53 +11:00
D'après la manpage :
2024-09-18 03:53:09 +11:00
« \textit{%
vgrabbj is a program that will grab images from any v4l-capable device
2020-09-29 19:41:53 +11:00
which supports one of the rgb24, rgb32, yuv420, yuv420p, yuyv, or
yuv422 palettes and saves the image as a .jpg, .png, or .pnm file.
} »
2024-09-18 03:53:09 +11:00
Quelques options à connaitre :
\texttt{-S} échange des
2024-09-23 01:51:49 +11:00
deux composantes R et B (parfois utile avec des caméras \textit{noname});
\texttt{-s <device>} affiche
les capacités du périphérique v4l\index{v4l} que l'on sélectionne
avec \texttt{-d /dev/vidz0}.
2020-09-29 19:41:53 +11:00
2024-09-23 01:51:49 +11:00
Il y a plus de choses à dire, avec un exemple concret. XXX\index{XXX}
2020-09-29 19:41:53 +11:00
% --------------------------------------------------------------------
2020-11-03 09:08:45 +11:00
\section{Cheese}
\begin{quote}
cheese uses your webcam to take photos and videos, applies fancy special
effects and lets you share the fun with others. It was written as part of
Google's 2007 Summer of Code lead by daniel g. siegel and mentored by Raphaël
Slinckx. Under the hood, Cheese uses GStreamer to apply fancy effects to photos
and videos. With Cheese it is easy to take photos of you, your friends, pets or
whatever you want and share them with others. After the success of the Summer
of Code, the development continued and we are still looking for people with
nice ideas and patches ;)
\end{quote}
2020-09-29 19:41:53 +11:00
% --------------------------------------------------------------------
2021-10-05 07:24:01 +11:00
\section{Kinect} \index{Kinect}
Bon, voilà un nouveau gadget ;)
À priori, la partie caméra RGB est gérée classiquement par v4l2,
mais le coté spécifique, je ne sais pas qu'en faire...
% --------------------------------------------------------------------