iFacialMocap যোগাযোগের স্পেসিফিকেশন
iFacialMocap তৃতীয় পক্ষের টুল ডেভেলপারদের PC সফটওয়্যার ছাড়াই UDP বা TCP/IP প্রোটোকল দিয়ে মুখের ডেটা গ্রহণ করতে দেয়।
UDP দিয়ে ডেটা গ্রহণ
PC থেকে iOS-এর পোর্ট 49983-এ "iFacialMocap_sahuasouryya9218sauhuiayeta91555dy3719" পাঠালে, iFacialMocap UDP দিয়ে 60 FPS-এ পোর্ট 49983-এ উত্তর পাঠায়।
・ Python উদাহরণ
from socket import *
DstIP = "192.168.1.7"
DstPort = 49983
DstAddr = (DstIP,DstPort)
udpClntSock = socket(AF_INET, SOCK_DGRAM)
data = "iFacialMocap_sahuasouryya9218sauhuiayeta91555dy3719"
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
・ প্রতি frame-এ পাঠানো string নিম্নরূপ।
・ প্রতি frame-এ পাঠানো strings নিম্নরূপ।
BlendShape Name-Parameter (0 ~ 100) | … | BlendShape Name-Parameter (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 |
Angle-related data radians নয়, degrees-এ পাঠানো হয়।
iOS ver.1.1.8 থেকে Facemotion 3d compatibility-এর জন্য external command যোগ করা হয়েছে।
যদি আপনি string "|sendDataVersion=v2" নিচের মতো যোগ করেন, পাঠানো BlendShape parameter-এর values "&" দিয়ে আলাদা হবে।
iFacialMocap_sahuasouryya9218sauhuiayeta91555dy3719|sendDataVersion=v2
[উদাহরণ]
সাধারণ
mouthSmile_R-0
sendDataVersion = v2
mouthSmile_R & 0
কারণ Facemotion 3d blendShape value-তে negative value পাঠাতে পারে।
কারণ delimiter হিসেবে "-" ব্যবহার করলে collision হওয়ার সম্ভাবনা ছিল।
TCP/IP দিয়ে ডেটা গ্রহণ
UDP-তে frames drop হতে পারে, তাই TCP/IP দিয়ে receive করার পদ্ধতিও আছে।
UDP দিয়ে iOS-এর পোর্ট 49983-এ "iFacialMocap_UDPTCP_sahuasouryya9218sauhuiayeta91555dy3719" পাঠালে, ডেটা PC-এর পোর্ট 49986-এ পাঠানো হবে।
পাঠানোর string শুধু এই string: "___iFacialMocap" যা UDP-তে পাঠানো string-এর সঙ্গে যোগ করা হয়।
- উদাহরণ
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 | ___iFacialMocap
TCP/IP দিয়ে iOS থেকে PC-তে গ্রহণ করার সময় ফ্রেম বিভক্ত স্ট্রিং পাঠানো হতে পারে, তাই শেষে "___iFacialMocap" ডিলিমিটার হিসেবে ব্যবহার করুন।
TCP/IP sending বন্ধ করতে, পোর্ট 49983-এ "iFacialMocap_UDPTCPSTOP_sahuasouryya9218sauhuiayeta91555dy3719" পাঠান।
・ TCP/IP দিয়ে receive করার Python ব্যবহার উদাহরণ
from socket import socket, AF_INET, SOCK_DGRAM, SOCK_STREAM
#UDP send
HOST = ''
PORT = 49983
ADDRESS = "192.168.1.7" #iOS address
s = socket(AF_INET, SOCK_DGRAM)
msg = "iFacialMocap_UDPTCP_sahuasouryya9218sauhuiayeta91555dy3719"
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'))
iOS ver.1.1.8 থেকে Facemotion 3d compatibility-এর জন্য external command যোগ করা হয়েছে।
যদি আপনি string "|sendDataVersion=v2" নিচের মতো যোগ করেন, পাঠানো BlendShape parameter-এর values "&" দিয়ে আলাদা হবে।
iFacialMocap_UDPTCP_sahuasouryya9218sauhuiayeta91555dy3719|sendDataVersion=v2
[উদাহরণ]
সাধারণ
mouthSmile_R-0
sendDataVersion = v2
mouthSmile_R & 0
কারণ Facemotion 3d blend shape value-তে negative value পাঠাতে পারে, এবং "-" delimiter collision ঘটাতে পারত।
Bluetooth দিয়ে ডেটা গ্রহণ
Wi‑Fi network connection যেমন UDP বা TCP/IP ব্যর্থ হলে বিকল্প হিসেবে Bluetooth communication ব্যবহার করতে পারেন। নিচের GitHub code দেখুন।
https://github.com/emoto-yasushi/iFacialMocap_Facemotion3d_Bluetooth
iOS-এ রেকর্ড করা ডেটা গ্রহণ
iOS side-এর port 49983-এ UDP দিয়ে "iFacialMocap_bakeRecordedAnimation_start" পাঠালে recorded data TCP/IP দিয়ে PC side-এর port 49987-এ পাঠানো হবে।
পাঠানো স্ট্রিংয়ের ফরম্যাট হলো [".....", ".....", "....."] ___iFacialMocap।
[".....", ".....", "....."] অংশটি JSON format এবং UDP ও TCP/IP-এ ব্যবহৃত একই strings store করে।
60 FPS-এ record করা data সবসময় store হয়। (iOS-এ processing 30 FPS-এ নেমে গেলেও recording 60 FPS-এ হয়।)
এটি iFacialMocap-এর মূল উদ্দেশ্য ছিল না, তবে তৃতীয় পক্ষের ডেভেলপাররা এটি স্বাধীনভাবে ব্যবহার করতে পারেন। ভবিষ্যতে উন্নয়ন ধীরে ধীরে উত্তরসূরি অ্যাপের দিকে যাবে, তবে iFacialMocap নিজে বন্ধ হবে না। এই ফিচার ব্যবহার করলে ভবিষ্যতের উত্তরসূরি অ্যাপে এর ব্যবহার পদ্ধতি বদলাতে পারে।
lookForward button চালানো
iOS port 49983-এ "iFacialMocap_lookForward" string পাঠান।
Unity-তে সরাসরি স্ট্রিমিং
নিচের স্ক্রিপ্টগুলো GameObject-এ সংযুক্ত করে ব্যবহার করা যায়।
এটি iFacialMocap ও Facemotion3d উভয়ের সঙ্গেই স্ট্রিম করতে পারে।
https://drive.google.com/file/d/10cnZRlglrHmZIv-ECT66eqNZNsiWhMtf/view?usp=sharing
নিচের image-এর মতো object name specify করলে এটি কাজ করে।

এটি VRM নয়, FBX ফাইলের জন্য তৈরি স্ক্রিপ্ট।
VRM-এ ব্যবহার করতে চাইলে নিজে তৈরি করুন বা আমাকে ইমেল করুন।