Respuestas:
He mejorado en mi intento anterior :
import opencv
import opencv.highgui
import time
import commands
def get_image():
image = opencv.highgui.cvQueryFrame(camera)
return opencv.adaptors.Ipl2PIL(image)
camera = opencv.highgui.cvCreateCameraCapture(-1)
while 1:
image = get_image()
image.thumbnail((32, 24, ))
image = tuple(ord(i) for i in image.tostring())
x = int((int((max(image) / 256.0) * 10) + 1) ** 0.5 / 3 * 10)
cmd = ("sudo su -c 'echo " + str(x) +
" > /sys/devices/virtual/backlight/acpi_video0/brightness'")
status, output = commands.getstatusoutput(cmd)
assert status is 0
Dos problemas con este enfoque: el brillo de la pantalla, al menos con mi cámara web, nunca es inferior a cuatro, porque la cámara no funciona bien en la oscuridad y puede saltar un poco entre cuatro y cinco. De todas formas,
Así es como se usa:
sudo apt-get install python-opencv
~/test.py
python test.py
En lugar del brillo promedio, ahora obtengo el brillo máximo de una pequeña miniatura (esto es para evitar problemas de píxeles muertos y hacerlo más rápido). Y al menos con mi combinación de luces y cámara, ¡funciona bastante bien!
Darle una oportunidad (:
highgui
de stackoverflow.com/questions/30684661/… . ¿Hay alguna otra manera?
Eche un vistazo al proyecto RedShift, que cambia la temperatura de la pantalla en función de su ubicación geográfica como lo hacía anteriormente F.Lux.
Las instrucciones sobre la instalación y el uso están bien documentadas en el sitio web y, dependiendo de su hardware y monitor, puede sentir sus ojos "refrescados" por el efecto agradable que logra RedShift.
Para agregar el PPA, presione Ctrl+ Alt+ Ten el teclado para abrir el terminal. Cuando se abra, ejecute el siguiente comando:
sudo add-apt-repository ppa:fantasyleague0629/wildguppy
Luego instale WildGuppy a través de:
sudo apt-get update; sudo apt-get install wildguppy
Funciona en Ubuntu 14.04, Ubuntu 13.10, Ubuntu 13.04, Ubuntu 12.10 y Ubuntu 12.04.
Haga que WildGuppy se ejecute al inicio:
Ejecute el comando para editar el archivo de configuración.
sudo gedit ~/.config/autostart/wildguppy-gtk.desktop
Escriba su contraseña cuando se le solicite. Tenga en cuenta que el terminal no mostrará su contraseña al escribir, solo escriba y presione enter.
Cuando se abra el archivo, pegue el contenido debajo y guárdelo.
[Desktop Entry]
Type=Application
Exec=wildguppy-gtk
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=WildGuppy
Name=WildGuppy
Comment[en_US]=
Comment=
/opt/wildguppy/wildguppy.py
. ¡Entonces puedes usar este paquete en cualquier distribución! ¡Aclamaciones!
También hice una herramienta C para eso, usando OpenCV. Puede encontrarlo en https://launchpad.net/brightness (debe compilarlo usted mismo). Espero que te ayude.
Puede usar https://github.com/Wandersalamander/Dimmer que hace exactamente lo que solicitó.
Esto funciona para mi:
#!/usr/bin/env python3
import subprocess, time
# webcam brightness if webcam doesn’t get any light
blackpoint = 0.05
# webcam brightness if webcam is fully exposed (e.g. sun at noon)
whitepoint = 0.92549
# Path to program that sets screen brightness. Takes float between 0 and 1 as
# a parameter. Should be whitelisted for sudo if this script is not run as
# root. Sample script:
#
# #!/bin/sh
# echo "($1 * 4882) / 1" | bc > /sys/class/backlight/intel_backlight/brightness
brightness_setter = "/home/bronger/bin/set_brightness.sh"
# it doen’t get any darker
minimal_brightness = 0.1
# in seconds
sleeping_time = 20
def get_brightness():
"""Returns webcam brightness as a float between 0 and 1 (boundaries
included)."""
fswebcam = subprocess.Popen(["fswebcam", "-q", "--no-banner", "--png", "0", "-"], stdout=subprocess.PIPE)
convert = subprocess.run(["convert", "png:-", "-colorspace", "gray", "-scale", "10%x10%",
"-format", "%[fx:image.maxima]", "info:"],
check=True, stdin=fswebcam.stdout, capture_output=True, text=True)
assert fswebcam.wait() == 0
brightness = float(convert.stdout)
brightness = (brightness - blackpoint) / (whitepoint - blackpoint)
brightness = max(0.0, min(1.0, brightness))
return brightness
old_brightness = None
while True:
brightness = get_brightness() ** 2
brightness = max(minimal_brightness, brightness)
if old_brightness is None or abs(brightness - old_brightness) > 0.2:
subprocess.run(["sudo", brightness_setter, str(brightness)], check=True)
old_brightness = brightness
time.sleep(sleeping_time)
He desarrollado una aplicación C que hace esto. Ver https://github.com/goglecm/AutoBrightnessCam .
Se utiliza fswebcam
para tomar fotos, se puede configurar systemd
para que se inicie automáticamente y detecta si la computadora portátil se está descargando (luego se activa).