Es gibt einen Motion Tracker namens Leap Motion. Mit dieser API für Python habe ich versucht, den Abstand zwischen Daumen und Zeigefinger in Echtzeit zu ermitteln. Es gibt viele Artikel, die Ihnen zeigen, wie Sie Leap Motion in Python verwenden, aber in meiner Umgebung lief es nicht reibungslos. Also werde ich die Methode als mein eigenes Memo belassen.
Die Python-API von Leap Motion unterstützt nur Python 2.x. Ich werde es später auf Python 3 ausführen, aber zuerst werde ich es auf Python 2.7 ausführen. Erstellen Sie mit Anaconda eine Python 2.7-Umgebung.
Laden Sie dann das Desktop SDK (https://developer.leapmotion.com/setup/desktop) von der Leap Motion Developer Site (https://developer.leapmotion.com/setup) herunter. Es gibt V2- und V4-Optionen, aber wählen Sie V2.
Wenn Sie die DL-Zip-Datei entpacken, befindet sich ein Installationsprogramm im Inneren. Führen Sie es also aus. (← Ist es nicht notwendig, wenn Sie Visualizer nicht benötigen?) danach, C:\Program Files\Leap Motion Core Services\Visualizer.exe Wenn Sie ausführen, können Sie die Funktion von Leap Motion überprüfen. Versuchen wir es also.
Wenn in Visualizer nichts angezeigt wird, lesen Sie bitte diesen Artikel und führen Sie dpinst64.exe aus, um den Treiber zu installieren.
Zusammen mit dem Installationsprogramm gibt es einen Ordner namens LeapSDK. Darüber hinaus scheint es, dass durch das Importieren von lib / Leap.py darin Leap Motion von Python aus verarbeitet werden kann. Wenn Sie beispielsweise in dasselbe Verzeichnis wie Leap.py und "import" wechseln, wird "Importfehler: Kein Modul mit dem Namen LeapPython" angezeigt. Unter Bezugnahme auf diesen Artikel mit Leap.py Kopieren Sie den Inhalt von LeapSDK / lib / x64 und \ _ \ _ init \ _ \ _.py (leere Datei) in einen Ordner (hier leapmotion genannt). Wenn Sie in das Verzeichnis wechseln, in dem sich leapmotion befindet, und "aus leapmotion Leap" aus Python importieren, können Sie die Leap Motion-API verwenden.
Artikel hier und [Offizielle Dokumente](https://developer-archive.leapmotion.com/documentation/v2/python/ Verwenden Sie devguide / Leap_Overview.html) und dir ()
, um den Abstand zwischen Daumen und Zeigefinger auszugeben.
Wenn Sie Folgendes tun, können Sie anscheinend die Informationen der Hand in diesem Moment als "Rahmen" abrufen.
controller = Leap.Controller()
frame = controller.frame()
Übrigens, wenn Sie "controller.frame (1)" ausführen, scheinen Sie die Informationen einen Frame zuvor abrufen zu können.
Die Fingerinformationen von "frame" werden in "frame.fingers" gespeichert. Die Informationen jedes Fingers scheinen wie folgt abgerufen zu werden.
frame.fingers[0] # <-Daumen
frame.fingers[1] # <-Zeigefinger
frame.fingers[2] # <-Mittelfinger (Mittelfinger)
frame.fingers[3] # <-Ring (Medizinfinger
frame.fingers[4] # <-Pinky (kleiner Finger
Gehen Sie wie folgt vor, um den Abstand zwischen der Spitze Ihres Daumens und dem Zeigefinger auszugeben.
pos_thumb = frame.fingers[0].tip_position
pos_index = frame.fingers[1].tip_position
print(pos_thumb.distance_to(pos_index))
Zusammenfassend sieht es so aus.
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))
Dieser Artikel Ich werde es basierend auf tun. Der Unterschied zur Einstellung im Artikel besteht darin, dass Sie 64-Bit-Windows und Python Ver. Is 3.7 verwenden.
Swig Verwenden Sie Swig, um ein Programm für Python zu generieren.
Installieren Sie Swig unter Windows unter Diese Site. Die neueste Version zum Zeitpunkt des Schreibens des Artikels war 4.0.1, aber es scheint einen Fehler zu verursachen, wenn es 4.0.0 oder höher ist (Referenz). Ich erhalte (wahrscheinlich) keinen Fehler in 3.0.12, aber ich verwende 2.0.9, wie im Artikel erwähnt. Gehen wir so weit, den Pfad zu swig.exe zur Umgebungsvariablen PATH hinzuzufügen.
Erstellen Sie einen geeigneten Ordner und kopieren Sie die folgenden Dateien.
Ich kann Swig in diesem Ordner ausführen, aber Leap.i scheint nicht gut genug zu sein und ich erhalte eine Fehlermeldung. Lesen Sie diesen Artikel und beheben Sie ihn manuell. Öffnen Sie Leap.i in einem Texteditor. Der Teil in% pythoncode {%}} ist der Code für Python, aber es gibt einen Fehler im Einzug (Absenken). Korrigieren Sie die Teile, die nicht eingerückt werden müssen, z. B. vor "def", so dass keine Einrückungen vorhanden sind und die anderen Einrückungen leer sind. Verlassen Sie vorerst Repaired Leap.i.
Geben Sie an der Eingabeaufforderung "cd" an den Speicherort dieses Ordners ein und geben Sie den folgenden Befehl ein.
swig -c++ -python -o LeapPython.cpp -interface LeapPython Leap.i
Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie den Leap.i-Einzug basierend darauf erneut. Bei Erfolg werden Leap.py, LeapPython.cpp und LeapPython.h im selben Ordner erstellt.
Visual Studio Kompilieren Sie mit Visual Studio die zuvor generierte LeapPython.cpp, damit sie in Python ausgeführt werden kann.
Für Python 3.7 müssen Sie die Version 2017 anstelle der neuesten Version 2019 vorbereiten (Referenz. )), Also werde ich das DL. https://docs.microsoft.com/ja-jp/visualstudio/releasenotes/vs2017-relnotes Wählen Sie Download Enterprise 2017 und DL und starten Sie das Installationsprogramm. Ich wusste nicht, was ich tun sollte, also habe ich die Desktop-Entwicklung mit C ++ auf der Registerkarte Workload überprüft und installiert.
Wählen Sie in der Menüleiste [Datei] → [Neu] → [Projekt]. Wählen Sie im Menü links [Visual C ++] → [Projekt leeren]. Legen Sie einen Namen und einen Ort fest und klicken Sie auf [OK]. Kopieren Sie den gesamten Inhalt des Ordners, in den Sie Swig verschoben haben, in den Projektordner (nur LeapPython.cpp?). Es ist dasselbe Verzeichnis wie die Datei mit den Filtern.
[Ansicht] → [Projektmappen-Explorer]. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie [Hinzufügen] → [Vorhandenes Element]. [Hinzufügen] aller Dateien, die Sie zuvor aus dem Swig-abgeschlossenen Ordner kopiert haben.
Klicken Sie anschließend erneut mit der rechten Maustaste auf den Projektnamen und wählen Sie [Eigenschaften]. Wenn Sie keine Eigenschaften sehen, wechseln Sie mit den Symbolen oben von der Ordneransicht zur Lösungsansicht (siehe Abbildung unten). Klicken Sie auf Configuration Manager und ändern Sie die Kalibrierung in Release und die Plattform in x64. Wählen Sie das Menü [Allgemein], setzen Sie [Zielname] auf LeapPython und setzen Sie [Konfigurationstyp] auf Dynamische Bibliothek (.dll). Öffnen Sie als Nächstes das Menü [C / C ++] -> [Allgemein] und geben Sie den Python-Include-Ordner im zusätzlichen Include-Verzeichnis an. Zum Beispiel in meiner Anaconda (Miniconda) -Umgebung C: \ Benutzer \ (Benutzername) \ Miniconda3 \ envs \ (Umgebungsname) \ include Es ist wie es ist. Wechseln Sie dann zum Menü Linker-> Eingabe und fügen Sie den vollständigen Pfad zu Leap.lib und python37.lib in den zusätzlichen Abhängigkeiten hinzu. python37.lib sollte sich an der folgenden Stelle befinden. C: \ Benutzer \ (Benutzername) \ Miniconda3 \ envs \ (Umgebungsname) \ libs \ python37.lib Die Einstellung ist abgeschlossen. Lassen Sie uns das Grundstück schließen.
Führen Sie die Kompilierung aus. Klicken Sie mit der rechten Maustaste auf den Projektnamen → [Erstellen] Wenn Sie eine Fehlermeldung erhalten, stellen Sie sicher, dass python33.lib und Leap.lib für 64-Bit sind. Wenn der Build abgeschlossen ist, wird LeadPython.dll im angezeigten Verzeichnis erstellt. Benennen Sie es in .pyd um. Setzen Sie vorerst Generated LeadPython.pyd.
Öffnen Sie den Ordner, in dem Sie \ _ \ _ init \ _ \ _. Py erstellt haben, indem Sie sich in den Inhalt des Leap SDK vertiefen, das unter Python 2.7 ausgeführt wurde. Ersetzen Sie von diesen Leap.py und LeapPython.pyd durch die von Swig oder Visual Studio generierten.
Schließlich müssen Sie auch Leap.py manuell reparieren. Öffnen wir es mit einem Texteditor. Hier und da gibt es zusätzliche%, also löschen Sie sie bitte. Es ist schneller, wenn Sie 2 Leerzeichen mit halber Breite +% ersetzen und löschen. Überarbeiteter Leap.py ist hier.
Jetzt können Sie die Leap Motion-Daten in Python 3.7 wie in Python 2.7 abrufen.
Schreiben Sie ein Skript wie dieses ↓
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)
Bewegen Sie es so ↓
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'))
Es sieht aus wie das! ↓
Ich habe versucht, es mit g ++ zu kompilieren, das mit MinGW installiert wurde, aber es hat nicht funktioniert. Führen Sie eine Aufzeichnung, bis sie stecken bleibt.
Installieren Sie MinGW-w64 basierend auf diesem Artikel. Es ist in Ordnung, wenn Sie es Ihrem Pfad hinzufügen. Übrigens habe ich in meinem Fall Folgendes hinzugefügt. C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
Dann, an der Eingabeaufforderung, cd
in den Swig-Ordner und
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
Ich dachte, ich könnte das Gleiche tun wie in Visual Studio, aber ich hatte viele Fehler. Wenn ich es hier tun könnte, wäre es einfacher gewesen, weil ich Visual Studio nicht installieren müsste.
Recommended Posts