我想使用 cron 和这个脚本(http://askubuntu.com/questions/23593/use-webcam-to-sense-lighting-condition-and-adjust-screen-brightness):
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
定时任务:/30*** sudo python /home/用户名/screen.py
然而,有两个问题:
首先,while 循环可以在 5 秒左右后终止吗?其次,有人可以尝试改进脚本,以便可以使用脚本设置较低的亮度级别吗?也许 256 个亮度级别映射到可为屏幕设置的亮度级别的方式需要更改。
谢谢
答案1
在较旧的内核中,某处有亮度控制文件/proc
,但我认为它与/sys
您的代码片段中的功能相同。在此/proc
文件中,您可以使用多个级别的亮度,并且该机制中的亮度可能相同。尝试cat /sys/devices/virtual/backlight/acpi_video0/brightness
检查是否有有关您可以使用的亮度级别的信息。
如果删除循环,整个代码将执行一次,因此可以每半小时仅设置一次亮度。这个解决方案没有什么缺点——如果你在检查亮度时遮住相机,亮度将会改变,下一次读数将在半小时后,所以你最终会在半小时内看到完全黑暗的屏幕。
为了避免这种情况,您可以将while
循环for
(例如 0 到 5)替换为 5 秒睡眠。在循环中您只能检查亮度五次,循环后您可以计算平均亮度并设置它。
编辑:平均 25 秒的代码:
import opencv
import opencv.highgui
import time
import commands
from time import sleep
def get_image():
image = opencv.highgui.cvQueryFrame(camera)
return opencv.adaptors.Ipl2PIL(image)
camera = opencv.highgui.cvCreateCameraCapture(-1)
x = []
for i in range(5):
image = get_image()
image.thumbnail((32, 24, ))
image = tuple(ord(i) for i in image.tostring())
x.append(int((int((max(image) / 256.0) * 10) + 1) ** 0.5 / 3 * 10))
sleep(5)
sum = 0
for i in x:
sum = sum + i
avg = sum / len(x)
cmd = ("sudo su -c 'echo " + str(avg) + " > /sys/devices/virtual/backlight/acpi_video0/brightness'")
status, output = commands.getstatusoutput(cmd)
assert status is 0
不幸的是,我无法选择更改背光(旧内核或内核中缺少某些内容),并且我没有相机来检查它是否正常工作......