Use webcam to sense lighting condition and adjust screen brightness

I've improved on my previous attempt (python):

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

Two problems with this approach: The display brightness, at least with my webcam, never goes lower than four, because the camera doesn't work well in darkness, and it might skip a bit between four and five. Anyway,

This is how to use it:

  1. sudo apt-get install python-opencv
  2. Save this script somewhere, say ~/test.py
  3. Run it via python test.py

Instead of the average brightness, I'm now getting the maximum brightness of a small tumbnail (this is to avoid dead pixel problems and make it faster). And at least with my combination of lights and camera, it works rather well!

Give it a try (:


Take a look into the RedShift project, which changes the screen temperature based on your geographic location as F.Lux was formerly doing.

http://jonls.dk/redshift/

Instructions on installing and how to use are well documented in the website and, depending on your hardware and monitor you can feel your eyes like "refreshed" by the nice effect which is achieved by RedShift.