Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
 Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
Собственно есть игральный стол - на нем карты,можно ли как то без использования сторонних библиотек идентифицировать эти карты

Работать необходимо через BufferedImage
Моя мысль такая - вырезать место с картами,потом вырезать сами карты и по контрольным точкам сравнивать карты с шаблонами.
Собтсвенно 4 шаблона под масти( 5-10 контрольных точек)
ну и под наименование карт там тоже контрольные точки,правда работы многовао выйдет

либо же мне просто взять 36 карт с картинок - вырезать их и потом сравнивать уже с тем что будет в качестве агрументов входить?

Есть кто работал с BuferedImage есть там что то что позволит можнет вообще елемент искать на картинке( типо значка масти например)

К сообщению приложен файл. Размер - 86Kb
24 окт 20, 18:20    [22220111]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Если владелец приложения слегка изменит интерфейс то все твои разработки сразу станут металоломом.

Вообще для угадывания образов используют библиотеки типа https://opencv.org/
Java для этого не особо подходит. В крайнем случае даже если и есть подобная
библиотека то она будет просто адаптером для opencv или им подобных.

P.S. А цель какая? Решил поднять баблишка на китайцах?
24 окт 20, 18:44    [22220123]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
mayton
Если владелец приложения слегка изменит интерфейс то все твои разработки сразу станут металоломом.

Вообще для угадывания образов используют библиотеки типа https://opencv.org/
Java для этого не особо подходит. В крайнем случае даже если и есть подобная
библиотека то она будет просто адаптером для opencv или им подобных.

P.S. А цель какая? Решил поднять баблишка на китайцах?

делаю человеку тест задание)
на опен цв бы я давно сделал- тут цель именно без сторонних библиотек

собственно тут только один сценарий - вырзеать все карты и далее запихать их в мапу ну и потом просто циклом пройтись по пикселям
других вариков нет.Можно конечно по контрольным точкам,но это геморой,так как точки придется вручную заносить ,да еще и мучаться с пикселями)
Правда и с вырезанием карт проблема- так как карты имеют неравнозначное обрамление серым оттенком- придется как то придумать как их лучше обрезать,чтобы остался только белый фон
24 окт 20, 19:16    [22220136]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
graycode
Member

Откуда:
Сообщений: 461
Zzz79
собственно тут только один сценарий - вырзеать все карты и далее запихать их в мапу ну и потом просто циклом пройтись по пикселям
других вариков нет.Можно конечно по контрольным точкам,но это геморой,так как точки придется вручную заносить ,да еще и мучаться с пикселями)
Правда и с вырезанием карт проблема- так как карты имеют неравнозначное обрамление серым оттенком- придется как то придумать как их лучше обрезать,чтобы остался только белый фон

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

вырезай прямоугольниками, углы (треугольники фиксированного размера) закрась в белый.
24 окт 20, 19:49    [22220146]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
По всем ходить не надо. Наложи сетку с шагом 2/4 пиксела. Это даст ускорение к распознаванию
порядка 16 раз (для 4 пикс к примеру). Ведь чтобы узнать что масть бубновая или червовая тебе не
надо видеть все пикселы. А только красный цвет. И несколько ключевых точек.

+Задай уровень толерантности цвета. В зависимости от глубины цвета Android экрана (16/25 bps)
или от разрешения точные цвета будут "плавать". Поэтому бери не точные цвет а хотя - бы попадание
в 90% от тройки RGB.

Кроме того само устройство может гасить яркость (night mode) и сильно искажать абсолютные значения
цветов хотя с точки зрения человека - ничего не изменилось.

Сообщение было отредактировано: 24 окт 20, 19:57
24 окт 20, 20:01    [22220153]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
graycode
Zzz79
собственно тут только один сценарий - вырзеать все карты и далее запихать их в мапу ну и потом просто циклом пройтись по пикселям
других вариков нет.Можно конечно по контрольным точкам,но это геморой,так как точки придется вручную заносить ,да еще и мучаться с пикселями)
Правда и с вырезанием карт проблема- так как карты имеют неравнозначное обрамление серым оттенком- придется как то придумать как их лучше обрезать,чтобы остался только белый фон

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

вырезай прямоугольниками, углы (треугольники фиксированного размера) закрась в белый.

