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 –
|
|
|
|
|
n’est pas encore au point et n’est 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...
|
|
|
|
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
|
|
|
|