Игра Study Maths

ТЕМА НА GAMEDEV.RU

Мне лень писать что-то, так что копирую оттуда.

Всем привет.
Мне тут вздумалось погрузиться в дебри нейросетей и запилить быстренько приложение, которое позволяет распозновать рукописные (нарисованные на сенсорном экране пальцем или еще чем-то) цифры. Самая простая идея: игра – обучение/тренировка арифметике. Игроку предлагается некий простенький пример, он решает его и пишет ответ, система распознает и говорит “верно”/”неверно”. Можно еще добавить очки или ограничить время. Тут недавно была похожая тема, но у меня акцент именно на рукописном способе ввода.

Название: Study Maths (рабочее, возможно, сменится)
Жанр: обучающая головоломка
Начало разработки: 19 февраля 2013 года
Текущий статус: есть демка с базовым функционалом
Язык, API: Obj-C, Cocos2D-iPhone

Пока поддерживаются операции сложения (от 0 до 19), вычитания (без отрицательных), умножения (до 10 * 10), деления (на ноль нельзя!).

На алгоритм распознавания потратил очень много времени: почти неделю. Но пока он далек от совершенства. Я использую 5 слойную сверточную нейросеть, наученную на базе рукописных цифр (MNIST, 600000 цифр). Отсюда вытекает главная проблема: в базе цифры написаны ручкой на бумаге, потом отсканированы. У меня же они пишутся пальцем на экране, рендерятся в текстуру и идут на нейросеть. После нейросети есть еще пара хаков: например, моя рукописная 6 всегда почти распознается, как 5. Пришлось использовать некоторые свойства кривых, чтобы различать их. И то, не всегда успешно. Также алгоритм разделения кривых на цифры, который я придумал сегодня утром, иногда сбоит и нуждается в явной доработке. Хочу добавить еще знаки “+” и “-“, позже “.”.

Еще есть концептуальная идея прикрутить к этому делу CMU Sphinx и какой-нить text-to-speech, получим, таким образом, и чисто голосовой вариант. Игра читает игроку пример, игрок отвечает голосом, получает одобрение или наоборот. Обязательно попробую в скором времени, если пойдет гладко (справлюсь менее, чем за неделю), то 100% включу в проект.

Дневник разработки:
19.02.2013 Начало

26.02.2013 Добавлена озвука примеров и результата на аглийском Flite text-to-speech

27.02.2013 Добавлена поддержка распознования голоса (см. видео со звуком):

К сожалению, результат меня сильно не устраивает. Слишком мала точность, требуется тишина, трудно сделать русский язык, приложение очень сильно разбухает в объеме. Так что в первом релизе скорее всего распознования голоса не будет. Я пока не знаю, как улучшить распознования голоса, т.к. использую сторонний API.

Распознование рукописных цифр на iPhone

Фуф! Наконец-то, я добился того, чтобы оно работало более менее нормально. Итак, распознавание рукописных цифр на iPhone. Используется 5-слойная сверточная нейронная сеть.  Сеть натренерована на базе MNIST, которая содержит 60000 образцов рукописных цифр (на каждую, вроде бы, итого 600000). Вдохновлялся этой статьей. Сеть написал сам, но тренеровал ее программой из статьи. Пришлось поднять виртуальную WinXp, поставить на ней VC++ 6, собрать проект, дописать нормальный экспортер данных (по умолчанию был на MFC – CArchive, который вообще некорректно работал и не загружал тестовые данные). Очень долго шло обучение, понадобилось несколько часов. И оно все еще идет… Я периодически скидываю дамп нейросети себе в проект.

Конечно, результат далек от совершенства. Например, эта сеть отказывается воспринимать мою цифру 6, всегда говорит 5. Пришлось писать специальный твик (по-русски – костыль), которые анализирует кривую и по некоторым статистическим данным различает шестерку и пятерку. У программы много параметров, и мне предстоит с ними еще поиграться, чтобы достичь максимальной точности. Планирую скрестить несколько алгоритмов и заставить их работать, как суд присяжных.

Свидетельство на Resonator Studio

 

СвидКольцов2 Еще одно свидетельсво прислали, на этот раз на Resonator Studio (это такая программа для расчета открытых лазерных резонаторов, я написал ее в рамках своего диплома в ННГУ). Теперь у меня два оффициальных документа, что я умею хэллоувердить 😎

Картинка кликабельная, можно посмотреть в полном формате.

 

Вышла моя первая статья на Хабрахабре

Грац мну. Вышла моя первая статья на ресурсе Хабрахабр.

Она называется:

Изменение кода программы во время ее выполнения на примере Common Lisp

Посвящена она программированию на Common Lisp, в ней рассказывется, как написать полностью программируемый в рантайме командный процессор.

UPD: оппа, он даже побывал на главной.

Лаптичка: к взлету готов

А как вам такое? ) Ми щаслив, правда!

Промокоды лучшим друзяшкам будут.

А вот и ссылки:

Laptichka (iTunes)

Сайта Лаптички (на англ.)

Twitter Лаптички

[singlepic id=785]

Отправил первую программу на ревью

Ну, ребятки, понеслась!

[singlepic id=778]

Нужно игре еще страничку запилить за неделю.

Разработка Лаптички завершена!

Основная фаза разработки Лаптички закончена! Фуф 200 уровней! Завтра попробую снять ролик. Осталось немножко потестить, залить и утонуть в маркетинге. А пока спать!

[singlepic id=769 w=575]

Laptichka на Arduino

Это видео я сделал еще летом. Купил в Москве Freeduino (аналог Arduino), отрыл где-то текстовый дисплей 20 символов на 4 строки, собрал все это быстренько и написал программку (благо язык и API у них очень простые). Это примитивная верския Арканоид/Брэйкаут, а по-моему Лаптичка 🙂 К сожалению, на видео промеужточный вариант без кнопок и ракетки, которая этими кнопками управляется. А так, полноценная игра: ракетка, мячик, разбиваем блоки, не допускаем падения мячика за нижнюю кромку экрана. Моя гордость то, что шарик движется плавно, хотя экран текстовый. Это достигнуто за счет того, что каждый кадр шарик рендерится в кастом-символ, и это символ отображается в нужном месте.

void drawBall()
{
  byte arr[8];

  for(int y = 0; y < 8; ++y)
    arr[y] = 0;

  arr[sym_sy] = 1 << sym_sx;   if(sym_sx > 0)
    arr[sym_sy] |= 1 << (sym_sx - 1); 
  if(sym_sy < 7)
  {
    arr[sym_sy+1] = 1 << sym_sx;     if(sym_sx > 0)
      arr[sym_sy+1] |= 1 << (sym_sx - 1); 
  }

  lcd.createChar(1, arr);
  lcd.setCursor(sym_x, sym_y);
  lcd.write(1);
}

[singlepic id=367 w=575]