image

Автоматизировать можно многое, хотя и не все. Но все же при помощи автоматизации можно значительно облегчить себе жизнь, сделав ее комфортнее и, в некоторых случаях, безопаснее. В смысле, обезопасить себя от начальства. Один из разработчиков нейросетей решил создать систему, которая при приближении начальника сразу же сворачивала «неподходящие окна», скрывая их с глаз долой.

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

Да особо ничего сложного, никаких особенных проблем при реализации системы разработчик не получил. Кстати, одно из условий при создании такой системы было научить нейронную сеть распознавать лицо начальника с 5-7 метров, чтобы не переживать из-за того, что босс сможет все разглядеть с близкого расстояния. Времени на идентификацию босса немного — всего около 4-5 секунд.

Конечно, ничего хорошего в том, чтобы заниматься на работе посторонними делами, нет. Этот пример — просто работающая система, которую сделали, скорее фана ради, чем из-за каких-то реальных проблем начальством.



Так вот, разработчик решил постоянно фотографировать все, что происходит вокругг, с тем, чтобы заметить вовремя начальника. Система обнаружения получила название Boss Sensor.



В работе системы все просто:

  • Веб-камера отслеживает ситуацию в «поле зрения»;
  • Нейросеть пробует определить и распознать лицо на фотографии;
  • Если объект идентифицирован, как начальство, переключаются экраны.

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

Разработчик решил не мудрствовать лукаво, а использовать стандартную камеру Buffalo BSW20KM11BK.



Конечно, изображение можно создавать и самостоятельно, при помощи софта. Но лучше довериться системе — работа над ней продолжалась довольно долго, кроме того, система работает довольно точно. Что касается получения фото, то разработчик предлагает всем ознакомиться с исходниками.

Что касается обучения, то здесь все относительно просто — подобные системы довольно давно существуют. Для выполнения цели нужно выполнить три этапа:

  • Сбор изображений;
  • Предварительная обработка фото;
  • Создание самообучающейся системы.

Реализация задумки


Сбор изображений. Для того, чтобы нейросети было, на чем тренироваться, создатели системы использовали тысячи фотографий. Их можно брать, как из частных коллекций, так и из других посылок других пользователей. Для самообучения системы нужно огромное число снимков. Их решили брать из:

  • Google Image;
  • Коллекции изображений на Facebook;
  • Базы видеофайлов.

Изначально разработчик получил тысячи изображений с разными лицами, но его система не смогла самообучаться на основе фото. Для извлечения лиц с большого количества фотографий была использована библиотека ImageMagick.

В результате получилась вот такая база лиц сотрудников и самого босса:



Если вы хотите распознать лицо человека, лучше опробовать Web API, для изображения — инструмент вроде Computer Vision API в Cognitive Services. Разработчик решил пойти своим путем. Созданная им нейросеть имела определенную структуру:

Структура программы
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
convolution2d_1 (Convolution2D) (None, 32, 64, 64) 896 convolution2d_input_1[0][0]
____________________________________________________________________________________________________
activation_1 (Activation) (None, 32, 64, 64) 0 convolution2d_1[0][0]
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D) (None, 32, 62, 62) 9248 activation_1[0][0]
____________________________________________________________________________________________________
activation_2 (Activation) (None, 32, 62, 62) 0 convolution2d_2[0][0]
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D) (None, 32, 31, 31) 0 activation_2[0][0]
____________________________________________________________________________________________________
dropout_1 (Dropout) (None, 32, 31, 31) 0 maxpooling2d_1[0][0]
____________________________________________________________________________________________________
convolution2d_3 (Convolution2D) (None, 64, 31, 31) 18496 dropout_1[0][0]
____________________________________________________________________________________________________
activation_3 (Activation) (None, 64, 31, 31) 0 convolution2d_3[0][0]
____________________________________________________________________________________________________
convolution2d_4 (Convolution2D) (None, 64, 29, 29) 36928 activation_3[0][0]
____________________________________________________________________________________________________
activation_4 (Activation) (None, 64, 29, 29) 0 convolution2d_4[0][0]
____________________________________________________________________________________________________
maxpooling2d_2 (MaxPooling2D) (None, 64, 14, 14) 0 activation_4[0][0]
____________________________________________________________________________________________________
dropout_2 (Dropout) (None, 64, 14, 14) 0 maxpooling2d_2[0][0]
____________________________________________________________________________________________________
flatten_1 (Flatten) (None, 12544) 0 dropout_2[0][0]
____________________________________________________________________________________________________
dense_1 (Dense) (None, 512) 6423040 flatten_1[0][0]
____________________________________________________________________________________________________
activation_5 (Activation) (None, 512) 0 dense_1[0][0]
____________________________________________________________________________________________________
dropout_3 (Dropout) (None, 512) 0 activation_5[0][0]
____________________________________________________________________________________________________
dense_2 (Dense) (None, 2) 1026 dropout_3[0][0]
____________________________________________________________________________________________________
activation_6 (Activation) (None, 2) 0 dense_2[0][0]
====================================================================================================
Total params: 6489634


