มีวิธีให้เว็บแคมของฉันรับรู้สภาพแสงและปรับความสว่างของหน้าจอตามนั้นหรือไม่?
มีวิธีให้เว็บแคมของฉันรับรู้สภาพแสงและปรับความสว่างของหน้าจอตามนั้นหรือไม่?
คำตอบ:
ฉันได้รับการปรับปรุงในความพยายามครั้งก่อนของฉัน:
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
แทนที่จะเป็นความสว่างเฉลี่ยตอนนี้ฉันได้รับความสว่างสูงสุดของ tumbnail เล็ก ๆ (เพื่อหลีกเลี่ยงปัญหาพิกเซลตายและทำให้มันเร็วขึ้น) และอย่างน้อยเมื่อฉันรวมแสงและกล้องเข้าด้วยกันมันทำงานได้ค่อนข้างดี!
ให้มันลอง (:
ดูที่โครงการ 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
เมื่อคุณติดตั้งแพคเกจนี้คุณสามารถเรียกใช้สคริปต์หลามอยู่ใน ดังนั้นคุณสามารถใช้แพ็คเกจนี้ได้ใน distro ใด ๆ ! ไชโย!
ฉันยังทำเครื่องมือ 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)