Yashalta2

<<< Назад

Нейронные цветочки (допилено "API"!)

Нейросети для чайников от чайника.

Приветствуется конструктивная критика, предложения и свой опыт с нейросетью!
Я добавил метод реализации "API" который мне в комментах подсказали! За что еще раз ОГРОМНОЕ СПАСИБО, для меня это новый опыт!
В ниже описанном примере, я использую пример с дефолтным набором цветов! Советую проделать все шаги поэтапно, что бы после самим переобучить под свои нужды данную нейроскеть! Это не трудно, даже если вы не программист!

Я не думаю, что я смогу Вам лучше объяснить откуда взялась эта нейросеть и как она работает,в сравнении с челом с youtube https://www.youtube.com/watch?v=KL-zI-2Ifrs

Начнем!

  1. Скачивам датасет цветов от сюда http://download.tensorflow.org/example_images/flow...
    и распаковываем его к примеру в /home/user/flower_photos/
  2. Устанавливаем "tensorflow" v1.15 для установки в "Python environment " вводим эту команду pip install tensorflow==1.15
    Я устанавливал "tensorflow" самой последней версии и у меня НЕ ЗАРАБОТАЛО! Я не буду здесь объяснять как устанавливать все необходимости для работы нейросети т.к. это зависит какая "OS" у Вас, какое окружение используете "Python environment " или "Anaconda" или т.п. Для совсем новичков которые вообще не знают о чем здесь идет речь, я рекомендовал бы начать с "Anaconda" т.к. она при установке какого либо пакета, сама подтягивает всякие нужности, нужных версий.
  3. Сохраняем код скрипта "retrain.py" на свой комп он нам нужен для дообучения нейросети нашим датасетом цветов, скаченым в пункте №1.
    Ссылка на raw код скрипта retrain.py https://raw.githubusercontent.com/tensorflow/hub/r...
    или берем тут скрипт retrain.py https://github.com/tensorflow/hub/tree/master/exam...
  4. В данном пункте два решения одной и той же задачи a) при помощи «API» и б) при помощи посредника «MQTT»
    a) Решение при помощи «API»в котором результат выполнения кода мы сразу пишем в свойство объекта.
    Сохраняем скрипт api_label_image.py https://raw.githubusercontent.com/ZergOfSwarm/neur...
    в котором нужно указать свои значения!
    В строке 149 указываем «ip» адресс MajorDomo
    В строке 150 указываем имя объекта в который api_label_image.py пропишет результат своей работы
    В строке 151 указываем свойства объекта в который api_label_image.py пропишет результат своей работы
    В строке 152 указываем свойства объекта в который api_label_image.py пропишет значение вероятности с которым фото было распознано.

Скрипт запускаем так:
python api_label_image.py --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result --image /home/user/flower_recognition/12345.jpg
где /home/user/flower_photos/recognition/12345.jpg - это путь до файла неопознаного цветочка, который нейросеть должна класифицировать!
В результате Вы сразу получаете в объекте значение свойств

б) Решение при помощи посредника «MQTT» пишем в свойство объекта.
Я оставил этот пункт, пусть останеться как пример таким же новичкам в программировании как и я.
Сохраняем скрипт "mqtt_label_image.py" код берем от сюда. https://raw.githubusercontent.com/ZergOfSwarm/neur...

ВАЖНО: в скрипте "mqtt_label_image.py" в строке 155 прописываем "IP" адрес своего MQTT брокера на MD.

Это скрипт немного мною "допилен" что бы результат расспознания выводило в MojorDomo в модуль MQTT а далее его к объекту... Все мои изменения кода я коментировал и вы легко их сможете отследить и разобраться, что и для чего! Оригинальный, не тронутый мною код label_image.py для сравнения можно скачать от сюда https://github.com/tensorflow/tensorflow/blob/mast...

Теперь, когда у нас все есть для дообучения нашей нейросети. Будем дообучать ее, в данном случае нашими цветочками!

