Наш робот Валера (которого, к несчастью, нет) уже освоился со всеми своими органами чувств, кроме глаз. Валера что-то видит, но ничего не понимает. У Валеры есть глаз, всего лишь один, который передает Edison-мозгу все, что видит. Мы хотим научить Валеру немного понимать происходящее вокруг него. Самое простое, чему мы можем научить Валеру - искать и отслеживать предметы.
Необходимо реализовать приложение для детектирования и локализации объекта на Intel Edison.
Объект выбирается студентом, основные способы детектирования:
- Выделение по цвету
- Контурный анализ
- Особенности (ключевые точки и т.д.)
- Алгоритмы обучения (каскады, нейронные сети и т.д.)
Алгоритм должен работать за приемлемое время (Валера не может ждать 10 минут, чтобы решить что он видит).
На выходе должен быть указан номер сектора (1..9), где находится объект (или большая его часть).
Рассмотрим пример с Robo code game challenge:

Добавляем пакеты в файл /etc/opkg/base-feeds.conf:
src all http://iotdk.intel.com/repos/2.0/iotdk/all
src x86 http://iotdk.intel.com/repos/2.0/iotdk/x86
src i586 http://iotdk.intel.com/repos/2.0/iotdk/i586
Затем запускаем:
opkg update
opkg install python-numpy opencv python-opencv
- Запускаем Python
- Выполняем:
import cv2
print(cv2.__version__)Если видим "2.4.9" или что-то вроде того, то все хорошо
lsmod | grep uvc, если вывод не пустой - скорее всего все работает, если пустой - попробовать opkg install kernel-module-uvcvideo
В коде:
>>> import cv2
>>> cap = cv2.VideoCapture()
>>> cap.open(0)
True
>>> ret, frame = cap.read()
>>> ret
True
>>> frame.shape
(480, 640, 3)см. пример camera.py
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
./darknet
Правильный вывод: usage: ./darknet <function>
С папки data/ репозитория перенести файл darknet.cfg в директорию darknet/cfg/, файл darknet.weights в директорию darknet/.
Пример вызова из кода:
output = subprocess.check_output("./darknet classifier predict cfg/imagenet1k.dataset cfg/darknet.cfg darknet.weights /home/root/test.png", cwd="/home/root/darknet/", shell=True)см. пример darknet_camera.py
пакет для работы с вводом-выводом - mraa
import mraa
import time
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
for _ in range(10):
led.write(1) # turn on
time.sleep(1) # wait 1 sec
led.write(0) # turn off
time.sleep(1) # wait 1 secсм. пример led.py
import mraa
btn = mraa.Gpio(3)
btn.dir(mraa.DIR_IN)
btn_down = False
btn_state = btn.read()
# cycle:
if not btn_state and btn_down:
btn_down = False
if btn_state and not btn_down:
print("down")
# do all stuff here
btn_down = Trueсм. пример darknet_camera.py
подключение:
import pyupm_i2clcd as lcd
display = lcd.Jhd1313m1(0, 0x3E, 0x62)выводим текст:
display.write("Roboschool")очищаем:
display.clear()управляем курсором:
display.setCursor(0,0) # строка, столбецменяем цвет подсветки:
display.setColor(r, g, b)