Il existe un suivi de mouvement appelé Leap Motion. En utilisant cette API pour Python, j'ai essayé d'obtenir la distance entre le pouce et l'index en temps réel. Il existe de nombreux articles qui vous montrent comment utiliser Leap Motion en Python, mais cela ne s'est pas déroulé sans heurts dans mon environnement. Je vais donc laisser la méthode comme mon propre mémo.
L'API Python de Leap Motion ne prend en charge que Python 2.x. Je l'exécuterai plus tard sur la série Python 3, mais je l'exécuterai d'abord sur Python 2.7. Créez un environnement Python 2.7 à l'aide d'Anaconda.
Ensuite, téléchargez le SDK de bureau (https://developer.leapmotion.com/setup/desktop) à partir du site des développeurs Leap Motion (https://developer.leapmotion.com/setup). Il existe des options V2 et V4, mais choisissez V2.
Lorsque vous décompressez le zip DL, il y a un programme d'installation à l'intérieur, alors exécutons-le. (← Est-ce inutile si vous n'avez pas besoin de Visualizer?) ensuite, C:\Program Files\Leap Motion Core Services\Visualizer.exe Si vous exécutez, vous pouvez vérifier le fonctionnement de Leap Motion, alors essayons-le.
Si rien ne s'affiche dans Visualizer, reportez-vous à cet article et exécutez dpinst64.exe pour installer le pilote.
Avec le programme d'installation, il existe un dossier appelé LeapSDK.
De plus, il semble que Leap Motion puisse être géré depuis Python par ʻimport lib / Leap.py dedans. Cependant, par exemple, si vous vous déplacez dans le même répertoire que Leap.py et ʻimport
, vous obtiendrez ʻErreur d'importation: aucun module nommé Leap Python. En référence à [cet article](https://blog.mezquita.jp/archives/4043), avec Leap.py Copiez le contenu de LeapSDK / lib / x64 et \ _ \ _ init \ _ \ _.py (fichier vide) dans un dossier (nommé leapmotion ici). Si vous vous déplacez vers le répertoire où se trouve leapmotion et que vous effectuez
from leapmotion import Leap` depuis Python, vous pouvez utiliser l'API Leap Motion.
Articles par ici et [Documents officiels](https://developer-archive.leapmotion.com/documentation/v2/python/ Utilisez devguide / Leap_Overview.html) et dir ()
pour afficher la distance entre votre pouce et votre index.
Si vous faites ce qui suit, il semble que vous pouvez obtenir les informations de la main à ce moment-là en tant que frame
.
controller = Leap.Controller()
frame = controller.frame()
Au fait, si vous faites controller.frame (1)
, il semble que vous puissiez obtenir les informations une image avant.
Les informations de doigt de «frame» sont stockées dans «frame.fingers». Les informations de chaque doigt semblent être récupérées comme suit.
frame.fingers[0] # <-Pouce
frame.fingers[1] # <-Index (index
frame.fingers[2] # <-Milieu (majeur
frame.fingers[3] # <-Anneau (doigt de médecine
frame.fingers[4] # <-Pinky (petit doigt
Pour afficher la distance entre le bout de votre pouce et votre index, procédez comme suit.
pos_thumb = frame.fingers[0].tip_position
pos_index = frame.fingers[1].tip_position
print(pos_thumb.distance_to(pos_index))
En résumé, ça ressemble à ça.
from time import sleep
from packages.leapmotion import Leap
controller = Leap.Controller()
THUMB = 0
INDEX = 1
MIDDLE = 2
RING = 3
PINKY = 4
while not controller.is_connected:
print('Connecting...')
sleep(.5)
pass
print('...Connected!')
while True:
sleep(.01)
frame = controller.frame()
pos_thumb = frame.fingers[THUMB].tip_position
pos_index = frame.fingers[INDEX].tip_position
print(pos_thumb.distance_to(pos_index))
Cet article Je le ferai basé sur. La différence avec le paramètre de l'article est que vous utilisez Windows 64 bits et Python Ver. Is 3.7.
Swig Demandez-leur de générer un programme pour Python en utilisant Swig.
Installez Swig sur Windows en vous référant à Ce site. La dernière version au moment de la rédaction de l'article était 4.0.1, mais elle semble provoquer une erreur si elle est 4.0.0 ou ultérieure (Référence). Je n'obtiens pas d'erreur (probablement) dans la version 3.0.12, mais j'utilise la version 2.0.9 comme mentionné dans l'article. Allons jusqu'à ajouter le chemin de swig.exe à la variable d'environnement PATH.
Créez un dossier approprié et copiez les fichiers suivants.
Je peux exécuter Swig dans ce dossier, mais Leap.i ne semble pas être assez bon et j'obtiens une erreur.
Reportez-vous à cet article et corrigez-le manuellement.
Ouvrez Leap.i dans un éditeur de texte.
La partie incluse dans % pythoncode {%}}
est le code pour Python, mais il y a une erreur dans le retrait (abaissement).
Corrigez les parties qui n'ont pas besoin d'être indentées, comme avant «def», afin qu'il n'y ait pas d'indentations et que les autres indentations soient vides.
Pour le moment, quittez Repaired Leap.i.
À l'invite de commande, cd
à l'emplacement de ce dossier et entrez la commande suivante.
swig -c++ -python -o LeapPython.cpp -interface LeapPython Leap.i
Si vous obtenez un message d'erreur, vérifiez à nouveau le retrait Leap.i en fonction de celui-ci. En cas de succès, Leap.py, LeapPython.cpp et LeapPython.h seront créés dans le même dossier.
Visual Studio À l'aide de Visual Studio, compilez le LeapPython.cpp généré précédemment afin qu'il puisse être exécuté à partir de Python.
Pour Python 3.7, vous devez préparer la version 2017 au lieu de la dernière version 2019 (Référence )), Donc je vais DL ça. https://docs.microsoft.com/ja-jp/visualstudio/releasenotes/vs2017-relnotes Sélectionnez Télécharger Enterprise 2017 et DL et lancez le programme d'installation. Je ne savais pas quoi faire, alors j'ai vérifié Desktop Development avec C ++ dans l'onglet Workload et l'ai installé.
Dans la barre de menus, sélectionnez [Fichier] → [Nouveau] → [Projet]. Sélectionnez [Visual C ++] → [Projet vide] dans le menu de gauche. Choisissez un nom et un emplacement, puis [OK]. Copiez tout le contenu du dossier dans lequel vous avez déplacé Swig dans le dossier du projet (LeapPython.cpp seul?). C'est le même répertoire que le fichier contenant des .filters.
[Affichage] → [Explorateur de solutions]. Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de solutions et sélectionnez [Ajouter] → [Élément existant]. [Ajouter] tous les fichiers que vous avez copiés à partir du dossier terminé par Swig précédemment.
Ensuite, cliquez à nouveau avec le bouton droit sur le nom du projet et sélectionnez [Propriétés]. Si vous ne voyez pas Propriétés, utilisez les icônes en haut pour passer de la vue des dossiers à la vue des solutions, comme indiqué dans l'écran ci-dessous. Cliquez sur Configuration Manager et modifiez l'étalonnage sur Release et la plate-forme sur x64. Sélectionnez le menu [Général], définissez [Nom de la cible] sur LeapPython et définissez [Type de configuration] sur Bibliothèque dynamique (.dll). Ensuite, ouvrez le menu [C / C ++] -> [Général] et spécifiez le dossier d'inclusion Python dans le répertoire d'inclusion supplémentaire. Par exemple, dans mon environnement Anaconda (Miniconda) C: \ Users \ (nom d'utilisateur) \ Miniconda3 \ envs \ (nom de l'environnement) \ include C'est comme ça. Ensuite, accédez au menu Linker-> Input et ajoutez le chemin complet vers Leap.lib et python37.lib dans les dépendances supplémentaires. python37.lib doit se trouver à l'emplacement suivant. C: \ Users \ (nom d'utilisateur) \ Miniconda3 \ envs \ (nom de l'environnement) \ libs \ python37.lib Le réglage est terminé. Fermons la propriété.
Exécutez la compilation. Cliquez avec le bouton droit sur le nom du projet → [Build] Si vous obtenez un message d'erreur, assurez-vous que python33.lib et Leap.lib sont pour 64 bits. Lorsque la construction est terminée, LeadPython.dll sera créé dans le répertoire affiché. Renommez-le en .pyd. Pour le moment, mettez Generated LeadPython.pyd.
Ouvrez le dossier dans lequel vous avez créé \ _ \ _ init \ _ \ _. Py en creusant dans le contenu du SDK Leap qui a été exécuté sur Python 2.7. Parmi ceux-ci, remplacez Leap.py et LeapPython.pyd par ceux générés par Swig ou Visual Studio.
Enfin, vous devez également corriger manuellement Leap.py.
Ouvrons-le avec un éditeur de texte.
Il y a des %
s supplémentaires ici et là, donc veuillez les supprimer
C'est plus rapide si vous remplacez 2 espaces demi-largeur +% et que vous les effacez.
Reworked Leap.py est ici.
Vous pouvez maintenant obtenir les données Leap Motion dans Python 3.7 comme vous l'avez fait dans Python 2.7.
Écrivez un script comme celui-ci ↓
leapmotion.py
from time import sleep
from .leapsdk import Leap
class LeapMotion:
def __init__(self):
self.controller = Leap.Controller()
self.fingers = {'thumb': 0,
'index': 1,
'middle': 2,
'ring': 3,
'pinky': 4}
while not self.controller.is_connected:
sleep(.5)
def calc_dist(self, finger_from: str, finger_to: str):
frame = self.controller.frame()
pos_from = frame.fingers[self.fingers[finger_from]].tip_position
pos_to = frame.fingers[self.fingers[finger_to]].tip_position
return pos_from.distance_to(pos_to)
Bouge comme ça ↓
from time import sleep
from packages.device.leapmotion import LeapMotion
from psychopy import visual
leapmotion = LeapMotion()
window = visual.Window(
colorSpace='rgb255',
fullscr=False,
size=(900, 900),
allowGUI=True,
wintype='pygame',
units='pix')
circle = visual.Circle(window, size=1, autoDraw=True)
while True:
circle.size = leapmotion.calc_dist('thumb', 'index')
window.flip()
sleep(.01)
print(leapmotion.calc_dist('thumb', 'index'))
Ça ressemble à ça! ↓
J'ai essayé de le compiler en utilisant g ++ installé avec MinGW, mais cela n'a pas fonctionné. Gardez un dossier jusqu'à ce qu'il reste bloqué.
Installez MinGW-w64 en vous basant sur cet article. Ce n'est pas grave si vous l'ajoutez à votre PATH. Au fait, dans mon cas, j'ai ajouté ce qui suit. C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
Ensuite, à l'invite de commande, cd
dans le dossier Swig terminé et
g++ -I C:\Users\issakuss\Miniconda3\envs\study09t\include LeapPython.cpp Leap.lib C:\Users\issakuss\Miniconda3\envs\study09t\libs\python37.lib -shared -o LeapPython.pyd
Je pensais pouvoir faire la même chose que j'ai fait dans Visual Studio, mais je suis resté coincé avec beaucoup d'erreurs. Si je pouvais le faire ici, cela aurait été plus facile car je n'aurais pas à installer Visual Studio.
Recommended Posts