Ответы:
Я улучшил свою предыдущую попытку :
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
При таком подходе две проблемы: Яркость экрана, по крайней мере, у моей веб-камеры, никогда не опускается ниже четырех, потому что камера плохо работает в темноте, и она может пропускать от четырех до пяти. Так или иначе,
Вот как это использовать:
sudo apt-get install python-opencv
~/test.py
python test.py
Вместо средней яркости я теперь получаю максимальную яркость маленького миниатюры (чтобы избежать проблем с битыми пикселями и сделать это быстрее). И, по крайней мере, с моим сочетанием света и камеры, это работает довольно хорошо!
Попробуй (:
highgui
от stackoverflow.com/questions/30684661/… . Есть ли другой способ?
Взгляните на проект RedShift, который меняет температуру экрана в зависимости от вашего географического положения, как раньше делал F.Lux.
Инструкции по установке и использованию хорошо документированы на веб-сайте, и, в зависимости от вашего оборудования и монитора, вы можете чувствовать себя «освеженными» благодаря приятному эффекту, который достигается с помощью RedShift.
Чтобы добавить PPA, нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду ниже:
sudo add-apt-repository ppa:fantasyleague0629/wildguppy
Затем установите WildGuppy через:
sudo apt-get update; sudo apt-get install wildguppy
Работает на Ubuntu 14.04, Ubuntu 13.10, Ubuntu 13.04, Ubuntu 12.10 и Ubuntu 12.04.
Сделать WildGuppy работающим при запуске:
Запустите команду для редактирования файла конфигурации.
sudo gedit ~/.config/autostart/wildguppy-gtk.desktop
Введите ваш пароль, когда будет предложено. Обратите внимание, что терминал не будет отображать ваш пароль при вводе, просто запомните и нажмите Enter.
Когда файл откроется, вставьте содержимое ниже и сохраните его.
[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
. Так что вы можете использовать этот пакет в любом дистрибутиве! Ура!
Я также сделал для этого инструмент C, используя OpenCV. Вы можете найти его на https://launchpad.net/brightness (вы должны скомпилировать его самостоятельно). Я надеюсь, что это поможет вам.
Вы можете использовать https://github.com/Wandersalamander/Dimmer, который делает именно то, что вы просили.
Это работает для меня:
#!/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)
Я разработал приложение C, которое делает это. Смотрите https://github.com/goglecm/AutoBrightnessCam .
Он используется fswebcam
для фотографирования, может быть настроен systemd
на автоматический запуск и определяет, разряжается ли ноутбук (затем включается).