Gunakan webcam untuk merasakan kondisi pencahayaan dan menyesuaikan kecerahan layar

31

Apakah ada cara agar webcam saya merasakan kondisi pencahayaan dan menyesuaikan kecerahan layar yang sesuai?

zpletan
sumber

Jawaban:

11

Saya telah meningkatkan upaya saya sebelumnya :

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

Dua masalah dengan pendekatan ini: Kecerahan tampilan, setidaknya dengan webcam saya, tidak pernah lebih rendah dari empat, karena kamera tidak berfungsi dengan baik dalam kegelapan, dan mungkin sedikit melompati antara empat dan lima. Bagaimanapun,

Ini cara menggunakannya:

  1. sudo apt-get install python-opencv
  2. Simpan skrip ini di suatu tempat, katakanlah ~/test.py
  3. Jalankan via python test.py

Alih-alih kecerahan rata-rata, saya sekarang mendapatkan kecerahan maksimum dari tumbnail kecil (ini untuk menghindari masalah pixel mati dan membuatnya lebih cepat). Dan setidaknya dengan kombinasi lampu dan kamera saya, ini bekerja dengan baik!

Cobalah (:

Stefano Palazzo
sumber
1
Perhatikan bahwa ini adalah pendekatan yang sangat sederhana. Akan sangat mudah untuk mendapatkan histogram hitam dan putih berbobot dari gambar daripada rata-rata aritmatika piksel (merah dan biru tidak memiliki kecerahan yang sama). Selain itu, Anda dapat mengatur minimum, maksimum, dan mengubahnya hanya setelah tingkat kepercayaan tertentu bahwa lampu sekitar telah berubah. Tapi saya tidak repot karena masalah yang saya sebutkan. Ini akan memiliki masalah yang sama seperti ini.
Stefano Palazzo
1
Hmm, itu bekerja seperti yang Anda katakan. :)
zpletan
@zpletan mencobanya lagi; Saya sudah mulai dari awal.
Stefano Palazzo
1
Ini sepertinya bekerja dengan cara yang saya inginkan. Terima kasih! (Dan maaf untuk waktu yang lama untuk menjawab.)
zpletan
1
Tidak ada highguidari stackoverflow.com/questions/30684661/… . Apakah ada cara lain?
Daniyal
2

Lihatlah proyek RedShift, yang mengubah suhu layar berdasarkan lokasi geografis Anda seperti yang dilakukan F.Lux sebelumnya.

http://jonls.dk/redshift/

Petunjuk tentang cara menginstal dan cara menggunakannya didokumentasikan dengan baik di situs web dan, tergantung pada perangkat keras dan monitor Anda, Anda dapat merasakan mata Anda seperti "segar" oleh efek bagus yang dicapai oleh RedShift.

Geppettvs D'Constanzo
sumber
1
Saya rasa ini tidak menjawab pertanyaan, mungkin Anda harus menghapus jawaban Anda dan mengomentari pertanyaan aslinya. Jawaban harus selalu langsung menjawab pertanyaan.
Stefano Palazzo
tautan Anda tidak berfungsi.
TheXed
1
Kedengarannya seperti ini tidak mempertimbangkan lingkungan Anda? Jadi jika saya berada di ruangan gelap di tengah hari, itu tidak akan melakukan apa-apa?
zpletan
@zpletan Ya, yang satu ini hanya mengubah warna, sesuai dengan posisi matahari.
Stefano Palazzo
Sisi ini tautannya tampaknya bekerja tanpa masalah. Stefano Palazzo, maaf jika Anda tidak menemukan jawaban saya berguna. Namun, saya pikir orang lain dapat menemukan itu berguna jika Anda menyimpan jawabannya. Pilihanmu. Anda dapat memilih untuk meminta penghapusan. :) Terima kasih.
Geppettvs D'Constanzo
2

Untuk menambahkan PPA, tekan Ctrl+ Alt+ Tpada keyboard untuk membuka terminal. Saat terbuka, jalankan perintah di bawah ini:

sudo add-apt-repository ppa:fantasyleague0629/wildguppy

Kemudian instal WildGuppy melalui:

sudo apt-get update; sudo apt-get install wildguppy

Berfungsi pada Ubuntu 14.04, Ubuntu 13.10, Ubuntu 13.04, Ubuntu 12.10 dan Ubuntu 12.04.

