Es ist der 18. Tag von ABEJA Adventskalender 2019.
Dies sind Imais, die im Oktober dieses Jahres zu ABEJA gekommen sind. In meiner täglichen Arbeit ist das Entwicklungsteam von ABEJA Insight for Retail für die Entwicklung einer Flusslinienanalyse verantwortlich, die die Bewegung der Kunden im Geschäft analysiert. ..
In diesem Artikel OpenPose, der die Haltung aus zweidimensionalen Bildern schätzt, und [ChucK](https: // chuck), eine Programmiersprache für Musik, Einführung in die Systemübersicht und den Entwicklungsinhalt eines einfachen interaktiven Musik-Players, der durch Kombinieren von .cs.princeton.edu /) erstellt wurde.
** "Wenn ein Mensch klatscht, werden Musiktitel einzeln hinzugefügt" ** Erstellen Sie das folgende System auf dem MacBook Pro.
Das System arbeitet in den folgenden Schritten.
Dieses Mal haben wir beschlossen, tf-Pose-Schätzung, die TensorFlow-Version der OpenPose-Anwendungsimplementierung von Mr. ildoonet, zu ändern, um eine Steuerungsanwendung zu entwickeln. Hat.
Folgen Sie dem Tutorial von mdo4nt6n [TensorFlow-Version] OpenPose (kompatibel mit osx Mojave) auf dem MacBook, um die Betriebsumgebung für die tf-Pose-Schätzung zu erstellen.
Nur TensorFlow funktionierte nicht, als die neueste Version installiert wurde, daher habe ich diesmal die alte Version wie folgt installiert.
$ pip install tensorflow=1.14
Wie Sie im obigen Tutorial-Artikel sehen können, verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Positionsschätzung von OpenPose auf der in das MacBook integrierten Kamera in Echtzeit funktioniert.
$ python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0
ChucK
Laden Sie das Installationsprogramm für Mac OS X von ChucK herunter und installieren Sie die neueste Version, v1.4.0.
Jack Installieren Sie das von Homebrew bereitgestellte Paket mit dem folgenden Befehl.
$ brew install jack
Starten Sie Jack zunächst wie folgt an einem Terminal.
$ jackd -d coreaudio
Nachdem bestätigt wurde, dass Jack auf einem anderen Terminal anhand der in [ChucK-Quellcode] enthaltenen Beispiele gestartet wurde (https://chuck.cs.princeton.edu/release/files/chuck-1.4.0.0.tgz) Wählen Sie eine Datei aus und spielen Sie die Musik ab.
$ chuck examples/rhodey.ck
Wenn die Musik spielt, sind Sie erfolgreich!
In run_webcam.py handelt es sich um eine Demo-App zum Schätzen der Haltung der in die tf-Pose-Schätzung enthaltenen integrierten Kamera des MacBook. Fügen Sie den folgenden Code hinzu.
if 0 < len(humans) and hand_clapped(humans[0]) and \
HAND_CLAPPING_MASK_DURATION_SEC < (time.time() - time_hand_clapped):
time_hand_clapped = time.time()
osc.send_message('/sndbuf/beats', [1])
Was Sie tun, ist einfach: Wenn mehr als eine Person erkannt wird, überprüfen Sie, ob die erste Person mit "hand_clapped" klatscht, und wenn das Klatschen erkannt wird, befehlen Sie ChucK (steuern Sie einfach das Timing). Also sende ich nur die Nummer 1). ChucK unterstützt das Senden und Empfangen von Daten über Open Sound Control (OSC), das oben Befehle über den OSC-Kanal / sndbuf / beats
sendet.
Um zu verhindern, dass die Befehle zu kontinuierlich gesendet werden, werden die Befehle nach dem Senden der Befehle nicht gesendet, selbst wenn das Klatschen nur für "HAND_CLAPPING_MASK_DURATION_SEC" Sekunden erkannt wird.
Das hand_clapped
, das das Klatschen erkennt, ist wie folgt.
def hand_clapped(human):
parts = [part for idx, part in human.body_parts.items() if part.score > THRESHOLD_PART_CONFIDENCE]
is_rwrist, part_rwrist = include_part(parts, RWrist)
is_lwrist, part_lwrist = include_part(parts, LWrist)
if is_rwrist and is_lwrist:
dist = math.sqrt((part_rwrist.x - part_lwrist.x)**2 + (part_rwrist.y - part_lwrist.y)**2)
if dist < THRESHOLD_HAND_CLAPPING_DISTANCE:
return True
return False
Dies ist auch sehr einfach, es berechnet den Abstand zwischen dem rechten Handgelenk (part_rwrist
) und dem linken Handgelenk ( part_lwrist
) und wenn es unter dem Schwellenwert THRESHOLD_HAND_CLAPPING_DISTANCE
liegt, erkennt es es als Klatschen.
In Wirklichkeit müssen Sie also nur Ihre rechte und linke Hand näher zusammenbringen, aber das Klatschen in die Hände fühlt sich besser an und fühlt sich besser an ☺️.
Dies ist die einzige Steuerungsanwendungsseite!
Mit ChucK können Sie Musik in einem prozeduralen Sprachstil wie C programmieren. Der folgende Code fügt die Musiktitel hinzu, die zuvor bei jedem Empfang einer Nachricht in "Beats" gespeichert wurden. Übrigens, wenn ich alle Titel hinzugefügt habe, versuche ich, die Musiktitel nacheinander in umgekehrter Reihenfolge anzuhalten.
while (true) {
// wait for event to arrive
oe => now;
// grab the next message from the queue.
float msg;
while (oe.nextMsg() != 0) {
oe.getInt() => msg;
<<< "Beats received: ", msg >>>;
if (msg != 0) {
if (flag == 1) {
Machine.add(beats[i]) => beat_refs[i];
if (i == 6) {
0 => flag;
} else {
i + 1 => i;
}
} else {
Machine.remove(beat_refs[i]);
if (i == 0) {
1 => flag;
} else {
i - 1 => i;
}
}
}
}
}
Es ist peinlich, ein Video der tatsächlichen Pose hochzuladen, daher füge ich ein Demo-Video des Terminals ein, auf dem verschiedene Programme ausgeführt werden, und die fertige Musik. Tatsächlich wurde ein Musiktitel hinzugefügt, der zum Klatschen passt: Schweiß :.
Der im Video verwendete Musiktitel ist übrigens in den Beispielen von ChucK enthalten. [] (https://player.vimeo.com/video/380290288)
Durch die Kombination von Chuck und OpenPose habe ich einen einfachen interaktiven Musikplayer erstellt, der das Wiedergabe-Timing von Musiktiteln steuern kann. Dieses Mal ist es ein einfaches System, das nur Musik durch Händeklatschen hinzufügt, aber das tatsächlich fertiggestellte System ist sehr schön und macht Spaß. Nächstes Mal möchte ich Animation usw. hinzufügen, um die Interaktivität zu verbessern!