Visa obesvarade inlägg | Visa aktiva trådar Aktuellt datum och tid: 27 jan 2022, 01:38



Svara på tråd  [ 1 inlägg ] 
 Ställa in kameran 
Författare Meddelande
Användarvisningsbild

Blev medlem: 05 apr 2008, 23:09
Inlägg: 5977
Ort: Göteborg/Mölndal/Falkenberg
OS: Ubuntu
Svara med citat
Inlägg Ställa in kameran
Det senaste har jag deltagit i ett antal intervjuer och andra möten via Teams och då upptäckt att det finns rätt dåliga möjligheter att ställa in kameran i Ubuntu.

Så därför har jag hackat ihop ett litet script som förenklar det, lite iaf:
Kod:
#! /bin/bash
#
#####################################################################
#
function usage {
   cat << EOD

usage:    cam { all | help | list | reset | set | show }

   all
      print all info (approximately "info"+"list")

   help | -h | --help
      show this

   info
      show info about the camera

   list | show
      lists the settings for available cameras

   reset
      reset the camera to its default settings

   set [param=value]
      set any of the parameters shown by "list" or "show" to a value,
      as long as it is between MIN and MAX.

EOD
exit
}
#
#####################################################################
#
TEMP=`getopt -oh --long help -n $(basename $0) -- "$@"`
if [[ $? -ne 0 ]]; then
   usage
fi
eval set -- "$TEMP"
HELP=false
CMDNAME=$(basename $0)
while true; do
   case $1 in
      -h|--help)
         usage
         exit
         ;;
      --)
         shift
         break
         ;;
      *)
         echo "-Got a star... [$1]"
         exit
         ;;
   esac
done
FUNCTION=$1
PARAMVAL=$2
#
#####################################################################
#
if [[ -z $(which which v4l2-ctl) ]]; then
   echo
   read -p "v4l2-ctl is not installed, do you want to install it? [y/N]: " IN
   if [[ $IN == "y" || $IN == "Y" ]]; then
      apt-get -y --allow-downgrades --allow-remove-essential --allow-change-held-packages --allow-unauthenticated install v4l-utils
   else
      echo
      exit
   fi
fi
#
WRITTEN=false
VIDEOS=$(v4l2-ctl --list-devices 2> /dev/null | grep /dev/video)
if [[ $? != 0 ]]; then
   echo
   echo "-Can not find any camera device..."
   echo
   exit
fi
for VIDEO in $VIDEOS; do
   OUT=$(v4l2-ctl -d $VIDEO --list-ctrls)
   if [[ ! -z $OUT ]]; then
      WRITTEN=true
      echo
      echo $VIDEO
      if [[ $FUNCTION == "help" ]]; then
         usage
      elif [[ $FUNCTION == "all" ]]; then
         v4l2-ctl -d $VIDEO --all
      elif [[ $FUNCTION == "info" ]]; then
         v4l2-ctl -d $VIDEO --info
      elif [[ $FUNCTION == "list" || $FUNCTION == "show" ]]; then
         v4l2-ctl -d $VIDEO --list-ctrls-menus
      elif [[ $FUNCTION == "set" ]]; then
         if [[ ! -z $PARAMVAL ]]; then
            PARAM=$(echo $PARAMVAL | awk -F = '{ print $1 }')
            VALUE=$(echo $PARAMVAL | awk -F = '{ print $2 }')
            if [[ -z $VALUE ]]; then
               echo "-$PARAM has no value..."
               echo
               exit
            fi
            LINE=$(v4l2-ctl -d $VIDEO --list-ctrls-menus | grep "$PARAM ")
            NAME=$(echo $LINE | awk '{ print $1 }' | xargs)
            REST=$(echo $LINE | awk '{ $1=""; print $0 }' | xargs)
            IFS=" "
            for PARAM in $REST; do
               if [[ ! -z $(echo $PARAM | grep "default=") ]]; then
                  DEFAULT=$(echo $PARAM | awk -F = '{ print $2 }')
               elif [[ ! -z $(echo $PARAM | grep "min=") ]]; then
                  MIN=$(echo $PARAM | awk -F = '{ print $2 }')
               elif [[ ! -z $(echo $PARAM | grep "max=") ]]; then
                  MAX=$(echo $PARAM | awk -F = '{ print $2 }')
               fi
            done
            if [[ $VALUE -gt $MAX ]]; then
               echo "-Value $VALUE is greater than MAX..."
            elif [[ $VALUE -lt $MIN ]]; then
               echo "-Value $VALUE is less than MIN..."
            else
               echo "v4l2-ctl --device $VIDEO --set-ctrl $PARAMVAL"
               v4l2-ctl --device $VIDEO --set-ctrl $PARAMVAL
            fi
         else
            echo "-Can not set $VIDEO to nothing..."
         fi
      elif [[ $FUNCTION == "reset" ]]; then
         LINES=$(v4l2-ctl -d $VIDEO --list-ctrls | awk '{ $2=""; $3=""; $4=""; print $0 }')
         IFS='
         '
         for LINE in $LINES; do
            NAME=$(echo $LINE | awk '{ print $1 }' | xargs)
            REST=$(echo $LINE | awk '{ $1=""; print $0 }' | xargs)
            IFS=" "
            for PARAM in $REST; do
               if [[ ! -z $(echo $PARAM | grep "value=") ]]; then
                  VALUE=$(echo $PARAM | awk -F = '{ print $2 }')
               elif [[ ! -z $(echo $PARAM | grep "default=") ]]; then
                  DEFAULT=$(echo $PARAM | awk -F = '{ print $2 }')
               elif [[ ! -z $(echo $PARAM | grep "min=") ]]; then
                  MIN=$(echo $PARAM | awk -F = '{ print $2 }')
               elif [[ ! -z $(echo $PARAM | grep "max=") ]]; then
                  MAX=$(echo $PARAM | awk -F = '{ print $2 }')
               fi
            done
            PARAMVAL="$NAME=$DEFAULT"
            if [[ $VALUE != $DEFAULT ]]; then
               echo "v4l2-ctl --device $VIDEO --set-ctrl $PARAMVAL"
               v4l2-ctl --device $VIDEO --set-ctrl $PARAMVAL
            fi
            IFS='
            '
         done
      fi
   fi
done
if [[ $WRITTEN == true ]]; then
   echo
fi
Själva scriptet kallar jag för "cam" och för att snabbt kunna ändra flera inställningar, har jag ett script jag kallar för "camset":
Kod:
#! /bin/bash
#
cam set brightness=110
cam set contrast=30
cam set saturation=20
cam set hue=200
cam set gamma=200
cam set backlight_compensation=50
Vilka inställningar man själv vill ha, är givetvis subjektivt och man kan också ha flera versioner av "camset", med olika namn....

Hoppas någon kan ha nytta av det... :)

_________________
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...


03 dec 2021, 04:37
Profil WWW
Visa inlägg nyare än:  Sortera efter  
Svara på tråd   [ 1 inlägg ] 

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
Main Engineer for phpBB3: Bertie at phpBB.com © 2000 - 2002, 2005 - 2007, the Group behind the Open Source code of phpBB.
Designed by STSoftware, modified by Katt, Konservburk & Peetra. Swedish translation by Peetra & phpBB Sweden © 2006-2011