Очередной эксперимент
Я не программист "я так вижу"
На написание этой заметки меня подтолкнул опыт Matt Farley (вроде так его зовут) http://jarvisfarley.com/code/roomcheck/ который использовал tensorflow чтобы определять убрано в детской или нет и соответсвенно на основании этого его система разрешает или запрещает ребенку включать ТВ.
Я заинтересовался и решил испытать его опыт на себе.
1. TEIL EINS. PLANUNG
"Майор дома" у меня крутится на Orange pi PC +, OS Armbian Debian stretch.
Делаем следующее:
1. sudo apt update & sudo apt install python3-pip python3-dev
2. wget https://github.com/rezaxdi/tensorflow-on-orangepi-zero/releases/download/v1.6.0/tensorflow-1.6.0-cp35-cp35m-linux_armv7l.whl
3. pip3 install --user tensorflow-1.6.0-cp35-cp35m-linux_armv7l.whl
4. pip3 install "tensorflow-hub" --user
5. mkdir ~/tensorflow
6. cd ~/tensorflow
7. curl -LO https://github.com/tensorflow/tensorflow/raw/master/tensorflow/examples/label_image/label_image.py
8. curl -LO https://github.com/tensorflow/hub/raw/r0.1/examples/image_retraining/retrain.py
Всё кроме установки пип'а прошло гладко. С ошибками пип'а справился гуглежом.
Проверям установку Tensorflow
python3 -c 'import tensorflow as tf; print(tf.__version__)' # for Python 3
Коробок должен ответить
1.6.0
Это версия Tensorflow, старовата но для Orange pi PC+ единственный вариант. Если у вас другая система смотрите в гугл как установить Tensorflow.
2.TEIL ZWEI. VORBEREITUNG
Для обучения нейросети нам понадобится два набора изображений с ip камеры. Первый - комната прибрана. Второй - в комнате беспорядок.
Собственно это могут быть наборы "есть машина во дворе-нет машины во дворе", "есть кто на даване - нет никого" и т.п.
Накопить их довольно просто, надо заставить камеру делать снапшоты с определнной периодичностью а потом спутся какое-то время рассортировать.
При этом рекомендуется использовать фото с разным типом освещения. Matt рекомендует как минимум 100 фото каждого типа. Но чет это дохрена. Сам скрипт retrain.py говорит, что 20 изображений.
Как и в примере фото прибраной комнаты room/clean, фото бардака room/messy.
Теперь учим нейросеть
python3 retrain.py \
--image_dir /root/tensorflow/room \
--output_graph=rooms.pb \
--output_labels=rooms.txt \
--tfhub_module https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1
Как пишет Matt Farley обучение занимает от 15-60 минут в зависимости от процессора.
Так как апельсин слабоват для таких задач, можно учить на ББ.
Положительный момент в том, что обучить можно один раз, если положение камеры у вас не будет изменяться.
Результатом обучения будет два файла rooms.pb и rooms.txt
4.TEIL VIER. BLITZKREIG
Распознаем снапшот с камеры.
python3 label_image.py \
--graph=rooms.pb \
--labels=rooms.txt \
--input_layer=Placeholder \
--output_layer=final_result \
--image=/path/to/new_image.jpg
Результатом будет ответ вроде:
messy 0.894276
clean 0.105724
В данном случае нейросеть пришла к выводу, что в комнате срач.
Утаскиваем значения в МДМ.
5. TEIL FÜNF. KAPITULIREN
Собственно у меня пока один вопрос, как утащить МДМ результат работы скрипта.
Сделал так
exec('sudo python3 /root/tensorflow/label_image.py --graph=/root/tensorflow/cam.pb --labels=/root/tensorflow/cam.txt --input_layer=Placeholder --output_layer=final_result --image=/root/tensorflow/test3.jpeg', $output);
$res=explode(' ', $output[0]);
sg('AlarmClock01.sleep', $res[0]);
UPDATEN
Наконец-то набрал нужное количество снапшотов для обучения.
Докладываю.
Обучал на ноуте с Core i7, время обучения ~10 минут. Общее количество использованных снапшотов 43. Разрешение каждого 1280x720. Что похоже излишне. Можно попробовать на меньшем разрешении. Размер обученной модели ~83 мегабайта.
Обученную сеть закачал на свой сервер orange pi pc+.
Время распознавания снапшота с разрешением 1280x720 25-30 секунд. Распознает хорошо.
Санкт-Петербург, Россия
На форуме: C_3AXAPOB