Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/12/2024, à 16:21

vin100vin

[RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Ma webcam webcam0 (Logitech C920 Pro) donne une image grand angle qui ne convient pas aux visio conférences et le soft de Logitech ne marche pas sur Linux
Donc j'essaye de trouver une manière de régler cela autrement.
Dans les softs classique (cheese) j'ai pas trouvé...
Je mets ci-dessous mes questions et solutions partielles que j'ai trouvé

Question 1
Le programme Camset semble régler cela.
https://pypi.org/project/camset/
https://www.juggling.ch/gisin/linux/v4l2.html
Mais j'ai une erreur à l'install
Une idée ?

pip3 install camset
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.
    
    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

Solution provisoire
Utiliser en ligne de commande v4l2
https://christitus.com/logitech-c920-linux-driver/

Et de fait avec la commande suivante, je fais un zoom de 150%
v4l2-ctl -d /dev/video2 --set-ctrl zoom_absolute=150

Question 2
Si je ne trouve pas d'interface GIU pour régler cela, où trouver (et comprendre)  les spécificités aux nombreux réglages possibles via v4l2 en ligne de commande et alors, comment créer un scrip qui ne m'oblige pas à lancer la/les lignes de code à chaque session de vidéoconférence

D'avance merci

Dernière modification par vin100vin (Le 22/12/2024, à 16:23)


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne

#2 Le 21/12/2024, à 16:30

xubu1957

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#3 Le 21/12/2024, à 16:49

vin100vin

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Merci @xubu1957
Si maintenant quelqu'un avait une solution GIU et/ou un script qui ne m'oblige pas à ouvrir mon terminal à chaque vidéo conférence...


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne

#4 Le 21/12/2024, à 16:58

xubu1957

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Et avec guvcview ?


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#5 Le 21/12/2024, à 17:17

vin100vin

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Non, j'ai constamment une erreur quand j'essaye de passer vers Zoom par exemple c'est comme s'il fallait utiliser Guvcviewer seul

Dernière modification par vin100vin (Le 21/12/2024, à 17:21)


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne

#6 Le 21/12/2024, à 23:45

tycooon

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Bonsoir,

L'installation a été réalisée en s'inspirant de ce site : https://www.juggling.ch/gisin/linux/v4l2.html

Après plusieurs essais , je suis arrivé au bout :

sudo apt install python3 python3-pip v4l-utils pkg-config
sudo apt install python3-venv
sudo apt install gobject-introspection libgirepository1.0-dev
python3 -m venv monenv
source monenv/bin/activate

Attention, c'est relativement long à installer :

pip install camset

Attention tu es maintenant dans monenv : (monenv) olivier@olivier-VMware-Virtual-Platform:~$

cd ~/monenv/lib/python3.12/site-packages/camset/

"BG" sont les initiales de l'auteur à l'origine de cette procédure. Vous mettez le nom qui vous convient. Il faudra juste penser à reporter la modification de la nouvelle appellation du script, qui est appelée dans les commandes dans la suite de la procédure.

cp camset.py camsetBG.py

Attention il faut modifier le fichier :camsetBG.py

nano camsetBG.py

Modification de ces lignes , elle doivent être comme ceci en rouge :

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import gi
import subprocess
import pathlib
import os

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from cam_window import CamWindow
from dialogs import Dialogs
from helpers import Helpers
from v4l2control import V4L2Control
from layout import Layout

chmod u=rwx,g=rw,o=r camsetBG.py

Attention, ces 2 commandes ci dessous prennent du temps à s'installer :

pip install opencv-python

La commande ci dessous, n'est probablement pas nécessaire. C'est une variante de la commande du dessus pour une utilisation : Serveur, Docker, environnements sans GUI,

pip install opencv-python-headless

Attention le script python3 camsetBG.py, ne fonctionne qui si l'environnement est activé.
A ce niveau tu peux  lancer le script, cela fonctionne. par contre si tu rebootes, il faudra réactiver l'environnement .

python3 camsetBG.py

Si l'environnement est activé, la commande ci dessous désactive l'environnement :

deactivate

Pour relancer le script :

source ~/monenv/bin/activate
python3 camsetBG.py

Pour simplifier les choses , j'ai fait un script qui lance l'environnement et le script :

nano run_camset.sh

Tu ajoutes ces lignes :

#!/bin/bash

# Activer l'environnement virtuel
source ~/monenv/bin/activate

# Exécuter le script Python
python3 ~/monenv/lib/python3.12/site-packages/camset/camsetBG.py

# Désactiver l'environnement virtuel après l'exécution
deactivate

chmod +x run_camset.sh

Tu n'as plus qu'à lancer le script :

./run_camset.sh

Le script ouvre une inerface pour régler ta caméra :
2N4y2et.th.png

Tu pourras créer un fichier "desktop" qui lancera le script depuis le menu en cliquant sur un icone.

Ci joint mes logs d'installation , pour bien suivre le fil des instructions :

olivier@olivier-VMware-Virtual-Platform:~$ sudo apt install python3 python3-pip v4l-utils pkg-config
[sudo] Mot de passe de olivier : 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
python3 est déjà la version la plus récente (3.12.3-0ubuntu2).
python3 passé en « installé manuellement ».
v4l-utils est déjà la version la plus récente (1.26.1-4build3).
Les paquets supplémentaires suivants seront installés : 
  javascript-common libjs-jquery libjs-sphinxdoc libjs-underscore libpython3-dev libpython3.12-dev python3-dev
  python3-wheel python3.12-dev
Paquets suggérés :
  apache2 | lighttpd | httpd
Les NOUVEAUX paquets suivants seront installés :
  javascript-common libjs-jquery libjs-sphinxdoc libjs-underscore libpython3-dev libpython3.12-dev pkg-config
  python3-dev python3-pip python3-wheel python3.12-dev
0 mis à jour, 11 nouvellement installés, 0 à enlever et 2 non mis à jour.
Il est nécessaire de prendre 8184 ko dans les archives.
Après cette opération, 39,0 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 javascript-common all 11+nmu1 [5936 B]
Réception de :2 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB]
Réception de :3 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB]
Réception de :4 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libjs-sphinxdoc all 7.2.6-6 [149 kB]
Réception de :5 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3.12-dev amd64 3.12.3-1ubuntu0.3 [5671 kB]
Réception de :6 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 libpython3-dev amd64 3.12.3-0ubuntu2 [10,3 kB]
Réception de :7 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 pkg-config amd64 1.8.1-2build1 [7264 B]
Réception de :8 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 python3.12-dev amd64 3.12.3-1ubuntu0.3 [498 kB]
Réception de :9 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-dev amd64 3.12.3-0ubuntu2 [26,7 kB]
Réception de :10 http://fr.archive.ubuntu.com/ubuntu noble/universe amd64 python3-wheel all 0.42.0-2 [53,1 kB]
Réception de :11 http://fr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-pip all 24.0+dfsg-1ubuntu1.1 [1317 kB]
8184 ko réceptionnés en 1s (10,5 Mo/s)   
Sélection du paquet javascript-common précédemment désélectionné.
(Lecture de la base de données... 250528 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../00-javascript-common_11+nmu1_all.deb ...
Dépaquetage de javascript-common (11+nmu1) ...
Sélection du paquet libjs-jquery précédemment désélectionné.
Préparation du dépaquetage de .../01-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ...
Dépaquetage de libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
Sélection du paquet libjs-underscore précédemment désélectionné.
Préparation du dépaquetage de .../02-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ...
Dépaquetage de libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
Sélection du paquet libjs-sphinxdoc précédemment désélectionné.
Préparation du dépaquetage de .../03-libjs-sphinxdoc_7.2.6-6_all.deb ...
Dépaquetage de libjs-sphinxdoc (7.2.6-6) ...
Sélection du paquet libpython3.12-dev:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../04-libpython3.12-dev_3.12.3-1ubuntu0.3_amd64.deb ...
Dépaquetage de libpython3.12-dev:amd64 (3.12.3-1ubuntu0.3) ...
Sélection du paquet libpython3-dev:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../05-libpython3-dev_3.12.3-0ubuntu2_amd64.deb ...
Dépaquetage de libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
Sélection du paquet pkg-config:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../06-pkg-config_1.8.1-2build1_amd64.deb ...
Dépaquetage de pkg-config:amd64 (1.8.1-2build1) ...
Sélection du paquet python3.12-dev précédemment désélectionné.
Préparation du dépaquetage de .../07-python3.12-dev_3.12.3-1ubuntu0.3_amd64.deb ...
Dépaquetage de python3.12-dev (3.12.3-1ubuntu0.3) ...
Sélection du paquet python3-dev précédemment désélectionné.
Préparation du dépaquetage de .../08-python3-dev_3.12.3-0ubuntu2_amd64.deb ...
Dépaquetage de python3-dev (3.12.3-0ubuntu2) ...
Sélection du paquet python3-wheel précédemment désélectionné.
Préparation du dépaquetage de .../09-python3-wheel_0.42.0-2_all.deb ...
Dépaquetage de python3-wheel (0.42.0-2) ...
Sélection du paquet python3-pip précédemment désélectionné.
Préparation du dépaquetage de .../10-python3-pip_24.0+dfsg-1ubuntu1.1_all.deb ...
Dépaquetage de python3-pip (24.0+dfsg-1ubuntu1.1) ...
Paramétrage de javascript-common (11+nmu1) ...
Paramétrage de libpython3.12-dev:amd64 (3.12.3-1ubuntu0.3) ...
Paramétrage de python3-wheel (0.42.0-2) ...
Paramétrage de python3.12-dev (3.12.3-1ubuntu0.3) ...
Paramétrage de pkg-config:amd64 (1.8.1-2build1) ...
Paramétrage de python3-pip (24.0+dfsg-1ubuntu1.1) ...
Paramétrage de libjs-jquery (3.6.1+dfsg+~3.5.14-1) ...
Paramétrage de libjs-underscore (1.13.4~dfsg+~1.11.4-3) ...
Paramétrage de libpython3-dev:amd64 (3.12.3-0ubuntu2) ...
Paramétrage de libjs-sphinxdoc (7.2.6-6) ...
Paramétrage de python3-dev (3.12.3-0ubuntu2) ...
Traitement des actions différées (« triggers ») pour man-db (2.12.0-4build2) ...



olivier@olivier-VMware-Virtual-Platform:~$ sudo apt install python3-venv
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
Les paquets supplémentaires suivants seront installés : 
  python3-pip-whl python3-setuptools-whl python3.12-venv
Les NOUVEAUX paquets suivants seront installés :
  python3-pip-whl python3-setuptools-whl python3-venv python3.12-venv
0 mis à jour, 4 nouvellement installés, 0 à enlever et 2 non mis à jour.
Il est nécessaire de prendre 2425 ko dans les archives.
Après cette opération, 2777 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://fr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-pip-whl all 24.0+dfsg-1ubuntu1.1 [1703 kB]
Réception de :2 http://fr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-setuptools-whl all 68.1.2-2ubuntu1.1 [716 kB]
Réception de :3 http://fr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3.12-venv amd64 3.12.3-1ubuntu0.3 [5678 B]
Réception de :4 http://fr.archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-venv amd64 3.12.3-0ubuntu2 [1034 B]
2425 ko réceptionnés en 1s (4252 ko/s)
Sélection du paquet python3-pip-whl précédemment désélectionné.
(Lecture de la base de données... 251580 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../python3-pip-whl_24.0+dfsg-1ubuntu1.1_all.deb ...
Dépaquetage de python3-pip-whl (24.0+dfsg-1ubuntu1.1) ...
Sélection du paquet python3-setuptools-whl précédemment désélectionné.
Préparation du dépaquetage de .../python3-setuptools-whl_68.1.2-2ubuntu1.1_all.deb ...
Dépaquetage de python3-setuptools-whl (68.1.2-2ubuntu1.1) ...
Sélection du paquet python3.12-venv précédemment désélectionné.
Préparation du dépaquetage de .../python3.12-venv_3.12.3-1ubuntu0.3_amd64.deb ...
Dépaquetage de python3.12-venv (3.12.3-1ubuntu0.3) ...
Sélection du paquet python3-venv précédemment désélectionné.
Préparation du dépaquetage de .../python3-venv_3.12.3-0ubuntu2_amd64.deb ...
Dépaquetage de python3-venv (3.12.3-0ubuntu2) ...
Paramétrage de python3-setuptools-whl (68.1.2-2ubuntu1.1) ...
Paramétrage de python3-pip-whl (24.0+dfsg-1ubuntu1.1) ...
Paramétrage de python3.12-venv (3.12.3-1ubuntu0.3) ...
Paramétrage de python3-venv (3.12.3-0ubuntu2) ...



olivier@olivier-VMware-Virtual-Platform:~$ sudo apt install gobject-introspection libgirepository1.0-dev
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
Les paquets supplémentaires suivants seront installés : 
  gir1.2-girepository-2.0-dev gobject-introspection-bin libgirepository-1.0-dev python3-mako python3-markdown
Paquets suggérés :
  libgirepository1.0-doc python-mako-doc python3-beaker python-markdown-doc
Les NOUVEAUX paquets suivants seront installés :
  gir1.2-girepository-2.0-dev gobject-introspection gobject-introspection-bin libgirepository-1.0-dev
  libgirepository1.0-dev python3-mako python3-markdown
0 mis à jour, 7 nouvellement installés, 0 à enlever et 2 non mis à jour.
Il est nécessaire de prendre 581 ko dans les archives.
Après cette opération, 3277 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-girepository-2.0-dev amd64 1.80.1-1 [41,5 kB]
Réception de :2 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 python3-mako all 1.3.2-1 [63,3 kB]
Réception de :3 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 python3-markdown all 3.5.2-1 [72,0 kB]
Réception de :4 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 gobject-introspection-bin amd64 1.80.1-1 [254 kB]
Réception de :5 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 gobject-introspection amd64 1.80.1-1 [105 kB]
Réception de :6 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libgirepository-1.0-dev amd64 1.80.1-1 [28,5 kB]
Réception de :7 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libgirepository1.0-dev amd64 1.80.1-1 [17,0 kB]
581 ko réceptionnés en 0s (1164 ko/s)             
Sélection du paquet gir1.2-girepository-2.0-dev:amd64 précédemment désélectionné.
(Lecture de la base de données... 251597 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../0-gir1.2-girepository-2.0-dev_1.80.1-1_amd64.deb ...
Dépaquetage de gir1.2-girepository-2.0-dev:amd64 (1.80.1-1) ...
Sélection du paquet python3-mako précédemment désélectionné.
Préparation du dépaquetage de .../1-python3-mako_1.3.2-1_all.deb ...
Dépaquetage de python3-mako (1.3.2-1) ...
Sélection du paquet python3-markdown précédemment désélectionné.
Préparation du dépaquetage de .../2-python3-markdown_3.5.2-1_all.deb ...
Dépaquetage de python3-markdown (3.5.2-1) ...
Sélection du paquet gobject-introspection-bin précédemment désélectionné.
Préparation du dépaquetage de .../3-gobject-introspection-bin_1.80.1-1_amd64.deb ...
Dépaquetage de gobject-introspection-bin (1.80.1-1) ...
Sélection du paquet gobject-introspection:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../4-gobject-introspection_1.80.1-1_amd64.deb ...
Dépaquetage de gobject-introspection:amd64 (1.80.1-1) ...
Sélection du paquet libgirepository-1.0-dev:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../5-libgirepository-1.0-dev_1.80.1-1_amd64.deb ...
Dépaquetage de libgirepository-1.0-dev:amd64 (1.80.1-1) ...
Sélection du paquet libgirepository1.0-dev précédemment désélectionné.
Préparation du dépaquetage de .../6-libgirepository1.0-dev_1.80.1-1_amd64.deb ...
Dépaquetage de libgirepository1.0-dev (1.80.1-1) ...
Paramétrage de gir1.2-girepository-2.0-dev:amd64 (1.80.1-1) ...
Paramétrage de python3-markdown (3.5.2-1) ...
Paramétrage de python3-mako (1.3.2-1) ...
Paramétrage de gobject-introspection-bin (1.80.1-1) ...
Paramétrage de gobject-introspection:amd64 (1.80.1-1) ...
Paramétrage de libgirepository-1.0-dev:amd64 (1.80.1-1) ...
Paramétrage de libgirepository1.0-dev (1.80.1-1) ...
Traitement des actions différées (« triggers ») pour man-db (2.12.0-4build2) ...



olivier@olivier-VMware-Virtual-Platform:~$ python3 -m venv monenv



olivier@olivier-VMware-Virtual-Platform:~$ source monenv/bin/activate
(monenv) olivier@olivier-VMware-Virtual-Platform:~$ pip install camset
Collecting camset
  Downloading camset-0.0.21-py3-none-any.whl.metadata (3.3 kB)
Collecting PyGObject (from camset)
  Downloading pygobject-3.50.0.tar.gz (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 12.5 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting opencv-python (from camset)
  Downloading opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)
Collecting numpy>=1.21.2 (from opencv-python->camset)
  Downloading numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.0/62.0 kB 17.2 MB/s eta 0:00:00
Collecting pycairo>=1.16 (from PyGObject->camset)
  Using cached pycairo-1.27.0-cp312-cp312-linux_x86_64.whl
Downloading camset-0.0.21-py3-none-any.whl (86 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.2/86.2 kB 18.3 MB/s eta 0:00:00
Downloading opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (62.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.5/62.5 MB 23.8 MB/s eta 0:00:00
Downloading numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.1/16.1 MB 35.5 MB/s eta 0:00:00
Building wheels for collected packages: PyGObject
  Building wheel for PyGObject (pyproject.toml) ... done
  Created wheel for PyGObject: filename=pygobject-3.50.0-cp312-cp312-linux_x86_64.whl size=272934 sha256=47021015d6936a783e27add1941023f62ef47362d6fc3a5ccdc8d61803415ce1
  Stored in directory: /home/olivier/.cache/pip/wheels/72/ab/6c/f52201a907017c93d24db06950a150312521e5e210c7dfea12
Successfully built PyGObject
Installing collected packages: pycairo, numpy, PyGObject, opencv-python, camset
Successfully installed PyGObject-3.50.0 camset-0.0.21 numpy-2.2.0 opencv-python-4.10.0.84 pycairo-1.27.0


(monenv) olivier@olivier-VMware-Virtual-Platform:~$ cd ~/monenv/lib/python3.12/site-packages/camset/

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ ls
camset.py      dialogs.py  __init__.py  lib       __pycache__      toolbar.py      v4l2.py

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ cp camset.py camsetBG.py
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ 

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ nano camsetBG.py

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ cat camsetBG.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import gi
import subprocess
import pathlib
import os

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from cam_window import CamWindow
from dialogs import Dialogs
from helpers import Helpers
from v4l2control import V4L2Control
from layout import Layout
class Window(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Camset")
        self.cardname = ""
        layout = Layout(self, dialogs)
        layout.setup_main_container()
        layout.setup_boxes()
        layout.setup_device_selection_box()
        layout.setup_buttons()        
        layout.setup_warning_container()    
        layout.setup_toolbar(helpers.get_config_path(), V4L2Control(self))
        layout.setup_grid()
        self.layout = layout

    def clear_and_rebuild(self):
        intcontrols = self.int_control_box.get_children()
        boolcontrols = self.bool_control_box.get_children()
        menucontrols = self.menu_control_box.get_children()
        intlabels = self.int_label_box.get_children()
        boollabels = self.bool_label_box.get_children()
        menulabels = self.menu_label_box.get_children()
        for item in intcontrols:
            self.int_control_box.remove(item)
        for item in boolcontrols:
            self.bool_control_box.remove(item)
        for item in menucontrols:
            self.menu_control_box.remove(item)
        for item in menulabels:
            self.menu_label_box.remove(item)
        for item in intlabels:
            self.int_label_box.remove(item)
        for item in boollabels:
            self.bool_label_box.remove(item)
        self.read_capabilites()
        if self.read_resolution_capabilites():
            self.layout.setup_resolution()
            self.resolution_selection.set_active(v4l2_control.set_active_resolution())            
        self.show_all()
        v4l2_control.set_sensitivity()
        
    def on_btn_showcam_toggled(self, widget):
        if widget.get_active() and not camwin.props.visible:
            camwin.init_camera_feed(helpers.get_video_resolution(self))
        elif widget.get_active() and camwin.props.visible:
            pass
        else:
            camwin.stop_camera_feed()

    def on_btn_defaults_clicked(self, _widget):
        v4l2_control.set_defaults()
        self.resolution_selection.set_active(0) # first option is default
        self.clear_and_rebuild()

    def on_device_changed(self, _widget):
        camwin.stop_camera_feed() 
        self.card = helpers.get_active_card(self)
        self.cardname = helpers.get_card_name(self.card)
        subtitle = " - {}".format(self.cardname) if len(self.cardname) > 0 else ""
        self.set_title(title="Camset{}".format(subtitle))
        camwin.set_title(title="Camera feed{}".format(subtitle))
        
        self.clear_and_rebuild()
        configfile = helpers.get_config_path() + "/" + self.cardname + ".camset"
        if (os.path.exists(configfile) and self.autoload_checkbutton.get_active() and self.read_resolution_capabilites()):
            dialogs.load_settings_from_file(configfile, None, self, v4l2_control)
        self.btn_showcam.set_active(True)

    def on_resolution_changed(self, _callback):
        if (camwin.props.visible):
            camwin.stop_camera_feed()
        self.btn_showcam.set_active(True)

    def read_resolution_capabilites(self):
        outputread = subprocess.run(['v4l2-ctl', '-d', self.card, '--list-formats-ext'], check=True, universal_newlines=True, stdout=subprocess.PIPE)
        outputs = outputread.stdout.split('\n')
        has_resolution_capability = False
        self.ctrl_store = Gtk.ListStore(str)
        for line in outputs:
            if ":" in line:
                line = line.strip()
                if "'" in line:
                    pre = line.split("'", 1)[1].split("'", 1)[0]
                else:
                    if "Size:" in line:
                        post = line.split("Size: ", 1)[1].split(" ")[-1]
                        output = " - ".join((pre, post))
                        self.ctrl_store.append([output])
                        has_resolution_capability = True
        return has_resolution_capability

    def read_capabilites(self):
        capabilities = v4l2_control.get_capabilities(self.card)
        menu_value = 0 # set menu value when scanning menu to be able to read from menu options
        for line in capabilities:
            line = line.strip()
            if line == "User Controls":
                continue
            elif line == "Camera Controls":
                continue
            elif "0x" in line:
                setting = line.split('0x', 1)[0].strip()
                label_text = str.replace(setting, '_', ' ').title()
                value = line.split("value=", 1)[1]
                value = int(value.split(' ', 1)[0])
                label = Gtk.Label(hexpand = True, vexpand = False)
                label.set_text(label_text)
                label.set_size_request(-1, 35)
                label.set_halign(Gtk.Align.END)
                
                if "int" in line:
                    self.layout.add_int_item(line, setting, value, v4l2_control.set_int_value)  
                    self.int_label_box.pack_start(label, False, False, 0)                  
                        
                if "bool" in line: 
                    self.layout.add_bool_item(setting, value, v4l2_control.set_bool_value)               
                    label.set_size_request(-1, 25)
                    self.bool_label_box.pack_start(label, False, False, 0)
                
                if "menu" in line:
                    menu_value = value
                    self.layout.add_menu_item(setting, v4l2_control.on_ctrl_combo_changed)
                    self.menu_label_box.pack_start(label, False, False, 0)
            
            # menu options
            elif line:
                # map index to value
                value = int(line.split(": ", 1)[0]) # get value from text because index is not (always) same as value
                self.ctrl_store.append ([line])
                # count index, set active
                index = 0
                for item in self.ctrl_store:
                    index += 1
                if value == menu_value:
                    self.ctrl_combobox.set_active(index - 1)
                    
    def check_devices(self):
        devices = subprocess.run(['v4l2-ctl', '--list-devices'], check=False, universal_newlines=True, stdout=subprocess.PIPE)
        i = 0
        for line in devices.stdout.split('\n'):
            if "dev" in line:
                line = line.strip()
                capabilities = v4l2_control.get_capabilities(line)
                if capabilities is not None and len(capabilities) > 1:
                    self.store.append(["{0} - {1}".format(line, helpers.get_card_name(line))])
                    i += 1
        self.device_selection.connect('changed', self.on_device_changed) # start after populating devices or action will be called when adding
        if (i > 0):
            self.device_selection.set_active(0)

def main():
    pathlib.Path(helpers.get_config_path()).mkdir(parents=True, exist_ok=True)
    camwin.hide()
    win.check_devices()
    win.resize(win.grid.get_allocation().width, win.grid.get_allocation().height + 20) # hardcoded extra margin seems needed to not show scrollbars, not sure where space is coming from
    win.connect("destroy", Gtk.main_quit)
    win.show_all()
    Gtk.main()

helpers = Helpers()
dialogs = Dialogs()
win = Window()
v4l2_control = V4L2Control(win)
camwin = CamWindow(win, dialogs)

if __name__ == "__main__":
    main()

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ chmod u=rwx,g=rw,o=r camsetBG.py

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ pip install opencv-python
Requirement already satisfied: opencv-python in /home/olivier/monenv/lib/python3.12/site-packages (4.10.0.84)
Requirement already satisfied: numpy>=1.21.2 in /home/olivier/monenv/lib/python3.12/site-packages (from opencv-python) (2.2.0)

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ pip install opencv-python-headless
Collecting opencv-python-headless
  Downloading opencv_python_headless-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)
Requirement already satisfied: numpy>=1.21.2 in /home/olivier/monenv/lib/python3.12/site-packages (from opencv-python-headless) (2.2.0)
Downloading opencv_python_headless-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (49.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.9/49.9 MB 29.6 MB/s eta 0:00:00
Installing collected packages: opencv-python-headless
Successfully installed opencv-python-headless-4.10.0.84

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ python3 camsetBG.py
Cannot open device /dev/video0, exiting.
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ 

(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ deactivate
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ python3 camsetBG.py
Traceback (most recent call last):
  File "/home/olivier/monenv/lib/python3.12/site-packages/camset/camsetBG.py", line 11, in <module>
    from cam_window import CamWindow
  File "/home/olivier/monenv/lib/python3.12/site-packages/camset/cam_window.py", line 1, in <module>
    import cv2
ModuleNotFoundError: No module named 'cv2'
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ source ~/monenv/bin/activate
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ python3 camsetBG.py
Cannot open device /dev/video0, exiting.
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ deactivate
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ alias activate-camset="source ~/monenv/bin/activate"
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ activate-camset
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ python3 camsetBG.py
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ deactivate
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ alias activate-camset="source ~/monenv/bin/activate"
olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ activate-camset
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ python3 camsetBG.py
Cannot open device /dev/video0, exiting.
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ nano run_camset.sh
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ chmod +x run_camset.sh
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ cat run_camset.sh
#!/bin/bash

# Activer l'environnement virtuel
source ~/monenv/bin/activate

# Exécuter le script Python
python3 ~/monenv/lib/python3.12/site-packages/camset/camsetBG.py

# Désactiver l'environnement virtuel après l'exécution
deactivate
(monenv) olivier@olivier-VMware-Virtual-Platform:~/monenv/lib/python3.12/site-packages/camset$ ./run_camset.sh
Cannot open device /dev/video0, exiting.

Dernière modification par tycooon (Le 22/12/2024, à 22:17)

Hors ligne

#7 Le 22/12/2024, à 13:51

vin100vin

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Wouah ! quel boulot !
J'ai un peu chipoté à partir de

Pour simplifier les choses , j'ai fait un script qui lance l'environnement et le script :
nano run_camset.sh

Savoir où mettre run_camset.sh
Ton post mériterait d'aller dans la doc
Encore merci

Dernière modification par vin100vin (Le 22/12/2024, à 13:54)


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne

#8 Le 22/12/2024, à 14:05

vin100vin

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Mais chose bizarre, tous les réglages se perdent quand je passe en Zoom ou Google meet...


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne

#9 Le 22/12/2024, à 15:31

tycooon

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Malheureusement, je ne vais pas pouvoir t'aider  pour le réglage de la webcam, je me sers de mon portable en interface WI-FI avec Iriun Webcam.
Il m'est impossible de faire des essais, où alors il faudrait que j'achète une caméra. La lettre au Père-Noël est partie, mais pas de caméra dans la liste.

Vu ICI

Les paramètres peuvent être enregistrés et chargés. Si le bouton « Paramètres de chargement automatique » est coché, le camset s'affichera ~/.config/camset pour un fichier de paramètres portant le même nom que l'appareil (comme suggéré lors de l'enregistrement des paramètres) et chargez-le lors du démarrage de l'application ou lors du passage à cet appareil.

D'après ce que je peux comprendre, Il y a un fichier paramètre que l'on peut uploader via l'interface et je pense que l'on peut le modifier selon les réglages , il est ici :

cd ~/.config/camset/

Pour le script, on peut le mettre où tu veux,
je l'ai mis ici :

cd ~/monenv/lib/python3.12/site-packages/camset/
nano run_camset.sh

Copier ces lignes :

#!/bin/bash

# Activer l'environnement virtuel
source ~/monenv/bin/activate

# Exécuter le script Python
python3 ~/monenv/lib/python3.12/site-packages/camset/camsetBG.py

# Désactiver l'environnement virtuel après l'exécution
deactivate

chmod +x run_camset.sh

Vérifier s'il est bien créé :

cat run_camset.sh

Pour le desktop, pour une fois que l'on peut se passer des lignes de commandes. Il existe une application qui fait largement le travail.

sudo apt install menulibre

Lancer l’application via le menu pour créer un lanceur :
2NyfDUG.th.png
Remplace "olivier" dans le chemin de la commande par ton $USER
Pour le connaître :

echo $USER

Attention, pour voir le desktop dans le menu, il faut fermer la session et la ré-ouvrir, idem si tu fais des modifications ultérieures .

Dernière modification par tycooon (Le 22/12/2024, à 21:39)

Hors ligne

#10 Le 22/12/2024, à 16:22

vin100vin

Re : [RESOLU] v4l2, Camset réglages d'une webcam Logitech C920 Pro

Merci beaucoup d'autant que je ne connaissais pas menulibre !
Il me semble que cela marche si on désactive l'option "Show camera feed"
Je lance Zoom par exemple, je lance camset avec des préréglages sauvés et ca fonctionne.
Encore merci, il me semble que d'autres pourraient bénéficier de ce tuto puisque le soft de Logitech n’existe pas sous linux
Peut-être quelqu'un trouvera-t-il une solution plus simple, d'ici là je mets le topic en résolu


Xubuntu 24.04 sur ThinkPad P14s Gen 2 // Xubuntu 24.04 LTS sur LDLC Aurore NJ5S-16-S9

Hors ligne