Здравствуйте, меня зовут Дмитрий. Здесь я хочу рассказать о том, почему меня не устраивает мышка, и как я пытаюсь ее заменить. Я разрабатываю 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. Буду очень рад, если кто-нибудь захочет принять участие проекте (тестирование, программирование, документация – все, что угодно). И, конечно, было бы интересно послушать мысли на тему интерфейсов человеко-машинных интерфейсов вообще и альтернативы мышам в частности.
Поделиться с друзьями
-->

Комментарии (15)


  1. Pinsky
    20.06.2017 15:08
    +2

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


    1. Vadimio
      20.06.2017 18:21
      +1

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


  1. zuborg
    20.06.2017 15:19
    +3

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

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

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

    А так идея отличная )


    1. dmitry_vlas
      20.06.2017 18:07
      +1

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

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

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

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

      И спасибо за теплые слова про идею. Может, получится что-нибудь хорошее из этого.


      1. RogerHudson
        21.06.2017 21:45

        Спасибо за опен сорс!
        Указанные выше решения из гугла
        а) не на питоне — мне интересно было взглянуть на питон солюшн
        б) разной степени сложности как по установке и пониманию, так и по возможностям
        А тут просто, четко и по делу


  1. x893
    20.06.2017 16:21

    Классно!
    Я просто запомнил быстрые клавиши. Мышь не нужна — вообще.


    1. IvanTamerlan
      20.06.2017 17:56

      не работает для:
      1) новой программы, особенно, если программа будет использоваться короткое время (тестирование). Сюда еще редкие сочетания (т.е. редко используются)
      2) нескольких программ с разными быстрыми клавишами (больше программ — больше противоречивых сочетаний)
      3) скорость позиционирования и неполная клавиатура (ноутбучная. Сейчас вообще за нетбучной, там даже Home/End и других подобных клавиш нет).
      4) физическое отсутствие быстрых клавиш (постоянно наталкиваюсь на такие программы, особенно в случаях, когда команду надо повторить 5-10 раз).


  1. tyderh
    20.06.2017 19:13

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

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

    Долгое время пытался переходить на специализированный софт, в т.ч. ви-подобные режимы в браузере. Но все-таки переход на trackpoint решил все мои проблемы.


    1. dmitry_vlas
      21.06.2017 21:45

      Может быть, мне не везло с point-stick или у меня руки кривые. По моим воспоминаниям (дело было пятнадцать лет назад на ноуте IBM) выглядело это так: палец на пипку, жмем, ждем, пока курсор доползет до кнопки на экране, потом курсор переполз через кнопку, жмем обратно. Может, прогресс не стоит на месте? Можете порекомендовать удобные клавиатуры с пипкой?


      1. tyderh
        22.06.2017 08:01

        Использовал thinkpad x220/x230/x250 — трекпоинт очень точный, подобной проблемы нет. Настолько точный, что играл на нем в Stellaris часами подряд без каких-либо неудобств, а там контролы довольно маленькие.

        Использовал Dell Latitude E6430 — трекпоинт сильно менее удобный, но подобной проблемы все равно нет.


        1. dmitry_vlas
          26.06.2017 22:14

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


          1. Am0ralist
            27.06.2017 12:41

            а клавиатуры с тачпадами вместо цифрового блока не пробовали (в том числе вариант, когда сам тачпад может служить цифровым блоком)?


            1. Pinsky
              27.06.2017 15:41

              Есть еще клавиатуры с трекболами.

              Я, в принципе, поступил проще — купил клавиатуру без цифрового блока и трекбол.


              1. Am0ralist
                27.06.2017 16:57

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

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


  1. michael_vostrikov
    21.06.2017 15:22

    удалось довольно быстро сделать все, что хотелось

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


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