Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Распознавание графики на JS (https://javascript.ru/forum/misc/60883-raspoznavanie-grafiki-na-js.html)

Keramet 25.01.2016 15:43

Распознавание графики на JS
 
Доброго времени суток!
Какие существуют средства для распознавания графики?
Если конкретнее: есть отсканированные изображения шахматных позиций, хочется попробовать обработать эти изображения и получить список всех присутствующих фигур и поля, на которых они присутствуют.
Например, вот изображение:

после обработки хочу получить что-то типа:
white = {
  king: "h6",
  quin: "a3",
  knight: "c7",
  p: ["b4", "c3", "g2"]
};

black = {
  king: "f6"
}

Интересуют инструменты для работы с графикой, как обработать графику на JS? Куда, так сказать, "копать" :) ?

P.S. а уменьшить размер картинки в этом посте?

laimas 25.01.2016 15:50

http://habrahabr.ru/post/274725/

Keramet 25.01.2016 16:51

laimas,
не совсем понял, что вы хотели этой статьёй мне сказать :-?

laimas 25.01.2016 17:04

Цитата:

Сообщение от Keramet
не совсем понял, что вы хотели этой статьёй мне сказать

Что это серьезный вопрос и работа не на раз плюнуть. О развенчании мифов "что все просто" как раз в данной статье.

Keramet 25.01.2016 17:25

Я согласен, тема не проста - поэтому и хочу её попробовать реализовать. у меня, к примеру, куча старых шахматных книг, все диаграммы довольно стандарнтны, фигуры похожы.
Предположим, что у меня есть база (как описано в этой статье) и принято решение, что такое возможно реализовать. мне интересно - с чего тут лучше начать? я так понимаю, выбор будет между canvas u SVG. Или есть другие библиотеки, которые подходят для подобного рода задач? возможно, кто-то сталкивался

laimas 25.01.2016 17:27

Цитата:

Сообщение от Keramet
тема не проста - поэтому и хочу её попробовать реализовать.

Ищите в сети компьютерное распознавание образов, читайте, пробуйте.

Keramet 25.01.2016 18:30

Для начала хотя бы определить клетки, в которых есть фигуры ))

laimas 25.01.2016 18:34

Вы сначала игровое поле определите хотя бы. Вряд ли JS для таких задач подходящий язык.

Яростный Меч 26.01.2016 00:59

Keramet,
А где будет выполняться код? Браузер или нода?
В первом случае используй канву и получение цветов пикселей, во втором - наверняка есть модули для всех основных форматов картинок.
В обоих случаях в результате ты имеешь на руках двумерный массив цветов пикселей. А дальше кури матчасть. Однако, полагаю, для шахматных картинок все несколько проше, чем для произвольного случая. Сначала определить размер клеток, потом для каждой клетки считать некий хэш и по нему определять тип фигуры.

laimas 26.01.2016 01:16

Цитата:

Сообщение от Яростный Меч
потом для каждой клетки считать некий хэш и по нему определять тип фигуры.

Вы думаете, что даже две пустые клетки одного цвета в таком изображении будут иметь идентичный хеш? Это вряд ли.

Да и не обязательно цвет, это скорее помеха.

Deff 26.01.2016 03:56

https://habrahabr.ru/post/169249/
------------------------------------------
Интересная задачка, если все картинки с такой же четкостью, можно пробовать решать и на js, к примеру искать замкнутые фигуры определённых максимальных размеров
Любой же дефект снятым сканером(к примеру разрыв в обводке фигуры), потребует значительного усложнения.

laimas 26.01.2016 07:44

Вот простая на первый взгляд задача, и даже о распознавании в ней не пахнет, но ...

Допустим перед загрузкой изображения на сервер или уже на сервере, что не принципиально, нужно удалить черноту или белое обрамляющее рисунок, к примеру это результат сканирования. Даже условно будем считать, что ориентация при этом идеальная, сама полезная часть изображения без угла наклона.

Пусть нужно вырезать белую/серую канву. С цветом работать, это много мороки и не удобно, значит преобразуем изображение в градации серого. Работать с цветовой моделью RGB тоже не удобно, опять будут лишние расчеты. А вот цветовая модель HSB в данном случае будет самой удобной - задав 0 для H и S, указав нижний порог яркости (В) до которого нужно удалять найденные пиксели, сравнивая яркость преобразованного RGB цвета ячейки в HSB с заданным диапазоном (для белого/серого от 100% до нижнего указанного).

При этом не обязательно сканировать все ячейки каймы, нужно лишь только узнать ее ширину с каждого края, и для этого было бы достаточно опросить центральные по горизонтали и вертикали ячейки, начиная с краев и к центру изображения. Это совсем не много, одного цикла с малым числом итераций хватит.

Было бы, если бы не но. А что если изображение, это комната с окном, на стекле которого мороз нарисовал свой шедевр, и стекла которого в аккурат сливаются с каймой, и центральные пиксели как раз напоролись на этот шедвер. Цвет, насыщенность вполне могут попадать в диапазон для удаления. А значит потребуется анализ. А может быть и луна на ночном небе, звезды, паруса яхты...

Keramet 26.01.2016 11:00

Яростный Меч,
хочу пока в браузере. Ноду пока не освоил :(


Часовой пояс GMT +3, время: 05:41.