Antworten:
Ich habe mich gegenüber meinem vorherigen Versuch verbessert :
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
Zwei Probleme bei diesem Ansatz: Die Anzeigehelligkeit geht, zumindest bei meiner Webcam, nie unter vier, da die Kamera bei Dunkelheit nicht gut funktioniert und möglicherweise zwischen vier und fünf ein wenig überspringt. Sowieso,
So verwenden Sie es:
sudo apt-get install python-opencv
~/test.py
python test.py
Anstelle der durchschnittlichen Helligkeit erhalte ich jetzt die maximale Helligkeit eines kleinen Miniaturbilds (um Probleme mit toten Pixeln zu vermeiden und schneller zu machen). Und zumindest mit meiner Kombination aus Licht und Kamera funktioniert es ziemlich gut!
Versuche es (:
highgui
von stackoverflow.com/questions/30684661/… . Gibt es einen anderen Weg?
Schauen Sie sich das RedShift-Projekt an, bei dem die Bildschirmtemperatur auf der Grundlage Ihres geografischen Standorts geändert wird, wie dies früher bei F.Lux der Fall war.
Anweisungen zur Installation und Verwendung sind auf der Website gut dokumentiert. Je nach Hardware und Monitor fühlen Sie sich durch den schönen Effekt, den RedShift erzielt, wie "erfrischt".
Um den PPA hinzuzufügen, drücken Sie auf der Tastatur Ctrl+ Alt+ T, um das Terminal zu öffnen. Führen Sie beim Öffnen den folgenden Befehl aus:
sudo add-apt-repository ppa:fantasyleague0629/wildguppy
Dann installiere WildGuppy über:
sudo apt-get update; sudo apt-get install wildguppy
Funktioniert unter Ubuntu 14.04, Ubuntu 13.10, Ubuntu 13.04, Ubuntu 12.10 und Ubuntu 12.04.
Stellen Sie sicher, dass WildGuppy beim Start ausgeführt wird:
Führen Sie den Befehl aus, um die Konfigurationsdatei zu bearbeiten.
sudo gedit ~/.config/autostart/wildguppy-gtk.desktop
Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden. Beachten Sie, dass das Terminal Ihr Passwort bei der Eingabe nicht anzeigt. Geben Sie es einfach ein und drücken Sie die Eingabetaste.
Wenn die Datei geöffnet wird, fügen Sie den folgenden Inhalt ein und speichern Sie ihn.
[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
. Sie können dieses Paket also in jeder Distribution verwenden! Prost!
Ich habe dafür auch ein C-Tool mit OpenCV erstellt. Sie finden es unter https://launchpad.net/brightness (Sie müssen es selbst kompilieren). Ich hoffe es hilft dir.
Sie können https://github.com/Wandersalamander/Dimmer verwenden, das genau das tut, wonach Sie gefragt haben.
Das funktioniert bei mir:
#!/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)
Ich habe eine C-App entwickelt, die dies tut. Siehe https://github.com/goglecm/AutoBrightnessCam .
Es fswebcam
nimmt Bilder auf, kann so konfiguriert werden systemd
, dass es automatisch startet und erkennt, ob sich der Laptop entlädt (und schaltet sich dann ein).