Библиотека сопоставления / распознавания образов для векторов (например, OpenCV для ввода изображений)

Кто-нибудь знает хорошую библиотеку сопоставления / распознавания образов в C ++ (предпочтительно oss), которая способна определить, является ли список векторов стрелкой или каким-то другим классом?

Я уже знаю OpenCV, но он предназначен для использования в растровой графике (или я что-то пропустил?) … но у меня уже есть векторная геометрия, и звучит странно, если преобразовать их обратно в растровую графику, где вы должны обнаружить края снова.

Поэтому мне нужна библиотека, которая использует список векторов в качестве входных данных вместо растрового изображения и может распознать, являются ли векторы стрелкой (независимо от направления), и извлечь части стрелки (голова / наконечник / хвост и т. Д.) ).

Кто-нибудь, кто знает такую ​​библиотеку или имеет подсказку, где искать подобные проблемы (алгоритмы и т. Д.)?

Я пытаюсь изменить способ использования пользовательского интерфейса. Я уже попробовал алгоритм транспортира и разделил этап распознавания на разные части, например, для примера стрелки:

  1. рисовать, остановить рисование и взять результат
  2. трактовать первую линию как тело (линия маршрута, вал стрелки)
  3. дождитесь принятия (=> результат распознается как простая линия, заменяющая нарисованную от руки графику с графиком маршрута) или следующий процесс отрисовки
  4. нарисовать стрелку и взять координаты результата
  5. дождитесь кнопки подтверждения / завершения (=> результат распознается как стрелка и не является простым маршрутом)
  6. а) заменить нарисованные от руки векторы правильной стрелкой
  7. б) или продолжать какие-либо fletchings? бла, бла, бла

Но я хочу сделать это за один шаг для всех векторных линий (независимо от порядка и направления). Есть какие-нибудь рекомендации?

А что, если первая — это ломаная с углом, и также есть распознавание каретки, но последующая символика должна определиться между ними?

Я хочу рисовать команды, а не искать их в обремененном меню. Но важно также определить части графика (например, центральную линию, левую линию, …) и сохранить соотношение сторон (размер) настолько, насколько это возможно, что означает, что также должны быть сохранены ключевые координаты (например, наконечник стрелы). Это важно для замены нарисованных от руки векторов с исправленной стандартной графикой.

Возможно ли это для lib как отдельной задачи, или я должен придерживаться текущей концепции распознавания каждой ломаной линии отдельно и смотреть на порядок ввода (например, первая строка должна быть направлением)?

Вы можете посмотреть здесь, чтобы получить представление: http://depts.washington.edu/aimgroup/proj/dollar/
Существует алгоритм распознавания $ 1 и некоторые производные, и вы можете попробовать их онлайн.

Проблема в том, что мои «команды» состоят из нескольких строк, и каждая строка может иметь различное специальное значение в контексте, чтобы получить полную графику. Алгоритмы и библиотеки, которые я уже знаю (например, Распознаватель за 1 доллар выше), больше связаны с одиночными жестами, а не со сложным порядком ввода нескольких жестов, который получает точное значение, если интерпретировать его как целый эскиз.

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

Сравнение реальной жизни: Это как когда кто-то рисует лошадь. Вы бы не сказали, что это лошадь, если бы он только начал рисовать первую линию — вам понадобится больше информации, например, 4 ноги и т. Д.

(Ну, я знаю, что не все хороши в рисовании, и некоторые лошади могут выглядеть как коровы … но в любом случае, это должно дать вам представление о том, что я имею в виду.)

Есть намеки?

Обновить: Я нашел видео Вот это близко к проблеме. Недостающее звено — это то, как части структуры доступны после распознавания, но это можно сделать и на отдельном этапе (после того, как вы узнаете, что показано на чертеже).

5

Решение

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

В любом случае, первое, что вам нужно сделать, — это извлечь элементы классификации из каждого обнаруженного вами жеста. Затем вам нужно будет поместить ваши приобретенные векторы признаков в пространство признаков. Как только вы это сделаете, есть буквально миллион вещей, которые вы можете сделать, чтобы классифицировать векторы объектов к одному из доступных классов (например, стрелка, треугольник и т. Д.). Например, ребята из Университета Вашингтона по предоставленной вами ссылке выполняют извлечение признаков на шагах 1, 2 и 3 и классифицируют вектор полученных признаков на шаге 4.

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

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

У меня не возникнет проблем с предложением библиотек, классификаторов, пакетов линейной алгебры и т. Д., Поскольку в первую очередь это выходит за рамки (т. Е. Любезно предлагаю поискать в Интернете конкретные компоненты, которые помогут вам построить свой приложение).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]