Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Датчик освещенности из веб-камеры, допиливанеие скрипта  (Прочитано 4842 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
Последняя редакция скрипта:
(Нажмите, чтобы показать/скрыть)
подскажите параметры для awk чтобы вывод ~$ xbacklight
100.000000
превратить в ~$ xbacklight
100
?

Пользователь решил продолжить мысль 09 Апреля 2012, 13:58:18:
так, ладно, энту проблему решил:
(Нажмите, чтобы показать/скрыть)
теперь следующий вопрос:
мне нужно что бы переменная $bright сравнивалась с переменной $reallight и если они находяться в диапазоне 15 чисел друг от друга, то скрипт уходит в очередной цикл ничего не трогая, а если больше то как и задумано - менялась яркость, подскажите оператор и параметры...
« Последнее редактирование: 10 Апреля 2012, 17:57:55 от [Liberty_Prime] »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Цитировать
подскажите параметры для awk чтобы вывод
Код: [Выделить]

~$ xbacklight
100.000000

превратить в
Код: [Выделить]

~$ xbacklight
100
~$ xbacklight | sed 's/\./ /g' | awk '{print $1}'
Wars ~.o

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
и так, вот к до чего я дошел: #xbacklight | sed 's/\./ /g' | awk '{print $1}'=reallight
    #let ""brightV"=$bright+8"
#let ""brightv"=$bright-8"
энто правильно?
теперь мне надо сравнить $brightv < $reallight < $drightV именно в таком порядке, и исходя из этого либо выполнить команды xbacklight -set $bright #устанавливаем яркость экрана
    hisbright=$bright

    sleep $sleep #спим
либо сразу sleep $sleep #спим

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
о, ещё один любитель скотча и напильника :)

идея у меня витала давно, озадачился реализацией после поста на хабре.
вечером покажу свой скрипт.

он почти готов: осталось откалибровать список порогов освещённости (пока тупо взял из андроида) и добавить работу в цикле, в режиме демона.

предупреждаю сразу, есть неприятные нюансы, как:
- автоэкспозиция камеры -- она не управляется драйвером, но косвенно влиять на неё можно
- эксклюзивный доступ к камере (увы и ах!) -- по другому драйвер не работает. так что в моменты снятия картинки другие приложения обломаются

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
[Liberty_Prime],
Он тебя вечером.
Wars ~.o

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
скрипт тут: http://pastebin.ru/DWBjw930

сейчас он делает снимок и выставляет яркость по своему усмотрению. слишком низкую, поскольку все значения с андроида.

в планах: управление не только подсветкой, но и яркостью (через ddccontrol), автовыбор камеры

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
о, ещё один любитель скотча и напильника :)

идея у меня витала давно, озадачился реализацией после поста на хабре.
вечером покажу свой скрипт.

он почти готов: осталось откалибровать список порогов освещённости (пока тупо взял из андроида) и добавить работу в цикле, в режиме демона.

предупреждаю сразу, есть неприятные нюансы, как:
- автоэкспозиция камеры -- она не управляется драйвером, но косвенно влиять на неё можно
- эксклюзивный доступ к камере (увы и ах!) -- по другому драйвер не работает. так что в моменты снятия картинки другие приложения обломаются


это слишком весомые нюансы! в том скрипте что я предлагаю нет места автоэкспозиции так как снимок происходит раньше чем камера откалибруется, я пробовал запускать скайп - звонил с видео - все работало...
плюс ваш скрипт не слабо проц хавает он пока у меня пахал сжирал 6% CPU2 стабильно, в то время как мой скрипт запускается раз в 20 сек при работе от сети и раз в 60 сек при работе от батареи.
в планах: сделать некую "погрешность" для того что бы в случае вычислений "новая" яркость оказывается в пределах 15-20 значений(пока точно не решил) от "старой" то перемен не происходит, ибо задолбало менять яркость когда кто-то прошел мимо при скриншоте, и добавить механизм который в случае ручного изменения яркости приостанавливал скрипт и запускал его при переходе на другой источник питания или при нажатии определенной комбинации клавиш(думаю что fn+пробел)

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
это слишком весомые нюансы! в том скрипте что я предлагаю нет места автоэкспозиции так как снимок происходит раньше чем камера откалибруется, я пробовал запускать скайп - звонил с видео - все работало...
да ну?!
вы, наверное, как-то хитро пляшете в момент получения кадра!

скажу прямо: в вашем случае обхода автоэкспозиции просто нет. а камера калибруется до получения кадра. драйвером.

