diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity new file mode 100644 index 000000000..3fa9e3deb --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity @@ -0,0 +1,1351 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44402242, g: 0.49316543, b: 0.5722324, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &64875044 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1324426573} + m_Modifications: + - target: {fileID: 5403310940259726730, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_Name + value: MultiFaceLandmarks Annotation + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5403310940259726732, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2e1291ddc10af56d4be1551cc630d40b, type: 3} +--- !u!114 &64875045 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 5403310940259726731, guid: 2e1291ddc10af56d4be1551cc630d40b, + type: 3} + m_PrefabInstance: {fileID: 64875044} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1ec0e202f29d7ee28cccba68415d95b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &275874966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 275874967} + - component: {fileID: 275874969} + - component: {fileID: 275874968} + - component: {fileID: 275874970} + - component: {fileID: 275874974} + - component: {fileID: 275874973} + - component: {fileID: 275874972} + - component: {fileID: 275874971} + m_Layer: 0 + m_Name: Solution + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &275874967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &275874968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1c6464c8fa51e1b78878a87e35db72d6, type: 3} + m_Name: + m_EditorClassIdentifier: + _cpuConfig: {fileID: 4900000, guid: b0e338b8c93d9ea49a67d43256d0ab37, type: 3} + _gpuConfig: {fileID: 4900000, guid: 8f24b5e9c825b3b44b2d84f6f66da532, type: 3} + _openGlEsConfig: {fileID: 4900000, guid: 286b806330f6d8a4e9faead2377cb808, type: 3} + _timeoutMicrosec: 50000 + maxNumFaces: 1 + refineLandmarks: 1 + blenshapes: 1 +--- !u!114 &275874969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87e89e3d7ca41d8529430dbee11cd4bb, type: 3} + m_Name: + m_EditorClassIdentifier: + bootstrap: {fileID: 0} + screen: {fileID: 1324426578} + graphRunner: {fileID: 275874968} + textureFramePool: {fileID: 275874970} + runningMode: 0 + _faceDetectionsAnnotationController: {fileID: 1324426577} + _multiFaceLandmarksAnnotationController: {fileID: 1324426576} + _faceRectsFromLandmarksAnnotationController: {fileID: 1324426575} + _faceRectsFromDetectionsAnnotationController: {fileID: 1324426579} +--- !u!114 &275874970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5da564da19cb6b7d8e4f97f269edc5d, type: 3} + m_Name: + m_EditorClassIdentifier: + _poolSize: 10 +--- !u!114 &275874971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 04085488e5fac35599866a2a6fceeda3, type: 3} + m_Name: + m_EditorClassIdentifier: + _availableSources: [] +--- !u!114 &275874972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd7955705ab46c72b9124bb116a2dca9, type: 3} + m_Name: + m_EditorClassIdentifier: + _availableSources: [] + _defaultAvailableResolutions: + - width: 512 + height: 512 + frameRate: 0 + - width: 640 + height: 480 + frameRate: 0 + - width: 1280 + height: 720 + frameRate: 0 +--- !u!114 &275874973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 498146e99d4934673bd948c8be11227e, type: 3} + m_Name: + m_EditorClassIdentifier: + _preferableDefaultWidth: 1280 + _defaultAvailableResolutions: + - width: 176 + height: 144 + frameRate: 30 + - width: 320 + height: 240 + frameRate: 30 + - width: 424 + height: 240 + frameRate: 30 + - width: 640 + height: 360 + frameRate: 30 + - width: 640 + height: 480 + frameRate: 30 + - width: 848 + height: 480 + frameRate: 30 + - width: 960 + height: 540 + frameRate: 30 + - width: 1280 + height: 720 + frameRate: 30 + - width: 1600 + height: 896 + frameRate: 30 + - width: 1920 + height: 1080 + frameRate: 30 +--- !u!114 &275874974 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 275874966} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4d846393f8d9f20fa64b924b0d95e68, type: 3} + m_Name: + m_EditorClassIdentifier: + _defaultImageSource: 0 + _preferableInferenceMode: 0 + _assetLoaderType: 2 + _enableGlog: 1 +--- !u!1 &638479256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638479258} + - component: {fileID: 638479257} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &638479257 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638479256} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &638479258 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638479256} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1001 &705621525 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4073763783843571378, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4073763783843571378, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4073763783843571378, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4073763783843571378, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692484344150001, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692484344150001, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692484344150001, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692484344150001, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485022354238, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485022354238, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485022354238, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485022354238, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485785395896, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485785395896, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485785395896, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5158692485785395896, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426121, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_Name + value: Main Canvas + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426122, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 1264297880} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076842338426133, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076843237194833, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: solution + value: + objectReference: {fileID: 275874969} + - target: {fileID: 8571076843237194833, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: _solution + value: + objectReference: {fileID: 275874969} + - target: {fileID: 8571076843980202029, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: contents + value: + objectReference: {fileID: 8388806499988947296, guid: ce79b1badb6b0bb449c63d4f81ea6717, + type: 3} + - target: {fileID: 8571076843980202029, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: _contents + value: + objectReference: {fileID: 8388806499988947296, guid: ce79b1badb6b0bb449c63d4f81ea6717, + type: 3} + - target: {fileID: 8571076844286272849, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076844286272849, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076844286272849, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8571076844286272849, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 140d1d2c406167c50819d89f86d9092e, type: 3} +--- !u!224 &705621526 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8571076844135231236, guid: 140d1d2c406167c50819d89f86d9092e, + type: 3} + m_PrefabInstance: {fileID: 705621525} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1223870913 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1223870916} + - component: {fileID: 1223870915} + - component: {fileID: 1223870914} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1223870914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223870913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1223870915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223870913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1223870916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223870913} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1264297878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1264297881} + - component: {fileID: 1264297880} + - component: {fileID: 1264297879} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1264297879 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264297878} + m_Enabled: 1 +--- !u!20 &1264297880 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264297878} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1264297881 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264297878} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1302709924 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1324426573} + m_Modifications: + - target: {fileID: 1620015869145370096, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_Name + value: FaceRectsFromDetections Annotation + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: _color.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: _color.b + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: _color.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: _color.r + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8fcc7ea504479f06a9334ee2faa42b57, type: 3} +--- !u!114 &1302709925 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + m_PrefabInstance: {fileID: 1302709924} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff689dc19c0db10608af875e2c24ade9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1324426572 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 705621526} + m_Modifications: + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014650, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3259285889726014651, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + propertyPath: m_Name + value: Annotatable Screen + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5713b959e3c77a58fb258133fc8e4aef, type: 3} +--- !u!4 &1324426573 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7074087083388479136, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + m_PrefabInstance: {fileID: 1324426572} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1324426574 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8798066379235852099, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + m_PrefabInstance: {fileID: 1324426572} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1324426575 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324426574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f4190c4421f92d5187d2ebdc88a9594, type: 3} + m_Name: + m_EditorClassIdentifier: + annotation: {fileID: 2099725096} +--- !u!114 &1324426576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324426574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 417bb930807ba51e9bfcc5d0e24ef3ec, type: 3} + m_Name: + m_EditorClassIdentifier: + annotation: {fileID: 64875045} + _visualizeZ: 0 +--- !u!114 &1324426577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324426574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8741257e98d0a1560b37e577decc0e2b, type: 3} + m_Name: + m_EditorClassIdentifier: + annotation: {fileID: 1329911428} + _threshold: 0 +--- !u!114 &1324426578 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2020366215714292840, guid: 5713b959e3c77a58fb258133fc8e4aef, + type: 3} + m_PrefabInstance: {fileID: 1324426572} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 827c4431af677e057aa6f14170d0785c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1324426579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1324426574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f4190c4421f92d5187d2ebdc88a9594, type: 3} + m_Name: + m_EditorClassIdentifier: + annotation: {fileID: 1302709925} +--- !u!1001 &1329911427 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1324426573} + m_Modifications: + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5535674424067552597, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6320745076577806712, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + propertyPath: m_Name + value: FaceDetections Annotation + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 26114bc9cccb92454a468ea4d41f400a, type: 3} +--- !u!114 &1329911428 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: -6338546567352850726, guid: 26114bc9cccb92454a468ea4d41f400a, + type: 3} + m_PrefabInstance: {fileID: 1329911427} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d433cdb024dfd584696eeb11efb71102, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &2099725095 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1324426573} + m_Modifications: + - target: {fileID: 1620015869145370096, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_Name + value: FaceRectsFromLandmarks Annotation + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1620015869145370099, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8fcc7ea504479f06a9334ee2faa42b57, type: 3} +--- !u!114 &2099725096 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1620015869145370098, guid: 8fcc7ea504479f06a9334ee2faa42b57, + type: 3} + m_PrefabInstance: {fileID: 2099725095} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff689dc19c0db10608af875e2c24ade9, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity.meta b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity.meta new file mode 100644 index 000000000..a900c8bdd --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/Face Blendshapes.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ddb43d2311c0094293afcc62b20b305 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshGraph.cs b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshGraph.cs index 3cba1bfff..3d345be3d 100644 --- a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshGraph.cs +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshGraph.cs @@ -17,6 +17,7 @@ public class FaceMeshGraph : GraphRunner { public int maxNumFaces = 1; public bool refineLandmarks = true; + public bool blenshapes = false; private float _minDetectionConfidence = 0.5f; public float minDetectionConfidence @@ -56,17 +57,26 @@ public event EventHandler>> OnFaceRectsFrom remove => _faceRectsFromDetectionsStream.RemoveListener(value); } + public event EventHandler> OnFaceClassificationsFromBlendShapesOutput + { + add => _faceBlendShapesStream?.AddListener(value); + remove => _faceBlendShapesStream?.RemoveListener(value); + } + private const string _InputStreamName = "input_video"; private const string _FaceDetectionsStreamName = "face_detections"; private const string _MultiFaceLandmarksStreamName = "multi_face_landmarks"; private const string _FaceRectsFromLandmarksStreamName = "face_rects_from_landmarks"; private const string _FaceRectsFromDetectionsStreamName = "face_rects_from_detections"; + private const string _FaceBlendShapesStreamName = "blendshapes"; private OutputStream> _faceDetectionsStream; private OutputStream> _multiFaceLandmarksStream; private OutputStream> _faceRectsFromLandmarksStream; private OutputStream> _faceRectsFromDetectionsStream; + private OutputStream _faceBlendShapesStream; + public override void StartRun(ImageSource imageSource) { @@ -76,6 +86,8 @@ public override void StartRun(ImageSource imageSource) _multiFaceLandmarksStream.StartPolling().AssertOk(); _faceRectsFromLandmarksStream.StartPolling().AssertOk(); _faceRectsFromDetectionsStream.StartPolling().AssertOk(); + if (blenshapes) + _faceBlendShapesStream.StartPolling().AssertOk(); } StartRun(BuildSidePacket(imageSource)); } @@ -90,6 +102,8 @@ public override void Stop() _faceRectsFromLandmarksStream = null; _faceRectsFromDetectionsStream?.Close(); _faceRectsFromDetectionsStream = null; + _faceBlendShapesStream?.Close(); + _faceBlendShapesStream = null; base.Stop(); } @@ -99,15 +113,23 @@ public void AddTextureFrameToInputStream(TextureFrame textureFrame) } public bool TryGetNext(out List faceDetections, out List multiFaceLandmarks, - out List faceRectsFromLandmarks, out List faceRectsFromDetections, bool allowBlock = true) + out List faceRectsFromLandmarks, out List faceRectsFromDetections, out ClassificationList faceBlendShapes, bool allowBlock = true) { var currentTimestampMicrosec = GetCurrentTimestampMicrosec(); var r1 = TryGetNext(_faceDetectionsStream, out faceDetections, allowBlock, currentTimestampMicrosec); var r2 = TryGetNext(_multiFaceLandmarksStream, out multiFaceLandmarks, allowBlock, currentTimestampMicrosec); var r3 = TryGetNext(_faceRectsFromLandmarksStream, out faceRectsFromLandmarks, allowBlock, currentTimestampMicrosec); var r4 = TryGetNext(_faceRectsFromDetectionsStream, out faceRectsFromDetections, allowBlock, currentTimestampMicrosec); - - return r1 || r2 || r3 || r4; + if (blenshapes) + { + var r5 = TryGetNext(_faceBlendShapesStream, out faceBlendShapes, allowBlock, currentTimestampMicrosec); + return r1 || r2 || r3 || r4 || r5; + } + else + { + faceBlendShapes = null; + return r1 || r2 || r3 || r4; + } } protected override Status ConfigureCalculatorGraph(CalculatorGraphConfig config) @@ -122,6 +144,9 @@ protected override Status ConfigureCalculatorGraph(CalculatorGraphConfig config) calculatorGraph, _FaceRectsFromLandmarksStreamName, config.AddPacketPresenceCalculator(_FaceRectsFromLandmarksStreamName), timeoutMicrosec); _faceRectsFromDetectionsStream = new OutputStream>( calculatorGraph, _FaceRectsFromDetectionsStreamName, config.AddPacketPresenceCalculator(_FaceDetectionsStreamName), timeoutMicrosec); + if (blenshapes) + _faceBlendShapesStream = new OutputStream( + calculatorGraph, _FaceBlendShapesStreamName, config.AddPacketPresenceCalculator(_FaceBlendShapesStreamName), timeoutMicrosec); } else { @@ -129,6 +154,8 @@ protected override Status ConfigureCalculatorGraph(CalculatorGraphConfig config) _multiFaceLandmarksStream = new OutputStream>(calculatorGraph, _MultiFaceLandmarksStreamName, true, timeoutMicrosec); _faceRectsFromLandmarksStream = new OutputStream>(calculatorGraph, _FaceRectsFromLandmarksStreamName, true, timeoutMicrosec); _faceRectsFromDetectionsStream = new OutputStream>(calculatorGraph, _FaceRectsFromDetectionsStreamName, true, timeoutMicrosec); + if (blenshapes) + _faceBlendShapesStream = new OutputStream(calculatorGraph, _FaceBlendShapesStreamName, true, timeoutMicrosec); } using (var validatedGraphConfig = new ValidatedGraphConfig()) @@ -174,10 +201,13 @@ protected override Status ConfigureCalculatorGraph(CalculatorGraphConfig config) protected override IList RequestDependentAssets() { - return new List { + var ret = new List { WaitForAsset("face_detection_short_range.bytes"), WaitForAsset(refineLandmarks ? "face_landmark_with_attention.bytes" : "face_landmark.bytes"), }; + if (blenshapes) + ret.Add(WaitForAsset("face_blendshapes.bytes")); + return ret; } private SidePacket BuildSidePacket(ImageSource imageSource) diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshSolution.cs b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshSolution.cs index 046fd250b..22f705985 100644 --- a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshSolution.cs +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/FaceMeshSolution.cs @@ -49,6 +49,7 @@ protected override void OnStartRun() graphRunner.OnMultiFaceLandmarksOutput += OnMultiFaceLandmarksOutput; graphRunner.OnFaceRectsFromLandmarksOutput += OnFaceRectsFromLandmarksOutput; graphRunner.OnFaceRectsFromDetectionsOutput += OnFaceRectsFromDetectionsOutput; + graphRunner.OnFaceClassificationsFromBlendShapesOutput += OnFaceClassificationsFromBlendShapesOutput; } var imageSource = ImageSourceProvider.ImageSource; @@ -69,20 +70,23 @@ protected override IEnumerator WaitForNextValue() List multiFaceLandmarks = null; List faceRectsFromLandmarks = null; List faceRectsFromDetections = null; + ClassificationList faceBlendShapes = null; if (runningMode == RunningMode.Sync) { - var _ = graphRunner.TryGetNext(out faceDetections, out multiFaceLandmarks, out faceRectsFromLandmarks, out faceRectsFromDetections, true); + var _ = graphRunner.TryGetNext(out faceDetections, out multiFaceLandmarks, out faceRectsFromLandmarks, out faceRectsFromDetections, out faceBlendShapes, true); } else if (runningMode == RunningMode.NonBlockingSync) { - yield return new WaitUntil(() => graphRunner.TryGetNext(out faceDetections, out multiFaceLandmarks, out faceRectsFromLandmarks, out faceRectsFromDetections, false)); + yield return new WaitUntil(() => graphRunner.TryGetNext(out faceDetections, out multiFaceLandmarks, out faceRectsFromLandmarks, out faceRectsFromDetections, out faceBlendShapes, false)); } _faceDetectionsAnnotationController.DrawNow(faceDetections); _multiFaceLandmarksAnnotationController.DrawNow(multiFaceLandmarks); _faceRectsFromLandmarksAnnotationController.DrawNow(faceRectsFromLandmarks); _faceRectsFromDetectionsAnnotationController.DrawNow(faceRectsFromDetections); + if (faceBlendShapes != null) + Debug.Log($"Blendshapes count {faceBlendShapes.Classification.Count}"); } private void OnFaceDetectionsOutput(object stream, OutputEventArgs> eventArgs) @@ -104,5 +108,10 @@ private void OnFaceRectsFromDetectionsOutput(object stream, OutputEventArgs eventArgs) + { + Debug.Log($"Blendshapes count {eventArgs.value?.Classification?.Count}"); + } } } diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt new file mode 100644 index 000000000..ed5292b44 --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt @@ -0,0 +1,297 @@ +# Copyright 2019 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Copied from mediapipe/graphs/face_mesh/face_mesh_desktop_live.pbtxt +# +# CHANGES: +# - Add ImageTransformationCalculator and rotate the input +# - Remove FaceRendererCpu + +# MediaPipe graph that performs face mesh with TensorFlow Lite on CPU. + +# Input image. (ImageFrame) +input_stream: "input_video" + +# Max number of faces to detect/process. (int) +input_side_packet: "num_faces" + +# Collection of detected/processed faces, each represented as a list of +# landmarks. (std::vector) +output_stream: "multi_face_landmarks" + +output_stream: "face_rects_from_landmarks" +output_stream: "face_detections" +output_stream: "face_rects_from_detections" +output_stream: "blendshapes" + +# Throttles the images flowing downstream for flow control. It passes through +# the very first incoming image unaltered, and waits for downstream nodes +# (calculators and subgraphs) in the graph to finish their tasks before it +# passes through another image. All images that come in while waiting are +# dropped, limiting the number of in-flight images in most part of the graph to +# 1. This prevents the downstream nodes from queuing up incoming images and data +# excessively, which leads to increased latency and memory usage, unwanted in +# real-time mobile applications. It also eliminates unnecessarily computation, +# e.g., the output produced by a node may get dropped downstream if the +# subsequent nodes are still busy processing previous inputs. +node { + calculator: "FlowLimiterCalculator" + input_stream: "input_video" + input_stream: "FINISHED:blendshapes" + input_stream_info: { + tag_index: "FINISHED" + back_edge: true + } + output_stream: "throttled_input_video" +} + +node: { + calculator: "ImageTransformationCalculator" + input_stream: "IMAGE:throttled_input_video" + input_side_packet: "ROTATION_DEGREES:input_rotation" + input_side_packet: "FLIP_HORIZONTALLY:input_horizontally_flipped" + input_side_packet: "FLIP_VERTICALLY:input_vertically_flipped" + output_stream: "IMAGE:transformed_input_video" +} + +# Subgraph that detects faces and corresponding landmarks. +node { + calculator: "FaceLandmarkFrontCpu" + input_stream: "IMAGE:transformed_input_video" + input_side_packet: "NUM_FACES:num_faces" + input_side_packet: "WITH_ATTENTION:with_attention" + output_stream: "LANDMARKS:multi_face_landmarks" + output_stream: "ROIS_FROM_LANDMARKS:face_rects_from_landmarks" + output_stream: "DETECTIONS:face_detections" + output_stream: "ROIS_FROM_DETECTIONS:face_rects_from_detections" +} + +# Calculate size of the image. +node { + calculator: "ImagePropertiesCalculator" + input_stream: "IMAGE:throttled_input_video" + output_stream: "SIZE:image_size" +} + +node { + calculator: "SplitNormalizedLandmarkListVectorCalculator" + input_stream: "multi_face_landmarks" + output_stream: "face_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + element_only: true + } + } +} + +node { + calculator: "SplitNormalizedLandmarkListCalculator" + input_stream: "face_landmarks" + output_stream: "blendshape_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + ranges: { begin: 1 end: 2 } + ranges: { begin: 4 end: 9 } + ranges: { begin: 10 end: 11 } + ranges: { begin: 13 end: 15 } + ranges: { begin: 17 end: 18 } + ranges: { begin: 21 end: 22 } + ranges: { begin: 33 end: 34 } + ranges: { begin: 37 end: 38 } + ranges: { begin: 39 end: 41 } + ranges: { begin: 46 end: 47 } + ranges: { begin: 52 end: 56 } + ranges: { begin: 58 end: 59 } + ranges: { begin: 61 end: 62 } + ranges: { begin: 63 end: 64 } + ranges: { begin: 65 end: 68 } + ranges: { begin: 70 end: 71 } + ranges: { begin: 78 end: 79 } + ranges: { begin: 80 end: 83 } + ranges: { begin: 84 end: 85 } + ranges: { begin: 87 end: 89 } + ranges: { begin: 91 end: 92 } + ranges: { begin: 93 end: 94 } + ranges: { begin: 95 end: 96 } + ranges: { begin: 103 end: 104 } + ranges: { begin: 105 end: 106 } + ranges: { begin: 107 end: 108 } + ranges: { begin: 109 end: 110 } + ranges: { begin: 127 end: 128 } + ranges: { begin: 132 end: 134 } + ranges: { begin: 136 end: 137 } + ranges: { begin: 144 end: 147 } + ranges: { begin: 148 end: 151 } + ranges: { begin: 152 end: 156 } + ranges: { begin: 157 end: 164 } + ranges: { begin: 168 end: 169 } + ranges: { begin: 172 end: 174 } + ranges: { begin: 176 end: 177 } + ranges: { begin: 178 end: 179 } + ranges: { begin: 181 end: 182 } + ranges: { begin: 185 end: 186 } + ranges: { begin: 191 end: 192 } + ranges: { begin: 195 end: 196 } + ranges: { begin: 197 end: 198 } + ranges: { begin: 234 end: 235 } + ranges: { begin: 246 end: 247 } + ranges: { begin: 249 end: 250 } + ranges: { begin: 251 end: 252 } + ranges: { begin: 263 end: 264 } + ranges: { begin: 267 end: 268 } + ranges: { begin: 269 end: 271 } + ranges: { begin: 276 end: 277 } + ranges: { begin: 282 end: 286 } + ranges: { begin: 288 end: 289 } + ranges: { begin: 291 end: 292 } + ranges: { begin: 293 end: 294 } + ranges: { begin: 295 end: 298 } + ranges: { begin: 300 end: 301 } + ranges: { begin: 308 end: 309 } + ranges: { begin: 310 end: 313 } + ranges: { begin: 314 end: 315 } + ranges: { begin: 317 end: 319 } + ranges: { begin: 321 end: 322 } + ranges: { begin: 323 end: 325 } + ranges: { begin: 332 end: 333 } + ranges: { begin: 334 end: 335 } + ranges: { begin: 336 end: 337 } + ranges: { begin: 338 end: 339 } + ranges: { begin: 356 end: 357 } + ranges: { begin: 361 end: 363 } + ranges: { begin: 365 end: 366 } + ranges: { begin: 373 end: 376 } + ranges: { begin: 377 end: 383 } + ranges: { begin: 384 end: 391 } + ranges: { begin: 397 end: 399 } + ranges: { begin: 400 end: 401 } + ranges: { begin: 402 end: 403 } + ranges: { begin: 405 end: 406 } + ranges: { begin: 409 end: 410 } + ranges: { begin: 415 end: 416 } + ranges: { begin: 454 end: 455 } + ranges: { begin: 466 end: 467 } + ranges: { begin: 468 end: 478 } + combine_outputs: true + } + } +} + +node { + calculator: "LandmarksToTensorCalculator" + input_stream: "NORM_LANDMARKS:blendshape_landmarks" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "TENSORS:tensors" + options: { + [mediapipe.LandmarksToTensorCalculatorOptions.ext] { + attributes: [ X, Y] + flatten: false + } + } +} + +node { + calculator: "InferenceCalculator" + input_stream: "TENSORS:tensors" + output_stream: "TENSORS:output_tensors" + options: { + [mediapipe.InferenceCalculatorOptions.ext] { + model_path: "mediapipe/modules/face_blendshape/face_blendshapes.tflite" + delegate { + xnnpack {} + } + } + } +} + +# Splits a vector of tensors into multiple vectors. +node { + calculator: "SplitTensorVectorCalculator" + input_stream: "output_tensors" + output_stream: "blendshape_tensors" + options: { + [mediapipe.SplitVectorCalculatorOptions.ext] { + ranges: { begin: 0 end: 1 } + combine_outputs: true + } + } +} + +node { + calculator: "TensorsToClassificationCalculator" + input_stream: "TENSORS:blendshape_tensors" + output_stream: "CLASSIFICATIONS:blendshapes" + options { + [mediapipe.TensorsToClassificationCalculatorOptions.ext] { + top_k: 0 + min_score_threshold: -1.0 + label_map { + entries { id: 0, label: "_neutral" } + entries { id: 1, label: "browDownLeft" } + entries { id: 2, label: "browDownRight" } + entries { id: 3, label: "browInnerUp" } + entries { id: 4, label: "browOuterUpLeft" } + entries { id: 5, label: "browOuterUpRight" } + entries { id: 6, label: "cheekPuff" } + entries { id: 7, label: "cheekSquintLeft" } + entries { id: 8, label: "cheekSquintRight" } + entries { id: 9, label: "eyeBlinkLeft" } + entries { id: 10, label: "eyeBlinkRight" } + entries { id: 11, label: "eyeLookDownLeft" } + entries { id: 12, label: "eyeLookDownRight" } + entries { id: 13, label: "eyeLookInLeft" } + entries { id: 14, label: "eyeLookInRight" } + entries { id: 15, label: "eyeLookOutLeft" } + entries { id: 16, label: "eyeLookOutRight" } + entries { id: 17, label: "eyeLookUpLeft" } + entries { id: 18, label: "eyeLookUpRight" } + entries { id: 19, label: "eyeSquintLeft" } + entries { id: 20, label: "eyeSquintRight" } + entries { id: 21, label: "eyeWideLeft" } + entries { id: 22, label: "eyeWideRight" } + entries { id: 23, label: "jawForward" } + entries { id: 24, label: "jawLeft" } + entries { id: 25, label: "jawOpen" } + entries { id: 26, label: "jawRight" } + entries { id: 27, label: "mouthClose" } + entries { id: 28, label: "mouthDimpleLeft" } + entries { id: 29, label: "mouthDimpleRight" } + entries { id: 30, label: "mouthFrownLeft" } + entries { id: 31, label: "mouthFrownRight" } + entries { id: 32, label: "mouthFunnel" } + entries { id: 33, label: "mouthLeft" } + entries { id: 34, label: "mouthLowerDownLeft" } + entries { id: 35, label: "mouthLowerDownRight" } + entries { id: 36, label: "mouthPressLeft" } + entries { id: 37, label: "mouthPressRight" } + entries { id: 38, label: "mouthPucker" } + entries { id: 39, label: "mouthRight" } + entries { id: 40, label: "mouthRollLower" } + entries { id: 41, label: "mouthRollUpper" } + entries { id: 42, label: "mouthShrugLower" } + entries { id: 43, label: "mouthShrugUpper" } + entries { id: 44, label: "mouthSmileLeft" } + entries { id: 45, label: "mouthSmileRight" } + entries { id: 46, label: "mouthStretchLeft" } + entries { id: 47, label: "mouthStretchRight" } + entries { id: 48, label: "mouthUpperUpLeft" } + entries { id: 49, label: "mouthUpperUpRight" } + entries { id: 50, label: "noseSneerLeft" } + entries { id: 51, label: "noseSneerRight" } + } + } + } +} diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt.meta b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt.meta new file mode 100644 index 000000000..54c7f05db --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_cpu.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b0e338b8c93d9ea49a67d43256d0ab37 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt new file mode 100644 index 000000000..37fae6849 --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt @@ -0,0 +1,304 @@ +# Copyright 2019 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Copied from mediapipe/graphs/face_mesh/face_mesh_mobile.pbtxt +# +# CHANGES: +# - `input_video` is ImageFrame (ImageFrameToGpuBufferCalculator converts it into GpuBuffer) +# - Add ImageTransformationCalculator and rotate the input +# - Remove FaceRendererGpu + +# MediaPipe graph that performs face mesh with TensorFlow Lite on GPU. + +# Input image. (ImageFrame) +input_stream: "input_video" + +# Max number of faces to detect/process. (int) +input_side_packet: "num_faces" + +# Collection of detected/processed faces, each represented as a list of +# landmarks. (std::vector) +output_stream: "multi_face_landmarks" + +output_stream: "face_rects_from_landmarks" +output_stream: "face_detections" +output_stream: "face_rects_from_detections" +output_stream: "blendshapes" + +# Throttles the images flowing downstream for flow control. It passes through +# the very first incoming image unaltered, and waits for downstream nodes +# (calculators and subgraphs) in the graph to finish their tasks before it +# passes through another image. All images that come in while waiting are +# dropped, limiting the number of in-flight images in most part of the graph to +# 1. This prevents the downstream nodes from queuing up incoming images and data +# excessively, which leads to increased latency and memory usage, unwanted in +# real-time mobile applications. It also eliminates unnecessarily computation, +# e.g., the output produced by a node may get dropped downstream if the +# subsequent nodes are still busy processing previous inputs. +node { + calculator: "FlowLimiterCalculator" + input_stream: "input_video" + input_stream: "FINISHED:multi_face_landmarks" + input_stream_info: { + tag_index: "FINISHED" + back_edge: true + } + output_stream: "throttled_input_video" +} + +node: { + calculator: "ImageFrameToGpuBufferCalculator" + input_stream: "throttled_input_video" + output_stream: "throttled_input_video_gpu" +} + +node: { + calculator: "ImageTransformationCalculator" + input_stream: "IMAGE_GPU:throttled_input_video_gpu" + input_side_packet: "ROTATION_DEGREES:input_rotation" + input_side_packet: "FLIP_HORIZONTALLY:input_horizontally_flipped" + input_side_packet: "FLIP_VERTICALLY:input_vertically_flipped" + output_stream: "IMAGE_GPU:transformed_input_video" +} + +# Subgraph that detects faces and corresponding landmarks. +node { + calculator: "FaceLandmarkFrontGpu" + input_stream: "IMAGE:transformed_input_video" + input_side_packet: "NUM_FACES:num_faces" + input_side_packet: "WITH_ATTENTION:with_attention" + output_stream: "LANDMARKS:multi_face_landmarks" + output_stream: "ROIS_FROM_LANDMARKS:face_rects_from_landmarks" + output_stream: "DETECTIONS:face_detections" + output_stream: "ROIS_FROM_DETECTIONS:face_rects_from_detections" +} + +# Calculate size of the image. +node { + calculator: "ImagePropertiesCalculator" + input_stream: "IMAGE:throttled_input_video" + output_stream: "SIZE:image_size" +} + +node { + calculator: "SplitNormalizedLandmarkListVectorCalculator" + input_stream: "multi_face_landmarks" + output_stream: "face_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + element_only: true + } + } +} + +node { + calculator: "SplitNormalizedLandmarkListCalculator" + input_stream: "face_landmarks" + output_stream: "blendshape_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + ranges: { begin: 1 end: 2 } + ranges: { begin: 4 end: 9 } + ranges: { begin: 10 end: 11 } + ranges: { begin: 13 end: 15 } + ranges: { begin: 17 end: 18 } + ranges: { begin: 21 end: 22 } + ranges: { begin: 33 end: 34 } + ranges: { begin: 37 end: 38 } + ranges: { begin: 39 end: 41 } + ranges: { begin: 46 end: 47 } + ranges: { begin: 52 end: 56 } + ranges: { begin: 58 end: 59 } + ranges: { begin: 61 end: 62 } + ranges: { begin: 63 end: 64 } + ranges: { begin: 65 end: 68 } + ranges: { begin: 70 end: 71 } + ranges: { begin: 78 end: 79 } + ranges: { begin: 80 end: 83 } + ranges: { begin: 84 end: 85 } + ranges: { begin: 87 end: 89 } + ranges: { begin: 91 end: 92 } + ranges: { begin: 93 end: 94 } + ranges: { begin: 95 end: 96 } + ranges: { begin: 103 end: 104 } + ranges: { begin: 105 end: 106 } + ranges: { begin: 107 end: 108 } + ranges: { begin: 109 end: 110 } + ranges: { begin: 127 end: 128 } + ranges: { begin: 132 end: 134 } + ranges: { begin: 136 end: 137 } + ranges: { begin: 144 end: 147 } + ranges: { begin: 148 end: 151 } + ranges: { begin: 152 end: 156 } + ranges: { begin: 157 end: 164 } + ranges: { begin: 168 end: 169 } + ranges: { begin: 172 end: 174 } + ranges: { begin: 176 end: 177 } + ranges: { begin: 178 end: 179 } + ranges: { begin: 181 end: 182 } + ranges: { begin: 185 end: 186 } + ranges: { begin: 191 end: 192 } + ranges: { begin: 195 end: 196 } + ranges: { begin: 197 end: 198 } + ranges: { begin: 234 end: 235 } + ranges: { begin: 246 end: 247 } + ranges: { begin: 249 end: 250 } + ranges: { begin: 251 end: 252 } + ranges: { begin: 263 end: 264 } + ranges: { begin: 267 end: 268 } + ranges: { begin: 269 end: 271 } + ranges: { begin: 276 end: 277 } + ranges: { begin: 282 end: 286 } + ranges: { begin: 288 end: 289 } + ranges: { begin: 291 end: 292 } + ranges: { begin: 293 end: 294 } + ranges: { begin: 295 end: 298 } + ranges: { begin: 300 end: 301 } + ranges: { begin: 308 end: 309 } + ranges: { begin: 310 end: 313 } + ranges: { begin: 314 end: 315 } + ranges: { begin: 317 end: 319 } + ranges: { begin: 321 end: 322 } + ranges: { begin: 323 end: 325 } + ranges: { begin: 332 end: 333 } + ranges: { begin: 334 end: 335 } + ranges: { begin: 336 end: 337 } + ranges: { begin: 338 end: 339 } + ranges: { begin: 356 end: 357 } + ranges: { begin: 361 end: 363 } + ranges: { begin: 365 end: 366 } + ranges: { begin: 373 end: 376 } + ranges: { begin: 377 end: 383 } + ranges: { begin: 384 end: 391 } + ranges: { begin: 397 end: 399 } + ranges: { begin: 400 end: 401 } + ranges: { begin: 402 end: 403 } + ranges: { begin: 405 end: 406 } + ranges: { begin: 409 end: 410 } + ranges: { begin: 415 end: 416 } + ranges: { begin: 454 end: 455 } + ranges: { begin: 466 end: 467 } + ranges: { begin: 468 end: 478 } + combine_outputs: true + } + } +} + +node { + calculator: "LandmarksToTensorCalculator" + input_stream: "NORM_LANDMARKS:blendshape_landmarks" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "TENSORS:tensors" + options: { + [mediapipe.LandmarksToTensorCalculatorOptions.ext] { + attributes: [ X, Y] + flatten: false + } + } +} + +node { + calculator: "InferenceCalculator" + input_stream: "TENSORS:tensors" + output_stream: "TENSORS:output_tensors" + options: { + [mediapipe.InferenceCalculatorOptions.ext] { + model_path: "mediapipe/modules/face_blendshape/face_blendshapes.tflite" + delegate { + xnnpack {} + } + } + } +} + +# Splits a vector of tensors into multiple vectors. +node { + calculator: "SplitTensorVectorCalculator" + input_stream: "output_tensors" + output_stream: "blendshape_tensors" + options: { + [mediapipe.SplitVectorCalculatorOptions.ext] { + ranges: { begin: 0 end: 1 } + combine_outputs: true + } + } +} + +node { + calculator: "TensorsToClassificationCalculator" + input_stream: "TENSORS:blendshape_tensors" + output_stream: "CLASSIFICATIONS:blendshapes" + options { + [mediapipe.TensorsToClassificationCalculatorOptions.ext] { + top_k: 0 + min_score_threshold: -1.0 + label_map { + entries { id: 0, label: "_neutral" } + entries { id: 1, label: "browDownLeft" } + entries { id: 2, label: "browDownRight" } + entries { id: 3, label: "browInnerUp" } + entries { id: 4, label: "browOuterUpLeft" } + entries { id: 5, label: "browOuterUpRight" } + entries { id: 6, label: "cheekPuff" } + entries { id: 7, label: "cheekSquintLeft" } + entries { id: 8, label: "cheekSquintRight" } + entries { id: 9, label: "eyeBlinkLeft" } + entries { id: 10, label: "eyeBlinkRight" } + entries { id: 11, label: "eyeLookDownLeft" } + entries { id: 12, label: "eyeLookDownRight" } + entries { id: 13, label: "eyeLookInLeft" } + entries { id: 14, label: "eyeLookInRight" } + entries { id: 15, label: "eyeLookOutLeft" } + entries { id: 16, label: "eyeLookOutRight" } + entries { id: 17, label: "eyeLookUpLeft" } + entries { id: 18, label: "eyeLookUpRight" } + entries { id: 19, label: "eyeSquintLeft" } + entries { id: 20, label: "eyeSquintRight" } + entries { id: 21, label: "eyeWideLeft" } + entries { id: 22, label: "eyeWideRight" } + entries { id: 23, label: "jawForward" } + entries { id: 24, label: "jawLeft" } + entries { id: 25, label: "jawOpen" } + entries { id: 26, label: "jawRight" } + entries { id: 27, label: "mouthClose" } + entries { id: 28, label: "mouthDimpleLeft" } + entries { id: 29, label: "mouthDimpleRight" } + entries { id: 30, label: "mouthFrownLeft" } + entries { id: 31, label: "mouthFrownRight" } + entries { id: 32, label: "mouthFunnel" } + entries { id: 33, label: "mouthLeft" } + entries { id: 34, label: "mouthLowerDownLeft" } + entries { id: 35, label: "mouthLowerDownRight" } + entries { id: 36, label: "mouthPressLeft" } + entries { id: 37, label: "mouthPressRight" } + entries { id: 38, label: "mouthPucker" } + entries { id: 39, label: "mouthRight" } + entries { id: 40, label: "mouthRollLower" } + entries { id: 41, label: "mouthRollUpper" } + entries { id: 42, label: "mouthShrugLower" } + entries { id: 43, label: "mouthShrugUpper" } + entries { id: 44, label: "mouthSmileLeft" } + entries { id: 45, label: "mouthSmileRight" } + entries { id: 46, label: "mouthStretchLeft" } + entries { id: 47, label: "mouthStretchRight" } + entries { id: 48, label: "mouthUpperUpLeft" } + entries { id: 49, label: "mouthUpperUpRight" } + entries { id: 50, label: "noseSneerLeft" } + entries { id: 51, label: "noseSneerRight" } + } + } + } +} \ No newline at end of file diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt.meta b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt.meta new file mode 100644 index 000000000..693ef7546 --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_gpu.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f24b5e9c825b3b44b2d84f6f66da532 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt new file mode 100644 index 000000000..038bcc070 --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt @@ -0,0 +1,297 @@ +# Copyright 2019 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Copied from mediapipe/graphs/face_mesh/face_mesh_mobile.pbtxt +# +# CHANGES: +# - Add ImageTransformationCalculator and rotate the input +# - Remove FaceRendererGpu + +# MediaPipe graph that performs face mesh with TensorFlow Lite on GPU. + +# GPU buffer. (GpuBuffer) +input_stream: "input_video" + +# Max number of faces to detect/process. (int) +input_side_packet: "num_faces" + +# Collection of detected/processed faces, each represented as a list of +# landmarks. (std::vector) +output_stream: "multi_face_landmarks" + +output_stream: "face_rects_from_landmarks" +output_stream: "face_detections" +output_stream: "face_rects_from_detections" +output_stream: "blendshapes" + +# Throttles the images flowing downstream for flow control. It passes through +# the very first incoming image unaltered, and waits for downstream nodes +# (calculators and subgraphs) in the graph to finish their tasks before it +# passes through another image. All images that come in while waiting are +# dropped, limiting the number of in-flight images in most part of the graph to +# 1. This prevents the downstream nodes from queuing up incoming images and data +# excessively, which leads to increased latency and memory usage, unwanted in +# real-time mobile applications. It also eliminates unnecessarily computation, +# e.g., the output produced by a node may get dropped downstream if the +# subsequent nodes are still busy processing previous inputs. +node { + calculator: "FlowLimiterCalculator" + input_stream: "input_video" + input_stream: "FINISHED:blendshapes" + input_stream_info: { + tag_index: "FINISHED" + back_edge: true + } + output_stream: "throttled_input_video" +} + +node: { + calculator: "ImageTransformationCalculator" + input_stream: "IMAGE_GPU:throttled_input_video" + input_side_packet: "ROTATION_DEGREES:input_rotation" + input_side_packet: "FLIP_HORIZONTALLY:input_horizontally_flipped" + input_side_packet: "FLIP_VERTICALLY:input_vertically_flipped" + output_stream: "IMAGE_GPU:transformed_input_video" +} + +# Subgraph that detects faces and corresponding landmarks. +node { + calculator: "FaceLandmarkFrontGpu" + input_stream: "IMAGE:transformed_input_video" + input_side_packet: "NUM_FACES:num_faces" + input_side_packet: "WITH_ATTENTION:with_attention" + output_stream: "LANDMARKS:multi_face_landmarks" + output_stream: "ROIS_FROM_LANDMARKS:face_rects_from_landmarks" + output_stream: "DETECTIONS:face_detections" + output_stream: "ROIS_FROM_DETECTIONS:face_rects_from_detections" +} + +# Calculate size of the image. +node { + calculator: "ImagePropertiesCalculator" + input_stream: "IMAGE_GPU:throttled_input_video" + output_stream: "SIZE:image_size" +} + +node { + calculator: "SplitNormalizedLandmarkListVectorCalculator" + input_stream: "multi_face_landmarks" + output_stream: "face_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + element_only: true + } + } +} + +node { + calculator: "SplitNormalizedLandmarkListCalculator" + input_stream: "face_landmarks" + output_stream: "blendshape_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + ranges: { begin: 1 end: 2 } + ranges: { begin: 4 end: 9 } + ranges: { begin: 10 end: 11 } + ranges: { begin: 13 end: 15 } + ranges: { begin: 17 end: 18 } + ranges: { begin: 21 end: 22 } + ranges: { begin: 33 end: 34 } + ranges: { begin: 37 end: 38 } + ranges: { begin: 39 end: 41 } + ranges: { begin: 46 end: 47 } + ranges: { begin: 52 end: 56 } + ranges: { begin: 58 end: 59 } + ranges: { begin: 61 end: 62 } + ranges: { begin: 63 end: 64 } + ranges: { begin: 65 end: 68 } + ranges: { begin: 70 end: 71 } + ranges: { begin: 78 end: 79 } + ranges: { begin: 80 end: 83 } + ranges: { begin: 84 end: 85 } + ranges: { begin: 87 end: 89 } + ranges: { begin: 91 end: 92 } + ranges: { begin: 93 end: 94 } + ranges: { begin: 95 end: 96 } + ranges: { begin: 103 end: 104 } + ranges: { begin: 105 end: 106 } + ranges: { begin: 107 end: 108 } + ranges: { begin: 109 end: 110 } + ranges: { begin: 127 end: 128 } + ranges: { begin: 132 end: 134 } + ranges: { begin: 136 end: 137 } + ranges: { begin: 144 end: 147 } + ranges: { begin: 148 end: 151 } + ranges: { begin: 152 end: 156 } + ranges: { begin: 157 end: 164 } + ranges: { begin: 168 end: 169 } + ranges: { begin: 172 end: 174 } + ranges: { begin: 176 end: 177 } + ranges: { begin: 178 end: 179 } + ranges: { begin: 181 end: 182 } + ranges: { begin: 185 end: 186 } + ranges: { begin: 191 end: 192 } + ranges: { begin: 195 end: 196 } + ranges: { begin: 197 end: 198 } + ranges: { begin: 234 end: 235 } + ranges: { begin: 246 end: 247 } + ranges: { begin: 249 end: 250 } + ranges: { begin: 251 end: 252 } + ranges: { begin: 263 end: 264 } + ranges: { begin: 267 end: 268 } + ranges: { begin: 269 end: 271 } + ranges: { begin: 276 end: 277 } + ranges: { begin: 282 end: 286 } + ranges: { begin: 288 end: 289 } + ranges: { begin: 291 end: 292 } + ranges: { begin: 293 end: 294 } + ranges: { begin: 295 end: 298 } + ranges: { begin: 300 end: 301 } + ranges: { begin: 308 end: 309 } + ranges: { begin: 310 end: 313 } + ranges: { begin: 314 end: 315 } + ranges: { begin: 317 end: 319 } + ranges: { begin: 321 end: 322 } + ranges: { begin: 323 end: 325 } + ranges: { begin: 332 end: 333 } + ranges: { begin: 334 end: 335 } + ranges: { begin: 336 end: 337 } + ranges: { begin: 338 end: 339 } + ranges: { begin: 356 end: 357 } + ranges: { begin: 361 end: 363 } + ranges: { begin: 365 end: 366 } + ranges: { begin: 373 end: 376 } + ranges: { begin: 377 end: 383 } + ranges: { begin: 384 end: 391 } + ranges: { begin: 397 end: 399 } + ranges: { begin: 400 end: 401 } + ranges: { begin: 402 end: 403 } + ranges: { begin: 405 end: 406 } + ranges: { begin: 409 end: 410 } + ranges: { begin: 415 end: 416 } + ranges: { begin: 454 end: 455 } + ranges: { begin: 466 end: 467 } + ranges: { begin: 468 end: 478 } + combine_outputs: true + } + } +} + +node { + calculator: "LandmarksToTensorCalculator" + input_stream: "NORM_LANDMARKS:blendshape_landmarks" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "TENSORS:tensors" + options: { + [mediapipe.LandmarksToTensorCalculatorOptions.ext] { + attributes: [ X, Y] + flatten: false + } + } +} + +node { + calculator: "InferenceCalculator" + input_stream: "TENSORS:tensors" + output_stream: "TENSORS:output_tensors" + options: { + [mediapipe.InferenceCalculatorOptions.ext] { + model_path: "mediapipe/modules/face_blendshape/face_blendshapes.tflite" + delegate { + xnnpack {} + } + } + } +} + +# Splits a vector of tensors into multiple vectors. +node { + calculator: "SplitTensorVectorCalculator" + input_stream: "output_tensors" + output_stream: "blendshape_tensors" + options: { + [mediapipe.SplitVectorCalculatorOptions.ext] { + ranges: { begin: 0 end: 1 } + combine_outputs: true + } + } +} + +node { + calculator: "TensorsToClassificationCalculator" + input_stream: "TENSORS:blendshape_tensors" + output_stream: "CLASSIFICATIONS:blendshapes" + options { + [mediapipe.TensorsToClassificationCalculatorOptions.ext] { + top_k: 0 + min_score_threshold: -1.0 + label_map { + entries { id: 0, label: "_neutral" } + entries { id: 1, label: "browDownLeft" } + entries { id: 2, label: "browDownRight" } + entries { id: 3, label: "browInnerUp" } + entries { id: 4, label: "browOuterUpLeft" } + entries { id: 5, label: "browOuterUpRight" } + entries { id: 6, label: "cheekPuff" } + entries { id: 7, label: "cheekSquintLeft" } + entries { id: 8, label: "cheekSquintRight" } + entries { id: 9, label: "eyeBlinkLeft" } + entries { id: 10, label: "eyeBlinkRight" } + entries { id: 11, label: "eyeLookDownLeft" } + entries { id: 12, label: "eyeLookDownRight" } + entries { id: 13, label: "eyeLookInLeft" } + entries { id: 14, label: "eyeLookInRight" } + entries { id: 15, label: "eyeLookOutLeft" } + entries { id: 16, label: "eyeLookOutRight" } + entries { id: 17, label: "eyeLookUpLeft" } + entries { id: 18, label: "eyeLookUpRight" } + entries { id: 19, label: "eyeSquintLeft" } + entries { id: 20, label: "eyeSquintRight" } + entries { id: 21, label: "eyeWideLeft" } + entries { id: 22, label: "eyeWideRight" } + entries { id: 23, label: "jawForward" } + entries { id: 24, label: "jawLeft" } + entries { id: 25, label: "jawOpen" } + entries { id: 26, label: "jawRight" } + entries { id: 27, label: "mouthClose" } + entries { id: 28, label: "mouthDimpleLeft" } + entries { id: 29, label: "mouthDimpleRight" } + entries { id: 30, label: "mouthFrownLeft" } + entries { id: 31, label: "mouthFrownRight" } + entries { id: 32, label: "mouthFunnel" } + entries { id: 33, label: "mouthLeft" } + entries { id: 34, label: "mouthLowerDownLeft" } + entries { id: 35, label: "mouthLowerDownRight" } + entries { id: 36, label: "mouthPressLeft" } + entries { id: 37, label: "mouthPressRight" } + entries { id: 38, label: "mouthPucker" } + entries { id: 39, label: "mouthRight" } + entries { id: 40, label: "mouthRollLower" } + entries { id: 41, label: "mouthRollUpper" } + entries { id: 42, label: "mouthShrugLower" } + entries { id: 43, label: "mouthShrugUpper" } + entries { id: 44, label: "mouthSmileLeft" } + entries { id: 45, label: "mouthSmileRight" } + entries { id: 46, label: "mouthStretchLeft" } + entries { id: 47, label: "mouthStretchRight" } + entries { id: 48, label: "mouthUpperUpLeft" } + entries { id: 49, label: "mouthUpperUpRight" } + entries { id: 50, label: "noseSneerLeft" } + entries { id: 51, label: "noseSneerRight" } + } + } + } +} diff --git a/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt.meta b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt.meta new file mode 100644 index 000000000..6d9f8b7da --- /dev/null +++ b/Assets/MediaPipeUnity/Samples/Scenes/Face Mesh/face_blendshapes_opengles.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 286b806330f6d8a4e9faead2377cb808 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes b/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes new file mode 100644 index 000000000..94668449c Binary files /dev/null and b/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes differ diff --git a/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes.meta b/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes.meta new file mode 100644 index 000000000..397e700d3 --- /dev/null +++ b/Packages/com.github.homuler.mediapipe/PackageResources/MediaPipe/face_blendshapes.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3d58326b41b4be41aa71dc6bc7d80db +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/mediapipe_api/BUILD b/mediapipe_api/BUILD index 6efebb587..9af46f8bc 100644 --- a/mediapipe_api/BUILD +++ b/mediapipe_api/BUILD @@ -263,6 +263,8 @@ cc_library( "@com_google_mediapipe//mediapipe/calculators/core:packet_presence_calculator", "@com_google_mediapipe//mediapipe/calculators/core:flow_limiter_calculator", "@com_google_mediapipe//mediapipe/calculators/image:image_transformation_calculator", + "@com_google_mediapipe//mediapipe/calculators/tensor:landmarks_to_tensor_calculator", + "@com_google_mediapipe//mediapipe/calculators/tensor:tensors_to_classification_calculator", ] + select({ "@com_google_mediapipe//mediapipe/gpu:disable_gpu": [], "//conditions:default": [