В настоящее время я стажируюсь в софтверной компании, и одной из моих задач было внедрение распознавания жестов мыши.Один из старших разработчиков помог мне начать работу и предоставил код / проекты, в которых используется Unistroke Recognizer за $ 1 http://depts.washington.edu/aimgroup/proj/dollar/. Я wide понимаю, что делает Unistroke Recognizer за 1 $ и как онработает, но я немного ошеломлен попыткой понять все внутренние / более тонкие детали этого.
Моя проблема в том, что я пытаюсь распознать жест перемещения мыши вниз, а затем вверх.Распознаватель Unistroke за 1 доллар определяет, что созданный мною жест был нисходящим жестом, что фактически является следствием того, что он должен делать.То, что я действительно хотел бы сделать, это сказать: «Я узнаю жест вниз, а затем жест вверх».
Я не знаю, вызывает ли полное отсутствие понимания Распознавателя Unistroke за 1 доллар, что я поцарапал свойголова, но есть ли у кого-нибудь идеи о том, как распознать два разных жеста от перемещения мыши вниз, а затем вверх?
Вот моя мысль, которая, как мне показалось, может помочь мне, но я бы полюбил кого-то, кто является экспертом илидаже знает немного больше, чем я, чтобы сообщить мне, что ты думаешь.Любая помощь или ресурсы, о которых вы знаете, будут высоко оценены.
Как работает мое приложение:
Способ работы моего текущего приложенияв том, что я фиксирую точки, где находится курсор мыши, пока пользователь удерживает левую кнопку мыши.Список точек затем передается в распознаватель жестов, и затем он выплевывает то, что он считает лучшей формой / жестом, который соответствует зафиксированным точкам.
Моя идея:
Что я хотел сделать, прежде чем передать точки распознавателю жестов, так это каким-то образом пройти все точки и разбить их на отдельныелинии или кривые.Таким образом, я мог кормить каждую линию / кривую по одной за раз, а из базовых движений вниз, вверх, влево, вправо, диагоналей и кривых я мог определить окончательную форму / жест.
Один из способов, который, как мне показалось, был бы полезен при определении наличия отдельных линий в моем списке точек, - это выборка групп точек и просмотр их наклона.Если наклон выбранной группы точек отличался на X% от некоторой другой группы выбранных точек, то можно с уверенностью предположить, что действительно есть отдельная линия.
Что я думаю возможные проблемы в моем мышлении:
Где я могу определить конец строки и начало отдельной строки?Если бы я использовал идею проверки наклона группы точек, а затем определил, что присутствует отдельная линия, это не значит, что я обязательно нашел наклон отдельной линии.Например, если бы вы нарисовали "L" с прямыми кромками и прямым углом и сэмплировали наклон точек вокруг угла "L", вы бы увидели, что наклон дал бы разумную индикацию того, что присутствует отдельная линия, ноэти точки не соответствуют началу отдельной линии.
Как бороться с постоянно меняющимся наклоном кривой линии?Распознаватель жестов, который я использую, обрабатывает кривые так, как я этого хочу.Но я не хочу, чтобы мой метод, который я использую для определения отдельных линий, продолжал искать эти так называемые отдельные линии на кривой, потому что ее наклон все время меняется, когда я выбираю группы точек.Могу ли я просто прекратить выборку точек, если наклон изменялся более чем на X% столько раз подряд?
Я не использую правильный "тип" математики для определения отдельных линий.Математика не мой самый сильный предмет, но я провёл небольшое исследование.Я пытался заглянуть в Dot Products и посмотреть, покажет ли это меня в каком-то направлении, но я не знаю, так ли это.Кто-нибудь использовал Dot Prodcuts для чего-то подобного или другого?
Заключительные мысли, замечания и благодарности:
Мне кажется, что часть моей проблемы в том, что я не знаю, как убедительно задать свой вопрос.Я не удивлюсь, если эта проблема уже была задана (так или иначе) и существует решение, которое можно найти в Google.Но мои результаты поиска в Google не дали никаких решений, так как я пока точно не знаю, как задать свой вопрос.Если вы чувствуете, что это сбивает с толку, пожалуйста, дайте мне знать, где и почему, и я помогу уточнить это.При этом, возможно, мои поиски в Google станут более точными, и я смогу найти решение.
Я просто хочу еще раз поблагодарить за чтение моего поста.Я знаю это долго, но не знал, где еще это спросить.Я общаюсь с другими людьми в офисе, но все мои лучшие решения, которые я использовал в школе, были из сообщества StackOverflow, поэтому я вам очень благодарен.
Изменения в этом сообщении:
(7/6 4:00 PM) Еще одна идея, о которой я подумал, это сравнение всех точек до точки Мин / Макс.Например, если я переместил мышь вниз, а затем вверх, моей начальной точкой будет текущая максимальная точка, а точкой, в которой я начну перемещать мышь назад вверх, будет моя минимальная точка.Затем я мог бы пойти дальше и посмотреть, есть ли какие-либо точки после минимальной точки, и если это так, сказать, что может быть новая потенциальная линия.Я не знаю, насколько хорошо это будет работать с другими фигурами, такими как звезды, но это еще одна вещь, которую я собираюсь рассмотреть.Кто-нибудь делал что-то подобное раньше?