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

しかし、2つの問題があります。

まず、約5秒後にwhileループを終了できますか?第二に、スクリプトを使用して低い輝度レベルを設定できるように、誰かがスクリプトを改善しようとすることはできますか?おそらく、256の明るさレベルが画面に設定できる明るさレベルにマッピングされる方法を変更する必要があります。

ありがとう

ベストアンサー1

以前のカーネルには明るさ制御ファイルがどこかにありますが、コードスニペットと機能が同じであるとします/proc/sysこの/procファイルでは、複数のレベルの明るさを使用でき、メカニズムの明るさは同じにすることができます。cat /sys/devices/virtual/backlight/acpi_video0/brightness使用できる明るさのレベルに関する情報があることを確認してください。

ループを削除すると、コード全体が1回実行されるため、明るさは30分に1回だけ設定できます。この回避策にはいくつかの欠点があります。明るさを確認しながらカメラを覆うと明るさが変わり、次の読み取りは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

残念ながら、バックライト(古いカーネルまたはカーネルに欠けている項目)を変更するオプションはなく、動作していることを確認するカメラもありません。

おすすめ記事