抬手动作+切换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)];
|
float[] landmarks_presence = new float[(39 - auxiliary_points_num)];
|
||||||
results_col4_199_39x5.colRange(new OpenCVRange(4, 5)).get(0, 0, landmarks_presence);
|
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);
|
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];
|
float[] landmarks_world = new float[(39 - auxiliary_points_num) * 3];
|
||||||
results_col199_316_39x3.get(0, 0, landmarks_world);
|
results_col199_316_39x3.get(0, 0, landmarks_world);
|
||||||
|
|
|
@ -1,5 +1,155 @@
|
||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%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
|
--- !u!1 &4975108645149662689
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -87,6 +237,81 @@ CanvasGroup:
|
||||||
m_Interactable: 1
|
m_Interactable: 1
|
||||||
m_BlocksRaycasts: 1
|
m_BlocksRaycasts: 1
|
||||||
m_IgnoreParentGroups: 0
|
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
|
--- !u!1 &5611881615064894930
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -100,6 +325,7 @@ GameObject:
|
||||||
- component: {fileID: 7069011303126796865}
|
- component: {fileID: 7069011303126796865}
|
||||||
- component: {fileID: 4329244061302087914}
|
- component: {fileID: 4329244061302087914}
|
||||||
- component: {fileID: 5061662039744333050}
|
- component: {fileID: 5061662039744333050}
|
||||||
|
- component: {fileID: 25324508393644868}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Driver
|
m_Name: Driver
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
@ -120,12 +346,14 @@ RectTransform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 1449208219289806508}
|
- {fileID: 1449208219289806508}
|
||||||
|
- {fileID: 4138242365235796459}
|
||||||
|
- {fileID: 173739580069041147}
|
||||||
m_Father: {fileID: 1888392902869825718}
|
m_Father: {fileID: 1888392902869825718}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: -450, y: 0}
|
m_AnchoredPosition: {x: -300, y: 0}
|
||||||
m_SizeDelta: {x: 700, y: 500}
|
m_SizeDelta: {x: 256, y: 256}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &2054363549373963548
|
--- !u!222 &2054363549373963548
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
|
@ -155,7 +383,7 @@ MonoBehaviour:
|
||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 21300000, guid: f3df4d9369dcdc840b85c95d3e1176f4, type: 3}
|
m_Sprite: {fileID: 21300000, guid: 404ba9da9833aa0429c62a90c92f0e33, type: 3}
|
||||||
m_Type: 0
|
m_Type: 0
|
||||||
m_PreserveAspect: 0
|
m_PreserveAspect: 0
|
||||||
m_FillCenter: 1
|
m_FillCenter: 1
|
||||||
|
@ -231,6 +459,19 @@ Animator:
|
||||||
m_AllowConstantClipSamplingOptimization: 1
|
m_AllowConstantClipSamplingOptimization: 1
|
||||||
m_KeepAnimatorStateOnDisable: 0
|
m_KeepAnimatorStateOnDisable: 0
|
||||||
m_WriteDefaultValuesOnDisable: 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
|
--- !u!1 &6036208431044648634
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -289,7 +530,7 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
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_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_Maskable: 1
|
m_Maskable: 1
|
||||||
|
@ -310,6 +551,81 @@ MonoBehaviour:
|
||||||
m_VerticalOverflow: 0
|
m_VerticalOverflow: 0
|
||||||
m_LineSpacing: 1
|
m_LineSpacing: 1
|
||||||
m_Text: Co-Driver
|
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
|
--- !u!1 &8042575492156197460
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -344,8 +660,8 @@ RectTransform:
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0}
|
m_AnchorMin: {x: 0.5, y: 0}
|
||||||
m_AnchorMax: {x: 0.5, y: 0}
|
m_AnchorMax: {x: 0.5, y: 0}
|
||||||
m_AnchoredPosition: {x: 0, y: 30}
|
m_AnchoredPosition: {x: 0, y: 20}
|
||||||
m_SizeDelta: {x: 160, y: 160}
|
m_SizeDelta: {x: 160, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &8391011484397638028
|
--- !u!222 &8391011484397638028
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
|
@ -368,7 +684,7 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
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_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_Maskable: 1
|
m_Maskable: 1
|
||||||
|
@ -488,12 +804,14 @@ RectTransform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 6401048517044185304}
|
- {fileID: 6401048517044185304}
|
||||||
|
- {fileID: 1958927731802958260}
|
||||||
|
- {fileID: 8940443638627649355}
|
||||||
m_Father: {fileID: 1888392902869825718}
|
m_Father: {fileID: 1888392902869825718}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 450, y: 0}
|
m_AnchoredPosition: {x: 300, y: 0}
|
||||||
m_SizeDelta: {x: 700, y: 500}
|
m_SizeDelta: {x: 256, y: 256}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &6645283475793646557
|
--- !u!222 &6645283475793646557
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
|
@ -523,7 +841,7 @@ MonoBehaviour:
|
||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 21300000, guid: 4c832a36ea64b7b4da0fffa78a702860, type: 3}
|
m_Sprite: {fileID: 21300000, guid: 404ba9da9833aa0429c62a90c92f0e33, type: 3}
|
||||||
m_Type: 0
|
m_Type: 0
|
||||||
m_PreserveAspect: 0
|
m_PreserveAspect: 0
|
||||||
m_FillCenter: 1
|
m_FillCenter: 1
|
||||||
|
@ -629,7 +947,6 @@ RectTransform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 7867255813535008431}
|
- {fileID: 7867255813535008431}
|
||||||
- {fileID: 2576201504434113081}
|
- {fileID: 2576201504434113081}
|
||||||
- {fileID: 3633320821606894435}
|
|
||||||
m_Father: {fileID: 5269051166812510682}
|
m_Father: {fileID: 5269051166812510682}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
@ -637,137 +954,3 @@ RectTransform:
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: 0, y: 0}
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
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;
|
DateTime startTime = DateTime.Now;
|
||||||
Mat bgrMat = new Mat();
|
Mat bgrMat = new Mat();
|
||||||
|
|
||||||
while (IsRunning)
|
while (IsRunning)
|
||||||
{
|
{
|
||||||
Mat rgbaMat = MotionCaptureManager.Instance.RgbaMat;
|
Mat rgbaMat = MotionCaptureManager.Instance.RgbaMat;
|
||||||
|
@ -112,15 +111,12 @@ public class CVEstimator : Singleton<CVEstimator>
|
||||||
}
|
}
|
||||||
Imgproc.cvtColor(rgbaMat, bgrMat, Imgproc.COLOR_RGBA2BGR);
|
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; //重新检测
|
continue; //重新检测
|
||||||
}
|
}
|
||||||
|
|
||||||
//更新人物框检测结果
|
if (!YogaManager.Instance.CurrentEstimator.Esitmate(bgrMat, rgbaMat, result, out List<Point> points))
|
||||||
MotionCaptureManager.Instance.VoloResult = voloResultBox;
|
|
||||||
|
|
||||||
if (!YogaManager.Instance.CurrentEstimator.Esitmate(bgrMat, voloResultBox, out List<Point> points))
|
|
||||||
{
|
{
|
||||||
Debug.LogWarning("Pose estimation failed. Re-Estimating.");
|
Debug.LogWarning("Pose estimation failed. Re-Estimating.");
|
||||||
continue; //重新检测
|
continue; //重新检测
|
||||||
|
|
|
@ -37,9 +37,9 @@ public abstract class Estimator
|
||||||
public abstract void DisposeModel();
|
public abstract void DisposeModel();
|
||||||
|
|
||||||
//检测到的人体框 默认使用VOLO7
|
//检测到的人体框 默认使用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)
|
if (_objectDetector == null)
|
||||||
{
|
{
|
||||||
Debug.LogWarning("ObjectDetector is not ready. ");
|
Debug.LogWarning("ObjectDetector is not ready. ");
|
||||||
|
@ -47,37 +47,8 @@ public abstract class Estimator
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取数据
|
//获取数据
|
||||||
Mat results = _objectDetector.infer(bgrMat);
|
result = _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); //类别
|
|
||||||
|
|
||||||
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;
|
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);
|
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) { }
|
public virtual void Check(ref Mat img) { }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,148 @@
|
||||||
using OpenCVForUnity.CoreModule;
|
using OpenCVForUnity.CoreModule;
|
||||||
|
using OpenCVForUnity.ImgprocModule;
|
||||||
|
using OpenCVForUnity.UnityUtils;
|
||||||
|
using OpenCVForUnityExample.DnnModel;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Experimental.GlobalIllumination;
|
||||||
|
using static UnityEngine.Networking.UnityWebRequest;
|
||||||
|
using OpenCVRange = OpenCVForUnity.CoreModule.Range;
|
||||||
|
|
||||||
public class MediaPipeEstimator : Estimator
|
public class MediaPipeEstimator : Estimator
|
||||||
{
|
{
|
||||||
|
private MediaPipePersonDetector _personDetector;
|
||||||
|
private MediaPipePoseEstimator _poseEstimator;
|
||||||
|
private bool _mask = false;
|
||||||
public override void InitModel()
|
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()
|
public override void DisposeModel()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Yoga;
|
using Yoga;
|
||||||
|
using static UnityEngine.Networking.UnityWebRequest;
|
||||||
|
|
||||||
public class OpenPoseEsimater : Estimator
|
public class OpenPoseEsimater : Estimator
|
||||||
{
|
{
|
||||||
|
@ -39,8 +40,42 @@ public class OpenPoseEsimater : Estimator
|
||||||
_net.Dispose();
|
_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;
|
points = null;
|
||||||
|
|
||||||
if (_openPoseModel == null)
|
if (_openPoseModel == null)
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
using OpenCVForUnity.CoreModule;
|
using OpenCVForUnity.CoreModule;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
public class HandsUp : PoseBase
|
public class HandsUp : PoseBase
|
||||||
{
|
{
|
||||||
public override bool CheckPose(List<Point> points)
|
public override bool CheckPose(List<Point> points)
|
||||||
{
|
{
|
||||||
// 必须包含 Neck 和 LEar 和 Neck 的点位
|
// 必须包含 "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" 点位
|
||||||
if (!YogaManager.Instance.ActionCheckPoints(points))
|
if (!YogaManager.Instance.ActionCheckPoints(points))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -13,6 +15,21 @@ public class HandsUp : PoseBase
|
||||||
if (!YogaManager.Instance.ActionCheckPoints(basePoint))
|
if (!YogaManager.Instance.ActionCheckPoints(basePoint))
|
||||||
return false;
|
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,6 +61,12 @@ namespace Yoga
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|
||||||
_webCamTextureToMatHelper = gameObject.GetComponent<WebCamTextureToMatHelper>();
|
_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();
|
_webCamTextureToMatHelper.Initialize();
|
||||||
|
|
||||||
UIManager.Instance.LoadReset();
|
UIManager.Instance.LoadReset();
|
||||||
|
@ -78,7 +84,7 @@ namespace Yoga
|
||||||
case ModelType.OpenPose:
|
case ModelType.OpenPose:
|
||||||
YogaManager.Instance.CurrentEstimator = new OpenPoseEsimater();
|
YogaManager.Instance.CurrentEstimator = new OpenPoseEsimater();
|
||||||
break;
|
break;
|
||||||
case ModelType.Mediapipe:
|
case ModelType.MediapipePose:
|
||||||
YogaManager.Instance.CurrentEstimator = new MediaPipeEstimator();
|
YogaManager.Instance.CurrentEstimator = new MediaPipeEstimator();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ public static class YogaConfig
|
||||||
public static readonly Dictionary<ModelType, string> MODEL_PATHS = new Dictionary<ModelType, string>()
|
public static readonly Dictionary<ModelType, string> MODEL_PATHS = new Dictionary<ModelType, string>()
|
||||||
{
|
{
|
||||||
{ModelType.OpenPose,"OpenCVForUnity/dnn/lightweight_pose_estimation_201912.onnx" },
|
{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
|
#if UNITY_EDITOR
|
||||||
data[-1] = new YogaData()
|
data[-1] = new YogaData()
|
||||||
{
|
{
|
||||||
VideoPath = "Video/Action2",
|
VideoPath = "Video/Action3",
|
||||||
Action = AvatarAction.Nod,
|
Action = AvatarAction.HandsUp,
|
||||||
ModelType = ModelType.OpenPose,
|
ModelType = ModelType.MediapipePose,
|
||||||
MaxActionCount = 1000,
|
MaxActionCount = 1000,
|
||||||
TotalSeconds = 20.0f,
|
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" }
|
//AnyPoints = new List<string>() { "RWrist", "LWrist" }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,10 +44,10 @@ public class YogaDataLoader
|
||||||
{
|
{
|
||||||
VideoPath = "Video/Action3",
|
VideoPath = "Video/Action3",
|
||||||
Action = AvatarAction.HandsUp,
|
Action = AvatarAction.HandsUp,
|
||||||
ModelType = ModelType.OpenPose,
|
ModelType = ModelType.MediapipePose,
|
||||||
MaxActionCount = 4,
|
MaxActionCount = 4,
|
||||||
TotalSeconds = 12.66f,
|
TotalSeconds = 12.66f,
|
||||||
MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RightWrist" }
|
MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" }
|
||||||
};
|
};
|
||||||
|
|
||||||
if (data.ContainsKey(index))
|
if (data.ContainsKey(index))
|
||||||
|
@ -76,6 +76,7 @@ public enum ModelType
|
||||||
{
|
{
|
||||||
OpenPose,
|
OpenPose,
|
||||||
YoloV7,
|
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