抬手动作+切换mediapipe模型
This commit is contained in:
parent
c5186f75b5
commit
66f0abbd26
|
@ -462,7 +462,6 @@ namespace OpenCVForUnityExample.DnnModel
|
|||
float[] landmarks_presence = new float[(39 - auxiliary_points_num)];
|
||||
results_col4_199_39x5.colRange(new OpenCVRange(4, 5)).get(0, 0, landmarks_presence);
|
||||
|
||||
|
||||
Mat results_col199_316_39x3 = results.rowRange(new OpenCVRange(199, 316 - (3 * auxiliary_points_num))).reshape(1, 39 - auxiliary_points_num);
|
||||
float[] landmarks_world = new float[(39 - auxiliary_points_num) * 3];
|
||||
results_col199_316_39x3.get(0, 0, landmarks_world);
|
||||
|
|
|
@ -1,5 +1,155 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &812840956832231530
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1958927731802958260}
|
||||
- component: {fileID: 2260945507531342483}
|
||||
- component: {fileID: 3436322692073427523}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1958927731802958260
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 812840956832231530}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2576201504434113081}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -100, y: -100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2260945507531342483
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 812840956832231530}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3436322692073427523
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 812840956832231530}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.49019608, g: 0.49019608, b: 0.49019608, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 9b4580a483f26ac4388ec72c4c479a83, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &4637189147528760871
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4138242365235796459}
|
||||
- component: {fileID: 7693179399692606510}
|
||||
- component: {fileID: 3913808783048664634}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4138242365235796459
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4637189147528760871}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7867255813535008431}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -100, y: -100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7693179399692606510
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4637189147528760871}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3913808783048664634
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4637189147528760871}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.49019608, g: 0.49019608, b: 0.49019608, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: c218c4357d09a2f4e94961d8b04540c6, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &4975108645149662689
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -87,6 +237,81 @@ CanvasGroup:
|
|||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1 &5012355027590094061
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8940443638627649355}
|
||||
- component: {fileID: 5822777235898107403}
|
||||
- component: {fileID: 5023932294307215150}
|
||||
m_Layer: 5
|
||||
m_Name: Mask
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &8940443638627649355
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5012355027590094061}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2576201504434113081}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5822777235898107403
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5012355027590094061}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5023932294307215150
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5012355027590094061}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: fc3cc6afdc9d6f645bad60ad7309189e, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &5611881615064894930
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -100,6 +325,7 @@ GameObject:
|
|||
- component: {fileID: 7069011303126796865}
|
||||
- component: {fileID: 4329244061302087914}
|
||||
- component: {fileID: 5061662039744333050}
|
||||
- component: {fileID: 25324508393644868}
|
||||
m_Layer: 5
|
||||
m_Name: Driver
|
||||
m_TagString: Untagged
|
||||
|
@ -120,12 +346,14 @@ RectTransform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1449208219289806508}
|
||||
- {fileID: 4138242365235796459}
|
||||
- {fileID: 173739580069041147}
|
||||
m_Father: {fileID: 1888392902869825718}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -450, y: 0}
|
||||
m_SizeDelta: {x: 700, y: 500}
|
||||
m_AnchoredPosition: {x: -300, y: 0}
|
||||
m_SizeDelta: {x: 256, y: 256}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2054363549373963548
|
||||
CanvasRenderer:
|
||||
|
@ -155,7 +383,7 @@ MonoBehaviour:
|
|||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: f3df4d9369dcdc840b85c95d3e1176f4, type: 3}
|
||||
m_Sprite: {fileID: 21300000, guid: 404ba9da9833aa0429c62a90c92f0e33, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
|
@ -231,6 +459,19 @@ Animator:
|
|||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!114 &25324508393644868
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5611881615064894930}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ShowMaskGraphic: 1
|
||||
--- !u!1 &6036208431044648634
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -289,7 +530,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Color: {r: 0.49019608, g: 0.49019608, b: 0.49019608, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
@ -310,6 +551,81 @@ MonoBehaviour:
|
|||
m_VerticalOverflow: 0
|
||||
m_LineSpacing: 1
|
||||
m_Text: Co-Driver
|
||||
--- !u!1 &8039057556249263921
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 173739580069041147}
|
||||
- component: {fileID: 3300850338272086747}
|
||||
- component: {fileID: 1636194949858596997}
|
||||
m_Layer: 5
|
||||
m_Name: Mask
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &173739580069041147
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8039057556249263921}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7867255813535008431}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3300850338272086747
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8039057556249263921}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1636194949858596997
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8039057556249263921}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: fc3cc6afdc9d6f645bad60ad7309189e, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8042575492156197460
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -344,8 +660,8 @@ RectTransform:
|
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0}
|
||||
m_AnchorMax: {x: 0.5, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 30}
|
||||
m_SizeDelta: {x: 160, y: 160}
|
||||
m_AnchoredPosition: {x: 0, y: 20}
|
||||
m_SizeDelta: {x: 160, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8391011484397638028
|
||||
CanvasRenderer:
|
||||
|
@ -368,7 +684,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Color: {r: 0.49019608, g: 0.49019608, b: 0.49019608, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
@ -488,12 +804,14 @@ RectTransform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6401048517044185304}
|
||||
- {fileID: 1958927731802958260}
|
||||
- {fileID: 8940443638627649355}
|
||||
m_Father: {fileID: 1888392902869825718}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 450, y: 0}
|
||||
m_SizeDelta: {x: 700, y: 500}
|
||||
m_AnchoredPosition: {x: 300, y: 0}
|
||||
m_SizeDelta: {x: 256, y: 256}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6645283475793646557
|
||||
CanvasRenderer:
|
||||
|
@ -523,7 +841,7 @@ MonoBehaviour:
|
|||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 4c832a36ea64b7b4da0fffa78a702860, type: 3}
|
||||
m_Sprite: {fileID: 21300000, guid: 404ba9da9833aa0429c62a90c92f0e33, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
|
@ -629,7 +947,6 @@ RectTransform:
|
|||
m_Children:
|
||||
- {fileID: 7867255813535008431}
|
||||
- {fileID: 2576201504434113081}
|
||||
- {fileID: 3633320821606894435}
|
||||
m_Father: {fileID: 5269051166812510682}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
|
@ -637,137 +954,3 @@ RectTransform:
|
|||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &9208700712057849365
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3633320821606894435}
|
||||
- component: {fileID: 6811689815506691815}
|
||||
- component: {fileID: 5648383841688649297}
|
||||
m_Layer: 5
|
||||
m_Name: label
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3633320821606894435
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9208700712057849365}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1888392902869825718}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 350}
|
||||
m_SizeDelta: {x: 450, y: 150}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6811689815506691815
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9208700712057849365}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5648383841688649297
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9208700712057849365}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Are you sitting at...
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4286085240
|
||||
m_fontColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 50
|
||||
m_fontSizeBase: 50
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
|
|
|
@ -100,7 +100,6 @@ public class CVEstimator : Singleton<CVEstimator>
|
|||
{
|
||||
DateTime startTime = DateTime.Now;
|
||||
Mat bgrMat = new Mat();
|
||||
|
||||
while (IsRunning)
|
||||
{
|
||||
Mat rgbaMat = MotionCaptureManager.Instance.RgbaMat;
|
||||
|
@ -112,15 +111,12 @@ public class CVEstimator : Singleton<CVEstimator>
|
|||
}
|
||||
Imgproc.cvtColor(rgbaMat, bgrMat, Imgproc.COLOR_RGBA2BGR);
|
||||
|
||||
if (!YogaManager.Instance.CurrentEstimator.TryGetROIRegionMat(rgbaMat, bgrMat, out List<float[]> voloResultBox))
|
||||
if (!YogaManager.Instance.CurrentEstimator.TryGetROIRegionMat(bgrMat, rgbaMat, out Mat result))
|
||||
{
|
||||
continue; //重新检测
|
||||
}
|
||||
|
||||
//更新人物框检测结果
|
||||
MotionCaptureManager.Instance.VoloResult = voloResultBox;
|
||||
|
||||
if (!YogaManager.Instance.CurrentEstimator.Esitmate(bgrMat, voloResultBox, out List<Point> points))
|
||||
if (!YogaManager.Instance.CurrentEstimator.Esitmate(bgrMat, rgbaMat, result, out List<Point> points))
|
||||
{
|
||||
Debug.LogWarning("Pose estimation failed. Re-Estimating.");
|
||||
continue; //重新检测
|
||||
|
|
|
@ -37,9 +37,9 @@ public abstract class Estimator
|
|||
public abstract void DisposeModel();
|
||||
|
||||
//检测到的人体框 默认使用VOLO7
|
||||
public virtual bool TryGetROIRegionMat(Mat rgbaMat, Mat bgrMat, out List<float[]> voloResult)
|
||||
public virtual bool TryGetROIRegionMat(Mat bgrMat, Mat rgbaMat, out Mat result)
|
||||
{
|
||||
voloResult = null;
|
||||
result = null;
|
||||
if (_objectDetector == null)
|
||||
{
|
||||
Debug.LogWarning("ObjectDetector is not ready. ");
|
||||
|
@ -47,37 +47,8 @@ public abstract class Estimator
|
|||
}
|
||||
|
||||
//获取数据
|
||||
Mat results = _objectDetector.infer(bgrMat);
|
||||
var voloResultBox = new List<float[]>();
|
||||
bool hasValidObject = false;
|
||||
for (int i = results.rows() - 1; i >= 0; --i)
|
||||
{
|
||||
float[] box = new float[4];
|
||||
results.get(i, 0, box); //方框
|
||||
float[] conf = new float[1];
|
||||
results.get(i, 4, conf); //检测数据
|
||||
float[] cls = new float[1];
|
||||
results.get(i, 5, cls); //类别
|
||||
result = _objectDetector.infer(bgrMat);
|
||||
|
||||
if (!IsObjectValid(box, conf, cls, rgbaMat))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
hasValidObject = true;
|
||||
voloResultBox.Clear();
|
||||
voloResultBox.Add(box);
|
||||
voloResultBox.Add(conf);
|
||||
voloResultBox.Add(cls);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!hasValidObject) //没有检测到人体
|
||||
{
|
||||
Debug.Log("No person block found. Re-Estimation.");
|
||||
return false; //重新检测
|
||||
}
|
||||
|
||||
voloResult = voloResultBox;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -128,7 +99,7 @@ public abstract class Estimator
|
|||
Imgproc.putText(image, label, new Point(left, top), Imgproc.FONT_HERSHEY_SIMPLEX, 0.5, Scalar.all(255), 1, Imgproc.LINE_AA);
|
||||
}
|
||||
|
||||
public abstract bool Esitmate(Mat bgrMat, List<float[]> voloResultBox, out List<Point> points);
|
||||
public abstract bool Esitmate(Mat bgrMat, Mat rgbaMat, Mat result, out List<Point> points);
|
||||
|
||||
public virtual void Check(ref Mat img) { }
|
||||
}
|
||||
|
|
|
@ -1,21 +1,148 @@
|
|||
using OpenCVForUnity.CoreModule;
|
||||
using OpenCVForUnity.ImgprocModule;
|
||||
using OpenCVForUnity.UnityUtils;
|
||||
using OpenCVForUnityExample.DnnModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Experimental.GlobalIllumination;
|
||||
using static UnityEngine.Networking.UnityWebRequest;
|
||||
using OpenCVRange = OpenCVForUnity.CoreModule.Range;
|
||||
|
||||
public class MediaPipeEstimator : Estimator
|
||||
{
|
||||
private MediaPipePersonDetector _personDetector;
|
||||
private MediaPipePoseEstimator _poseEstimator;
|
||||
private bool _mask = false;
|
||||
public override void InitModel()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var personDetectModelPath = Utils.getFilePath(YogaConfig.MODEL_PATHS[ModelType.MediapipePersonDetect]);
|
||||
if (string.IsNullOrEmpty(personDetectModelPath))
|
||||
{
|
||||
Debug.LogError(YogaConfig.MODEL_PATHS[ModelType.MediapipePersonDetect] + " is not loaded. Please read “StreamingAssets/OpenCVForUnity/dnn/setup_dnn_module.pdf” to make the necessary setup.");
|
||||
}
|
||||
else
|
||||
{
|
||||
_personDetector = new MediaPipePersonDetector(personDetectModelPath, 0.3f, 0.6f, 5000);
|
||||
}
|
||||
|
||||
var poseModelPath = Utils.getFilePath(YogaConfig.MODEL_PATHS[ModelType.MediapipePose]);
|
||||
if (string.IsNullOrEmpty(poseModelPath))
|
||||
{
|
||||
Debug.LogError(YogaConfig.MODEL_PATHS[ModelType.MediapipePose] + " is not loaded. Please read “StreamingAssets/OpenCVForUnity/dnn/setup_dnn_module.pdf” to make the necessary setup.");
|
||||
}
|
||||
else
|
||||
{
|
||||
_poseEstimator = new MediaPipePoseEstimator(poseModelPath, 0.9f);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Esitmate(Mat bgrMat, List<float[]> voloResultBox, out List<Point> points)
|
||||
public override void Check(ref Mat img)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
if (_personDetector == null || _poseEstimator == null)
|
||||
{
|
||||
Imgproc.putText(img, "model file is not loaded.", new Point(5, img.rows() - 30), Imgproc.FONT_HERSHEY_SIMPLEX, 0.7, new Scalar(255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
|
||||
Imgproc.putText(img, "Please read console message.", new Point(5, img.rows() - 10), Imgproc.FONT_HERSHEY_SIMPLEX, 0.7, new Scalar(255, 255, 255, 255), 2, Imgproc.LINE_AA, false);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool TryGetROIRegionMat(Mat bgrMat, Mat rgbaMat, out Mat result)
|
||||
{
|
||||
result = _personDetector.infer(bgrMat);
|
||||
|
||||
if (result.rows() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool Esitmate(Mat bgrMat, Mat rgbaMat, Mat result, out List<Point> points)
|
||||
{
|
||||
points = null;
|
||||
for (int i = 0; i < result.rows(); ++i)
|
||||
{
|
||||
List<Mat> results = _poseEstimator.infer(bgrMat, result.row(i));
|
||||
|
||||
//_poseEstimator.visualize(rgbaMat, results[0], false, false);
|
||||
|
||||
points = GetKeypoints(results[0]);
|
||||
if (points != null && YogaManager.Instance.ActionCheckPoints(points))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//没有检测到人体
|
||||
return false;
|
||||
}
|
||||
|
||||
private List<Point> GetKeypoints(Mat result)
|
||||
{
|
||||
var retVal = new List<Point>();
|
||||
if (result.empty() || result.rows() < 317)
|
||||
return retVal;
|
||||
|
||||
//获取关键点
|
||||
float[] conf = new float[1];
|
||||
result.get(316, 0, conf);
|
||||
float[] bbox = new float[4];
|
||||
result.get(0, 0, bbox);
|
||||
|
||||
int auxiliary_points_num = 6;
|
||||
Mat results_col4_199_39x5 = result.rowRange(new OpenCVRange(4, 199 - (5 * auxiliary_points_num))).reshape(1, 39 - auxiliary_points_num);
|
||||
float[] landmarks_screen_xy = new float[(39 - auxiliary_points_num) * 2];
|
||||
results_col4_199_39x5.colRange(new OpenCVRange(0, 2)).get(0, 0, landmarks_screen_xy);
|
||||
|
||||
float[] landmarks_screen_xyz = new float[(39 - auxiliary_points_num) * 3];
|
||||
results_col4_199_39x5.colRange(new OpenCVRange(0, 3)).get(0, 0, landmarks_screen_xyz);
|
||||
|
||||
// # only show visible keypoints which presence bigger than 0.8
|
||||
float[] landmarks_presence = new float[(39 - auxiliary_points_num)];
|
||||
results_col4_199_39x5.colRange(new OpenCVRange(4, 5)).get(0, 0, landmarks_presence);
|
||||
|
||||
|
||||
Mat results_col199_316_39x3 = result.rowRange(new OpenCVRange(199, 316 - (3 * auxiliary_points_num))).reshape(1, 39 - auxiliary_points_num);
|
||||
float[] landmarks_world = new float[(39 - auxiliary_points_num) * 3];
|
||||
results_col199_316_39x3.get(0, 0, landmarks_world);
|
||||
|
||||
|
||||
|
||||
//将关键点映射到现有的open pose关键点上
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 0)); //Nose
|
||||
retVal.Add(new Point(-1, -1)); //Neck
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 11)); //LShoulder
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 13)); //LElbow
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 15)); //LWrist
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 12)); //RShoulder
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 14)); //RElbow
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 16)); //RWrist
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 23)); //LHip
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 25)); //LKnee
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 27)); //LAnkle
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 24)); //RHip
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 26)); //RKnee
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 28)); //RAnkle
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 2)); //LEye
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 5)); //REye
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 7)); //LEar
|
||||
retVal.Add(GetPointData(landmarks_screen_xy, landmarks_presence, 8)); //REar
|
||||
retVal.Add(new Point(-1, -1)); //Background
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
private Point GetPointData(float[] landmarks, float[] _landmarks_presence, int index)
|
||||
{
|
||||
if (_landmarks_presence[index] < 0.8f)
|
||||
return null;
|
||||
|
||||
index = index * 2;
|
||||
return new Point(landmarks[index], landmarks[index + 1]);
|
||||
}
|
||||
|
||||
public override void DisposeModel()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
}
|
||||
}
|
|
@ -6,10 +6,11 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Yoga;
|
||||
using static UnityEngine.Networking.UnityWebRequest;
|
||||
|
||||
public class OpenPoseEsimater : Estimator
|
||||
{
|
||||
KeypointsModel _openPoseModel;
|
||||
KeypointsModel _openPoseModel;
|
||||
private Net _net;
|
||||
|
||||
private double threshold = 0.5;
|
||||
|
@ -39,8 +40,42 @@ public class OpenPoseEsimater : Estimator
|
|||
_net.Dispose();
|
||||
}
|
||||
|
||||
public override bool Esitmate(Mat bgrMat, List<float[]> voloResultBox, out List<Point> points)
|
||||
public override bool Esitmate(Mat bgrMat, Mat rgbaMat, Mat results, out List<Point> points)
|
||||
{
|
||||
var voloResultBox = new List<float[]>();
|
||||
points = null;
|
||||
bool hasValidObject = false;
|
||||
|
||||
for (int i = results.rows() - 1; i >= 0; --i)
|
||||
{
|
||||
float[] box = new float[4];
|
||||
results.get(i, 0, box); //方框
|
||||
float[] conf = new float[1];
|
||||
results.get(i, 4, conf); //检测数据
|
||||
float[] cls = new float[1];
|
||||
results.get(i, 5, cls); //类别
|
||||
|
||||
if (!IsObjectValid(box, conf, cls, rgbaMat))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
hasValidObject = true;
|
||||
voloResultBox.Clear();
|
||||
voloResultBox.Add(box);
|
||||
voloResultBox.Add(conf);
|
||||
voloResultBox.Add(cls);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!hasValidObject) //没有检测到人体
|
||||
{
|
||||
Debug.Log("No person block found. Re-Estimation.");
|
||||
return false; //重新检测
|
||||
}
|
||||
|
||||
//更新人物框检测结果
|
||||
MotionCaptureManager.Instance.VoloResult = voloResultBox;
|
||||
|
||||
points = null;
|
||||
|
||||
if (_openPoseModel == null)
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
using OpenCVForUnity.CoreModule;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class HandsUp : PoseBase
|
||||
{
|
||||
public override bool CheckPose(List<Point> points)
|
||||
{
|
||||
// 必须包含 Neck 和 LEar 和 Neck 的点位
|
||||
// 必须包含 "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" 点位
|
||||
if (!YogaManager.Instance.ActionCheckPoints(points))
|
||||
return false;
|
||||
|
||||
|
@ -13,6 +15,21 @@ public class HandsUp : PoseBase
|
|||
if (!YogaManager.Instance.ActionCheckPoints(basePoint))
|
||||
return false;
|
||||
|
||||
return false;
|
||||
|
||||
var rArmVector = ("RElbow".vector(points) - "RShoulder".vector(points)).normalized;
|
||||
var lArmVector = ("LElbow".vector(points) - "LShoulder".vector(points)).normalized;
|
||||
|
||||
var rArmBaseVector = ("RElbow".vector(basePoint) - "RShoulder".vector(basePoint)).normalized;
|
||||
var lArmBaseVector = ("LElbow".vector(basePoint) - "LShoulder".vector(basePoint)).normalized;
|
||||
|
||||
var angleR = Vector3.Angle(rArmVector, rArmBaseVector);
|
||||
var angleL = Vector3.Angle(lArmVector, lArmBaseVector);
|
||||
|
||||
Debug.LogWarning("angleR:" + angleR + " angleL:" + angleL);
|
||||
|
||||
if (angleR < 10 || angleL < 10)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -61,10 +61,16 @@ namespace Yoga
|
|||
base.Init();
|
||||
|
||||
_webCamTextureToMatHelper = gameObject.GetComponent<WebCamTextureToMatHelper>();
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
// Avoids the front camera low light issue that occurs in only some Android devices (e.g. Google Pixel, Pixel2).
|
||||
webCamTextureToMatHelper.avoidAndroidFrontCameraLowLightIssue = true;
|
||||
#endif
|
||||
|
||||
_webCamTextureToMatHelper.Initialize();
|
||||
|
||||
UIManager.Instance.LoadReset();
|
||||
|
||||
|
||||
if (YogaManager.Instance.Action == null)
|
||||
YogaManager.Instance.InitData();
|
||||
|
||||
|
@ -78,7 +84,7 @@ namespace Yoga
|
|||
case ModelType.OpenPose:
|
||||
YogaManager.Instance.CurrentEstimator = new OpenPoseEsimater();
|
||||
break;
|
||||
case ModelType.Mediapipe:
|
||||
case ModelType.MediapipePose:
|
||||
YogaManager.Instance.CurrentEstimator = new MediaPipeEstimator();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -57,6 +57,8 @@ public static class YogaConfig
|
|||
public static readonly Dictionary<ModelType, string> MODEL_PATHS = new Dictionary<ModelType, string>()
|
||||
{
|
||||
{ModelType.OpenPose,"OpenCVForUnity/dnn/lightweight_pose_estimation_201912.onnx" },
|
||||
{ModelType.MediapipePersonDetect,"OpenCVForUnity/dnn/person_detection_mediapipe_2023mar.onnx" },
|
||||
{ModelType.MediapipePose,"OpenCVForUnity/dnn/pose_estimation_mediapipe_2023mar.onnx" },
|
||||
//{"","" },
|
||||
};
|
||||
|
||||
|
|
|
@ -13,12 +13,12 @@ public class YogaDataLoader
|
|||
#if UNITY_EDITOR
|
||||
data[-1] = new YogaData()
|
||||
{
|
||||
VideoPath = "Video/Action2",
|
||||
Action = AvatarAction.Nod,
|
||||
ModelType = ModelType.OpenPose,
|
||||
VideoPath = "Video/Action3",
|
||||
Action = AvatarAction.HandsUp,
|
||||
ModelType = ModelType.MediapipePose,
|
||||
MaxActionCount = 1000,
|
||||
TotalSeconds = 20.0f,
|
||||
MustPoints = new List<string>() { "Nose", "REye", "LEye", "Neck" },
|
||||
MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" },
|
||||
//AnyPoints = new List<string>() { "RWrist", "LWrist" }
|
||||
};
|
||||
#endif
|
||||
|
@ -44,10 +44,10 @@ public class YogaDataLoader
|
|||
{
|
||||
VideoPath = "Video/Action3",
|
||||
Action = AvatarAction.HandsUp,
|
||||
ModelType = ModelType.OpenPose,
|
||||
ModelType = ModelType.MediapipePose,
|
||||
MaxActionCount = 4,
|
||||
TotalSeconds = 12.66f,
|
||||
MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RightWrist" }
|
||||
MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" }
|
||||
};
|
||||
|
||||
if (data.ContainsKey(index))
|
||||
|
@ -76,6 +76,7 @@ public enum ModelType
|
|||
{
|
||||
OpenPose,
|
||||
YoloV7,
|
||||
Mediapipe,
|
||||
MediapipePose,
|
||||
MediapipePersonDetect,
|
||||
//,
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 8.3 KiB |
|
@ -0,0 +1,124 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c218c4357d09a2f4e94961d8b04540c6
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
|
@ -0,0 +1,124 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9b4580a483f26ac4388ec72c4c479a83
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Reference in New Issue