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