не очень понял про вырезать треугольниками и закрашивать в белый
24 окт 20, 20:22    [22220159]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
mayton
По всем ходить не надо. Наложи сетку с шагом 2/4 пиксела. Это даст ускорение к распознаванию
порядка 16 раз (для 4 пикс к примеру). Ведь чтобы узнать что масть бубновая или червовая тебе не
надо видеть все пикселы. А только красный цвет. И несколько ключевых точек.

+Задай уровень толерантности цвета. В зависимости от глубины цвета Android экрана (16/25 bps)
или от разрешения точные цвета будут "плавать". Поэтому бери не точные цвет а хотя - бы попадание
в 90% от тройки RGB.

Кроме того само устройство может гасить яркость (night mode) и сильно искажать абсолютные значения
цветов хотя с точки зрения человека - ничего не изменилось.

цвета на картах идентичны - они ж с базы тягают эти изображения наверняка-взял щас с двух разных картинок одинаковые карты- они идентичны- проблема как обрезать,так как если карта идет первая она одного размера по ширине,если вторая то другого и третья третьего размера ) соотвественно тут придется голову поломать немного иначе одинаковые карты после обрезания будут по пикселям не биться
24 окт 20, 20:53    [22220164]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
Да майтон ты прав,там еще и цвета разные оттенки имеют- по пикселям сравнивать бессмыслено похоже
так еще и одна и таже карта в зависимости от положения на столе не соотвествует такой же карте в другом положении.вот же пипец то
Задача решается в 100 строк кода)
24 окт 20, 21:03    [22220172]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
одна и таже карта взятая с разных положений ( 1я и 3я позиции)

К сообщению приложен файл. Размер - 1Kb
24 окт 20, 21:06    [22220175]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005


К сообщению приложен файл. Размер - 1Kb
24 окт 20, 21:06    [22220176]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Welcome. Положи потом сорс на гитхаб. Чтоб все посмотрели.
24 окт 20, 21:06    [22220178]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
graycode
Member

Откуда:
Сообщений: 461
Zzz79
не очень понял про вырезать треугольниками и закрашивать в белый

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

То что они разного размера в зависимости от положения на столе это плохо, внутренние элементы тоже меняют размер?
24 окт 20, 21:14    [22220181]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
mayton
Welcome. Положи потом сорс на гитхаб. Чтоб все посмотрели.

я сомневаюсь,что я осилю это
24 окт 20, 21:15    [22220182]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
graycode
Zzz79
не очень понял про вырезать треугольниками и закрашивать в белый

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

То что они разного размера в зависимости от положения на столе это плохо, внутренние элементы тоже меняют размер?

элементы внутри одинаковы,но имеют разный отенок по краям ,и смещение по оси на пиксель взависиомти от положения карты в ряду
тоесть по пикселям сравнивать не получится -нужно понять как обрезать карты так ,чтобы независимо от положения они стали бы одинаковы и потом наверно придется уже по точкам контрольным бить- так как оттетнки всегда разные ,даже у двух одинаковых карт
то только брать контрольную точку- и смотреть белая или нет)по другому никак скорей всего
24 окт 20, 21:19    [22220184]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
вот такая печаль одинаковые карты с разных положений на столе

К сообщению приложен файл. Размер - 101Kb
24 окт 20, 21:22    [22220188]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
graycode
Member

Откуда:
Сообщений: 461
Zzz79,

mayton уже писал, брать нужно не совсем одинаковые цвета а совпадающие более чем на % (процент подбором), то что не попадут какие то пиксели ничего страшного.

Далее можно приблизительно вырезать масть и старшинство отдельно, разбить на сектора и посчитать количество условно черных и красных пикселей по каждому сектору и сравнивать уже подобия секторов, если при посекторном сравнении подобие эталону на 80-90 процентов, то карты считаются одинаковыми.
24 окт 20, 21:25    [22220189]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
graycode
Member

Откуда:
Сообщений: 461
Zzz79,

Можно вырезать масть и старшинство, но вместо разбивания на сектора, построить гистограммы красного и черного, по вертикали и по горизонтали, подобие гистограмм в принципе должно дать неплохой результат.
24 окт 20, 21:33    [22220193]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Да. И это еще не все кейсы. Я думаю что это приложение слишком
вольно распоряжается стилями раскладки карт. И в будущем
если завязываться на пиксельной точности - никакого распознавания
не выйдет.

Нужно преобразовать эту картинку в формат, толерантный к сдвигу
(translate), или к другим простым воздействиям.

