- Daten über UDP empfangen
Wenn Sie vom PC aus die Zeichenfolge “FACEMOTION3D_OtherStreaming” an Port 49993 auf der iOS-Seite senden, gibt Facemotion3d per UDP mit 60FPS eine Antwort an Port 49993 zurück.
- Python-Beispiel
from socket import *
DstIP = "192.168.1.7"
DstPort = 49993
DstAddr = (DstIP,DstPort)
udpClntSock = socket(AF_INET, SOCK_DGRAM)
data = "FACEMOTION3D_OtherStreaming"
data = data.encode('utf-8')
udpClntSock.sendto(data,DstAddr)
server = socket(AF_INET, SOCK_DGRAM)
server.bind(("", 49983))
server.settimeout(0.05)
while True:
try:
messages, address = server.recvfrom(8192)
print(messages.decode('utf-8'))
except:
pass
- Die pro Frame gesendete Zeichenfolge lautet wie folgt.
eyeLookOutLeft&3|mouthPressRight&14|jawForward&8|browInnerUp&19|jawLeft&4|mouthShrugUpper&28|eyeSquintLeft&4|eyeWideLeft&0|mouthPucker&5|mouthLowerDownLeft&6|eyeBlinkLeft&29|mouthShrugLower&20|mouthSmileLeft&0|cheekSquintRight&9|eyeWideRight&0|mouthFunnel&4|mouthStretchRight&13|browDownRight&2|tongueOut&0|cheekSquintLeft&8|mouthStretchLeft&17|mouthUpperUpRight&10|noseSneerLeft&28|browOuterUpLeft&0|eyeLookInRight&15|mouthDimpleRight&7|mouthRollUpper&5|mouthLowerDownRight&6|mouthClose&6|mouthFrownLeft&3|eyeBlinkRight&29|mouthFrownRight&2|mouthUpperUpLeft&11|browDownLeft&1|eyeLookOutRight&0|cheekPuff&4|eyeLookInLeft&0|mouthDimpleLeft&8|eyeLookDownLeft&36|eyeSquintRight&4|mouthRollLower&7|eyeLookUpLeft&0|eyeLookUpRight&0|mouthSmileRight&0|jawRight&0|noseSneerRight&25|mouthPressLeft&13|jawOpen&4|browOuterUpRight&0|eyeLookDownRight&36|mouthLeft&1|mouthRight&0|FM_SAD&0|FM_ANGRY&0|FM_VF&0|FM_TH&0|FM_browUpRight&0|FM_browUpLeft&0|=head#-22.167973,0.45402408,-4.8798294,-0.039975993,-0.048437987,-0.45562273|rightEye#12.759762,5.527712,1.2244859|leftEye#12.862795,1.264116,0.28145725|
- Die pro Frame gesendeten Zeichenfolgen lauten wie folgt.
BlendShape Name&Parameters (0 ~ 100) | BlendShape Names-Parameters (0 ~ 100) | .... | = head # Euler angles X (degree), Euler angles Y, Euler angles Z, Position values X, Position values Y, Position values Z | rightEye #Euler angles X, Euler angles Y, Euler angles Z | leftEye #Euler angles X, Euler angles Y, Euler angles Z |
Der Parameter kann negative Werte enthalten oder 100 überschreiten.
Winkelbezogene Daten werden in Grad, nicht in Radiant, gesendet.
- Daten über TCP/IP empfangen
Bei UDP können Frames verloren gehen, daher gibt es auch eine Empfangsmethode über TCP/IP.
Wenn Sie per UDP die Zeichenfolge “FACEMOTION3D_OtherStreaming|protocol=tcp” an Port 49993 auf der iOS-Seite senden, werden die Daten an Port 49986 auf der PC-Seite gesendet.
Die gesendete Zeichenfolge ist lediglich die beim UDP-Versand gesendete Zeichenfolge mit angehängtem “___FACEMOTION3D”.
-sample
BlendShape Name&Parameter (0 ~ 100) | BlendShape Name-Parameter (0 ~ 100) | .... | = head # Euler angles X, Euler angles Y, Euler angles Z, moving values X, moving values Y, moving values Z | rightEye #Euler angles X, Euler angles Y, Euler angles Z | leftEye #Euler angles X, Euler angles Y, Euler angles Z | ___ Facemotion3d
Beim Empfang von iOS zum PC über TCP/IP wird eine in Frames getrennte Zeichenfolge gesendet; verwenden Sie “___FACEMOTION3D” am Ende als Trennzeichen.
Um das TCP/IP-Senden zu stoppen, senden Sie die Zeichenfolge “StopStreaming_FACEMOTION3D” an Port 49993.
- Python-Beispiel für den Empfang über TCP/IP
from socket import socket, AF_INET, SOCK_DGRAM, SOCK_STREAM
#UDP send
HOST = ''
PORT = 49993
ADDRESS = "192.168.1.7" #iOS address
s = socket(AF_INET, SOCK_DGRAM)
msg = "FACEMOTION3D_OtherStreaming|protocol=tcp"
s.sendto(msg.encode(), (ADDRESS, PORT))
s.close()
#create tcp server
with socket(AF_INET, SOCK_STREAM) as tcp_server:
tcp_server.bind(('192.168.1.5', 49986)) #192.168.1.5 is pc address
tcp_server.listen(1)
while True:
conn, addr = tcp_server.accept()
with conn:
while True:
data = conn.recv(10000)
print(data.decode('utf-8'))
- Aufgezeichnete Daten in iOS empfangen
Wenn Sie per UDP die Zeichenfolge “v2_OtherBakeRecordedAnimation_FACEMOTION3D” an Port 49993 auf der iOS-Seite senden, werden die aufgezeichneten Daten per TCP/IP an Port 49987 auf dem PC gesendet.
Die übertragene Zeichenfolge hat das folgende Format:
["......", "......", "......"]===[time01, time02, time03]___FACEMOTION3D.
The ["......", "......", "......"] Der Teil ist im JSON-Format und enthält dieselben Zeichenfolgen, die über UDP und TCP/IP verwendet werden.
[time01, time02, time03] enthält die Aufnahmezeiten, die den jeweiligen Indizes der Aufnahmedaten entsprechen.
- Aufgezeichnete Daten und Audio in iOS empfangen
Wenn Sie per UDP die Zeichenfolge “v2_OtherBakeRecordedAnimation_FACEMOTION3D” an Port 49993 auf der iOS-Seite senden, werden die aufgezeichneten Daten per TCP/IP an Port 49987 auf dem PC gesendet.
Die übertragene Zeichenfolge hat das folgende Format:
["......", "......", "......"]===[time01, time02, time03]___FACEMOTION3D.
The ["......", "......", "......"] Der Teil ist im JSON-Format und enthält dieselben Zeichenfolgen, die über UDP und TCP/IP verwendet werden.
[time01, time02, time03] enthält die Aufnahmezeiten, die den jeweiligen Indizes der Aufnahmedaten entsprechen.
- Dem Benutzer anzeigen, dass aktuell gebacken wird
Um “Currently baking” in der iOS-App anzuzeigen, senden Sie “BakeOther_FACEMOTION3D” an UDP-Port 49993. Um die Baking-Meldung auszublenden, senden Sie “BakeFinishOther_FACEMOTION3D” an UDP-Port 49993.
- Aufnahme innerhalb der iOS-App starten
Um die Aufnahme innerhalb der iOS-App zu starten, senden Sie “FACEMOTION3D_StartRecording” an Port 49993.
- Aufnahme innerhalb der iOS-App stoppen
Um die Aufnahme innerhalb der iOS-App zu stoppen, senden Sie “FACEMOTION3D_StopRecording” an Port 49993.
- Streaming innerhalb der iOS-App stoppen
Um das Streaming innerhalb der iOS-App zu stoppen, senden Sie “StopStreaming_FACEMOTION3D” an Port 49993.
- Reset-Button ausführen
Senden Sie die Zeichenfolge “FACEMOTION3D_resetButton” an den iOS-Port 49993.
- Bluetooth
Für eine Bluetooth-Verbindung mit der Other-Lizenz verwenden Sie bitte den folgenden Code:
https://github.com/emoto-yasushi/iFacialMocap_Facemotion3d_Bluetooth
- Zusätzliche Informationen
- Sobald Facemotion3d einen Befehl akzeptiert, nimmt es für 0,02 Sekunden keine externen Befehle an.
- Derzeit empfängt nur der UDP-Server Befehle. Bei UDP können Daten manchmal verloren gehen; senden Sie die Daten daher etwa dreimal, um die Wahrscheinlichkeit einer korrekten Kommunikation zu erhöhen.
Drittanbieter-Entwickler müssen nicht unbedingt die Other-Lizenz verwenden.
Drittanbieter-Entwickler können bevorzugte Lizenzen wie die Unity- oder Blender-Lizenz verwenden, um die Art der zu sendenden Daten auszuwählen.
Bitte beachten Sie, dass sich der Preis jeder Lizenz je nach Situation künftig ändern kann.