Цитировать
плюс ваш скрипт не слабо проц хавает он пока у меня пахал сжирал 6% CPU2 стабильно, в то время как мой скрипт запускается раз в 20 сек при работе от сети и раз в 60 сек при работе от батареи.
хавает -- надо смотреть парамтеры ffmpeg, жрать может только он.
весь быдлокод, что стоит у вас после запуска ffmpeg, я заменил фильтрами в самом ffmpeg -- его алгоритмы точно сделают работу быстрее, чем разбор строк на баше. ваш скрипт -- один-в-один копипаста с хабра, причём не самого лучшего решения.

Цитировать
в планах: сделать некую "погрешность" для того что бы в случае вычислений "новая" яркость оказывается в пределах 15-20 значений(пока точно не решил) от "старой" то перемен не происходит, ибо задолбало менять яркость когда кто-то прошел мимо при скриншоте, и добавить механизм который в случае ручного изменения яркости приостанавливал скрипт и запускал его при переходе на другой источник питания или при нажатии определенной комбинации клавиш(думаю что fn+пробел)
подскажу: чтобы не изобретать велосипед, обратите внимание, сколько уровней яркости у подсветки и на каких значениях (в процентах) они переключаются. эти цифры пишите в массив brightness.
« Последнее редактирование: 09 Апреля 2012, 23:54:32 от dmig »

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
это слишком весомые нюансы! в том скрипте что я предлагаю нет места автоэкспозиции так как снимок происходит раньше чем камера откалибруется, я пробовал запускать скайп - звонил с видео - все работало...
да ну?!
вы, наверное, как-то хитро пляшете в момент получения кадра!

скажу прямо: в вашем случае обхода автоэкспозиции просто нет. а камера калибруется до получения кадра. драйвером.

Цитировать
плюс ваш скрипт не слабо проц хавает он пока у меня пахал сжирал 6% CPU2 стабильно, в то время как мой скрипт запускается раз в 20 сек при работе от сети и раз в 60 сек при работе от батареи.
хавает -- надо смотреть парамтеры ffmpeg, жрать может только он.
весь быдлокод, что стоит у вас после запуска ffmpeg, я заменил фильтрами в самом ffmpeg -- его алгоритмы точно сделают работу быстрее, чем разбор строк на баше. ваш скрипт -- один-в-один копипаста с хабра, причём не самого лучшего решения.

Цитировать
в планах: сделать некую "погрешность" для того что бы в случае вычислений "новая" яркость оказывается в пределах 15-20 значений(пока точно не решил) от "старой" то перемен не происходит, ибо задолбало менять яркость когда кто-то прошел мимо при скриншоте, и добавить механизм который в случае ручного изменения яркости приостанавливал скрипт и запускал его при переходе на другой источник питания или при нажатии определенной комбинации клавиш(думаю что fn+пробел)
подскажу: чтобы не изобретать велосипед, обратите внимание, сколько уровней яркости у подсветки и на каких значениях (в процентах) они переключаются. эти цифры пишите в массив brightness.
мой код - лиш жалкие наброски, до совершенства ему еще очень далеко...

Пользователь решил продолжить мысль 10 Апреля 2012, 01:22:48:
кстати да вот на чем я пока остановился:
(Нажмите, чтобы показать/скрыть)
мне нужно что бы если $h=0 выполнялась команда sleep и ожидалось смена источника питания или нажатия сочетания клавиш... ни как не могу составить этот хитрый цикл, подскажите?
« Последнее редактирование: 10 Апреля 2012, 01:22:48 от [Liberty_Prime] »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Цитировать
color=(`convert /tmp/snapshot.jpg[${x}x${y}+0+0]
имена файл ни где кого сохранить?
Wars ~.o

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
мне нужно что бы если $h=0 выполнялась команда sleep и ожидалось смена источника питания или нажатия сочетания клавиш... ни как не могу составить этот хитрый цикл, подскажите?
чесгря я ещё не до конца понял, как работает ваш скрипт -- уж очень много ненужных действий.
в целом идея такая:
- один глобальный цикл, заканчивается сном, начинается проверками условий
- проверки условий: источник питания, доступность камеры (уверен, простой [ -r ] должен подойти), ещё какие нужно...
- после проверок и выбора нужных рабочих параметров -- основные действия (получаем картинку, из неё освещённость, ставим яркость)

ЗЫ а ресурсов жрать ваш вариант должен ощутимо больше моего!
ЗЗЫ код выложите лучше на pastebin -- там подсветка есть, читать удобнее

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
я хочу что бы в случае смены яркости при помощи fn+f6/f7 - скрипт уходил в режим ожидания и ждал или смены источника питания или нажатия к примеру fn + пробел.
как реализовать отслеживание смены яркости я уде придумал:
hisbright=100при запуске скрипта значение hisbright выставляется 100
reallight=`xbacklight | sed 's/\./ /g' | awk '{print $1}'`потом замеряется РЕАЛЬНЫЙ уровень подсветки, записывается в переменную $reallight
if [[ "$reallight" -eq "$hisbright" ]]; then h=1; else h=0; fiэто дело сравнивает эти переменные и выносит вердикт, если вывод h=1 то выполняется остаток скрипта и все в порядке, но есле вывод h=0 то оставшаяся часть скрипта должна ожидать переключения источника питания или нажатия комбинации клавиш
xbacklight -set $bright #устанавливаем яркость экрана
    [color=red]hisbright=$bright sed 's/\./ /g' | awk '{print $1}'[/color]
а это и есть остаток скрипта(выделенная часть сохраняет новое значение  bright в hisbright и все по новаой)
З.Ы. а на счет ресурсов - он еще до стадии оптимизации не дошел), повторю это пока что наброски...))

Пользователь решил продолжить мысль 10 Апреля 2012, 13:32:41:
Цитировать
color=(`convert /tmp/snapshot.jpg[${x}x${y}+0+0]
имена файл ни где кого сохранить?
хм как то не заметил, благодарствую))))
« Последнее редактирование: 10 Апреля 2012, 13:34:58 от [Liberty_Prime] »

