CameraTablet — как сделать графический планшет при помощи веб-камеры

Здравствуйте, меня зовут Дмитрий. Здесь я хочу рассказать о том, почему меня не устраивает мышка, и как я пытаюсь ее заменить. Я разрабатываю CAE-программы для инженеров (расчет статики и динамики механических систем), треть рабочего времени я работаю как project manager, а в остальное время я — системный архитектор, разработчик и тестер в своем и в чужих проектах. У меня всегда открыты десять-двадцать окон, между которыми мне приходится постоянно прыгать:

  1. Visual Studio – собственно, софт, обычно три-четыре разных solution
  2. SourceSafe – версионирование.
  3. Outlook
  4. Skype
  5. Total Commander – файлы, файлы.
  6. Internet-Explorer – планирование софта, мониторинг продвижения по проекту, doxygen документация и т.д.
  7. Word, Excel – список задач, протоколы заседаний, требования к проекту, быстрое построение графиков и т.д.
  8. PowerPoint – презентации для менеджмента.
  9. Notepad++ — просмотр промежуточных результатов, конфиги, и т.д.
  10. CAE soft наш – тестовая и основная версия.
  11. CAE soft других фирм – для тестов

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

В итоге весь мой рабочий день – это постоянное метание между мышкой и клавиатурой:

  • Мышка: открыть документ, пролистать,
  • Клавиатура: написать три-четыре строчки.
  • Мышка: нажать на кнопку, переместиться в другую программу, нажать на кнопку
  • Клавиатура: в появившемся окне написать 2-3 значения.
  • Мышка: отрыть другое окно. Нажать на кнопку. Выбрать пункт меню. Потом пункт в под-меню. Потом в под-под-меню. Клик! Новое окно!

В один прекрасный момент моя правая рука сказала: «Извини, хозяин, но что-то нагрузка для меня великовата». Кисть болела почти два месяца, сначала слабо, потом все сильнее. В итоге я купил вертикальную мышку, выучил побольше шорткатов в Visual Studio и перешел на Total Commander.

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

Ни одна из стандартных альтернатив мышке мне не нравится: PointStick (пипка в центре клавиатуры для ноутбуков), тачпад, графический планшет – у всех либо точность плохая, либо все равно надо дергать руку с клавиатуры.

Есть еще программы и железо для трекинга глаз, вроде Camera Mouse или Tobii Eye Trackers. Честно, тратить сотню баксов на Tobii Eye Tracker не хотелось, а Camera Mouse очень плохо распознавало положение глаз (подозреваю, что виноваты мои очки).

Программа CameraTablet


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



Как сделан CameraTablet


Писать программу я решил в Python, якобы на этом языке очень быстро можно разрабатывать прототипы. Самое забавное, что в итоге CameraTablet получилась очень небольшим. Больше всего времени понадобилось, чтобы понять, как opencv распознает образы. Плюс немного пришлось повозиться, чтобы найти нормальный скрипт для эмуляции мыши. В остальном благодаря массе библиотек на Python удалось довольно быстро сделать все, что хотелось. Что мне понадобилось в итоге:

  1. opencv
    • распознавание пальца на видео
    • сохранение файла с фотографией пальца
    • калибровка камеры
  2. keyboard – обработка горячих клавиш
  3. TkInter — пять кнопок для GUI.

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

Что дальше


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

Фич, которых на данный момент нет, но которые очень хочется сделать:

  1. Поддержка нескольких мониторов
  2. Эмуляция MouseDown und MouseUp (необходимо для выделения текста)
  3. Поддержка Linux

