cron + Python을 사용하여 화면 밝기를 주기적으로 조정하는 방법은 무엇입니까?

cron + Python을 사용하여 화면 밝기를 주기적으로 조정하는 방법은 무엇입니까?

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/username/screen.py

그러나 두 가지 문제가 있습니다.

첫째, 약 5초 후에 while 루프가 종료될 수 있습니까? 둘째, 스크립트를 사용하여 더 낮은 밝기 수준을 설정할 수 있도록 누군가 스크립트를 개선하려고 시도할 수 있습니까? 어쩌면 256개의 밝기 수준이 화면에 대해 설정할 수 있는 밝기 수준에 매핑되는 방식을 변경해야 할 수도 있습니다.

감사해요

답변1

이전 커널에는 밝기 제어 파일이 어딘가에 있지만 귀하의 코드 조각과 기능이 동일 /proc하다고 가정합니다 . /sys/proc파일에서는 여러 수준의 밝기를 사용할 수 있으며 메커니즘의 밝기는 동일할 수 있습니다. cat /sys/devices/virtual/backlight/acpi_video0/brightness사용할 수 있는 밝기 수준에 대한 정보가 있는지 확인해 보세요 .

루프를 제거하면 전체 코드가 한 번씩 실행되므로 밝기는 30분에 한 번씩만 설정할 수 있습니다. 이 해결 방법에는 몇 가지 단점이 있습니다. 밝기를 확인하면서 카메라를 덮으면 밝기가 바뀌고 다음 판독은 30분 후에 이루어지므로 30분 동안 완전히 어두운 화면이 표시됩니다.

이를 방지하려면 while루프 for(예: 0~5)를 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

불행하게도 백라이트(오래된 커널 또는 커널에 누락된 항목)를 변경할 수 있는 옵션이 없으며 작동하는지 확인할 카메라도 없습니다...

관련 정보