ウェブカメラを使用して照明条件を検知し、画面の明るさを調整します


31

ウェブカメラに照明条件を検知させ、それに応じて画面の明るさを調整する方法はありますか?

回答:


11

私は以前の試みで改善しました:

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

このアプローチの2つの問題:少なくとも私のウェブカメラでは、ディスプレイの明るさが4より低くなることはありません。カメラは暗闇ではうまく機能せず、4〜5の間は少しスキップする可能性があるためです。とにかく、

これはそれを使用する方法です:

  1. sudo apt-get install python-opencv
  2. このスクリプトをどこかに保存して、言う ~/test.py
  3. 経由で実行する python test.py

平均輝度の代わりに、小さなサムネイルの最大輝度を取得しています(これは、デッドピクセルの問題を回避し、高速化するためです)。少なくとも私の照明とカメラの組み合わせでは、かなりうまくいきます!

試してみる (:


1
これは非常に単純なアプローチであることに注意してください。ピクセルの算術平均の代わりに、画像の重み付き白黒ヒストグラムを取得するのは非常に簡単です(赤と青は同じ明るさではありません)。また、最小値、最大値を設定し、周囲光が変化したという一定の信頼レベルの後にのみ切り替えることができます。しかし、私は言及した問題のために気にしませんでした。これと同じ問題があります。
ステファノパラッツォ

1
うーん、それはあなたの言う通りです。:)
zpletan

@zpletanは、もう一度やり直します。私はゼロから始めました。
ステファノパラッツォ

1
これは私が望む方法で動作するようです。ありがとうございました!(そして、回答に非常に時間がかかり申し訳ありません。)
zpletan

1
stackoverflow.com/questions/30684661/…highguiからはありません。他の方法はありますか?
ダニエル

2

F.Luxが以前行っていたように、地理的な場所に基づいて画面の温度を変更するRedShiftプロジェクトを見てください。

http://jonls.dk/redshift/

インストールと使用方法の説明はウェブサイトによく文書化されており、ハードウェアとモニターによっては、RedShiftによって達成される素晴らしい効果によって「リフレッシュ」のような目を感じることができます。


1
これで質問の答えが得られるとは思わない。答えを削除して、代わりに元の質問のコメントにする必要があるかもしれない。回答は常に質問に直接回答する必要があります。
ステファノパラッツォ

リンクが機能しません。
TheXed

1
これはあなたの環境を考慮に入れていないように思えますか?それで、もし私が日中に暗い部屋にいれば、それは何もしませんか?
-zpletan

@zpletanはい、これは太陽の位置に応じて色を変えるだけです。
ステファノパラッツォ

この側のリンクは問題なく機能しているようです。ステファノ・パラッツォ、私の答えが役に立たなかったらごめんなさい。しかし、答えを保持しておけば、他の誰かがそれを役に立つと思うかもしれません。あなたの選択。投票して削除をリクエストできます。:) ありがとうございました。
Geppettvs D'Constanzo

2

PPAを追加するには、キーボードのCtrl+ Alt+ Tを押して端末を開きます。開いたら、次のコマンドを実行します。

sudo add-apt-repository ppa:fantasyleague0629/wildguppy

次に、WildGuppyをインストールします:

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

Ubuntu 14.04、Ubuntu 13.10、Ubuntu 13.04、Ubuntu 12.10、およびUbuntu 12.04で動作します。

WildGuppyを起動時に実行します:

コマンドを実行して、構成ファイルを編集します。

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

プロンプトが表示されたら、パスワードを入力します。端末は入力時にパスワードを表示せず、単に入力してEnterキーを押すことに注意してください。

ファイルが開いたら、コンテンツの下に貼り付けて保存します。

[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=

ねえ、答えてくれてありがとう!これは私が一日で戻って探していたまさにですが、残念ながら、私はこれ以上のUbuntuを使用してテストする方法がありませんしません(私は知らないのに、なぜそれはないだろう作品)。そのため、他の回答の回答ステータスを削除することはできませんが、他の回答者がこれを有用であると判断し、もしそうならすぐにトップに投票されることを願っています。乾杯!
zpletan

@zpletan Welcom、このパッケージをインストールすると、にあるpythonスクリプトを実行できます/opt/wildguppy/wildguppy.py。したがって、このパッケージはどのディストリビューションでも使用できます!乾杯!
ダニエル

@zpletanまた、明るさの急激な変化を防ぐために、平均的な明るさを計算するための変更を行います。github.com/Daniyal-Javani/autobrightness/blob/master/...
ダーニヤール



0

これは私のために働く:

#!/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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.