И тут наступил самый тяжелый момент, когда самое вкусные 20% дела уже сделаны, а в одиночку дальше пилить 80% не хочется. Тогда я и решил, что пришла пора все выложить на GitHub, благо я давно мечтал сделать что-нибудь open source. Буду очень рад, если кто-нибудь захочет принять участие проекте (тестирование, программирование, документация – все, что угодно). И, конечно, было бы интересно послушать мысли на тему интерфейсов человеко-машинных интерфейсов вообще и альтернативы мышам в частности.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 15

    +2
    Если выкрасить ноготь в яркий цвет стабильность повысится)
      +1

      А если разные ногти в разные цвета — мультитач

      +3
      Ни в коем случае не сочтите за придирку, но

      http://www.cameramouse.org/
      https://www.codeproject.com/Articles/498193/Mouse-Control-via-Webcam
      https://fingermouse.codeplex.com/

      это только первое, что гуглится по запросу «virtual mouse via webcam»

      А так идея отличная )
        +1
        Спасибо за ссылки, с Гуглом я, похоже, гораздо хуже вас умею обходиться.

        https://fingermouse.codeplex.com/ — очень похоже на то, что я хотел, жаль, что я раньше о них их не знал.

        Camera Mouse я пробовал, но там заточено под целевую аудиторию другую: надо пытаться двигать мышку глазами, что меня совсем не устроило: у меня очки выдают сильные блики и точность была маленькая. Как из нее сделать графический планшет — я не понял.

        https://www.codeproject.com/Articles/498193/Mouse-Control-via-Webcam — Там попытка отслеживать все пять пальцев, как я понимаю, то есть опять же не планшет. Но знал бы я о ней раньше — глядишь, не пришлось бы в паре мест изобретать велосипед, можно было посмотреть, как это там реализовано.

        И спасибо за теплые слова про идею. Может, получится что-нибудь хорошее из этого.
          0
          Спасибо за опен сорс!
          Указанные выше решения из гугла
          а) не на питоне — мне интересно было взглянуть на питон солюшн
          б) разной степени сложности как по установке и пониманию, так и по возможностям
          А тут просто, четко и по делу
        0
        Классно!
        Я просто запомнил быстрые клавиши. Мышь не нужна — вообще.
          0
          не работает для:
          1) новой программы, особенно, если программа будет использоваться короткое время (тестирование). Сюда еще редкие сочетания (т.е. редко используются)
          2) нескольких программ с разными быстрыми клавишами (больше программ — больше противоречивых сочетаний)
          3) скорость позиционирования и неполная клавиатура (ноутбучная. Сейчас вообще за нетбучной, там даже Home/End и других подобных клавиш нет).
          4) физическое отсутствие быстрых клавиш (постоянно наталкиваюсь на такие программы, особенно в случаях, когда команду надо повторить 5-10 раз).
          0
          Ни одна из стандартных альтернатив мышке мне не нравится: PointStick (пипка в центре клавиатуры для ноутбуков), тачпад, графический планшет – у всех либо точность плохая, либо все равно надо дергать руку с клавиатуры.

          Эмм, у point-stick плохая точность? Что? Тензомитрический джойстик наоборот отличается точностью указания.

          Долгое время пытался переходить на специализированный софт, в т.ч. ви-подобные режимы в браузере. Но все-таки переход на trackpoint решил все мои проблемы.
            0
            Может быть, мне не везло с point-stick или у меня руки кривые. По моим воспоминаниям (дело было пятнадцать лет назад на ноуте IBM) выглядело это так: палец на пипку, жмем, ждем, пока курсор доползет до кнопки на экране, потом курсор переполз через кнопку, жмем обратно. Может, прогресс не стоит на месте? Можете порекомендовать удобные клавиатуры с пипкой?
              0
              Использовал thinkpad x220/x230/x250 — трекпоинт очень точный, подобной проблемы нет. Настолько точный, что играл на нем в Stellaris часами подряд без каких-либо неудобств, а там контролы довольно маленькие.

              Использовал Dell Latitude E6430 — трекпоинт сильно менее удобный, но подобной проблемы все равно нет.
                0
                Жаль, что это ноуты, мне для тестов дороговато выйдет. Попробую, наверное, заказать клавиатуру с пипкой, сообщу о результатах при случае :)
                  0
                  а клавиатуры с тачпадами вместо цифрового блока не пробовали (в том числе вариант, когда сам тачпад может служить цифровым блоком)?
                    0
                    Есть еще клавиатуры с трекболами.

                    Я, в принципе, поступил проще — купил клавиатуру без цифрового блока и трекбол.
                      0
                      Ну у меня так-то и отдельный тачпад есть, но с переездом на ноут он стал не настолько нужен.
                      А еще есть сенсорные накладки на экран.
                      То есть вариантов — много, просто интересно пробовал ли автор другие варианты)

                      PS. Вспомнил клавиатуру с тачпадом снизу нее и искренним желанием понять, с помощью чего же именно дизайнер планировал там управлять курсором)))
            0
            удалось довольно быстро сделать все, что хотелось

            Как два пальца распознать)


            PS: задумка хорошая

            Only users with full accounts can post comments. Log in, please.