Всем привет! Эта статья посвящена итогам первого года работы лаборатории компьютерного зрения в Детском Технопарке Новосибирска (официально «Центр развития творчества детей и юношества»). «Лаборатория компьютерного зрения» звучит, конечно, громко, но что-то мы сделать всё же успели.
Начнём с того, что планировалось. В голубых мечтах виделся робот NAO (смотрит на вас с картинки), читающий вслух любой текст, поднесённый в «особую зону» на манер баркод-ридера в супермаркетах, некий условно универсальный чтец вслух для тех, кто не может по каким-то причинам сделать этого сам. В более приземлённой версии хотелось сделать из NAO робота-библиотекаря, распознающего названия книги и её автора. Учитывала ли я сложность задачи и уровень школьников (да и своё отсутствие опыта), когда ставила изначальную задачу? Конечно, нет. В итоге, разумеется, мы реализовали другую, хотя и близкую, задачу, впрочем, вышло даже лучше.
Небольшое пояснение с ответами на очевидные вопросы: почему NAO? Так вышло, что на базе этого центра оказалось три таких робота, с которыми никто не работал. Камеры у них неплохи, плюс есть встроенный синтезатор речи (производители даже говорят о специальном инструментарии для запоминания лиц/объектов и распознавании живой речи, но я лично этим не пользовалась), API понятный, понимает Python. Почему распознавать именно текст? Не знаю, почему-то текст мне показался на тот момент ближе всего(книжный червь, что с меня взять).
Работу со школьниками я начала в конце октября прошлого года. Поначалу их было всего двое: мальчик и девочка, 10 и 11 класс, соответственно. Чуть позже к нам присоединились 2 восьмиклассника (напоминаю, что слово «интеграл» в 8 классе незнакомо, как и многое другое, впрочем). И тут выяснилось, что не всё так просто. То есть вообще всё непросто.
После того, как роботыперестали вызывать острое желание их понякать были освоены в пределах графического интерфейса (как подключать, как управлять, как переключаться между верхней и нижней камерой, как сделать фотографию, как и куда её сохранить), мы сосредоточились на обработке изображений.
Первой поставленной задачей было сделать снимок книги и попробовать найти автора и название стандартными, описанными несколько раз на stackoverflow, методами (конвертация цветов, фильтры, утолщения, etc etc). С какими-то книгами манёвр удался, с какими-то — нет. Например, с книгой про хакеров нам удалось, несмотря на её нетрадиционный дизайн.
А вот с вроде бы менее маргинальным изданием мы потерпели многочисленные фиаско (картинок, помимо этой, история не сохранила). В общем, стало понятно, чтодальше так жить нельзя времени у нас на это нет и надо менять задачу.
Очевидное, но не совсем то, решение предложили заехавшие в гости на какое-то мероприятие ребята из ТУСУРа, не первый год работающие с NAO. Они предложили белый лист как белый ровный фон. Ок.
Жить стало проще, но не очень.
Впрочем, после небольшого шаманства с фильтрами нам таки удалось применить Tesseract (точнее, его питоновскую обёртку Tesserwrap) и дело сдвинулось: робот заговорил. Сначала через камеру моего мака:
А потом уже и сам по себе. Мы даже сделалимусор новогоднее поздравление (которое я отчего-то записала зеркально через PhotoBooth и рационального объяснения этому нет).
Однако ложные срабатывания оставались такими же «приятными» как ложные грибы. И тогда один из школьников задал мне вопрос: «А что нам мешает сделать словарь и озвучивать только то, что в нём есть?»
Действительно. Подумав, я сформулировала финишную идею нашего со школьниками проекта: робот-тьютор английского языка. Наш робот всё равно знает только английский (в теории это можно было исправить), а робот-тьютор, практикующий с учащимся/учащейся английский язык, имеет некую связь с реальностью. Ну я бы в своё время не отказалась. На том и остановились.
И тут наступил апрель. Или март. В общем, недалеко замаячили майские праздники (с отменяющимися в их честь занятиями), дети то и дело срывались на олимпиады, начали появляться сообщения о каких-то фестивалях робототехники, в общем, «зима близко», а проекта нет.
Первым делом мы утрясли алгоритм: тактильными головными датчиками выбирается уровень игры (соответствующий сложности словаря), с их же помощью игру можно прекратить; робот выбирает рандомом слово из словаря, произносит его, делает снимки с верхней камеры, распознаёт текст, парсит его, сверяет со словарём, сверяет со сказанным словом и кивает головой, положительно или отрицательно, в зависимости от результата.
Пришлось давать по задаче каждому и радоваться, что на первых занятиях для школьников был открыт github. Двое занялись экспортом движений из графического интерфейса (чтобы не писать самим) и их правкой, кто-то занялся написанием кода рандомного выбора, кто-то — словарём, а мне досталось бегать вокруг и подсказывать в случаях затыков. Через какое-то время все участки по отдельности оказались готовы, и осталось их соединить воедино. Эту задачу тоже взял на себя один из учеников (с косяками которой мы разбирались несколько часов кряду впоследствии, но он всё равно молодец).
Не буду рассказывать как мы «пролетели» на региональном фестивале робототехники из-за этой сырой общей версии, лучше расскажу, что мы подали проект на Ш.У.С.Т.Р.И.К.а и ради этого допилили проект (4 часа полноценной работы — и у нас перегрелись датчики, так что зрение и движения опять вышли на разных видео). Проект, впрочем, Ш.У.С.Т.Р.И.К.а взял, как сообщил мне товарищ, присутствовавший на оглашении результатов в Томске. Ура.
Ну и сегодня, на выставке в рамках Дней науки в Новосибирске наконец-то удалось отладить версию и записать видео всего вместе (коротко и некачественно, ибо телефон).
Впрочем, некоторым школьникам на выставке (и том печальном фестивале) очень даже понравилось. Правда, к сожалению, многие стеснялись, что чего-то не расслышали и не понимают в английском языке.
В первую голову: ускорить эту версию (пока что мы делаем снимок с камеры раз в секунду), сделать карточки со словами на картоне (чтобы дети не сгибали их в руках, когда показывают роботу), возможно, переделать реализацию и поместить текст в какую-то контрастную рамку, например, красного цвета; поворачивать картинку, etc.
Ну а если мы продолжим с проектом в следующем учебном году (хотелось бы), то хочется сделать русско-английский словарь, возможно, объектные словари, может быть, что-то еще. Не факт, что c NAO.
Код, без последней версии, смотретьи ругать можно тут. Последняя версия тоже появится там, но чуть позже — у нас идёт работа над ошибками.
— роботы NAO
— macbook pro
— Tesserwrap
— OpenCV Python
— stackoverflow
Эволюция идеи
Начнём с того, что планировалось. В голубых мечтах виделся робот NAO (смотрит на вас с картинки), читающий вслух любой текст, поднесённый в «особую зону» на манер баркод-ридера в супермаркетах, некий условно универсальный чтец вслух для тех, кто не может по каким-то причинам сделать этого сам. В более приземлённой версии хотелось сделать из NAO робота-библиотекаря, распознающего названия книги и её автора. Учитывала ли я сложность задачи и уровень школьников (да и своё отсутствие опыта), когда ставила изначальную задачу? Конечно, нет. В итоге, разумеется, мы реализовали другую, хотя и близкую, задачу, впрочем, вышло даже лучше.
Небольшое пояснение с ответами на очевидные вопросы: почему NAO? Так вышло, что на базе этого центра оказалось три таких робота, с которыми никто не работал. Камеры у них неплохи, плюс есть встроенный синтезатор речи (производители даже говорят о специальном инструментарии для запоминания лиц/объектов и распознавании живой речи, но я лично этим не пользовалась), API понятный, понимает Python. Почему распознавать именно текст? Не знаю, почему-то текст мне показался на тот момент ближе всего
Работу со школьниками я начала в конце октября прошлого года. Поначалу их было всего двое: мальчик и девочка, 10 и 11 класс, соответственно. Чуть позже к нам присоединились 2 восьмиклассника (напоминаю, что слово «интеграл» в 8 классе незнакомо, как и многое другое, впрочем). И тут выяснилось, что не всё так просто. То есть вообще всё непросто.
После того, как роботы
Первой поставленной задачей было сделать снимок книги и попробовать найти автора и название стандартными, описанными несколько раз на stackoverflow, методами (конвертация цветов, фильтры, утолщения, etc etc). С какими-то книгами манёвр удался, с какими-то — нет. Например, с книгой про хакеров нам удалось, несмотря на её нетрадиционный дизайн.
А вот с вроде бы менее маргинальным изданием мы потерпели многочисленные фиаско (картинок, помимо этой, история не сохранила). В общем, стало понятно, что
Очевидное, но не совсем то, решение предложили заехавшие в гости на какое-то мероприятие ребята из ТУСУРа, не первый год работающие с NAO. Они предложили белый лист как белый ровный фон. Ок.
Жить стало проще, но не очень.
Впрочем, после небольшого шаманства с фильтрами нам таки удалось применить Tesseract (точнее, его питоновскую обёртку Tesserwrap) и дело сдвинулось: робот заговорил. Сначала через камеру моего мака:
А потом уже и сам по себе. Мы даже сделали
Однако ложные срабатывания оставались такими же «приятными» как ложные грибы. И тогда один из школьников задал мне вопрос: «А что нам мешает сделать словарь и озвучивать только то, что в нём есть?»
Действительно. Подумав, я сформулировала финишную идею нашего со школьниками проекта: робот-тьютор английского языка. Наш робот всё равно знает только английский (в теории это можно было исправить), а робот-тьютор, практикующий с учащимся/учащейся английский язык, имеет некую связь с реальностью. Ну я бы в своё время не отказалась. На том и остановились.
Командная работа и её результат
И тут наступил апрель. Или март. В общем, недалеко замаячили майские праздники (с отменяющимися в их честь занятиями), дети то и дело срывались на олимпиады, начали появляться сообщения о каких-то фестивалях робототехники, в общем, «зима близко», а проекта нет.
Первым делом мы утрясли алгоритм: тактильными головными датчиками выбирается уровень игры (соответствующий сложности словаря), с их же помощью игру можно прекратить; робот выбирает рандомом слово из словаря, произносит его, делает снимки с верхней камеры, распознаёт текст, парсит его, сверяет со словарём, сверяет со сказанным словом и кивает головой, положительно или отрицательно, в зависимости от результата.
Пришлось давать по задаче каждому и радоваться, что на первых занятиях для школьников был открыт github. Двое занялись экспортом движений из графического интерфейса (чтобы не писать самим) и их правкой, кто-то занялся написанием кода рандомного выбора, кто-то — словарём, а мне досталось бегать вокруг и подсказывать в случаях затыков. Через какое-то время все участки по отдельности оказались готовы, и осталось их соединить воедино. Эту задачу тоже взял на себя один из учеников (с косяками которой мы разбирались несколько часов кряду впоследствии, но он всё равно молодец).
Не буду рассказывать как мы «пролетели» на региональном фестивале робототехники из-за этой сырой общей версии, лучше расскажу, что мы подали проект на Ш.У.С.Т.Р.И.К.а и ради этого допилили проект (4 часа полноценной работы — и у нас перегрелись датчики, так что зрение и движения опять вышли на разных видео). Проект, впрочем, Ш.У.С.Т.Р.И.К.а взял, как сообщил мне товарищ, присутствовавший на оглашении результатов в Томске. Ура.
Ну и сегодня, на выставке в рамках Дней науки в Новосибирске наконец-то удалось отладить версию и записать видео всего вместе (коротко и некачественно, ибо телефон).
Впрочем, некоторым школьникам на выставке (и том печальном фестивале) очень даже понравилось. Правда, к сожалению, многие стеснялись, что чего-то не расслышали и не понимают в английском языке.
Дальнейшие планы
В первую голову: ускорить эту версию (пока что мы делаем снимок с камеры раз в секунду), сделать карточки со словами на картоне (чтобы дети не сгибали их в руках, когда показывают роботу), возможно, переделать реализацию и поместить текст в какую-то контрастную рамку, например, красного цвета; поворачивать картинку, etc.
Ну а если мы продолжим с проектом в следующем учебном году (хотелось бы), то хочется сделать русско-английский словарь, возможно, объектные словари, может быть, что-то еще. Не факт, что c NAO.
Код, без последней версии, смотреть
Литература и оборудование
— роботы NAO
— macbook pro
— Tesserwrap
— OpenCV Python
— stackoverflow
BelBES
А почему вы не смотрели в сторону использования SWT(stroke width filter) для локализации текста на изображении?
Для недавно вышедшего opencv 3.0, кстати, есть contrib модуль для детектирования и распознавания текста.