Как вариант это может быть Фурье или Хаф. Но дальше я могу говорить
только теоретически т.к. я это на самом деле не делал. Изучал в универе.
Цифровую обработку сигналов по крайней мере изучал и СРО.

Вобщем бросай это дело. Не знаю на какой уровень эта задача расчитана
но фриласнер который возьмется это делать - должен знать системы
распознающие образы. Иначе - тухляк.
24 окт 20, 21:35    [22220194]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
graycode
Member

Откуда:
Сообщений: 461
mayton,

Наверное это тестовое задание на позицию миддла в проект по разработке систем распознавания образов))
24 окт 20, 21:41    [22220196]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
graycode
Zzz79,

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

ААА ты меня натолкнул на гениальную мысль)
карты меняются в ширину ,но в длинну нет- я просто возьму верхню часть карты - и посчитаю количество небелых символов -это будет ключ на старшинстов,аналогично отрезаю низ где масть и делаю тоже самое)тогда мне не нужны никакие цвета и оттенки с погрешностью)
Щас испоробую,главое что высота масти и старшниства всегда одинакова
24 окт 20, 21:49    [22220200]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
mayton
Да. И это еще не все кейсы. Я думаю что это приложение слишком
вольно распоряжается стилями раскладки карт. И в будущем
если завязываться на пиксельной точности - никакого распознавания
не выйдет.

Нужно преобразовать эту картинку в формат, толерантный к сдвигу
(translate), или к другим простым воздействиям.

Как вариант это может быть Фурье или Хаф. Но дальше я могу говорить
только теоретически т.к. я это на самом деле не делал. Изучал в универе.
Цифровую обработку сигналов по крайней мере изучал и СРО.

Вобщем бросай это дело. Не знаю на какой уровень эта задача расчитана
но фриласнер который возьмется это делать - должен знать системы
распознающие образы. Иначе - тухляк.

да не тут задача с подвохом - по сути я понял что надо делать - разделить карту на две части и высчитать количество небелых пикселей
а далее уже сравнивать отдельно по старшинству и по масти .Как мне заказчик сказал - там должно быть не больше 160 строчек кода
24 окт 20, 21:52    [22220203]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
x1ca4064
Member

Откуда:
Сообщений: 1210
Zzz79
вот такая печаль одинаковые карты с разных положений на столе


А просто считать эвклидово (или иное) расстояние между картинкой и образцом не подходит?
24 окт 20, 22:03    [22220206]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Я вброшу в топик маленький намек.
А вы уж дальше сами развивайте.

Если закодировать черно-белую картинку японским кроссвордом - то такая картинка будет тоже толерантна к translate по вертикали или по горизонтали.

Вернее не сама картинка а ее числовое японское кодирование.
24 окт 20, 22:16    [22220210]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
Zzz79
Member

Откуда:
Сообщений: 1005
x1ca4064
Zzz79
вот такая печаль одинаковые карты с разных положений на столе


А просто считать эвклидово (или иное) расстояние между картинкой и образцом не подходит?

а что это?собственно как выше заметил рисунок на картинке гуляет,пиксели имеют разный оттенок-сомневаюсь что можо адекватно там что то посчитать

пс.у двух шестерок разница по пикселям 268 и 272 ,но тут я думаю можно будет сделать 3% расхожедение =true
главное чтобы другие старшины не били в это же количество символом иначе будет провал)
24 окт 20, 22:28    [22220214]     Ответить | Цитировать Сообщить модератору
 Re: Распознать элементы на картинке  [new]
x1ca4064
Member

Откуда:
Сообщений: 1210
Zzz79
x1ca4064
пропущено...


А просто считать эвклидово (или иное) расстояние между картинкой и образцом не подходит?

а что это?собственно как выше заметил рисунок на картинке гуляет,пиксели имеют разный оттенок-сомневаюсь что можо адекватно там что то посчитать



Если картинки одного размера, по всем точкам [x,y] и всем образцам Pat[k] вычислить сумму:

sqr(Pix[x,y].Red-Pat[k][x,y].Red)+sqr(Pix[x,y].Green-Pat[k][x,y].Green)+sqr(Pix[x,y].Blue-Pat[k][x,y].Blue)

Pix- картинка, которую нужно классифицировать.

образец Pat[k], у которого эта сумма минимальна - хороший кандидат. Если из этой суммы извлечь квадратный корень - будет эвклидово расстояние.

Вместо sqr можно использовать abs или max
24 окт 20, 23:04    [22220223]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
Все форумы / Java Ответить