a) Запускаем виртуальную среду python в которой установлен "tensorflow" v1.15
И в ней запускаем скрипт retrain.py для обучения нашей сети указав путь до наших цветочков. Команда должна выглядеть так:
python retrain.py --image_dir /home/user/flower_photos
где /home/user/flower_photos - это путь до скаченного, разорхивированного набора цветов
У меня, на моем игровом ноуте, котороый на момент написании этой статьи удерживает уверенно середину по производительнсти заняло 7 мин. времени
После чего в папке /tmp появляются 2 файла
output_graph.pb
output_labels.txt
Вы их скопируйте куданибудь, что бы не проделывать эту долгую процедуру каждый раз после перезагрузки компа т.к. содержимое папки /tmp удаляется полностью при выключении/перезагрузки компа!
b) Запускаем разпознаение неопознаного цветочка при помощи команды

python mqtt_label_image.py \
--graph=/tmp/output_graph.pb \
--labels=/tmp/output_labels.txt \
--input_layer=Placeholder \
--output_layer=final_result \
--image /home/user/flower_photos/recognition/12345.jpg

где /home/user/flower_photos/recognition/12345.jpg - это путь до файла неопознаного цветочка, который нейросеть должна класифицировать! По окончанию выполнения скрипта в терминале у вас будет вывод примерно такой! (При условии, что Вы эксперементируете с набором цветом из 1-го пункта)

Так же в MajprDomo в модуле MQTT (при условии, что Вы не забыли указать "IP" адресс от MQTT в пункте №4) появится токен с примерно таким сообщением.

Далее 1. Создаем новый класс 2. в нем создаем объект и в объекте создаем 3 свойства a) array/массив б)name/имя в) probability/вероятность. Вот мой пример

Далее в модуле MQTT привязываем наш токен "nn_of_zerg" к созданному объекту.
Создаем метод который будет отрабатывать каждый раз при изменении свойства объекта!
Метод к примеру назовем calculation_probability код которого берем здесь https://github.com/ZergOfSwarm/neural_network_clas...
У Вас должно примерно быть так

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

Подведем итог: Зачем это нужно? Я планирую создать умный будильник, который будет в буквальном смысле видеть разбудил ли он меня или нет? Сделаю фото сет кровать без меня и кровать со мной, как укрытым полностью под одеялом так и без одеяла. Если я встал и на кровати меня нет то, перестать меня будить в противном случае...
Так же можно сделать фото сет открыта дверь/окно/ворота или закрыта/то/ты, убранна комната или нет?
А если у Вас производство чего либо то, отсотировывать бракованный товар который движется по ленте...

Встает вопрос как делать фото сеты нужные только вам и которые не найти в google? И которых нужно рельно много как минимум от 200 шт к примеру открытой двери и столько же закрытой двери.
Я делаю так!
Зная количество кадров в секунду которая делает моя камера при записи в mp4. К примеру 30 кадров в секунду то в записи всеголишь 60 секунд мы получим 1800 фото кадоров!
Вот ссылка на код который позволяет сделать фото каждого кадра из Вашего .mp4 видео файла. https://github.com/ZergOfSwarm/neural_network_clas...
в скрипте в 6-й строке замените название guitar.mp4 на имя Вашего файла

И последнее, что бы увеличить скорость обучения Вашей сети можно уменьшить размеры Ваших фотосетов! А как это сделать если камера пишет в "HD"? Вот ссылка на другой скрипт который я нашел в инете https://github.com/ZergOfSwarm/neural_network_clas...
Скрит нужно запускать в той же папке в которой находятся фотографии. При помощи команды

python transform_image_resolution.py -d /home/user/image/ -s 800 600
где /home/user/image/ - это путь где находятся фото
а 800 600 - это разрешение будущих фото.
Подберите свое значение методом проб и ошибок. Если посмотрите разрешение из примера фотосета цветов то, он в среднем 120 100.

Обсуждение (18) (10)

Смотрите так же:
18.07.2020 Node-red
06.07.2020 NodeMCU прошиваем Tasmota и подключаем к MD.
08.04.2020 MD на Proxmox!

Yashalta, Россия

На форуме: Yashalta