Как мы учили робота распознавать купюры

admin   13.07.2020   Комментарии к записи Как мы учили робота распознавать купюры отключены

money_reader_titleНесмотря на развитие цифровых технологий во всех сферах жизни человека, а особенно в экономике, физические деньги продолжают оставаться одной из неотъемлемых вещей, которыми человек пользуется почти каждый день. Сегодня мы покажем наш эксперимент, как мы учили робота «распознавать деньги» (Украинские гривневые купюры). Мы знаем, что номиналы банкнот отличаются общим цветом. Например, 5 гривен — синие, 20 — зеленые, 50 — фиолетовые. И мы надеялись, что цветовой датчик робота будет уметь хоть на каком-то уровне различать цвета. Однако оказалось, что специфика изготовления купюр (с защитной целью), а также низкая разрешающая способность стандартного датчика цвета сделали этот процесс невозможным.
В процессе наших опытов мы неожиданно обнаружили, что все купюры имеют разную длину и именно эту характеристику можно использовать как базовую. Также мы обнаружили, что датчик очень плохо определяет переход от белого фона к купюре. К счастью у нас под рукой оказалось черное поле для сумо, что позволило нам продолжить наш эксперимент.
money_reader_2Мы все таки решили использовать цветовую характеристику купюры, но в качестве «светового коэффициента» — сумма значений отраженного цвета за время проезда роботом над купюрой от края до края.
Подготовив базовый алгоритм определения характеристик купюр, мы провели набор однотипных экспериментов (10 опытов) для каждого номинала. Для уменьшения ошибок мы сделали рамку, куда помещали купюру перед стартом каждого замера. На основе набора данных для каждой купюры мы определили минимальное и максимальное значение для длины (в градусах поворота двигателя) и «светового коэффициента».

money_reader_1 money_reader_3

После добавления программного блока распознавания купюр, мы провели ряд опытов, чтобы проверить насколько наш робот «стал умным». Однако вскоре мы обнаружили, что в зависимости от окружающего освещения робот не всегда точно определяет купюры. После этого мы изменили граничные значения длины и «светового коэффициента», добавив небольшой запас. После этого запись видео прошла без единого сбоя. На экран мы выводим 3 значения:
1) Вычисленная длинна купюры и номинал, который ей соответствует;
2) Вычисленный «световой коэффициент» купюры и номинал, который ему соответствует;
3) Номинал вычисленной купюры.
Если робот не смог распознать купюру, то в третьем поле будет указано число 0 (ноль).

Наш робот конечно же не сможет отличить поддельную купюру от настоящей. Однако стоит заметить, что современные купюроприемники, имеющие множество специальных датчиков и сложные алгоритмы тоже не всегда справляются с такой задачей. Например, новая купюра в 1000 гривен очень часто не принимается терминалами самообслуживания.
Пример программы для EV3.