Câu trả lời:
Tôi đã cải thiện nỗ lực trước đây của mình :
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
Hai vấn đề với cách tiếp cận này: Độ sáng màn hình, ít nhất là với webcam của tôi, không bao giờ thấp hơn bốn, vì máy ảnh không hoạt động tốt trong bóng tối và nó có thể bỏ qua một chút từ bốn đến năm. Dù sao,
Đây là cách sử dụng nó:
sudo apt-get install python-opencv
~/test.py
python test.py
Thay vì độ sáng trung bình, giờ đây tôi nhận được độ sáng tối đa của một tumbnail nhỏ (điều này là để tránh các vấn đề về điểm ảnh chết và làm cho nó nhanh hơn). Và ít nhất với sự kết hợp giữa đèn và máy ảnh của tôi, nó hoạt động khá tốt!
Hãy thử một lần (:
highgui
từ stackoverflow.com/questions/30684661/ . Còn cách nào khác không?
Hãy xem dự án RedShift, dự án thay đổi nhiệt độ màn hình dựa trên vị trí địa lý của bạn như F.Lux trước đây đang làm.
Các hướng dẫn về cài đặt và cách sử dụng được ghi lại rõ ràng trên trang web và, tùy thuộc vào phần cứng và màn hình của bạn, bạn có thể cảm thấy đôi mắt của mình như được "làm mới" bởi hiệu ứng đẹp mắt mà RedShift đạt được.
Để thêm PPA, nhấn Ctrl+ Alt+ Ttrên bàn phím để mở thiết bị đầu cuối. Khi nó mở, chạy lệnh bên dưới:
sudo add-apt-repository ppa:fantasyleague0629/wildguppy
Sau đó cài đặt WildGuppy qua:
sudo apt-get update; sudo apt-get install wildguppy
Hoạt động trên Ubuntu 14.04, Ubuntu 13.10, Ubuntu 13.04, Ubuntu 12.10 và Ubuntu 12.04.
Làm cho WildGuppy chạy khi khởi động:
Chạy lệnh để chỉnh sửa tập tin cấu hình.
sudo gedit ~/.config/autostart/wildguppy-gtk.desktop
Nhập mật khẩu của bạn khi được nhắc. Lưu ý rằng thiết bị đầu cuối sẽ không hiển thị mật khẩu của bạn khi gõ, chỉ cần nhập tâm trí và nhấn enter.
Khi tệp mở ra, dán bên dưới nội dung và lưu nó.
[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
. Vì vậy, bạn có thể sử dụng gói này trong bất kỳ distro! Chúc mừng!
Tôi cũng đã tạo một công cụ C cho điều đó, bằng cách sử dụng OpenCV. Bạn có thể tìm thấy nó tại https://launchpad.net/brightness (bạn phải tự biên dịch nó). Tôi hy vọng nó sẽ giúp bạn.
Bạn có thể sử dụng https://github.com/Wandersalamander/Dimmer , chính xác những gì bạn yêu cầu.
Điều này làm việc cho tôi:
#!/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)
Tôi đã phát triển một ứng dụng C thực hiện điều này. Xem https://github.com/goglecm/AutoBrightnessCam .
Nó sử dụng fswebcam
để chụp ảnh, có thể được cấu hình systemd
để bắt đầu tự động và phát hiện xem máy tính xách tay có đang xả hay không (sau đó nó khởi động).