С кодом можно ознакомиться здесь. Разработчик говорит, что система стала почти безошибочно узнавать босса, когда тот появляется поблизости от камеры.

Ну а теперь необходимо задать четкую инструкцию на тот счет, если шеф таки появится рядом.



Теперь все готово, а технология опробована многократно. Теперь можно запустить систему, и сделать так, чтобы она реагировала на начальника.

После теста все оказалось работоспособным. За несколько метров до камеры босс оставался весен и спокоен. Система сделала все необходимые снимки провела анализ и смогла правильно идентифицировать босса разработчика. Тест одно значно показал — все работает.

Исходный код такой системы можно найти по этой ссылке.

Система идентификации сначала определила, что действительно, идет начальник, затем ей удалось распознать снимок и… да, свернуть все окна. На данный момент определение лица идет с использованием OpenCV. Возможно, Dlib позволит улучшить точность распознавания.

Есть, конечно, и более серьезные проекты, где готовят, например, системы машинного зрения, которые обучают по компьютерным играм. Нейросети становятся все более востребованными — с ними работают разработчики автомобилей, ученые, создатели роботизированных систем и другие специалисты.
Поделиться с друзьями
-->

Комментарии (21)


  1. densss2
    25.12.2016 13:46
    +7

    Я, честно говоря, подумал вначале что сначала надо будет поймать начальника и вживить ему RFID-метку. Тут вариант более продвинутый, но согласитесь — моя идея технически проще в реализации.


    1. Ziptar
      25.12.2016 13:59

      Главное — надёжнее, если вживить незаметно. А то начальник может поиметь привычку ходить в масках, типа такой и аналогичных.


  1. General_Failure
    25.12.2016 13:59
    +7

    Если бы я сидел напротив чувака с такой умной программой, я бы фотку начальника открывал на полный экран время от времени :)


    1. unxed
      25.12.2016 19:55

      Ходить мимо в маске начальника.


      1. General_Failure
        25.12.2016 20:23

        Хм, если ещё и начальник будет ходить в маске, как предположил Ziptar, придётся перенастраивать нейросеть :)


  1. DrPass
    25.12.2016 14:51
    +7

    Ждём появления нейросети, которая по звуку кликов мыши и нажатий на клавиатуру распознаёт, работают ли сотрудники, сидят в соцсетях или играют.


    1. fedor1210
      25.12.2016 15:01
      +5

      Отличная идея! Ушёл думать над реализацией.


    1. Galamoon
      25.12.2016 15:41
      -1

      я уже с этим живу. Работаю через tahometer.com, это конечно не нейросеть но задачу свою выполняет. Отслеживает активность мыши и клавы, плюс скриншоты в случайные отрезки времени. В последнее время заметил что программа реагирует на резкое изменение активности ввода и начинает делать скрины чаще.


    1. black_semargl
      25.12.2016 18:04
      +2

      А потом нейросети, которая будет имитировать работу…


      1. Sadler
        28.12.2016 06:33

        Или которая будет работать, пока Вы имитируете работу.


        1. Fagot63
          28.12.2016 17:15

          Ага, а через некоторое время она спросит: «А почему работаю я, а получаешь зарплату ты?» :)
          irony -off


  1. stepanp
    25.12.2016 15:16

    Наконец-то что-то полезное сделали


  1. 5oclock
    25.12.2016 15:31
    +4

    «Лентяйкин! Я как ни иду — Вы в пустой экран пялитесь!»


    1. hdfan2
      25.12.2016 17:29
      +5

      «Я работаю с нейросетью!»


  1. hp6812er
    25.12.2016 16:38
    +5

    image


  1. aleksashka
    25.12.2016 17:13

    Комментарии к исходникам просто превосходны :).


  1. Fagot63
    25.12.2016 18:00

    Нужно чтобы еще и звук вырубала. :)


  1. choupa
    25.12.2016 19:18
    +1

    Поэтому, если начальник подходит к столу и видит, что все окна свёрнуты… сразу всё ясно.

    Вспоминается сцена из фильма «Москва слезам не верит», когда Александра неожиданно для Гоши с Катериной возвращается домой, и они резко включают телевизор с настроечной таблицей: "— А чего это вы в темноте сидите?"

    Надо как на pokazuha.ru по нажатию Esc показывает картинку с Excel.


    1. KivApple
      26.12.2016 07:51

      Я почему-то после прочтения заголовка подумал, что нейросеть ещё и сама определяет какие окна надо свернуть, а оказалось, что просто сворачивает все без разбора.


  1. Beholder
    26.12.2016 08:12
    +6

    Правильный заголовок: «К библиотеке распознавания лиц прикрутили маленький скрипт, закрывающий окна на экране». Причём тут «научили нейросеть»?


  1. berezuev
    26.12.2016 17:11

    «Вашу бы энергию, да в мирное русло» :)