Como usar o cron + python para ajustar regularmente o brilho da tela?

4

Eu quero usar o cron e este script (https://sobrelinux.info/questions/3287/use-webcam-to-sense-lighting-condition-and-adjust-screen-brightness"sudo su -c 'echo " + str(x) + " > /sys/devices/virtual/backlight/acpi_video0/brightness'") status, output = commands.getstatusoutput(cmd) assert status is 0

crontab: / 30 *** sudo python /home/username/screen.py

No entanto, existem dois problemas:

Primeiro, o laço while pode ser terminado após 5 segundos ou mais? Segundo, alguém poderia tentar melhorar o script para que níveis mais baixos de brilho possam ser definidos usando o script? Talvez a forma como os 256 níveis de brilho são mapeados para os que podem ser definidos para a tela precisem ser alterados.

Obrigado

    
por Toxicbits 04.09.2011 / 19:50

1 resposta

4

Em kernels antigos, havia um arquivo de controle de brilho em algum lugar em /proc , mas acho que era a mesma funcionalidade que /sys em seu snippet de código. Nesse arquivo /proc , havia vários níveis de brilho que você poderia usar e, provavelmente, o mesmo está nesse mecanismo. Tente cat /sys/devices/virtual/backlight/acpi_video0/brightness e verifique se há informações sobre os níveis de brilho que você pode usar.

Se você remover o código inteiro do loop, ele será executado uma vez para que seja possível definir o brilho apenas uma vez por período de meia hora. Há pouca desvantagem nessa solução - se você cobrir a câmera no momento da verificação de brilho, o brilho será alterado e a próxima leitura será após meia hora, para que você fique com a tela completamente escura por meia hora.

Para evitar essa situação, você pode substituir while loop por for loop (0 a 5, por exemplo) com 5 segundos de inatividade. Em loop, você só pode verificar o brilho cinco vezes e após o loop você pode calcular o brilho médio e defini-lo.

EDIT: Código com média a partir de 25 segundos:

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

Infelizmente não tenho a opção de alterar a luz de fundo (kernel antigo ou algo faltando no kernel) e não tenho câmera para verificar se está funcionando ...

    
por 04.09.2011 / 20:25

Tags