प्रकाश की स्थिति को समझने और स्क्रीन चमक को समायोजित करने के लिए वेब कैमरा का उपयोग करें


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

इस दृष्टिकोण के साथ दो समस्याएं: डिस्प्ले की चमक, कम से कम मेरे वेबकैम के साथ, कभी भी चार से कम नहीं होती है, क्योंकि कैमरा अंधेरे में अच्छी तरह से काम नहीं करता है, और यह चार और पांच के बीच थोड़ा सा छोड़ सकता है। वैसे भी,

यह इसका उपयोग करने का तरीका है:

  1. sudo apt-get install python-opencv
  2. इस लिपि को कहीं बचा लो, कहो ~/test.py
  3. इसके माध्यम से चलाएं python test.py

औसत चमक के बजाय, मुझे अब एक छोटी सी तुंबनी की अधिकतम चमक मिल रही है (यह मृत पिक्सेल समस्याओं से बचने और इसे तेज़ बनाने के लिए है)। और कम से कम रोशनी और कैमरे के संयोजन के साथ, यह अच्छी तरह से काम करता है!

कोशिश तो करो (:


1
ध्यान दें कि यह एक बहुत ही सरल दृष्टिकोण है। पिक्सल्स के अंकगणित माध्य (लाल और नीला समान चमक नहीं है) के बजाय छवि का भारित काले और सफेद हिस्टोग्राम प्राप्त करना बहुत आसान होगा। इसके अलावा, आप एक न्यूनतम, अधिकतम सेट कर सकते हैं और इसे एक निश्चित स्तर के विश्वास के बाद ही स्विच कर सकते हैं जो परिवेश प्रकाश बदल गया है। लेकिन मैंने उन मुद्दों के कारण परेशान नहीं किया जिनका मैंने उल्लेख किया था। यह एक के रूप में एक ही समस्या होगी।
Stefano Palazzo

1
हम्म, अच्छी तरह से यह आपके कहे अनुसार काम करता है। :)
zpletan

@zpletan इसे एक और जाने दो; मैंने खरोंच से शुरू किया है।
Stefano Palazzo

1
यह मेरे इच्छित तरीके के बारे में काम करता है। धन्यवाद! (और जवाब देने में इतना समय
लगने पर

1
कोई है highguiसे stackoverflow.com/questions/30684661/... । क्या कोई और तरीका है?
डेनियल

2

RedShift प्रोजेक्ट पर एक नज़र डालें, जो आपके भौगोलिक स्थान के आधार पर स्क्रीन तापमान को बदलता है जैसा कि F.Lux पूर्व में कर रहा था।

http://jonls.dk/redshift/

स्थापित करने और उपयोग करने के निर्देशों को वेबसाइट में अच्छी तरह से प्रलेखित किया गया है और, आपके हार्डवेयर और मॉनिटर के आधार पर आप अपनी आँखों को "ताज़ा" जैसे अच्छे प्रभाव से महसूस कर सकते हैं जो RedShift द्वारा प्राप्त किया गया है।


1
मुझे नहीं लगता कि यह प्रश्न का उत्तर देता है, हो सकता है कि आप अपना उत्तर हटा दें और इसके बजाय मूल प्रश्न पर टिप्पणी करें। जवाब हमेशा सीधे सवाल का जवाब देना चाहिए।
Stefano Palazzo

आपका लिंक काम नहीं करता है।
TheXed

1
ऐसा लगता है कि यह आपके परिवेश को ध्यान में नहीं रखता है? तो अगर मैं दिन के बीच में एक अंधेरे कमरे में था, तो यह कुछ भी नहीं करेगा?
zpletan

@zpletan हाँ, यह केवल सूर्य की स्थिति के अनुसार रंग बदलता है।
Stefano Palazzo

इस तरफ लिंक समस्याओं के बिना काम करने लगता है। स्टीफनो पलाज़ो, क्षमा करें यदि आपको मेरा उत्तर उपयोगी नहीं लगा। हालांकि, मुझे लगता है कि यदि आप जवाब रखते हैं तो कोई और इसे उपयोगी पा सकता है। आपकी पंसद। आप विलोपन का अनुरोध करने के लिए मतदान कर सकते हैं। :) धन्यवाद।
गेप्पेटव्स डी'कोन्स्टोनजो

2

पीपीए, प्रेस को जोड़ने के लिए 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

संकेत दिए जाने पर अपने पासवर्ड में टाइप करें। ध्यान दें कि टर्मिनल टाइप करते समय आपका पासवर्ड प्रदर्शित नहीं करेगा, बस मन में टाइप करें और हिट दर्ज करें।

जब फ़ाइल खुलती है, तो सामग्री के नीचे पेस्ट करें और इसे सहेजें।

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

हे, उत्तर के लिए धन्यवाद! यह वही है जो मैं दिन में वापस देख रहा था, लेकिन दुर्भाग्य से मैं उबंटू का उपयोग नहीं करता हूं और परीक्षण करने का कोई तरीका नहीं है (हालांकि मुझे नहीं पता कि यह काम क्यों नहीं करेगा )। जैसे, मैं अन्य उत्तर पर उत्तर की स्थिति को हटाने में सहज महसूस नहीं करता, लेकिन आशा करता हूं कि अन्य लोग इसे उपयोगी पाएंगे और यदि ऐसा है तो यह तेजी से शीर्ष पर पहुंच जाएगा। चीयर्स!
zpletan

@zpletan वेलकम, जब आप इस पैकेज को स्थापित करते हैं, तो आप अंदर स्थित अजगर स्क्रिप्ट को चला सकते हैं /opt/wildguppy/wildguppy.py। तो आप किसी भी डिस्ट्रो में इस पैकेज का उपयोग कर सकते हैं! चीयर्स!
डेनियल

@zpletan मैं भी चमक में तेज और अचानक बदलाव को रोकने के लिए औसत चमक की गणना करने के लिए कुछ बदलाव करता हूं। github.com/Daniyal-Javani/autobrightness/blob/master/…
डेनियल

0

मैंने उस के लिए एक C टूल भी बनाया, OpenCV का उपयोग करते हुए। आप इसे https://launchpad.net/brightness पर पा सकते हैं (आपको इसे स्वयं ही संकलित करना होगा)। मुझे आशा है कि यह आपकी मदद करेगा।


मैंने इसे संकलित कर लिया है, लेकिन मैं इसका उपयोग कैसे करूं?
ज़प्लेन


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)

0

मैंने एक C ऐप विकसित किया है जो ऐसा करता है। देखHttps://github.com/goglecm/AutoBrightnessCam

यह fswebcamचित्रों को लेने के लिए उपयोग किया जाता है, systemdस्वचालित रूप से शुरू करने के लिए कॉन्फ़िगर किया जा सकता है और पता लगा सकता है कि क्या लैपटॉप डिस्चार्ज हो रहा है (तब यह किक करता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.