From a16d74c0a170f3bf271df7a09a7b63f46a55a5f1 Mon Sep 17 00:00:00 2001 From: Junrou Nishida Date: Wed, 15 Dec 2021 20:21:54 +0900 Subject: [PATCH] feat(deps): MediaPipe v0.8.9 (#376) * build(deps): MediaPipe 0.8.9 * feat(sample): support MODEL_COMPLEXITY for HandTracking * feat(sample): switch MODEL_COMPLEXITY at runtime * feat(sample): output hand world landmarks * build: fix bazel version * build: upgrade Google.Protobuf (3.19.1) * set SidePacket * zip path has changed * doc: update README --- .bazelversion | 1 + .../Hand Tracking Config Window.prefab | 1657 +++++++++++++++-- .../Hand Tracking/HandTrackingConfig.cs | 28 + .../Scenes/Hand Tracking/HandTrackingGraph.cs | 59 +- .../Hand Tracking/HandTrackingSolution.cs | 13 + .../Scenes/Hand Tracking/HandTrackingValue.cs | 5 +- .../Hand Tracking/hand_tracking_cpu.txt | 6 + .../Hand Tracking/hand_tracking_gpu.txt | 6 + .../Hand Tracking/hand_tracking_opengles.txt | 6 + .../Scenes/Holistic/HolisticTrackingGraph.cs | 4 +- .../MediaPipe Video/MediaPipeVideoGraph.cs | 4 +- ...tes.meta => hand_landmark_full.bytes.meta} | 2 +- ...tes.meta => hand_landmark_lite.bytes.meta} | 2 +- .../Resources/palm_detection_full.bytes.meta | 7 + .../Resources/palm_detection_lite.bytes.meta | 7 + README.md | 2 +- WORKSPACE | 57 +- build.py | 14 +- mediapipe_api/BUILD | 6 +- packages.config | 2 +- .../build_bazel_rules_apple_validation.diff | 22 +- third_party/com_google_protobuf_fixes.diff | 101 - third_party/mediapipe_extension.diff | 137 +- third_party/mediapipe_workaround.diff | 14 +- third_party/tensorflow_python_path.diff | 15 - 25 files changed, 1676 insertions(+), 501 deletions(-) create mode 100644 .bazelversion rename Packages/com.github.homuler.mediapipe/Runtime/Resources/{hand_landmark.bytes.meta => hand_landmark_full.bytes.meta} (75%) rename Packages/com.github.homuler.mediapipe/Runtime/Resources/{palm_detection.bytes.meta => hand_landmark_lite.bytes.meta} (75%) create mode 100644 Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_full.bytes.meta create mode 100644 Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_lite.bytes.meta delete mode 100644 third_party/com_google_protobuf_fixes.diff delete mode 100644 third_party/tensorflow_python_path.diff diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 000000000..fae6e3d04 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +4.2.1 diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/Hand Tracking Config Window.prefab b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/Hand Tracking Config Window.prefab index dc7427794..ae5859fb3 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/Hand Tracking Config Window.prefab +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/Hand Tracking Config Window.prefab @@ -1,5 +1,113 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &403786887559711656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7679646344982121488} + - component: {fileID: 6400281355703264514} + - component: {fileID: 7779781240262868339} + - component: {fileID: 7091498217746837236} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7679646344982121488 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403786887559711656} + 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_Children: + - {fileID: 2629657111222229824} + - {fileID: 2001205496453626902} + m_Father: {fileID: 2954343399299625014} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &6400281355703264514 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403786887559711656} + m_CullTransparentMesh: 1 +--- !u!114 &7779781240262868339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403786887559711656} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!114 &7091498217746837236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403786887559711656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 8251159515717844924} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 10 + m_Viewport: {fileID: 2629657111222229824} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 4049319696588505159} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] --- !u!1 &468794600014486268 GameObject: m_ObjectHideFlags: 0 @@ -110,7 +218,7 @@ RectTransform: - {fileID: 6872789978216474146} - {fileID: 7873605973835171976} m_Father: {fileID: 7710130227850707868} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -546,7 +654,7 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: ---- !u!1 &1405683704952349807 +--- !u!1 &1249875362140758729 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -554,100 +662,64 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8084237168173835318} + - component: {fileID: 1163664914051893688} + - component: {fileID: 4446336041691618695} + - component: {fileID: 6653038823429144180} m_Layer: 5 - m_Name: Sliding Area + m_Name: Item Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &8084237168173835318 +--- !u!224 &1163664914051893688 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1405683704952349807} + m_GameObject: {fileID: 1249875362140758729} 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_Children: - - {fileID: 5071399190957781890} - m_Father: {fileID: 2791034142207966473} + m_Children: [] + m_Father: {fileID: 3452276329277929113} m_RootOrder: 0 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: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &2358664826247471437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2112236250396303325} - - component: {fileID: 4194248074335155449} - - component: {fileID: 3108977314849060790} - m_Layer: 5 - m_Name: Arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2112236250396303325 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2358664826247471437} - 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_Children: [] - m_Father: {fileID: 916782750758033152} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -15, y: 0} - m_SizeDelta: {x: 20, y: 20} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4194248074335155449 +--- !u!222 &4446336041691618695 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2358664826247471437} + m_GameObject: {fileID: 1249875362140758729} m_CullTransparentMesh: 1 ---- !u!114 &3108977314849060790 +--- !u!114 &6653038823429144180 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2358664826247471437} + m_GameObject: {fileID: 1249875362140758729} 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_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 0} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -657,7 +729,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!1 &2622189582878093186 +--- !u!1 &1405683704952349807 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -665,52 +737,86 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8007731236013016014} - - component: {fileID: 2717692230619849401} - - component: {fileID: 6190737828103483868} - - component: {fileID: 6113652650651083428} + - component: {fileID: 8084237168173835318} m_Layer: 5 - m_Name: Viewport + m_Name: Sliding Area m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &8007731236013016014 +--- !u!224 &8084237168173835318 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2622189582878093186} + m_GameObject: {fileID: 1405683704952349807} 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_Children: - - {fileID: 2981833818579587288} - m_Father: {fileID: 4085226393484340024} + - {fileID: 5071399190957781890} + m_Father: {fileID: 2791034142207966473} m_RootOrder: 0 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: -18, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!222 &2717692230619849401 + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1888623517649599601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5036498481774487993} + - component: {fileID: 8258661665666028369} + - component: {fileID: 4234682719705600063} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5036498481774487993 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888623517649599601} + 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_Children: [] + m_Father: {fileID: 3452276329277929113} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 24, y: 0} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8258661665666028369 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2622189582878093186} + m_GameObject: {fileID: 1888623517649599601} m_CullTransparentMesh: 1 ---- !u!114 &6190737828103483868 +--- !u!114 &4234682719705600063 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2622189582878093186} + m_GameObject: {fileID: 1888623517649599601} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -724,8 +830,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -734,20 +840,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6113652650651083428 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2622189582878093186} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!1 &2727275140453282093 +--- !u!1 &1971214162353477885 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -755,52 +848,50 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 96926212729753831} - - component: {fileID: 7714151213607396674} - - component: {fileID: 8477031958966305763} - - component: {fileID: 2692068806223769971} + - component: {fileID: 722986374381570253} + - component: {fileID: 2605773623435443845} + - component: {fileID: 4303060652610673926} m_Layer: 5 - m_Name: Scrollbar Vertical + m_Name: Arrow m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &96926212729753831 +--- !u!224 &722986374381570253 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2727275140453282093} + m_GameObject: {fileID: 1971214162353477885} 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_Children: - - {fileID: 1426870114855725459} - m_Father: {fileID: 4768952781609151622} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 2954343399299625014} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: -17} - m_Pivot: {x: 1, y: 1} ---- !u!222 &7714151213607396674 + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2605773623435443845 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2727275140453282093} + m_GameObject: {fileID: 1971214162353477885} m_CullTransparentMesh: 1 ---- !u!114 &8477031958966305763 +--- !u!114 &4303060652610673926 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2727275140453282093} + m_GameObject: {fileID: 1971214162353477885} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -814,8 +905,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -824,9 +915,251 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2692068806223769971 -MonoBehaviour: - m_ObjectHideFlags: 0 +--- !u!1 &2358664826247471437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2112236250396303325} + - component: {fileID: 4194248074335155449} + - component: {fileID: 3108977314849060790} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2112236250396303325 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2358664826247471437} + 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_Children: [] + m_Father: {fileID: 916782750758033152} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4194248074335155449 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2358664826247471437} + m_CullTransparentMesh: 1 +--- !u!114 &3108977314849060790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2358664826247471437} + 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: 10915, guid: 0000000000000000f000000000000000, type: 0} + 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 &2622189582878093186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8007731236013016014} + - component: {fileID: 2717692230619849401} + - component: {fileID: 6190737828103483868} + - component: {fileID: 6113652650651083428} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8007731236013016014 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2622189582878093186} + 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_Children: + - {fileID: 2981833818579587288} + m_Father: {fileID: 4085226393484340024} + m_RootOrder: 0 + 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: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &2717692230619849401 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2622189582878093186} + m_CullTransparentMesh: 1 +--- !u!114 &6190737828103483868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2622189582878093186} + 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: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!114 &6113652650651083428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2622189582878093186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &2727275140453282093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 96926212729753831} + - component: {fileID: 7714151213607396674} + - component: {fileID: 8477031958966305763} + - component: {fileID: 2692068806223769971} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &96926212729753831 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2727275140453282093} + 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_Children: + - {fileID: 1426870114855725459} + m_Father: {fileID: 4768952781609151622} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -17} + m_Pivot: {x: 1, y: 1} +--- !u!222 &7714151213607396674 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2727275140453282093} + m_CullTransparentMesh: 1 +--- !u!114 &8477031958966305763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2727275140453282093} + 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: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!114 &2692068806223769971 +MonoBehaviour: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} @@ -1402,6 +1735,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 9098513968449949306} + - {fileID: 2124593187326134002} - {fileID: 4825301634575857686} - {fileID: 1423722328293772700} - {fileID: 1100209025745832290} @@ -1688,7 +2022,7 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &4861348491489321247 +--- !u!1 &4067272229739025047 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1696,29 +2030,293 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2781651269535493797} - - component: {fileID: 599641108726982200} - - component: {fileID: 5110249756200825264} + - component: {fileID: 8251159515717844924} m_Layer: 5 - m_Name: Item Checkmark + m_Name: Content m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2781651269535493797 +--- !u!224 &8251159515717844924 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4861348491489321247} + m_GameObject: {fileID: 4067272229739025047} 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_Children: [] - m_Father: {fileID: 2619468982431949815} - m_RootOrder: 1 + m_Children: + - {fileID: 3452276329277929113} + m_Father: {fileID: 2629657111222229824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 64} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &4443924532356859987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8309403096634436110} + - component: {fileID: 4344303925601190509} + - component: {fileID: 5557216634681511394} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8309403096634436110 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4443924532356859987} + 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_Children: [] + m_Father: {fileID: 7260931583040131753} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4344303925601190509 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4443924532356859987} + m_CullTransparentMesh: 1 +--- !u!114 &5557216634681511394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4443924532356859987} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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 &4681749995173448629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2954343399299625014} + - component: {fileID: 4354967598039796335} + - component: {fileID: 2786216738891985471} + - component: {fileID: 8022252361511929715} + - component: {fileID: 1235950165366867121} + m_Layer: 5 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2954343399299625014 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4681749995173448629} + 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_Children: + - {fileID: 2535335271385476007} + - {fileID: 722986374381570253} + - {fileID: 7679646344982121488} + m_Father: {fileID: 2124593187326134002} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4354967598039796335 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4681749995173448629} + m_CullTransparentMesh: 1 +--- !u!114 &2786216738891985471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4681749995173448629} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!114 &8022252361511929715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4681749995173448629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2786216738891985471} + m_Template: {fileID: 7679646344982121488} + m_CaptionText: {fileID: 2891939749026075473} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 5497059031761226590} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_AlphaFadeSpeed: 0.15 +--- !u!114 &1235950165366867121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4681749995173448629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 800 + m_PreferredHeight: -1 + m_FlexibleWidth: 3 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &4861348491489321247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2781651269535493797} + - component: {fileID: 599641108726982200} + - component: {fileID: 5110249756200825264} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2781651269535493797 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4861348491489321247} + 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_Children: [] + m_Father: {fileID: 2619468982431949815} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -1947,7 +2545,7 @@ RectTransform: - {fileID: 8030034991752983052} - {fileID: 2436870368664550960} m_Father: {fileID: 7710130227850707868} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1988,51 +2586,261 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6872789978216474146} - - component: {fileID: 2778718776338841650} - - component: {fileID: 1577136699242174127} - - component: {fileID: 8209587970809894563} + - component: {fileID: 6872789978216474146} + - component: {fileID: 2778718776338841650} + - component: {fileID: 1577136699242174127} + - component: {fileID: 8209587970809894563} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6872789978216474146 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082724705022434624} + 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_Children: [] + m_Father: {fileID: 4825301634575857686} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2778718776338841650 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082724705022434624} + m_CullTransparentMesh: 1 +--- !u!114 &1577136699242174127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082724705022434624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Max Num Hands +--- !u!114 &8209587970809894563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082724705022434624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 800 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &5181654350780467799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1426870114855725459} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1426870114855725459 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5181654350780467799} + 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_Children: + - {fileID: 3251809232284279869} + m_Father: {fileID: 96926212729753831} + m_RootOrder: 0 + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &5624723646387040479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3200994491993904406} + - component: {fileID: 2989204840340986417} + - component: {fileID: 5241573825994127108} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3200994491993904406 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5624723646387040479} + 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_Children: [] + m_Father: {fileID: 8906754611063308722} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2989204840340986417 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5624723646387040479} + m_CullTransparentMesh: 1 +--- !u!114 &5241573825994127108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5624723646387040479} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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 &5763064399367392410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2535335271385476007} + - component: {fileID: 483638109982637212} + - component: {fileID: 2891939749026075473} m_Layer: 5 - m_Name: Text + m_Name: Label m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &6872789978216474146 +--- !u!224 &2535335271385476007 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5082724705022434624} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5763064399367392410} + 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_Children: [] - m_Father: {fileID: 4825301634575857686} + m_Father: {fileID: 2954343399299625014} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 72} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2778718776338841650 +--- !u!222 &483638109982637212 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5082724705022434624} + m_GameObject: {fileID: 5763064399367392410} m_CullTransparentMesh: 1 ---- !u!114 &1577136699242174127 +--- !u!114 &2891939749026075473 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5082724705022434624} + m_GameObject: {fileID: 5763064399367392410} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} @@ -2048,39 +2856,19 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 48 + m_FontSize: 40 m_FontStyle: 0 m_BestFit: 0 - m_MinSize: 0 - m_MaxSize: 300 + m_MinSize: 2 + m_MaxSize: 40 m_Alignment: 3 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Max Num Hands ---- !u!114 &8209587970809894563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5082724705022434624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 800 - m_PreferredHeight: -1 - m_FlexibleWidth: 1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!1 &5181654350780467799 + m_Text: +--- !u!1 &6002750245471499803 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2088,35 +2876,63 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1426870114855725459} + - component: {fileID: 2124593187326134002} + - component: {fileID: 7875521367195061289} m_Layer: 5 - m_Name: Sliding Area + m_Name: Model Complexity m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1426870114855725459 +--- !u!224 &2124593187326134002 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5181654350780467799} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 6002750245471499803} + 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_Children: - - {fileID: 3251809232284279869} - m_Father: {fileID: 96926212729753831} - m_RootOrder: 0 + - {fileID: 6764475310888495525} + - {fileID: 2954343399299625014} + m_Father: {fileID: 7710130227850707868} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &5624723646387040479 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &7875521367195061289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002750245471499803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 24 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 3 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &6022784651882849183 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2124,50 +2940,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3200994491993904406} - - component: {fileID: 2989204840340986417} - - component: {fileID: 5241573825994127108} + - component: {fileID: 2629657111222229824} + - component: {fileID: 3585323207312967626} + - component: {fileID: 5164046744276226953} + - component: {fileID: 7558741585971000685} m_Layer: 5 - m_Name: Handle + m_Name: Viewport m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &3200994491993904406 +--- !u!224 &2629657111222229824 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5624723646387040479} + m_GameObject: {fileID: 6022784651882849183} 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_Children: [] - m_Father: {fileID: 8906754611063308722} + m_Children: + - {fileID: 8251159515717844924} + m_Father: {fileID: 7679646344982121488} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2989204840340986417 + m_SizeDelta: {x: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &3585323207312967626 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5624723646387040479} + m_GameObject: {fileID: 6022784651882849183} m_CullTransparentMesh: 1 ---- !u!114 &5241573825994127108 +--- !u!114 &5164046744276226953 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5624723646387040479} + m_GameObject: {fileID: 6022784651882849183} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -2181,7 +2999,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -2191,6 +3009,19 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7558741585971000685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6022784651882849183} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 --- !u!1 &6124492033379141752 GameObject: m_ObjectHideFlags: 0 @@ -2430,6 +3261,93 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6476463630975403930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3452276329277929113} + - component: {fileID: 1049195981101041} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3452276329277929113 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6476463630975403930} + 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_Children: + - {fileID: 1163664914051893688} + - {fileID: 5036498481774487993} + - {fileID: 6150084466381490112} + m_Father: {fileID: 8251159515717844924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1049195981101041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6476463630975403930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6653038823429144180} + toggleTransition: 1 + graphic: {fileID: 4234682719705600063} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 --- !u!1 &6573911554098452011 GameObject: m_ObjectHideFlags: 0 @@ -2586,14 +3504,93 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} m_Name: m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 800 - m_PreferredHeight: -1 - m_FlexibleWidth: 3 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 800 + m_PreferredHeight: -1 + m_FlexibleWidth: 3 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &6578312340077821531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6150084466381490112} + - component: {fileID: 6410779850107735533} + - component: {fileID: 5497059031761226590} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6150084466381490112 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578312340077821531} + 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_Children: [] + m_Father: {fileID: 3452276329277929113} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 19, y: -0.5} + m_SizeDelta: {x: -58, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6410779850107735533 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578312340077821531} + m_CullTransparentMesh: 1 +--- !u!114 &5497059031761226590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578312340077821531} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 36 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 49 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: --- !u!1 &6655745174104396485 GameObject: m_ObjectHideFlags: 0 @@ -2625,7 +3622,7 @@ RectTransform: - {fileID: 7368247365119313596} - {fileID: 916782750758033152} m_Father: {fileID: 7710130227850707868} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2694,6 +3691,42 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 64} m_Pivot: {x: 0.5, y: 1} +--- !u!1 &7114514461251651042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7260931583040131753} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7260931583040131753 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7114514461251651042} + 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_Children: + - {fileID: 8309403096634436110} + m_Father: {fileID: 2001205496453626902} + m_RootOrder: 0 + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &7335675734870366313 GameObject: m_ObjectHideFlags: 0 @@ -3250,6 +4283,232 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f710c941b660df425bc7c9aa1b8a9467, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &8411429863262246330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2001205496453626902} + - component: {fileID: 9011321221823514870} + - component: {fileID: 677590701610097105} + - component: {fileID: 4049319696588505159} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2001205496453626902 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8411429863262246330} + 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_Children: + - {fileID: 7260931583040131753} + m_Father: {fileID: 7679646344982121488} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!222 &9011321221823514870 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8411429863262246330} + m_CullTransparentMesh: 1 +--- !u!114 &677590701610097105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8411429863262246330} + 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: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!114 &4049319696588505159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8411429863262246330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5557216634681511394} + m_HandleRect: {fileID: 8309403096634436110} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8446794573763211050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6764475310888495525} + - component: {fileID: 2358644459243048609} + - component: {fileID: 4931318857317104886} + - component: {fileID: 6944743357636505826} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6764475310888495525 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446794573763211050} + 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_Children: [] + m_Father: {fileID: 2124593187326134002} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2358644459243048609 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446794573763211050} + m_CullTransparentMesh: 1 +--- !u!114 &4931318857317104886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446794573763211050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Model Complexity +--- !u!114 &6944743357636505826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8446794573763211050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 800 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &8493180483769231593 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingConfig.cs b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingConfig.cs index 75f522d40..684770c51 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingConfig.cs +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingConfig.cs @@ -14,11 +14,13 @@ namespace Mediapipe.Unity.HandTracking.UI { public class HandTrackingConfig : ModalContents { + private const string _ModelComplexityPath = "Scroll View/Viewport/Contents/Model Complexity/Dropdown"; private const string _MaxNumHandsPath = "Scroll View/Viewport/Contents/Max Num Hands/InputField"; private const string _RunningModePath = "Scroll View/Viewport/Contents/Running Mode/Dropdown"; private const string _TimeoutMillisecPath = "Scroll View/Viewport/Contents/Timeout Millisec/InputField"; private HandTrackingSolution _solution; + private Dropdown _modelComplexityInput; private InputField _maxNumHandsInput; private Dropdown _runningModeInput; private InputField _timeoutMillisecInput; @@ -36,6 +38,12 @@ public override void Exit() GetModal().CloseAndResume(_isChanged); } + public void SwitchModelComplexity() + { + _solution.modelComplexity = (HandTrackingGraph.ModelComplexity)_modelComplexityInput.value; + _isChanged = true; + } + public void UpdateMaxNumHands() { if (int.TryParse(_maxNumHandsInput.text, out var value)) @@ -62,11 +70,31 @@ public void SetTimeoutMillisec() private void InitializeContents() { + InitializeModelComplexity(); InitializeMaxNumHands(); InitializeRunningMode(); InitializeTimeoutMillisec(); } + private void InitializeModelComplexity() + { + _modelComplexityInput = gameObject.transform.Find(_ModelComplexityPath).gameObject.GetComponent(); + _modelComplexityInput.ClearOptions(); + + var options = new List(Enum.GetNames(typeof(HandTrackingGraph.ModelComplexity))); + _modelComplexityInput.AddOptions(options); + + var currentModelComplexity = _solution.modelComplexity; + var defaultValue = options.FindIndex(option => option == currentModelComplexity.ToString()); + + if (defaultValue >= 0) + { + _modelComplexityInput.value = defaultValue; + } + + _modelComplexityInput.onValueChanged.AddListener(delegate { SwitchModelComplexity(); }); + } + private void InitializeMaxNumHands() { _maxNumHandsInput = gameObject.transform.Find(_MaxNumHandsPath).gameObject.GetComponent(); diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingGraph.cs b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingGraph.cs index c3dad76f5..a3c079776 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingGraph.cs +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingGraph.cs @@ -12,12 +12,20 @@ namespace Mediapipe.Unity.HandTracking { public class HandTrackingGraph : GraphRunner { + public enum ModelComplexity + { + Lite = 0, + Full = 1, + } + + public ModelComplexity modelComplexity = ModelComplexity.Full; public int maxNumHands = 2; #pragma warning disable IDE1006 // UnityEvent is PascalCase public UnityEvent> OnPalmDetectectionsOutput = new UnityEvent>(); public UnityEvent> OnHandRectsFromPalmDetectionsOutput = new UnityEvent>(); public UnityEvent> OnHandLandmarksOutput = new UnityEvent>(); + public UnityEvent> OnHandWorldLandmarksOutput = new UnityEvent>(); public UnityEvent> OnHandRectsFromLandmarksOutput = new UnityEvent>(); public UnityEvent> OnHandednessOutput = new UnityEvent>(); #pragma warning restore IDE1006 @@ -27,18 +35,21 @@ public class HandTrackingGraph : GraphRunner private const string _PalmDetectionsStreamName = "palm_detections"; private const string _HandRectsFromPalmDetectionsStreamName = "hand_rects_from_palm_detections"; private const string _HandLandmarksStreamName = "hand_landmarks"; + private const string _HandWorldLandmarksStreamName = "hand_world_landmarks"; private const string _HandRectsFromLandmarksStreamName = "hand_rects_from_landmarks"; private const string _HandednessStreamName = "handedness"; private OutputStream> _palmDetectionsStream; private OutputStream> _handRectsFromPalmDetectionsStream; private OutputStream> _handLandmarksStream; + private OutputStream> _handWorldLandmarksStream; private OutputStream> _handRectsFromLandmarksStream; private OutputStream> _handednessStream; protected long prevPalmDetectionMicrosec = 0; protected long prevHandRectsFromPalmDetectionsMicrosec = 0; protected long prevHandLandmarksMicrosec = 0; + protected long prevHandWorldLandmarksMicrosec = 0; protected long prevHandRectsFromLandmarksMicrosec = 0; protected long prevHandednessMicrosec = 0; @@ -49,6 +60,7 @@ public override Status StartRun(ImageSource imageSource) _palmDetectionsStream.StartPolling(true).AssertOk(); _handRectsFromPalmDetectionsStream.StartPolling(true).AssertOk(); _handLandmarksStream.StartPolling(true).AssertOk(); + _handWorldLandmarksStream.StartPolling(true).AssertOk(); _handRectsFromLandmarksStream.StartPolling(true).AssertOk(); _handednessStream.StartPolling(true).AssertOk(); @@ -62,6 +74,7 @@ public Status StartRunAsync(ImageSource imageSource) _palmDetectionsStream.AddListener(PalmDetectionsCallback, true).AssertOk(); _handRectsFromPalmDetectionsStream.AddListener(HandRectsFromPalmDetectionsCallback, true).AssertOk(); _handLandmarksStream.AddListener(HandLandmarksCallback, true).AssertOk(); + _handWorldLandmarksStream.AddListener(HandWorldLandmarksCallback, true).AssertOk(); _handRectsFromLandmarksStream.AddListener(HandRectsFromLandmarksCallback, true).AssertOk(); _handednessStream.AddListener(HandednessCallback, true).AssertOk(); @@ -74,6 +87,7 @@ public override void Stop() OnPalmDetectectionsOutput.RemoveAllListeners(); OnHandRectsFromPalmDetectionsOutput.RemoveAllListeners(); OnHandLandmarksOutput.RemoveAllListeners(); + OnHandWorldLandmarksOutput.RemoveAllListeners(); OnHandRectsFromLandmarksOutput.RemoveAllListeners(); OnHandednessOutput.RemoveAllListeners(); } @@ -88,16 +102,18 @@ public HandTrackingValue FetchNextValue() var _ = _palmDetectionsStream.TryGetNext(out var palmDetections); _ = _handRectsFromPalmDetectionsStream.TryGetNext(out var handRectsFromPalmDetections); _ = _handLandmarksStream.TryGetNext(out var handLandmarks); + _ = _handWorldLandmarksStream.TryGetNext(out var handWorldLandmarks); _ = _handRectsFromLandmarksStream.TryGetNext(out var handRectsFromLandmarks); _ = _handednessStream.TryGetNext(out var handedness); OnPalmDetectectionsOutput.Invoke(palmDetections); OnHandRectsFromPalmDetectionsOutput.Invoke(handRectsFromPalmDetections); OnHandLandmarksOutput.Invoke(handLandmarks); + OnHandWorldLandmarksOutput.Invoke(handWorldLandmarks); OnHandRectsFromLandmarksOutput.Invoke(handRectsFromLandmarks); OnHandednessOutput.Invoke(handedness); - return new HandTrackingValue(palmDetections, handRectsFromPalmDetections, handLandmarks, handRectsFromLandmarks, handedness); + return new HandTrackingValue(palmDetections, handRectsFromPalmDetections, handLandmarks, handWorldLandmarks, handRectsFromLandmarks, handedness); } [AOT.MonoPInvokeCallback(typeof(CalculatorGraph.NativePacketCallback))] @@ -145,6 +161,21 @@ private static IntPtr HandLandmarksCallback(IntPtr graphPtr, IntPtr packetPtr) }).mpPtr; } + [AOT.MonoPInvokeCallback(typeof(CalculatorGraph.NativePacketCallback))] + private static IntPtr HandWorldLandmarksCallback(IntPtr graphPtr, IntPtr packetPtr) + { + return InvokeIfGraphRunnerFound(graphPtr, packetPtr, (handTrackingGraph, ptr) => + { + using (var packet = new LandmarkListVectorPacket(ptr, false)) + { + if (handTrackingGraph.TryGetPacketValue(packet, ref handTrackingGraph.prevHandWorldLandmarksMicrosec, out var value)) + { + handTrackingGraph.OnHandWorldLandmarksOutput.Invoke(value); + } + } + }).mpPtr; + } + [AOT.MonoPInvokeCallback(typeof(CalculatorGraph.NativePacketCallback))] private static IntPtr HandRectsFromLandmarksCallback(IntPtr graphPtr, IntPtr packetPtr) { @@ -178,10 +209,10 @@ private static IntPtr HandednessCallback(IntPtr graphPtr, IntPtr packetPtr) protected override IList RequestDependentAssets() { return new List { - WaitForAsset("hand_landmark.bytes"), + WaitForHandLandmarkModel(), WaitForAsset("hand_recrop.bytes"), WaitForAsset("handedness.txt"), - WaitForAsset("palm_detection.bytes"), + WaitForPalmDetectionModel(), }; } @@ -190,15 +221,37 @@ protected void InitializeOutputStreams() _palmDetectionsStream = new OutputStream>(calculatorGraph, _PalmDetectionsStreamName); _handRectsFromPalmDetectionsStream = new OutputStream>(calculatorGraph, _HandRectsFromPalmDetectionsStreamName); _handLandmarksStream = new OutputStream>(calculatorGraph, _HandLandmarksStreamName); + _handWorldLandmarksStream = new OutputStream>(calculatorGraph, _HandWorldLandmarksStreamName); _handRectsFromLandmarksStream = new OutputStream>(calculatorGraph, _HandRectsFromLandmarksStreamName); _handednessStream = new OutputStream>(calculatorGraph, _HandednessStreamName); } + private WaitForResult WaitForHandLandmarkModel() + { + switch (modelComplexity) + { + case ModelComplexity.Lite: return WaitForAsset("hand_landmark_lite.bytes"); + case ModelComplexity.Full: return WaitForAsset("hand_landmark_full.bytes"); + default: throw new InternalException($"Invalid model complexity: {modelComplexity}"); + } + } + + private WaitForResult WaitForPalmDetectionModel() + { + switch (modelComplexity) + { + case ModelComplexity.Lite: return WaitForAsset("palm_detection_lite.bytes"); + case ModelComplexity.Full: return WaitForAsset("palm_detection_full.bytes"); + default: throw new InternalException($"Invalid model complexity: {modelComplexity}"); + } + } + private SidePacket BuildSidePacket(ImageSource imageSource) { var sidePacket = new SidePacket(); SetImageTransformationOptions(sidePacket, imageSource, true); + sidePacket.Emplace("model_complexity", new IntPacket((int)modelComplexity)); sidePacket.Emplace("num_hands", new IntPacket(maxNumHands)); return sidePacket; diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingSolution.cs b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingSolution.cs index 97aa71f54..f1a78a1f1 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingSolution.cs +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingSolution.cs @@ -24,6 +24,12 @@ public class HandTrackingSolution : Solution public RunningMode runningMode; + public HandTrackingGraph.ModelComplexity modelComplexity + { + get => _graphRunner.modelComplexity; + set => _graphRunner.modelComplexity = value; + } + public int maxNumHands { get => _graphRunner.maxNumHands; @@ -81,6 +87,7 @@ private IEnumerator Run() // NOTE: The _screen will be resized later, keeping the aspect ratio. _screen.Initialize(imageSource); + Logger.LogInfo(TAG, $"Model Complexity = {modelComplexity}"); Logger.LogInfo(TAG, $"Max Num Hands = {maxNumHands}"); Logger.LogInfo(TAG, $"Running Mode = {runningMode}"); @@ -96,6 +103,7 @@ private IEnumerator Run() _graphRunner.OnPalmDetectectionsOutput.AddListener(OnPalmDetectectionsOutput); _graphRunner.OnHandRectsFromPalmDetectionsOutput.AddListener(OnHandRectsFromPalmDetectionsOutput); _graphRunner.OnHandLandmarksOutput.AddListener(OnHandLandmarksOutput); + _graphRunner.OnHandWorldLandmarksOutput.AddListener(OnHandWorldLandmarksOutput); _graphRunner.OnHandRectsFromLandmarksOutput.AddListener(OnHandRectsFromLandmarksOutput); _graphRunner.OnHandednessOutput.AddListener(OnHandednessOutput); _graphRunner.StartRunAsync(imageSource).AssertOk(); @@ -160,6 +168,11 @@ private void OnHandLandmarksOutput(List handLandmarks) _handLandmarksAnnotationController.DrawLater(handLandmarks); } + private void OnHandWorldLandmarksOutput(List handWorldLandmarks) + { + // TODO: render annotations + } + private void OnHandRectsFromLandmarksOutput(List handRectsFromLandmarks) { _handRectsFromLandmarksAnnotationController.DrawLater(handRectsFromLandmarks); diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingValue.cs b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingValue.cs index 15c0018f7..5ba3abb47 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingValue.cs +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/HandTrackingValue.cs @@ -13,15 +13,18 @@ public class HandTrackingValue public readonly List palmDetections; public readonly List handRectsFromPalmDetections; public readonly List handLandmarks; + public readonly List handWorldLandmarks; public readonly List handRectsFromLandmarks; public readonly List handedness; public HandTrackingValue(List palmDetections, List handRectsFromPalmDetections, - List handLandmarks, List handRectsFromLandmarks, List handedness) + List handLandmarks, List handWorldLandmarks, + List handRectsFromLandmarks, List handedness) { this.palmDetections = palmDetections; this.handRectsFromPalmDetections = handRectsFromPalmDetections; this.handLandmarks = handLandmarks; + this.handWorldLandmarks = handWorldLandmarks; this.handRectsFromLandmarks = handRectsFromLandmarks; this.handedness = handedness; } diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_cpu.txt b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_cpu.txt index 79a4b4b4d..491d36813 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_cpu.txt +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_cpu.txt @@ -33,6 +33,10 @@ input_side_packet: "num_hands" # landmarks. (std::vector) output_stream: "hand_landmarks" +# Collection of detected/predicted hand world landmarks. +# (std::vector) +output_stream: "hand_world_landmarks" + output_stream: "handedness" output_stream: "palm_detections" output_stream: "hand_rects_from_landmarks" @@ -62,8 +66,10 @@ node: { node { calculator: "HandLandmarkTrackingCpu" input_stream: "IMAGE:transformed_input_video" + input_side_packet: "MODEL_COMPLEXITY:model_complexity" input_side_packet: "NUM_HANDS:num_hands" output_stream: "LANDMARKS:hand_landmarks" + output_stream: "WORLD_LANDMARKS:hand_world_landmarks" output_stream: "HANDEDNESS:handedness" output_stream: "PALM_DETECTIONS:palm_detections" output_stream: "HAND_ROIS_FROM_LANDMARKS:hand_rects_from_landmarks" diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_gpu.txt b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_gpu.txt index a1dfde742..b9816386f 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_gpu.txt +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_gpu.txt @@ -34,6 +34,10 @@ input_side_packet: "num_hands" # landmarks. (std::vector) output_stream: "hand_landmarks" +# Collection of detected/predicted hand world landmarks. +# (std::vector) +output_stream: "hand_world_landmarks" + output_stream: "handedness" output_stream: "palm_detections" output_stream: "hand_rects_from_landmarks" @@ -79,8 +83,10 @@ node: { node { calculator: "HandLandmarkTrackingGpu" input_stream: "IMAGE:transformed_input_video" + input_side_packet: "MODEL_COMPLEXITY:model_complexity" input_side_packet: "NUM_HANDS:num_hands" output_stream: "LANDMARKS:hand_landmarks" + output_stream: "WORLD_LANDMARKS:hand_world_landmarks" output_stream: "HANDEDNESS:handedness" output_stream: "PALM_DETECTIONS:palm_detections" output_stream: "HAND_ROIS_FROM_LANDMARKS:hand_rects_from_landmarks" diff --git a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_opengles.txt b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_opengles.txt index 8728a3d63..c206cb112 100644 --- a/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_opengles.txt +++ b/Assets/Mediapipe/Samples/Scenes/Hand Tracking/hand_tracking_opengles.txt @@ -33,6 +33,10 @@ input_side_packet: "num_hands" # landmarks. (std::vector) output_stream: "hand_landmarks" +# Collection of detected/predicted hand world landmarks. +# (std::vector) +output_stream: "hand_world_landmarks" + output_stream: "handedness" output_stream: "palm_detections" output_stream: "hand_rects_from_landmarks" @@ -72,8 +76,10 @@ node: { node { calculator: "HandLandmarkTrackingGpu" input_stream: "IMAGE:transformed_input_video" + input_side_packet: "MODEL_COMPLEXITY:model_complexity" input_side_packet: "NUM_HANDS:num_hands" output_stream: "LANDMARKS:hand_landmarks" + output_stream: "WORLD_LANDMARKS:hand_world_landmarks" output_stream: "HANDEDNESS:handedness" output_stream: "PALM_DETECTIONS:palm_detections" output_stream: "HAND_ROIS_FROM_LANDMARKS:hand_rects_from_landmarks" diff --git a/Assets/Mediapipe/Samples/Scenes/Holistic/HolisticTrackingGraph.cs b/Assets/Mediapipe/Samples/Scenes/Holistic/HolisticTrackingGraph.cs index 27ffc73c2..1c3ec9176 100644 --- a/Assets/Mediapipe/Samples/Scenes/Holistic/HolisticTrackingGraph.cs +++ b/Assets/Mediapipe/Samples/Scenes/Holistic/HolisticTrackingGraph.cs @@ -240,10 +240,10 @@ protected override IList RequestDependentAssets() WaitForAsset("face_detection_short_range.bytes"), WaitForAsset(refineFaceLandmarks ? "face_landmark_with_attention.bytes" : "face_landmark.bytes"), WaitForAsset("iris_landmark.bytes"), - WaitForAsset("hand_landmark.bytes"), + WaitForAsset("hand_landmark_full.bytes"), WaitForAsset("hand_recrop.bytes"), WaitForAsset("handedness.txt"), - WaitForAsset("palm_detection.bytes"), + WaitForAsset("palm_detection_full.bytes"), WaitForAsset("pose_detection.bytes"), WaitForPoseLandmarkModel(), }; diff --git a/Assets/Mediapipe/Samples/Scenes/MediaPipe Video/MediaPipeVideoGraph.cs b/Assets/Mediapipe/Samples/Scenes/MediaPipe Video/MediaPipeVideoGraph.cs index 5c68795ca..4eb2c13fa 100644 --- a/Assets/Mediapipe/Samples/Scenes/MediaPipe Video/MediaPipeVideoGraph.cs +++ b/Assets/Mediapipe/Samples/Scenes/MediaPipe Video/MediaPipeVideoGraph.cs @@ -109,10 +109,10 @@ protected override CalculatorGraphConfig GetCalculatorGraphConfig() protected override IList RequestDependentAssets() { return new List { - WaitForAsset("hand_landmark.bytes"), + WaitForAsset("hand_landmark_full.bytes"), WaitForAsset("hand_recrop.bytes"), WaitForAsset("handedness.txt"), - WaitForAsset("palm_detection.bytes"), + WaitForAsset("palm_detection_full.bytes"), }; } diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark.bytes.meta b/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_full.bytes.meta similarity index 75% rename from Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark.bytes.meta rename to Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_full.bytes.meta index aa18121f3..b4544e1d8 100644 --- a/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark.bytes.meta +++ b/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_full.bytes.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: efe9f49bb592ca36b88b4be7eacda498 +guid: d2c612bb3b8652c34a610554ef621c35 TextScriptImporter: externalObjects: {} userData: diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection.bytes.meta b/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_lite.bytes.meta similarity index 75% rename from Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection.bytes.meta rename to Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_lite.bytes.meta index 837f6bb94..8370a77cf 100644 --- a/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection.bytes.meta +++ b/Packages/com.github.homuler.mediapipe/Runtime/Resources/hand_landmark_lite.bytes.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2d8c31eb6f8ff3867b5a2f93b167d973 +guid: fa86133ea84e644f09b246134dd08cb6 TextScriptImporter: externalObjects: {} userData: diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_full.bytes.meta b/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_full.bytes.meta new file mode 100644 index 000000000..0b9c34dc8 --- /dev/null +++ b/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_full.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21464d30652b570c3ab3f50d15a22dbf +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_lite.bytes.meta b/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_lite.bytes.meta new file mode 100644 index 000000000..dbaa27851 --- /dev/null +++ b/Packages/com.github.homuler.mediapipe/Runtime/Resources/palm_detection_lite.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc5368b59ebdc0638a873af1f2959457 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md index 7099da642..097ceab64 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MediaPipe Unity Plugin -This is a Unity (2020.3.23f1) [Native Plugin](https://docs.unity3d.com/Manual/NativePlugins.html) to use [MediaPipe](https://github.com/google/mediapipe) (0.8.8). +This is a Unity (2020.3.23f1) [Native Plugin](https://docs.unity3d.com/Manual/NativePlugins.html) to use [MediaPipe](https://github.com/google/mediapipe) (0.8.9). The goal of this project is to port the MediaPipe API (C++) _one by one_ to C# so that it can be called from Unity.\ This approach may sacrifice performance when you need to call multiple APIs in a loop, but it gives you the flexibility to use MediaPipe instead. diff --git a/WORKSPACE b/WORKSPACE index 648e71acc..85a84b18c 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -59,9 +59,9 @@ http_archive( "@//third_party:mediapipe_model_path.diff", "@//third_party:mediapipe_extension.diff", ], - sha256 = "d20c4c7a957c70be6018c704a5cea3c61314df22e4f88b452c19472f0227a48f", - strip_prefix = "mediapipe-0.8.8", - urls = ["https://github.com/google/mediapipe/archive/v0.8.8.tar.gz"], + sha256 = "54ce6da9f167d34fe53f928c804b3bc1fd1dd8fe2b32ca4bf0b63325d34680ac", + strip_prefix = "mediapipe-0.8.9", + urls = ["https://github.com/google/mediapipe/archive/v0.8.9.tar.gz"], ) # ABSL cpp library lts_2021_03_24, patch 2. @@ -165,17 +165,26 @@ http_archive( urls = ["https://chromium.googlesource.com/libyuv/libyuv/+archive/2525698acba9bf9b701ba6b4d9584291a1f62257.tar.gz"], ) +# Note: protobuf-javalite is no longer released as a separate download, it's included in the main Java download. +# ...but the Java download is currently broken, so we use the "source" download. +http_archive( + name = "com_google_protobuf_javalite", + sha256 = "87407cd28e7a9c95d9f61a098a53cf031109d451a7763e7dd1253abf8b4df422", + strip_prefix = "protobuf-3.19.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.1.tar.gz"], +) + http_archive( name = "com_google_protobuf", patch_args = [ "-p1", ], patches = [ - "@//third_party:com_google_protobuf_fixes.diff", + "@com_google_mediapipe//third_party:com_google_protobuf_fixes.diff", ], - sha256 = "65e020a42bdab44a66664d34421995829e9e79c60e5adaa08282fd14ca552f57", - strip_prefix = "protobuf-3.15.6", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.6.tar.gz"], + sha256 = "87407cd28e7a9c95d9f61a098a53cf031109d451a7763e7dd1253abf8b4df422", + strip_prefix = "protobuf-3.19.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.1.tar.gz"], ) http_archive( @@ -192,17 +201,18 @@ http_archive( urls = ["https://github.com/pybind/pybind11_bazel/archive/203508e14aab7309892a1c5f7dd05debda22d9a5.zip"], ) +# Point to the commit that deprecates the usage of Eigen::MappedSparseMatrix. http_archive( name = "pybind11", build_file = "@pybind11_bazel//:pybind11.BUILD", - sha256 = "616d1c42e4cf14fa27b2a4ff759d7d7b33006fdc5ad8fd603bb2c22622f27020", - strip_prefix = "pybind11-2.7.1", + sha256 = "b971842fab1b5b8f3815a2302331782b7d137fef0e06502422bc4bc360f4956c", + strip_prefix = "pybind11-70a58c577eaf067748c2ec31bfd0b0a614cffba6", urls = [ - "https://storage.googleapis.com/mirror.tensorflow.org/github.com/pybind/pybind11/archive/v2.7.1.tar.gz", - "https://github.com/pybind/pybind11/archive/v2.7.1.tar.gz", + "https://github.com/pybind/pybind11/archive/70a58c577eaf067748c2ec31bfd0b0a614cffba6.zip", ], ) +# Point to the commit that deprecates the usage of Eigen::MappedSparseMatrix. http_archive( name = "ceres_solver", patch_args = [ @@ -211,9 +221,9 @@ http_archive( patches = [ "@com_google_mediapipe//third_party:ceres_solver_compatibility_fixes.diff", ], - sha256 = "db12d37b4cebb26353ae5b7746c7985e00877baa8e7b12dc4d3a1512252fff3b", - strip_prefix = "ceres-solver-2.0.0", - url = "https://github.com/ceres-solver/ceres-solver/archive/2.0.0.zip", + sha256 = "8b7b16ceb363420e0fd499576daf73fa338adb0b1449f58bea7862766baa1ac7", + strip_prefix = "ceres-solver-123fba61cf2611a3c8bddc9d91416db26b10b558", + url = "https://github.com/ceres-solver/ceres-solver/archive/123fba61cf2611a3c8bddc9d91416db26b10b558.zip", ) http_archive( @@ -320,8 +330,8 @@ http_archive( "@com_google_mediapipe//third_party:build_bazel_rules_apple_bypass_test_runner_check.diff", "@//third_party:build_bazel_rules_apple_validation.diff", ], - sha256 = "55f4dc1c9bf21bb87442665f4618cff1f1343537a2bd89252078b987dcd9c382", - url = "https://github.com/bazelbuild/rules_apple/releases/download/0.20.0/rules_apple.0.20.0.tar.gz", + sha256 = "77e8bf6fda706f420a55874ae6ee4df0c9d95da6c7838228b26910fc82eea5a2", + url = "https://github.com/bazelbuild/rules_apple/releases/download/0.32.0/rules_apple.0.32.0.tar.gz", ) load( @@ -340,10 +350,9 @@ swift_rules_dependencies() http_archive( name = "build_bazel_apple_support", - sha256 = "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033", + sha256 = "741366f79d900c11e11d8efd6cc6c66a31bfb2451178b58e0b5edc6f1db17b35", urls = [ - "https://storage.googleapis.com/mirror.tensorflow.org/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz", - "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz", + "https://github.com/bazelbuild/apple_support/releases/download/0.10.0/apple_support.0.10.0.tar.gz", ], ) @@ -402,6 +411,9 @@ maven_install( "com.google.auto.value:auto-value:1.8.1", "com.google.auto.value:auto-value-annotations:1.8.1", "com.google.code.findbugs:jsr305:latest.release", + "com.google.android.datatransport:transport-api:3.0.0", + "com.google.android.datatransport:transport-backend-cct:3.1.0", + "com.google.android.datatransport:transport-runtime:3.1.0", "com.google.flogger:flogger-system-backend:0.6", "com.google.flogger:flogger:0.6", "com.google.guava:guava:27.0.1-android", @@ -431,10 +443,10 @@ http_archive( ) # Tensorflow repo should always go after the other external dependencies. -# 2021-07-29 -_TENSORFLOW_GIT_COMMIT = "52a2905cbc21034766c08041933053178c5d10e3" +# 2021-12-02 +_TENSORFLOW_GIT_COMMIT = "18a1dc0ba806dc023808531f0373d9ec068e64bf" -_TENSORFLOW_SHA256 = "06d4691bcdb700f3275fa0971a1585221c2b9f3dffe867963be565a6643d7f56" +_TENSORFLOW_SHA256 = "85b90416f7a11339327777bccd634de00ca0de2cf334f5f0727edcb11ff9289a" http_archive( name = "org_tensorflow", @@ -446,7 +458,6 @@ http_archive( "@com_google_mediapipe//third_party:org_tensorflow_objc_cxx17.diff", # Diff is generated with a script, don't update it manually. "@com_google_mediapipe//third_party:org_tensorflow_custom_ops.diff", - "@//third_party:tensorflow_python_path.diff", ], sha256 = _TENSORFLOW_SHA256, strip_prefix = "tensorflow-%s" % _TENSORFLOW_GIT_COMMIT, diff --git a/build.py b/build.py index 0b58a3727..97e1c8d9e 100644 --- a/build.py +++ b/build.py @@ -13,6 +13,7 @@ pass _BAZEL_BIN_PATH = 'bazel-bin' +_BAZEL_OUT_PATH = 'bazel-out' _BUILD_PATH = 'build' _NUGET_PATH = '.nuget' _ANALYZER_PATH = os.path.join('Assets', 'Analyzers') @@ -166,9 +167,7 @@ def run(self): if self.ios: self.console.info('Building native libaries for iOS...') self._run_command(self._build_ios_commands()) - self._unzip( - os.path.join(_BAZEL_BIN_PATH, 'mediapipe_api', 'objc', 'MediaPipeUnity.zip'), - os.path.join(_BUILD_PATH, 'Plugins', 'iOS')) + self._unzip(self._find_latest_built_framework(), os.path.join(_BUILD_PATH, 'Plugins', 'iOS')) self.console.info('Built native libraries for iOS') @@ -314,6 +313,15 @@ def _build_proto_srcs_commands(self): def _build_proto_dlls_commands(self): return ['nuget', 'install', '-o', _NUGET_PATH, '-Source', 'https://api.nuget.org/v3/index.json'] + def _find_latest_built_framework(self): + zip_files = glob.glob(os.path.join(_BAZEL_OUT_PATH, '*', 'bin', 'mediapipe_api', 'objc', 'MediaPipeUnity.zip')) + + if not zip_files: + raise RuntimeError('MediaPipeUnity.zip has not been built yet') + + zip_files.sort(key=lambda x: os.path.getatime(x), reverse=True) + return zip_files[0] + class CleanCommand(Command): def __init__(self, command_args): Command.__init__(self, command_args) diff --git a/mediapipe_api/BUILD b/mediapipe_api/BUILD index 93e519949..0883d13a7 100644 --- a/mediapipe_api/BUILD +++ b/mediapipe_api/BUILD @@ -153,7 +153,8 @@ pkg_asset( "@com_google_mediapipe//mediapipe/modules/face_detection:face_detection_short_range.tflite", "@com_google_mediapipe//mediapipe/modules/face_landmark:face_landmark.tflite", "@com_google_mediapipe//mediapipe/modules/face_landmark:face_landmark_with_attention.tflite", - "@com_google_mediapipe//mediapipe/modules/hand_landmark:hand_landmark.tflite", + "@com_google_mediapipe//mediapipe/modules/hand_landmark:hand_landmark_full.tflite", + "@com_google_mediapipe//mediapipe/modules/hand_landmark:hand_landmark_lite.tflite", "@com_google_mediapipe//mediapipe/modules/hand_landmark:handedness.txt", "@com_google_mediapipe//mediapipe/modules/holistic_landmark:hand_recrop.tflite", "@com_google_mediapipe//mediapipe/modules/iris_landmark:iris_landmark.tflite", @@ -165,7 +166,8 @@ pkg_asset( "@com_google_mediapipe//mediapipe/modules/objectron:object_detection_3d_sneakers_1stage.tflite", "@com_google_mediapipe//mediapipe/modules/objectron:object_detection_oidv4_labelmap.txt", "@com_google_mediapipe//mediapipe/modules/objectron:object_detection_ssd_mobilenetv2_oidv4_fp16.tflite", - "@com_google_mediapipe//mediapipe/modules/palm_detection:palm_detection.tflite", + "@com_google_mediapipe//mediapipe/modules/palm_detection:palm_detection_full.tflite", + "@com_google_mediapipe//mediapipe/modules/palm_detection:palm_detection_lite.tflite", "@com_google_mediapipe//mediapipe/modules/pose_detection:pose_detection.tflite", "@com_google_mediapipe//mediapipe/modules/pose_landmark:pose_landmark_full.tflite", "@com_google_mediapipe//mediapipe/modules/pose_landmark:pose_landmark_heavy.tflite", diff --git a/packages.config b/packages.config index e66e73fe9..96f5dfb5b 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@ - + diff --git a/third_party/build_bazel_rules_apple_validation.diff b/third_party/build_bazel_rules_apple_validation.diff index d1156d9b7..1f4359f7c 100644 --- a/third_party/build_bazel_rules_apple_validation.diff +++ b/third_party/build_bazel_rules_apple_validation.diff @@ -1,20 +1,12 @@ diff --git a/apple/internal/ios_rules.bzl b/apple/internal/ios_rules.bzl -index ce76a4a..1f11b84 100644 +index fcf84bd0..f040baa8 100644 --- a/apple/internal/ios_rules.bzl +++ b/apple/internal/ios_rules.bzl -@@ -91,6 +91,7 @@ def _ios_application_impl(ctx): - binary_artifact = binary_target[apple_common.AppleExecutableBinary].binary - - bundle_id = ctx.attr.bundle_id -+ - bundle_verification_targets = [struct(target = ext) for ext in ctx.attr.extensions] - embeddable_targets = ctx.attr.frameworks + ctx.attr.extensions - if ctx.attr.watch_application: -@@ -198,6 +199,7 @@ def _ios_framework_impl(ctx): - binary_artifact = binary_target[apple_common.AppleDylibBinary].binary - +@@ -646,6 +646,7 @@ def _ios_framework_impl(ctx): + apple_toolchain_info = ctx.attr._toolchain[AppleSupportToolchainInfo] + bin_root_path = ctx.bin_dir.path bundle_id = ctx.attr.bundle_id + bundling_support.validate_bundle_id(bundle_id) - - signed_frameworks = [] - if getattr(ctx.file, "provisioning_profile", None): + bundle_name, bundle_extension = bundling_support.bundle_full_name_from_rule_ctx(ctx) + executable_name = bundling_support.executable_name(ctx) + entitlements = entitlements_support.entitlements( diff --git a/third_party/com_google_protobuf_fixes.diff b/third_party/com_google_protobuf_fixes.diff deleted file mode 100644 index 35f48b7de..000000000 --- a/third_party/com_google_protobuf_fixes.diff +++ /dev/null @@ -1,101 +0,0 @@ -diff --git a/BUILD b/BUILD -index 112432160..ab5e80ce2 100644 ---- a/BUILD -+++ b/BUILD -@@ -50,7 +50,7 @@ GTEST_MAIN = select({ - # ZLIB configuration - ################################################################################ - --ZLIB_DEPS = ["@zlib//:zlib"] -+ZLIB_DEPS = ["@zlib"] - - ################################################################################ - # Protobuf Runtime Library -@@ -200,6 +200,7 @@ cc_library( - includes = ["src/"], - linkopts = LINK_OPTS, - visibility = ["//visibility:public"], -+ alwayslink = 1, - ) - - PROTOBUF_DEPS = select({ -@@ -273,6 +274,7 @@ cc_library( - linkopts = LINK_OPTS, - visibility = ["//visibility:public"], - deps = [":protobuf_lite"] + PROTOBUF_DEPS, -+ alwayslink = 1, - ) - - # This provides just the header files for use in projects that need to build -@@ -867,7 +869,6 @@ py_proto_library( - protoc = ":protoc", - py_libs = [ - ":python_srcs", -- "@six//:six", - ], - srcs_version = "PY2AND3", - visibility = ["//visibility:public"], -diff --git a/src/google/protobuf/io/gzip_stream.h b/src/google/protobuf/io/gzip_stream.h -index b1ce1d36c..d5d560ea7 100644 ---- a/src/google/protobuf/io/gzip_stream.h -+++ b/src/google/protobuf/io/gzip_stream.h -@@ -47,10 +47,12 @@ - #include - #include - #include --#include -- - #include - -+#if HAVE_ZLIB -+#include -+#endif // HAVE_ZLIB -+ - namespace google { - namespace protobuf { - namespace io { -@@ -76,8 +78,10 @@ class PROTOBUF_EXPORT GzipInputStream : public ZeroCopyInputStream { - virtual ~GzipInputStream(); - - // Return last error message or NULL if no error. -+#if HAVE_ZLIB - inline const char* ZlibErrorMessage() const { return zcontext_.msg; } - inline int ZlibErrorCode() const { return zerror_; } -+#endif // HAVE_ZLIB - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size); -@@ -90,8 +94,10 @@ class PROTOBUF_EXPORT GzipInputStream : public ZeroCopyInputStream { - - ZeroCopyInputStream* sub_stream_; - -+ #if HAVE_ZLIB - z_stream zcontext_; - int zerror_; -+ #endif // HAVE_ZLIB - - void* output_buffer_; - void* output_position_; -@@ -142,9 +148,11 @@ class PROTOBUF_EXPORT GzipOutputStream : public ZeroCopyOutputStream { - - virtual ~GzipOutputStream(); - -+#if HAVE_ZLIB - // Return last error message or NULL if no error. - inline const char* ZlibErrorMessage() const { return zcontext_.msg; } - inline int ZlibErrorCode() const { return zerror_; } -+#endif // HAVE_ZLIB - - // Flushes data written so far to zipped data in the underlying stream. - // It is the caller's responsibility to flush the underlying stream if -@@ -177,8 +185,10 @@ class PROTOBUF_EXPORT GzipOutputStream : public ZeroCopyOutputStream { - void* sub_data_; - int sub_data_size_; - -+#if HAVE_ZLIB - z_stream zcontext_; - int zerror_; -+#endif //HAVE_ZLIB - void* input_buffer_; - size_t input_buffer_length_; - diff --git a/third_party/mediapipe_extension.diff b/third_party/mediapipe_extension.diff index 7b9a7aee9..91c85c0cf 100644 --- a/third_party/mediapipe_extension.diff +++ b/third_party/mediapipe_extension.diff @@ -1,12 +1,12 @@ diff --git a/mediapipe/gpu/gl_calculator_helper.cc b/mediapipe/gpu/gl_calculator_helper.cc -index efd822a..c6da56d 100644 +index d015c59..05dee07 100644 --- a/mediapipe/gpu/gl_calculator_helper.cc +++ b/mediapipe/gpu/gl_calculator_helper.cc -@@ -130,6 +130,10 @@ GlTexture GlCalculatorHelper::CreateDestinationTexture(int output_width, +@@ -128,6 +128,10 @@ GlTexture GlCalculatorHelper::CreateDestinationTexture(int output_width, return impl_->CreateDestinationTexture(output_width, output_height, format); } -+GlTexture GlCalculatorHelper::CreateDestinationTexture(const GpuBuffer& pixel_buffer) { ++GlTexture GlCalculatorHelper::CreateDestinationTexture(GpuBuffer& pixel_buffer) { + return impl_->CreateDestinationTexture(pixel_buffer); +} + @@ -14,35 +14,35 @@ index efd822a..c6da56d 100644 return impl_->GetGlContext(); } diff --git a/mediapipe/gpu/gl_calculator_helper.h b/mediapipe/gpu/gl_calculator_helper.h -index d6bd718..d2dec4b 100644 +index 5ac0ab1..f4007a0 100644 --- a/mediapipe/gpu/gl_calculator_helper.h +++ b/mediapipe/gpu/gl_calculator_helper.h -@@ -134,6 +134,8 @@ class GlCalculatorHelper { +@@ -141,6 +141,8 @@ class GlCalculatorHelper { int output_width, int output_height, GpuBufferFormat format = GpuBufferFormat::kBGRA32); -+ GlTexture CreateDestinationTexture(const GpuBuffer& pixel_buffer); ++ GlTexture CreateDestinationTexture(GpuBuffer& pixel_buffer); + // The OpenGL name of the output framebuffer. GLuint framebuffer() const; diff --git a/mediapipe/gpu/gl_calculator_helper_impl.h b/mediapipe/gpu/gl_calculator_helper_impl.h -index 40b53f5..3214043 100644 +index c17c724..bab2fb2 100644 --- a/mediapipe/gpu/gl_calculator_helper_impl.h +++ b/mediapipe/gpu/gl_calculator_helper_impl.h @@ -49,6 +49,7 @@ class GlCalculatorHelperImpl { // Creates a framebuffer and returns the texture that it is bound to. GlTexture CreateDestinationTexture(int output_width, int output_height, GpuBufferFormat format); -+ GlTexture CreateDestinationTexture(const GpuBuffer& gpu_buffer); ++ GlTexture CreateDestinationTexture(GpuBuffer& gpu_buffer); GLuint framebuffer() const { return framebuffer_; } void BindFramebuffer(const GlTexture& dst); diff --git a/mediapipe/gpu/gl_calculator_helper_impl_common.cc b/mediapipe/gpu/gl_calculator_helper_impl_common.cc -index fef2550..67f7b43 100644 +index 0bcf089..23419ad 100644 --- a/mediapipe/gpu/gl_calculator_helper_impl_common.cc +++ b/mediapipe/gpu/gl_calculator_helper_impl_common.cc -@@ -146,14 +146,18 @@ std::unique_ptr GlTexture::GetFrame() const { +@@ -143,12 +143,17 @@ std::unique_ptr GlTexture::GetFrame() const { GlTexture GlCalculatorHelperImpl::CreateDestinationTexture( int width, int height, GpuBufferFormat format) { @@ -52,17 +52,14 @@ index fef2550..67f7b43 100644 + return CreateDestinationTexture(buffer); +} + -+GlTexture GlCalculatorHelperImpl::CreateDestinationTexture(const GpuBuffer& gpu_buffer) { ++GlTexture GlCalculatorHelperImpl::CreateDestinationTexture(GpuBuffer& gpu_buffer) { if (!framebuffer_) { CreateFramebuffer(); } -- GpuBuffer buffer = +- GpuBuffer gpu_buffer = - gpu_resources_.gpu_buffer_pool().GetBuffer(width, height, format); -- GlTexture texture = MapGpuBuffer(buffer, 0, false); -- -+ GlTexture texture = MapGpuBuffer(gpu_buffer, 0, false); - return texture; + return MapGpuBuffer(gpu_buffer, gpu_buffer.GetWriteView(0)); } diff --git a/mediapipe/gpu/gl_scaler_calculator.cc b/mediapipe/gpu/gl_scaler_calculator.cc @@ -147,114 +144,6 @@ index fa06c88..0d0bd0c 100644 helper_.BindFramebuffer(dst); glActiveTexture(GL_TEXTURE1); glBindTexture(src1.target(), src1.name()); -diff --git a/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_cpu.pbtxt b/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_cpu.pbtxt -index e1a25e9..1d99672 100644 ---- a/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_cpu.pbtxt -+++ b/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_cpu.pbtxt -@@ -8,6 +8,11 @@ input_stream: "IMAGE:input_video" - # Face-related pose landmarks. (NormalizedLandmarkList) - input_stream: "FACE_LANDMARKS_FROM_POSE:face_landmarks_from_pose" - -+# Whether to run the face landmark model with attention on lips and eyes to -+# provide more accuracy, and additionally output iris landmarks. If unspecified, -+# functions as set to false. (bool) -+input_side_packet: "REFINE_LANDMARKS:refine_landmarks" -+ - # Face landmarks. (NormalizedLandmarkList) - output_stream: "FACE_LANDMARKS:face_landmarks" - -@@ -72,5 +77,6 @@ node { - calculator: "FaceLandmarkCpu" - input_stream: "IMAGE:input_video" - input_stream: "ROI:face_tracking_roi" -+ input_side_packet: "WITH_ATTENTION:refine_landmarks" - output_stream: "LANDMARKS:face_landmarks" - } -diff --git a/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_gpu.pbtxt b/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_gpu.pbtxt -index 872526b..24a9854 100644 ---- a/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_gpu.pbtxt -+++ b/mediapipe/modules/holistic_landmark/face_landmarks_from_pose_gpu.pbtxt -@@ -8,6 +8,11 @@ input_stream: "IMAGE:input_video" - # Face-related pose landmarks. (NormalizedLandmarkList) - input_stream: "FACE_LANDMARKS_FROM_POSE:face_landmarks_from_pose" - -+# Whether to run the face landmark model with attention on lips and eyes to -+# provide more accuracy, and additionally output iris landmarks. If unspecified, -+# functions as set to false. (bool) -+input_side_packet: "REFINE_LANDMARKS:refine_landmarks" -+ - # Face landmarks. (NormalizedLandmarkList) - output_stream: "FACE_LANDMARKS:face_landmarks" - -@@ -72,5 +77,6 @@ node { - calculator: "FaceLandmarkGpu" - input_stream: "IMAGE:input_video" - input_stream: "ROI:face_tracking_roi" -+ input_side_packet: "WITH_ATTENTION:refine_landmarks" - output_stream: "LANDMARKS:face_landmarks" - } -diff --git a/mediapipe/modules/holistic_landmark/holistic_landmark_cpu.pbtxt b/mediapipe/modules/holistic_landmark/holistic_landmark_cpu.pbtxt -index 878e230..4490895 100644 ---- a/mediapipe/modules/holistic_landmark/holistic_landmark_cpu.pbtxt -+++ b/mediapipe/modules/holistic_landmark/holistic_landmark_cpu.pbtxt -@@ -35,6 +35,7 @@ - # input_side_packet: "SMOOTH_LANDMARKS:smooth_landmarks" - # input_side_packet: "ENABLE_SEGMENTATION:enable_segmentation" - # input_side_packet: "SMOOTH_SEGMENTATION:smooth_segmentation" -+# input_side_packet: "REFINE_FACE_LANDMARKS:refine_face_landmarks" - # input_side_packet: "USE_PREV_LANDMARKS:use_prev_landmarks" - # output_stream: "POSE_LANDMARKS:pose_landmarks" - # output_stream: "FACE_LANDMARKS:face_landmarks" -@@ -70,6 +71,11 @@ input_side_packet: "ENABLE_SEGMENTATION:enable_segmentation" - # jitter. If unspecified, functions as set to true. (bool) - input_side_packet: "SMOOTH_SEGMENTATION:smooth_segmentation" - -+# Whether to run the face landmark model with attention on lips and eyes to -+# provide more accuracy, and additionally output iris landmarks. If unspecified, -+# functions as set to false. (bool) -+input_side_packet: "REFINE_FACE_LANDMARKS:refine_face_landmarks" -+ - # Whether landmarks on the previous image should be used to help localize - # landmarks on the current image. (bool) - input_side_packet: "USE_PREV_LANDMARKS:use_prev_landmarks" -@@ -135,5 +141,6 @@ node { - calculator: "FaceLandmarksFromPoseCpu" - input_stream: "IMAGE:image" - input_stream: "FACE_LANDMARKS_FROM_POSE:face_landmarks_from_pose" -+ input_side_packet: "REFINE_LANDMARKS:refine_face_landmarks" - output_stream: "FACE_LANDMARKS:face_landmarks" - } -diff --git a/mediapipe/modules/holistic_landmark/holistic_landmark_gpu.pbtxt b/mediapipe/modules/holistic_landmark/holistic_landmark_gpu.pbtxt -index dc2a7b9..2ae20fe 100644 ---- a/mediapipe/modules/holistic_landmark/holistic_landmark_gpu.pbtxt -+++ b/mediapipe/modules/holistic_landmark/holistic_landmark_gpu.pbtxt -@@ -35,6 +35,7 @@ - # input_side_packet: "SMOOTH_LANDMARKS:smooth_landmarks" - # input_side_packet: "ENABLE_SEGMENTATION:enable_segmentation" - # input_side_packet: "SMOOTH_SEGMENTATION:smooth_segmentation" -+# input_side_packet: "REFINE_FACE_LANDMARKS:refine_face_landmarks" - # input_side_packet: "USE_PREV_LANDMARKS:use_prev_landmarks" - # output_stream: "POSE_LANDMARKS:pose_landmarks" - # output_stream: "FACE_LANDMARKS:face_landmarks" -@@ -70,6 +71,11 @@ input_side_packet: "ENABLE_SEGMENTATION:enable_segmentation" - # jitter. If unspecified, functions as set to true. (bool) - input_side_packet: "SMOOTH_SEGMENTATION:smooth_segmentation" - -+# Whether to run the face landmark model with attention on lips and eyes to -+# provide more accuracy, and additionally output iris landmarks. If unspecified, -+# functions as set to false. (bool) -+input_side_packet: "REFINE_FACE_LANDMARKS:refine_face_landmarks" -+ - # Whether landmarks on the previous image should be used to help localize - # landmarks on the current image. (bool) - input_side_packet: "USE_PREV_LANDMARKS:use_prev_landmarks" -@@ -135,5 +141,6 @@ node { - calculator: "FaceLandmarksFromPoseGpu" - input_stream: "IMAGE:image" - input_stream: "FACE_LANDMARKS_FROM_POSE:face_landmarks_from_pose" -+ input_side_packet: "REFINE_LANDMARKS:refine_face_landmarks" - output_stream: "FACE_LANDMARKS:face_landmarks" - } diff --git a/mediapipe/modules/objectron/objectron_gpu.pbtxt b/mediapipe/modules/objectron/objectron_gpu.pbtxt index 7ef2b67..83856d5 100644 --- a/mediapipe/modules/objectron/objectron_gpu.pbtxt diff --git a/third_party/mediapipe_workaround.diff b/third_party/mediapipe_workaround.diff index 0bd32a12b..e0fc62548 100644 --- a/third_party/mediapipe_workaround.diff +++ b/third_party/mediapipe_workaround.diff @@ -285,18 +285,18 @@ index fb75eb3..0eee4ff 100644 ":annotation_cc_proto", ":belief_decoder_config_cc_proto", diff --git a/mediapipe/util/tflite/tflite_gpu_runner.cc b/mediapipe/util/tflite/tflite_gpu_runner.cc -index 5445f02..3f0eed7 100644 +index 14a12db..b01ff6d 100644 --- a/mediapipe/util/tflite/tflite_gpu_runner.cc +++ b/mediapipe/util/tflite/tflite_gpu_runner.cc -@@ -213,8 +213,10 @@ absl::Status TFLiteGPURunner::InitializeOpenCL( - cl::NewInferenceEnvironment(env_options, &cl_environment_, &properties)); +@@ -252,8 +252,10 @@ absl::Status TFLiteGPURunner::InitializeOpenCL( MP_RETURN_IF_ERROR(cl_environment_->NewInferenceBuilder( - cl_options, std::move(*graph_cl_), builder)); --#endif + cl_options, std::move(graph_cl), builder)); + +-#endif // __ANDROID__ return absl::OkStatus(); +#else + return mediapipe::UnimplementedError("OpenCL is currently only supported on Android"); -+#endif ++#endif // __ANDROID__ } - } // namespace gpu + #ifdef __ANDROID__ diff --git a/third_party/tensorflow_python_path.diff b/third_party/tensorflow_python_path.diff deleted file mode 100644 index 19d44b6cd..000000000 --- a/third_party/tensorflow_python_path.diff +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/third_party/py/python_configure.bzl b/third_party/py/python_configure.bzl -index 2f75262ea9f..34e8b7d4288 100644 ---- a/third_party/py/python_configure.bzl -+++ b/third_party/py/python_configure.bzl -@@ -124,8 +124,8 @@ def _get_python_lib(repository_ctx, python_bin): - for line in print_lib: - cmd += "f.write(\"%s\" + linesep);" % line - cmd += "f.close();" -- cmd += "from os import system;" -- cmd += "system(\"%s script.py\");" % python_bin -+ cmd += "from subprocess import call;" -+ cmd += "call([\"%s\", \"script.py\"]);" % python_bin - - result = execute(repository_ctx, [python_bin, "-c", cmd]) - return result.stdout.strip()