Кулак вместо хоткея: делаю управление macOS жестами и разбираюсь, куда уходит память
andreygaag 34 минуты назад Объяснить с Кулак вместо хоткея: делаю управление macOS жестами и разбираюсь, куда уходит память Средний 10 мин 649 Программирование * Open source * Swift * Обработка изображений * macOS *...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: andreygaag 34 минуты назад Объяснить с Кулак вместо хоткея: делаю управление macOS жестами и разбираюсь, куда уходит память Средний 10 мин 649 Программирование * Open source * Swift * Обработка изображений * macOS * Кейс Как-то раз воскресным вечером листал телегу и наткнулся на демку MediaPipe и захотелось поразвлекаться с камерой и жестами. Чтобы от этого была хоть какая-то польза, решил пусть MacBook вызывает нужные хоткеи, когда я показываю ему кулак или пару пальцев. Сначала рассматривал MediaPipe на Python, но в итоге выбрал Swift и VNDetectHumanHandPoseRequest из Apple Vision.
Для постоянно работающего приложения на Mac хотелось нативного компилируемого и быстрого, да и с макосью взаимодействовать проще. Vision возвращает координаты 21 сустава, в трекере раскладываю их в том же порядке, что и MediaPipe: запястье, затем по четыре точки каждого пальца. Итоговая программа работает так:Камера, 640×480, 15 кадров/с → Vision: 21 точка руки → нормализация положения, размера и поворота → kNN по записанным образцам → удержание, срабатывание, флаг → CGEvent с горячей клавишей Для записи жеста собирается 30 образцов с интервалом не меньше 0,2 секунды.
Технические детали
Соседние кадры почти одинаковые, поэтому записывать каждый смысла мало. Во время записи стоит немного двигать и наклонять руку. В признаках из координат вычитается положение запястья и делится на длину от запястья до основания среднего пальца.
Так одна и та же поза остаётся похожей на себя при перемещении по кадру и изменении расстояния до камеры. Координата x предварительно умножается на соотношение сторон кадра: Vision нормирует обе оси в диапазон от 0 до 1, а кадр у нас не квадратный. Про эти координаты есть разбор Apple на WWDC.
После исключения запястья получается вектор из 40 чисел. Расстояние между двумя позами считается в Features. distance как RMS смещения 20 суставов:d = sqrt(Σ ((xᵢ − xᵢ′)² + (yᵢ − yᵢ′)²) / 20) Что за RMS и зачем здесь квадратный корень?
Отраслевые последствия
Берем каждый сустав и смотрим, насколько он сдвинулся относительно записанного образца. Если один ушёл на 0,1 длины ладони, а другой на 0,3, среднее арифметическое даст 0,2. RMS сначала возводит оба расстояния в квадрат, потом усредняет и берёт корень: √((0,1² + 0,3²) / 2) ≈ 0,224.
Большая ошибка получает больший вес. Для руки делаем то же самое с 20 точками. Чем меньше итоговое число, тем больше текущая поза похожа на записанную.
Порог 0,25 - смещение на четверть длины ладони. Дальше kNN-классификатор с k=5. Голосуют только соседи внутри допустимого радиуса, если подходящих образцов нет - жест отклоняется.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.






