Unity와 RealSense를 통한 얼굴과 손 인식
그래도 머리와 손만 움직이는 모형에 쓸 수 있다.
Qiita에 동영상을 직접 붙이는 것은 어렵다.원본 파일을 깨끗이 정리했기 때문에 총결하였다pic.twitter.com/uR5f9JCSsI-금엽규(위)(@Hv2RMjzDyqXVIr)2017년 5월 28일
Version
Unity:5.6.1f1 Personal
RealSenseSDK:2016 R3
Device:SR300
가동 방법
빈 장면을 만들고 다음 코드를 카메라에 복사해서 만든 스크립트를 첨부합니다.
머리와 좌우 손 모두 가능하기 때문에 대상자를 선택할 수 있다.(머릿속에 방향을 똑똑히 보는 것이 좋다.)
주의
대칭복사 동작을 수행하려면 Update()로 좌우로 바꿉니다.
using UnityEngine;
using Intel.RealSense;
using Intel.RealSense.Face;
using Intel.RealSense.Hand;
public class RSHand : MonoBehaviour
{
public GameObject HeadObj;
public GameObject HandObjR;
public GameObject HandObjL;
SenseManager SenseM;
FaceModule FaceM;
HandModule HandM;
FaceData FaceD;
HandData HandD;
Vector3 HeadRot = new Vector3();
Vector3 HandPosL = new Vector3();
Vector3 HandPosR = new Vector3();
void Start()
{
SenseM = SenseManager.CreateInstance();
HandM = HandModule.Activate(SenseM);
HandM.FrameProcessed += Hand_FrameProcessed;
HandD = HandM.CreateOutput();
FaceM = FaceModule.Activate(SenseM);
FaceM.FrameProcessed += Face_FrameProcessed;
FaceD = FaceM.CreateOutput();
SenseM.Init();
SenseM.StreamFrames(false);
}
private void Hand_FrameProcessed(object sender, FrameProcessedEventArgs args)
{
HandD.Update();
IHand[] hand;
if (HandD.QueryHandData(AccessOrderType.ACCESS_ORDER_BY_ID, out hand) == Status.STATUS_NO_ERROR)
{
foreach (IHand h in hand)
{
if (h.BodySide == BodySideType.BODY_SIDE_LEFT)
{
HandPosL.x = h.MassCenterWorld.x * -1;
HandPosL.y = h.MassCenterWorld.y;
HandPosL.z = h.MassCenterWorld.z;
print("### L ###" + HandPosL.x + " | " + HandPosL.y + " | " + HandPosL.z);
}
if (h.BodySide == BodySideType.BODY_SIDE_RIGHT)
{
HandPosR.x = h.MassCenterWorld.x * -1;
HandPosR.y = h.MassCenterWorld.y;
HandPosR.z = h.MassCenterWorld.z;
print("### R ###" + HandPosR.x + " | " + HandPosR.y + " | " + HandPosR.z);
}
}
}
}
private void Face_FrameProcessed(object sender, FrameProcessedEventArgs args)
{
FaceD.Update();
var face = FaceD.QueryFaceByIndex(0);
if (face != null)
{
HeadRot.x = face.Pose.Angles.pitch;
HeadRot.y = face.Pose.Angles.yaw * -1;
HeadRot.z = face.Pose.Angles.roll;
print("### F ### " + HeadRot.x + " | " + HeadRot.y + " | " + HeadRot.z);
}
}
void Update()
{
HeadObj.transform.eulerAngles = HeadRot;
HandObjL.transform.position = HandPosR;
HandObjR.transform.position = HandPosL;
}
void OnDestroy()
{
FaceM.FrameProcessed -= Face_FrameProcessed;
HandM.FrameProcessed -= Hand_FrameProcessed;
FaceD.Dispose();
HandD.Dispose();
SenseM.Dispose();
}
}
참고 자료http://www.buildinsider.net/small/bookrealsense/0801
http://tips.hecomi.com/entry/2015/02/25/030422
http://qiita.com/akihiro01051/items/3146b9a377bf360f58f5
https://software.intel.com/sites/landingpage/realsense/camera-sdk/v2016r3/documentation/html/index.html?doc_devguide_introduction.html
영어 못 읽는 사람이 마지막 책을 읽을 때.
Chrome로 주소 표시줄에서 번역 아이콘을 열어 원문과 여러 번 왕복하면 어쨌든 추천을 읽을 수 있습니다.
Reference
이 문제에 관하여(Unity와 RealSense를 통한 얼굴과 손 인식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nise_aoi/items/bfc635b95a99e77a2c25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)