2017-04-13 4 views
0

목표 : Vuforia (webcam/phone 카메라)의 AR 카메라를 통해 보이는 실제 객체의 너비를 확인하고 싶습니다.이미지에서 객체의 Unity/C# 경계 상자


아이디어 :가 사진을 촬영 Vuforia로부터 AR 카메라를 사용하고, 그 화상으로부터 (예 찻잔 용) 오브젝트의 바운딩 박스를 발견; 테두리 상자의 너비를 가져옵니다 (너비 정보를 사용하여 3D 개체의 크기를 조정합니다).

예 :

image example1

image example2

내가 자산 저장소의 단결을 OpenCV가 있다는 것을 알고 있어요하지만 난 무료로 방법을 찾고 있어요. 제안 된 아이디어를 달성하는 방법이나 목표를 구현하는 방법에 대한 새로운 아이디어가 있다면 크게 환영 할 것입니다.

+0

당신이 달성하고자하는 것은 전화가 어떤 종류의 마커 (종이 일 수 있음)를 처음으로 인식 할 수있는 경우에만 가능합니다. 그러면 3D 환경을 실제 환경에 매핑 할 수 있습니다. 그렇지 않으면 객체의 실제 크기 (센티미터 단위)를 추측해야합니다. 이미지 크기가 10cm인지 여부를 모르기 때문에 크기를 알 수 없습니다. 물체로부터 1m. 개체에서. – Hristo

답변

0

(EDITED)

은 일부 검색 후, 나는 당신을 위해이 excelent 방법 here을 발견

public static Rect ObjectBounds(GameObject go) 
    { 
     Vector3 cen = go.GetComponent<Renderer>().bounds.center; 
     Vector3 ext = go.GetComponent<Renderer>().bounds.extents; 
     Vector2[] extentPoints = new Vector2[8] 
     { 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x-ext.x, cen.y-ext.y, cen.z-ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x+ext.x, cen.y-ext.y, cen.z-ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x-ext.x, cen.y-ext.y, cen.z+ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x+ext.x, cen.y-ext.y, cen.z+ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x-ext.x, cen.y+ext.y, cen.z-ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x+ext.x, cen.y+ext.y, cen.z-ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x-ext.x, cen.y+ext.y, cen.z+ext.z)), 
     HandleUtility.WorldToGUIPoint(new Vector3(cen.x+ext.x, cen.y+ext.y, cen.z+ext.z)) 
     }; 
     Vector2 min = extentPoints[0]; 
     Vector2 max = extentPoints[0]; 
     foreach (Vector2 v in extentPoints) 
     { 
      min = Vector2.Min(min, v); 
      max = Vector2.Max(max, v); 
     } 
     return new Rect(min.x, min.y, max.x - min.x, max.y - min.y); 
    } 

구형 영역에 메소드를 호출하고 화면에 그리기의 예 :

void OnGUI() //EditorGUI.DrawRect must be in this function name 
{ 
    //create a rect using the method and the GameObject this script is attached to (gameObject) 
    Rect boundsRect = new Rect(GUIRectWithObject(gameObject)); 
    //draw a blue rect on the box of the rect (will hide the object) 
    EditorGUI.DrawRect(boundsRect, Color.blue); 
} 

너는 직사각형의 너비를 얻으려면 :

float boundswidth = boundsRect.width; 
+0

죄송 합니다만, 내가 충분히 명확하지 않은 경우 개체가 웹캠/휴대 전화 카메라를 통해 보이는 실제 3D 개체입니다. 질문을 업데이트했습니다. – Nap

+0

@Nap now I understand ... 내가 제공 한 예제는 씬에 존재하는 실제 3D 오브젝트의 크기를 회전에 비례하여 얻지 만, 당신이 얻으려고하는 것은 다르기 때문에 병이 있는지 확인하십시오. –

+0

@Nap 당신이 필요로하는 것에 대한 나의 대답을 편집했는데,이 스크립트는 gameObject의 "보이는"박스의 사각형을 만들 것입니다 –