Jadikan WildGuppy berjalan saat startup:

Jalankan perintah untuk mengedit file konfigurasi.

sudo gedit ~/.config/autostart/wildguppy-gtk.desktop

Ketikkan kata sandi Anda saat diminta. Perhatikan bahwa terminal tidak akan menampilkan kata sandi Anda saat mengetik, ketikkan saja dan tekan enter.

Ketika file dibuka, rekatkan konten di bawah ini dan simpan.

[Desktop Entry]
Type=Application
Exec=wildguppy-gtk
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=WildGuppy
Name=WildGuppy
Comment[en_US]=
Comment=
Daniyal
sumber
Hei, terima kasih atas jawabannya! Ini adalah persis apa yang saya cari pada hari itu, tetapi sayangnya saya tidak menggunakan Ubuntu lagi dan tidak memiliki cara untuk menguji (meskipun saya tidak tahu mengapa itu tidak berhasil). Karena itu, saya merasa tidak nyaman menghapus status jawaban pada jawaban yang lain, tetapi berharap orang lain akan menemukan ini berguna dan akan dengan cepat dipilih sebagai yang teratas jika demikian. Tepuk tangan!
zpletan
@zpletan Welcom, Saat Anda menginstal paket ini, Anda dapat menjalankan skrip python yang terletak di /opt/wildguppy/wildguppy.py. Jadi Anda bisa menggunakan paket ini di distro apa saja! Tepuk tangan!
Daniyal
@zpletan Saya juga membuat beberapa perubahan untuk menghitung kecerahan rata-rata untuk mencegah perubahan kecerahan yang cepat dan tiba-tiba. github.com/Daniyal-Javani/autobrightness/blob/master/…
Daniyal
0

Saya juga membuat alat C untuk itu, menggunakan OpenCV. Anda dapat menemukannya di https://launchpad.net/brightness (Anda harus mengompilasinya sendiri). Saya harap ini akan membantu Anda.

pictuga
sumber
Saya sudah mengkompilasinya, tetapi bagaimana cara menggunakannya?
zpletan
0

Ini bekerja untuk saya:

#!/usr/bin/env python3

import subprocess, time


# webcam brightness if webcam doesn’t get any light
blackpoint = 0.05

# webcam brightness if webcam is fully exposed (e.g. sun at noon)
whitepoint = 0.92549

# Path to program that sets screen brightness.  Takes float between 0 and 1 as
# a parameter.  Should be whitelisted for sudo if this script is not run as
# root.  Sample script:
#
# #!/bin/sh
# echo "($1 * 4882) / 1" | bc > /sys/class/backlight/intel_backlight/brightness
brightness_setter = "/home/bronger/bin/set_brightness.sh"

# it doen’t get any darker
minimal_brightness = 0.1

# in seconds
sleeping_time = 20


def get_brightness():
    """Returns webcam brightness as a float between 0 and 1 (boundaries
    included)."""
    fswebcam = subprocess.Popen(["fswebcam", "-q", "--no-banner", "--png", "0", "-"], stdout=subprocess.PIPE)
    convert = subprocess.run(["convert", "png:-", "-colorspace", "gray", "-scale", "10%x10%",
                              "-format", "%[fx:image.maxima]", "info:"],
                             check=True, stdin=fswebcam.stdout, capture_output=True, text=True)
    assert fswebcam.wait() == 0
    brightness = float(convert.stdout)
    brightness = (brightness - blackpoint) / (whitepoint - blackpoint)
    brightness = max(0.0, min(1.0, brightness))
    return brightness


old_brightness = None
while True:
    brightness = get_brightness() ** 2
    brightness = max(minimal_brightness, brightness)
    if old_brightness is None or abs(brightness - old_brightness) > 0.2:
        subprocess.run(["sudo", brightness_setter, str(brightness)], check=True)
        old_brightness = brightness
    time.sleep(sleeping_time)
Torsten Bronger
sumber
0

Saya telah mengembangkan aplikasi C yang melakukan ini. Lihat https://github.com/goglecm/AutoBrightnessCam .

Ini digunakan fswebcamuntuk mengambil gambar, dapat dikonfigurasikan dengan systemduntuk memulai secara otomatis dan mendeteksi apakah laptop sedang dipakai (kemudian mulai).

John
sumber