Перейти к содержимому
Compvision.ru

idrua

Пользователи
  • Количество публикаций

    63
  • Зарегистрирован

  • Посещение

  • Days Won

    3

Сообщения, опубликованные пользователем idrua


  1. 8 часов назад, Annie1 сказал:

    Вот два фото после фотошопа


    И зачем мне это? Вы сами видите там пассажира? Если нет, то и нейросеть не увидит. Ну и датасет с картинками нужен. Где будут тысячи фотографий машин с пассажирами и без. Тогда можно будет решить с высокой точностью и эту задачу.


  2. OpenCV в данном случаи не поможет. Нейросетями можно попробовать, при условии, что датасет с картинками присутствует. Задача бинарной классификации. Мало чем отличается от разделения кошек и собак на фото.

    P.S. Но если все картинки в таком качестве, то не уверен. На вашем фото есть пассажир или нет? Я, например, не вижу никаких пассажиров.


  3. 23 часа назад, ColaClassic сказал:

    Я прям завидую вашим познаниям в ML:D Обладая такими же знаниями, я бы, наверное, за пару дней написал прогу требуемую:lol:

    Это зря, завидовать тут нечему. Я, например, одну из своих задач уже как год решаю, и всё безуспешно. Сперва пробовал пакетом OpenCV, потом ML(классификаторы разные) + OpenCV. И только теперь DL. 

    Ну и есть четкое деление ML и CV. Это две разные области наук. Они конечно частично пересекаются, но крайне незначительно. CV нужна для поиска признаков (сегменты, цвета сегментов, линии, да всё что угодно). В ML по этим признакам можно обучить модель, которая и будет "искать" трещины и царапины. Есть еще DL, но там вообще всё сложно. За пару дней вашу задачу вряд ли кто решит. За месяц, имея большой датасет с картинками, может быть.
    Если хотите решать самостоятельно, то это очень надолго. Изучить Python, пройти пару курсов по ML, посмотреть примеры работ по CV. А если не взлетит, то смотреть в сторону DL. Как-то так... Естественно, ИМХО. Возможно у знатоков будет другое мнение.

    • Like 1

  4. 9 часов назад, ColaClassic сказал:

    idrua, меня заинтересовал ваш второй способ) Попробую изучить данный фильтр. Надо глянуть реализован ли он на OpenCV, что-то не встречал такой.

    Реализован. Но это не панацея. Фильтрами можно будет уловить большие трещины под углами (это быстро, просто и мало кода). С пятнами уже тяжелее будет. И совсем невозможно будет уловить отбитые куски на краях плитки. Поэтому просто фильтров недостаточно. Действительно, одним из простых способов решения подобных задач является создание классификатора. Но, как мне кажется, с подобными терминами вы еще не знакомы. Только на обучение ML в среднем уходит от 3 месяцев. Плюс поиск признаков для классификатора: цвет, тон, насыщенность, а может средний тон сегмента, а может кластеризацией можно что-то сегментировать и т.д. В общем, это всё выльется в месяцы работы, если самому впервые разбираться (это я по своему горькому опыту). И самое печальное здесь, не факт, что заработает на должном уровне. Такой он, machine learning. Это своего рода искусство.

    • Like 1

  5. 3 часа назад, mrgloom сказал:

    Главная сложность(зависит от фото) это детектирование ректа плитки, потом разворот, кроп.

    Кстати, а зачем? Нейросетка и так съесть картинку без всех этих телодвижений. См. пример U-Net сетей. Например Carvana на Kaggle. Другое дело с разметкой -- это на месяцы ;)


  6. 1 час назад, Nuzhny сказал:

    Правильней заполнять не средним, а медианой. Например, есть чёрный и белый цвет. Заполнить средним - серым будет совсем не правильно, а медианой (какого цвета больше) точнее.

    Согласен, если выборка упорядочена по значениям и их немного. А если нет?
    Для выборки 3, 5, 5, 27, 114, 115, 1037 медиана будет числом 5. Если вместо пустоты заполнять 5, то результат будет не очень. Вот поэтому иногда и смотрят на другие фичи. Определяют ближайшего соседа по ним (кластеризацией или классификацией) и берут пустые данные из соседей.


  7. Нужен именно алгоритм? Вообще, это один из популярных классификаторов в области ML (обучение с учителем). И с ним можно решать абсолютно любые задачи классификации/регресии. От сортов ириса до более сложных (прогнозирование курса биткоинта ).

    Для чего нужен? Лично я его использую в двух случаях.

    При построение ансамблей моделей. Это когда есть до десятка простых моделей (knn — это простая модель, если что) и все они имеют низкую точность прогнозирования. А все вместе они существенно повышают качество прогнозирования. Т.е. если из 10 простых моделей 7 моделей голосуют за класс1, то это действительно  класс1. Что-то типа мудрости толпы.

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

     

     


  8. Нейросеткой можно найти 99% всех дефектов. Но это не самый простой способ. Это самый сложный и самый точный. Размечать датасет нужно будет ручками, а это долго и сложно.

    Самый простой способ — фильтрами Габора (возможно в замесе с чем-то еще). После применения фильтра появятся нехарактерные для плитки линии под углами. Точность будет гораздо ниже по сравнению с сеткой, но выше 90% (естественно, ИМХО).

    Может быть кластеризация по цвету что-то даст. Или тот же FloodFill с параметрами закраски(чтобы он закрашивал только очень близкие по цвету сегменты).  Или watershed. Но сложно что-то предположить не видя картинок. Надо пробовать разные варианты.

    • Like 1

  9. Есть ли смысл? Нейронные сети постепенно вытесняют решения из библиотек компьютерного зрения. 

    Вот, например, вчерашняя статья С.Николенко про сегментацию: https://medium.com/neuromation-io-blog/neuronuggets-segmentation-with-mask-r-cnn-c76d363b67fb
     

    Сейчас актуальнее машинное обучение. 

     


  10. Я пробовал. Нормально распознает, если нормально обучить. БОльшая точность при распознавании отдельных слов или букв, по сравнению со строками текста или предложениями. Отдельная проблема с сегментированием. Иногда контур (Rect) буквы/цифры берется неправильно и нужно исправлять. Т.е. объединить близко расположенные "коробки", понять истинный размер символа и распознать одиночный символ.
    P.S. Но обучать tesseract очень непростая задача.


  11. 8 минут назад, pasutka сказал:

    А по распознаванию номеров жд вагонов есть тема? что то не нашёл отдельную ветку.

    Может кто то уже реализовывал такие задачи? 

    Вопрос возможности реализации на Delphi XE... возможно ли подклчить нужные бибилиотеки ?

    Использование нейросетей для меня в новинку, думаю с чего начать.

    Может у кого есть обученная сеть или дата файлы для обучения?

     

    p.s.: Возможно кто то захочет помочь в разработке (консультант или разработчик) за вознагрождение

    Там печатные цифры, а не рукописные. Любой движок должен справляться, даже из бесплатных. В конце-концов можно немного дообучить тот же tesseract, чтобы достигать еще большей точности. Я не уверен на счет Delphi, как-то совсем мало проектов (примеров) на нем в области CV, ML, AI. Но что мешает создать библиотеку на том же C#(C++) и вызывать методы из Delphi?

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


  12. У меня была почти такая же задача, только продолжить нужно было не контур, а печатные линии. Разрешил при помощи Хафа, где одним из параметров выступает maxLineGrap ( максимальный разрыв между двумя точками, которые должны рассматриваться в одной линии).

     

    Хаф.png

    RANSAC еще можно использовать. http://www.imagexd.org/tutorial/lessons/1_ransac.html


  13. ConnectedComponents в принципе неплохо отрабатывает и можно улучшать (добиваясь улучшить контур клетки с помощью RANSAC или HoughCircles ). Картинку не могу загрузить на сайт, чтобы показать результат.

    А вообще надо пробовать Superpixels. Там еще будет лучше и в разы.

     


  14. Добрый день.

    connectedComponents прекрасно работает для бинарного изображения, но хотелось бы и для цветного.
    Реализовал через заливку (FloodFill), но есть нюансы:

    1) если делать большие шаги Scalar.All(50), то закрашивает не совсем правильно. Закрашивает то, что различимо по цвету.
    2)если делать мелкие шаги Scalar.All(20), то слишком много областей ( labels) получается.

    В общем, через заливку не получается найти золотую середину. Может кто-то встречал аналоги?

    Спасибо.


     


  15. Есть две мысли.

    1) Можно кластеризовать изображение, а только потом искать круги
    2) FloodFill, если почитать детальнее, может закрашивать не только определенный цвет, но и диапазон определенного цвета. Т.е. задаем базовый цвет и разницу от базового. В теории, должен выделить.

    kmean.png

    • Thanks 1
×