Відповіді:
Я покращив свою попередню спробу :
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
на автоматичний запуск і виявляє, чи розряджається ноутбук (тоді він запускається).