#face-detection #face #webcam #bevy #recognition #game-engine #width-height

bevy_webcam_facial

bevy游戏引擎的Webcam AI人脸识别插件

4个版本

0.1.4 2023年8月7日
0.1.3 2023年8月5日
0.1.2 2023年8月2日
0.1.1 2023年8月2日
0.1.0 2023年8月2日

#595 in 游戏开发

每月下载次数 28

MIT/Apache

1.5MB
347

Rust

关于bevy_webcam_facial

Bevy游戏引擎的插件。捕获Webcam图像,找到人脸并提供所有可用数据(人脸矩形坐标,人脸概率)到Bevy游戏引擎,以便在Bevy游戏引擎中进一步使用。

功能

计划

  • 支持MacOSX webcam
  • 默认提供几个AI人脸识别模型供选择(简单帧,包含眼睛/鼻子/嘴巴等面部特征,全脸网格识别,情绪检测...)

支持的平台

  • Linux
  • MacOSX
  • Windows

可在Bevy中使用

插件配置

.add_plugins时包含几个参数,或使用默认摄像头和设置 .add_plugins(WebcamFacialPlugin::default())

.add_plugins(WebcamFacialPlugin {
    config_webcam_device: 0,
    config_webcam_width: 640,
    config_webcam_height: 480,
    config_webcam_framerate: 15,
    config_webcam_autostart: true,
    config_filter_type: SmoothingFilterType::LowPass(0.1),
    config_filter_length: 10,
})

参数

  • Web摄像头设备号(0为默认)例如:0,1,2...
    • Linux:数字附加到/dev/video{number}
    • Windows:设备号
  • 帧宽:640
  • 帧宽:480
  • 每秒帧数:15
  • 插件激活后立即开始捕获和发送事件:true/false(可以在运行时启用/禁用,通过ResMut<WebcamFacialController>
  • 坐标平滑过滤器(目前:MeanMedian,LowPass(f32),NoFilter)
  • 用于平滑的数据帧数(5-10是最佳选择,帧数越多,噪声数据越少,但响应速度越慢)

资源

通过可变资源ResMut<WebcamFacialController>启用/禁用Web摄像头捕获和识别

pub struct WebcamFacialController {
...
    pub control: bool,
...
}

带有捕获数据的Event

<Event>WebcamFacialDataEvent

通过Event返回的数据结构

pub struct WebcamFacialData {
    pub center_x: f32,
    pub center_y: f32,
    pub x: f32,
    pub y: f32,
    pub width: f32,
    pub height: f32,
    pub score: f32,
}

坐标以浮点数形式映射,范围为 -50.0 至 50.0,相机分辨率无关紧要

  • [center_x) 面部中心点 x 坐标
  • (center_y) 面部中心点 y 坐标
  • (x) 面部矩形框 x 坐标
  • (y) 面部矩形框 y 坐标
  • (width) 面部矩形框宽度
  • (height) 面部矩形框高度
  • (score) 检测到的对象是真实面部的概率 0-30..

来自插件的数据的一些想法和用例

  • 控制游戏对象变换(变换、旋转、缩放)
  • 对象控制(汽车驾驶、玩家移动...)
  • 2D游戏中的背景场景移动或3D顶部/侧面视角游戏中的背景场景移动,以增强深度感知或“环顾四周”
  • 类似相机FPS的移动
  • 围绕场景、玩家或其他对象的旋转
  • 场景缩放(地图缩放、场景缩放、狙击手缩放...)
  • 恐怖游戏在检测到的面部特写附近弹出怪物
  • 你的想象力...

*注意:使用一些插值进行变换,以实现更平滑的变换,例如“bevy_easings”或“bevy_mod_interp”

示例

在[examples]文件夹中提供了三个示例:(建设中)

  • object_mover - 使用原始未过滤/有噪声的数据移动对象的最简单示例
  • camera_control - 使用过滤数据控制 bevy 摄像机视图
  • neck_trainer - 训练你的脖子 :) 最复杂的示例,带有过滤数据 + 骨动画和皮肤

未检查 - 未完成

版本

bevy bevy_webcam_facial
0.11 0.1.4
0.11 0.1.3
0.11 0.1.2
0.11 0.1.1

Bevy tracking

参考材料

以下用于插件编码

未来研究的附加有趣来源

许可

根据您的选择,许可协议为

贡献

除非您明确声明,否则您提交给工作的任何贡献,如 Apache-2.0 许可证中定义的,均将按上述方式双许可,而无需任何附加条款或条件。

依赖项

~46MB
~521K SLoC