Кто-нибудь знает хорошую библиотеку сопоставления / распознавания образов в C ++ (предпочтительно oss), которая способна определить, является ли список векторов стрелкой или каким-то другим классом?
Я уже знаю OpenCV, но он предназначен для использования в растровой графике (или я что-то пропустил?) … но у меня уже есть векторная геометрия, и звучит странно, если преобразовать их обратно в растровую графику, где вы должны обнаружить края снова.
Поэтому мне нужна библиотека, которая использует список векторов в качестве входных данных вместо растрового изображения и может распознать, являются ли векторы стрелкой (независимо от направления), и извлечь части стрелки (голова / наконечник / хвост и т. Д.) ).
Кто-нибудь, кто знает такую библиотеку или имеет подсказку, где искать подобные проблемы (алгоритмы и т. Д.)?
Я пытаюсь изменить способ использования пользовательского интерфейса. Я уже попробовал алгоритм транспортира и разделил этап распознавания на разные части, например, для примера стрелки:
Но я хочу сделать это за один шаг для всех векторных линий (независимо от порядка и направления). Есть какие-нибудь рекомендации?
А что, если первая — это ломаная с углом, и также есть распознавание каретки, но последующая символика должна определиться между ними?
Я хочу рисовать команды, а не искать их в обремененном меню. Но важно также определить части графика (например, центральную линию, левую линию, …) и сохранить соотношение сторон (размер) настолько, насколько это возможно, что означает, что также должны быть сохранены ключевые координаты (например, наконечник стрелы). Это важно для замены нарисованных от руки векторов с исправленной стандартной графикой.
Возможно ли это для lib как отдельной задачи, или я должен придерживаться текущей концепции распознавания каждой ломаной линии отдельно и смотреть на порядок ввода (например, первая строка должна быть направлением)?
Вы можете посмотреть здесь, чтобы получить представление: http://depts.washington.edu/aimgroup/proj/dollar/
Существует алгоритм распознавания $ 1 и некоторые производные, и вы можете попробовать их онлайн.
Проблема в том, что мои «команды» состоят из нескольких строк, и каждая строка может иметь различное специальное значение в контексте, чтобы получить полную графику. Алгоритмы и библиотеки, которые я уже знаю (например, Распознаватель за 1 доллар выше), больше связаны с одиночными жестами, а не со сложным порядком ввода нескольких жестов, который получает точное значение, если интерпретировать его как целый эскиз.
Я думаю, что продолжение интерпретации каждой строки в отдельности и не помещая ее во весь контекст (узнайте весь набросок) может привести к тупику. Но возможно смешанный подход мог бы получить это.
Сравнение реальной жизни: Это как когда кто-то рисует лошадь. Вы бы не сказали, что это лошадь, если бы он только начал рисовать первую линию — вам понадобится больше информации, например, 4 ноги и т. Д.
(Ну, я знаю, что не все хороши в рисовании, и некоторые лошади могут выглядеть как коровы … но в любом случае, это должно дать вам представление о том, что я имею в виду.)
Есть намеки?
Обновить: Я нашел видео Вот это близко к проблеме. Недостающее звено — это то, как части структуры доступны после распознавания, но это можно сделать и на отдельном этапе (после того, как вы узнаете, что показано на чертеже).
По моему скромному мнению, я бы не подумал, что в дикой природе есть библиотека, которая удовлетворяет такие специфические потребности. В конце концов, вы закончите писать собственный код.
В любом случае, первое, что вам нужно сделать, — это извлечь элементы классификации из каждого обнаруженного вами жеста. Затем вам нужно будет поместить ваши приобретенные векторы признаков в пространство признаков. Как только вы это сделаете, есть буквально миллион вещей, которые вы можете сделать, чтобы классифицировать векторы объектов к одному из доступных классов (например, стрелка, треугольник и т. Д.). Например, ребята из Университета Вашингтона по предоставленной вами ссылке выполняют извлечение признаков на шагах 1, 2 и 3 и классифицируют вектор полученных признаков на шаге 4.
Идея разбить жест на поджесты звучит заманчиво, хотя у меня есть подозрение, что это создаст проблемы несколькими способами (например, как определить конец суб-жеста и начало следующего), и это будет также ввести значительные накладные расходы
так как вы будете в конечном итоге в дополнительных шагах и не хватает структуры дерева решений.
Еще одна вещь, о которой я забыл упомянуть выше, это то, что вам также понадобится создать обучающий набор данных разумного размера для обучения ваших классификаторов.
У меня не возникнет проблем с предложением библиотек, классификаторов, пакетов линейной алгебры и т. Д., Поскольку в первую очередь это выходит за рамки (т. Е. Любезно предлагаю поискать в Интернете конкретные компоненты, которые помогут вам построить свой приложение).
Других решений пока нет …