Оффлайн s1gma

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
А не проще модуль для ядра написать, который напрямую считывает изображение с камеры и меняет яркость. +такой способ может быть лишен недостатков в виде занятости камеры.

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
А не проще модуль для ядра написать, который напрямую считывает изображение с камеры и меняет яркость. +такой способ может быть лишен недостатков в виде занятости камеры.
Какую глупость сейчас сказали, осознаёте?

[Liberty_Prime], отключение по ручному изменению яркости -- идея здравая
if [[ "$reallight" -eq "$hisbright" ]]; then h=1; else h=0; fiчем городить кучу непонятных переменных, заверните код изменения яркости в это условие

а с горячей клавишей у меня только одна идея: нажатие на клавишу отправляет сигнал, скажем HUP (или USR*) процессу скрипта, примерно так killall -HUP myscriptname
а скрипт на этот сигнал прерывает сон и выставляет яркость
« Последнее редактирование: 10 Апреля 2012, 15:08:49 от dmig »

Оффлайн [Liberty_Prime]

  • Автор темы
  • Любитель
  • *
  • Сообщений: 58
  • В трех словах: ♂ ☠  Ubuntu 12.04.3x64
    • Просмотр профиля
А не проще модуль для ядра написать, который напрямую считывает изображение с камеры и меняет яркость. +такой способ может быть лишен недостатков в виде занятости камеры.
Какую глупость сейчас сказали, осознаёте?

[Liberty_Prime], отключение по ручному изменению яркости -- идея здравая
if [[ "$reallight" -eq "$hisbright" ]]; then h=1; else h=0; fiчем городить кучу непонятных переменных, заверните код изменения яркости в это условие

а с горячей клавишей у меня только одна идея: нажатие на клавишу отправляет сигнал, скажем HUP (или USR*) процессу скрипта, примерно так killall -HUP myscriptname
а скрипт на этот сигнал прерывает сон и выставляет яркость
заверну, но это позже, нужно решить как реализовать отслеживание состояния питания после ручного изменения яркости. Да и как скрипт будет воспринимать посланный сигнал?
З.ы. Переменные $h $m $M пока только для отладки...

Пользователь решил продолжить мысль 10 Апреля 2012, 18:01:04:
Да и вылезла новая проблема:
if [[ "$reallight" -eq "$hisbright" ]]; then h=1; else h=0; fi если ИЗНАЧАЛЬНО яркость стояла не 100% скрипт будет СРАЗУ воспринимать это как ручное изменение яркости, а значит нужно либо создать цикл, согласно которому эта проверка производилась не раньше второго выполнения скрипта или на прямую отслеживать нажатие fn+f7/f6(как?)...

Пользователь решил продолжить мысль 10 Апреля 2012, 18:15:51:
как перехватывать нажатие клавиш я нашел:
http://www.linux.org.ru/forum/general/6318889
теперь как заставить скрипт реагировать на посланные ему сигналы?
« Последнее редактирование: 10 Апреля 2012, 18:15:51 от [Liberty_Prime] »

 

Страница сгенерирована за 0.071 секунд. Запросов: 25.