Всем привет! Эта статья посвящена итогам первого года работы лаборатории компьютерного зрения в Детском Технопарке Новосибирска (официально «Центр развития творчества детей и юношества»). «Лаборатория компьютерного зрения» звучит, конечно, громко, но что-то мы сделать всё же успели.

image

Эволюция идеи


Начнём с того, что планировалось. В голубых мечтах виделся робот NAO (смотрит на вас с картинки), читающий вслух любой текст, поднесённый в «особую зону» на манер баркод-ридера в супермаркетах, некий условно универсальный чтец вслух для тех, кто не может по каким-то причинам сделать этого сам. В более приземлённой версии хотелось сделать из NAO робота-библиотекаря, распознающего названия книги и её автора. Учитывала ли я сложность задачи и уровень школьников (да и своё отсутствие опыта), когда ставила изначальную задачу? Конечно, нет. В итоге, разумеется, мы реализовали другую, хотя и близкую, задачу, впрочем, вышло даже лучше.

Небольшое пояснение с ответами на очевидные вопросы: почему NAO? Так вышло, что на базе этого центра оказалось три таких робота, с которыми никто не работал. Камеры у них неплохи, плюс есть встроенный синтезатор речи (производители даже говорят о специальном инструментарии для запоминания лиц/объектов и распознавании живой речи, но я лично этим не пользовалась), API понятный, понимает Python. Почему распознавать именно текст? Не знаю, почему-то текст мне показался на тот момент ближе всего (книжный червь, что с меня взять).

Работу со школьниками я начала в конце октября прошлого года. Поначалу их было всего двое: мальчик и девочка, 10 и 11 класс, соответственно. Чуть позже к нам присоединились 2 восьмиклассника (напоминаю, что слово «интеграл» в 8 классе незнакомо, как и многое другое, впрочем). И тут выяснилось, что не всё так просто. То есть вообще всё непросто.

После того, как роботы перестали вызывать острое желание их понякать были освоены в пределах графического интерфейса (как подключать, как управлять, как переключаться между верхней и нижней камерой, как сделать фотографию, как и куда её сохранить), мы сосредоточились на обработке изображений.

Первой поставленной задачей было сделать снимок книги и попробовать найти автора и название стандартными, описанными несколько раз на stackoverflow, методами (конвертация цветов, фильтры, утолщения, etc etc). С какими-то книгами манёвр удался, с какими-то — нет. Например, с книгой про хакеров нам удалось, несмотря на её нетрадиционный дизайн.

image

image

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

image

Очевидное, но не совсем то, решение предложили заехавшие в гости на какое-то мероприятие ребята из ТУСУРа, не первый год работающие с NAO. Они предложили белый лист как белый ровный фон. Ок.

image

Жить стало проще, но не очень.

image

Впрочем, после небольшого шаманства с фильтрами нам таки удалось применить Tesseract (точнее, его питоновскую обёртку Tesserwrap) и дело сдвинулось: робот заговорил. Сначала через камеру моего мака:




А потом уже и сам по себе. Мы даже сделали мусор новогоднее поздравление (которое я отчего-то записала зеркально через PhotoBooth и рационального объяснения этому нет).



Однако ложные срабатывания оставались такими же «приятными» как ложные грибы. И тогда один из школьников задал мне вопрос: «А что нам мешает сделать словарь и озвучивать только то, что в нём есть?»

Действительно. Подумав, я сформулировала финишную идею нашего со школьниками проекта: робот-тьютор английского языка. Наш робот всё равно знает только английский (в теории это можно было исправить), а робот-тьютор, практикующий с учащимся/учащейся английский язык, имеет некую связь с реальностью. Ну я бы в своё время не отказалась. На том и остановились.

Командная работа и её результат


И тут наступил апрель. Или март. В общем, недалеко замаячили майские праздники (с отменяющимися в их честь занятиями), дети то и дело срывались на олимпиады, начали появляться сообщения о каких-то фестивалях робототехники, в общем, «зима близко», а проекта нет.

Первым делом мы утрясли алгоритм: тактильными головными датчиками выбирается уровень игры (соответствующий сложности словаря), с их же помощью игру можно прекратить; робот выбирает рандомом слово из словаря, произносит его, делает снимки с верхней камеры, распознаёт текст, парсит его, сверяет со словарём, сверяет со сказанным словом и кивает головой, положительно или отрицательно, в зависимости от результата.

Пришлось давать по задаче каждому и радоваться, что на первых занятиях для школьников был открыт github. Двое занялись экспортом движений из графического интерфейса (чтобы не писать самим) и их правкой, кто-то занялся написанием кода рандомного выбора, кто-то — словарём, а мне досталось бегать вокруг и подсказывать в случаях затыков. Через какое-то время все участки по отдельности оказались готовы, и осталось их соединить воедино. Эту задачу тоже взял на себя один из учеников (с косяками которой мы разбирались несколько часов кряду впоследствии, но он всё равно молодец).

Не буду рассказывать как мы «пролетели» на региональном фестивале робототехники из-за этой сырой общей версии, лучше расскажу, что мы подали проект на Ш.У.С.Т.Р.И.К.а и ради этого допилили проект (4 часа полноценной работы — и у нас перегрелись датчики, так что зрение и движения опять вышли на разных видео). Проект, впрочем, Ш.У.С.Т.Р.И.К.а взял, как сообщил мне товарищ, присутствовавший на оглашении результатов в Томске. Ура.





Ну и сегодня, на выставке в рамках Дней науки в Новосибирске наконец-то удалось отладить версию и записать видео всего вместе (коротко и некачественно, ибо телефон).



Впрочем, некоторым школьникам на выставке (и том печальном фестивале) очень даже понравилось. Правда, к сожалению, многие стеснялись, что чего-то не расслышали и не понимают в английском языке.

image

Дальнейшие планы


В первую голову: ускорить эту версию (пока что мы делаем снимок с камеры раз в секунду), сделать карточки со словами на картоне (чтобы дети не сгибали их в руках, когда показывают роботу), возможно, переделать реализацию и поместить текст в какую-то контрастную рамку, например, красного цвета; поворачивать картинку, etc.

Ну а если мы продолжим с проектом в следующем учебном году (хотелось бы), то хочется сделать русско-английский словарь, возможно, объектные словари, может быть, что-то еще. Не факт, что c NAO.

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

Литература и оборудование


— роботы NAO
— macbook pro
— Tesserwrap
— OpenCV Python
— stackoverflow

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


  1. BelBES
    08.06.2015 22:36

    А почему вы не смотрели в сторону использования SWT(stroke width filter) для локализации текста на изображении?
    Для недавно вышедшего opencv 3.0, кстати, есть contrib модуль для детектирования и распознавания текста.