using System.Collections; using System.Collections.Generic; using UnityEngine; using ToneTuneToolkit.Common; using Mediapipe.Tasks.Core; using Mediapipe.Unity; using Mediapipe.Unity.Sample; using Mediapipe.Unity.Sample.FaceDetection; /// /// 面部检测工具管理器 /// 延后初始化 /// /// 基本配置文件 /// ..\MediaPipeUnity\Samples\Scenes\AppSettings.asset /// public class FaceDetectorManager : SingletonMaster { [SerializeField] private FaceDetectorRunner runner; // ================================================== private void Start() => Init(); // ================================================== private void Init() => StartCoroutine(nameof(DelayInit)); private IEnumerator DelayInit() { yield return new WaitForSeconds(3f); InitImageSource(); InitRunnerConfig(); runner.Play(); } // ================================================== #region 面部检测状态控制 /// /// 开关暂停恢复检测 /// /// public void SwitchFaceDetector(FaceDetectorState value) { switch (value) { default: break; case FaceDetectorState.Play: runner.Play(); break; case FaceDetectorState.Stop: runner.Stop(); break; case FaceDetectorState.Pause: runner.Pause(); break; case FaceDetectorState.Resume: runner.Resume(); break; } } public enum FaceDetectorState { Play = 0, // 具备Reload功能 Stop = 1, Pause = 2, Resume = 3 } #endregion // ================================================== #region 画面源、面部检测参数初始化 private void InitImageSource() { ImageSourceProvider.Switch(ImageSourceType.WebCamera); ImageSource imageSource = ImageSourceProvider.ImageSource; imageSource.SelectSource(0); // 0:BRIO 1:USBHD imageSource.SelectResolution(7); // 1280x720 30fps imageSource.isHorizontallyFlipped = false; } private void InitRunnerConfig() { runner.config.Delegate = BaseOptions.Delegate.CPU; runner.config.ImageReadMode = ImageReadMode.CPUAsync; runner.config.Model = ModelType.BlazeFaceShortRange; runner.config.RunningMode = Mediapipe.Tasks.Vision.Core.RunningMode.LIVE_STREAM; runner.config.MinDetectionConfidence = 0.4f; // 0.0 - 1.0 // 越高越不容易误检 runner.config.MinSuppressionThreshold = 0.3f; // 0.0 - 1.0 runner.config.NumFaces = 3; // 1-3 } #endregion }