7.6 麦克风管理部分
7.6 麦克风管理部分
7.6.1 整体介绍
机器人默认可用两种不同麦克风作为交互输入源,分别为外置麦(depusheng 手持麦和闪客领夹麦)和内置麦(机器人自带麦克风),另外可以设置静默模式不进行交互,可以通过 AimMaster 软件进行麦克风切换和静默模式设置,同时我们也提供了 RPC 接口来进行麦克风来源切换和静默模式设置。
此外我们还提供了麦克风原始音频输出(带本体降噪、回声消除 + VAD 后的音频),可用于关闭智元本身交互链路后使用该接口获取机器人麦克风音频接入其他交互系统。
内置麦交互逻辑(声音,人脸,嘴形,距离):
- 机器人内部风扇噪音比较大,建议客户唤醒和对话的声音尽量大一些
- 人脸主要使用中间相机最大的三个人脸,人脸大小有较大变化时才切换锁定人脸
- 对话的时候会去结合唇形判断是否对话,用于抗干扰,分离不同说话人
- 距离推荐机器人正前方 0.5m~2m。身高过高或者(180+)的用户站的过近有一定概率人脸已经不在相机范围内,最主要还是要让人脸处于相机范围内
外置麦为指向性麦,对着话筒说话即可,无人脸识别等逻辑。
另外交互为支持二次开发,agent 可设置不同模式,供退出智元云端音频链路,仅输出原始音频和人脸数据,以便用户自行开发交互智能体。
静默模式为 normal 模式下的一种状态,可以在不重启 agent 的情况下灵活切换。
7.6.2 内外置麦切换 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/SetMicSourceRequest |
|---|---|
| 功能概述 | 切换内外置麦克风来源 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/SetMicSourceRequest |
| 入参 | text
|
| 出参 | text
|
| 示例脚本 | examples/agent/SetMicSource.sh |
| 备注 |
7.6.3 内外置麦状态获取 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/GetMicSourceRequest |
|---|---|
| 功能概述 | 获取当前使用的麦克风来源 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/GetMicSourceRequest |
| 入参 | text |
| 出参 | text
|
| 示例脚本 | examples/agent/GetMicSource.sh |
| 备注 |
7.6.4 设置静默模式 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/SetVoiceEnable |
|---|---|
| 功能概述 | 设置静默模式 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/SetVoiceEnable |
| 入参 | text
|
| 出参 | text
|
| 示例脚本 | examples/agent/SetVoiceEnable.sh |
| 备注 |
7.6.5 查询静默模式 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/GetVoiceEnable |
|---|---|
| 功能概述 | 查询静默模式状态 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/GetVoiceEnable |
| 入参 | text |
| 出参 | text
|
| 示例脚本 | examples/agent/GetVoiceEnable.sh |
| 备注 |
7.6.6 设置交互运行模式 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/SetAgentPropertiesRequest |
|---|---|
| 功能概述 | 设置交互运行模式 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/SetAgentPropertiesRequest |
| 入参 | text
|
| 出参 | text |
| 示例脚本 | examples/agent/SetAgentPropertiesRequest.sh |
| 备注 |
|
7.6.7 获取交互运行模式 RPC 接口
| 接口名 | pb:/aimdk.protocol.AgentControlService/GetAgentPropertiesRequest |
|---|---|
| 功能概述 | 查询交互运行模式 |
| 接口类型 | HTTP JSON RPC |
| URL | http://192.168.100.110:59301/rpc/aimdk.protocol.AgentControlService/GetAgentPropertiesRequest |
| 入参 | text |
| 出参 | text
|
| 示例脚本 | examples/agent/GetAgentPropertiesRequest.sh |
| 备注 |
7.6.8 降噪麦克音频 Topic 接口
| 接口名 | /agent/process_audio_output |
|---|---|
| 功能概述 | 降噪麦克音频接口 |
| 接口类型 | ROS2 Topic |
| 出参 | text
|
| 示例脚本 | examples/agent/get_voice.py |
| 备注 |
|
7.6.9 本地人脸注册接口
该接口非常规 HTTP JSON RPC 或 ROS2 Topic,而是单独提供了一个调用脚本 examples/agent/run_face_id_register.sh,其内容如下:
bash
#!/bin/bash
# 1. 要注册的 images 目录(sh脚本同级)
RUN_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMAGES_DIR="${RUN_SCRIPT_DIR}/images"
# 2. Faceid base目录
FACEID_SCRIPT_DIR="/agibot/software/v0/scripts/agent/face_id/"
FACEID_LIB_DIR="/agibot/software/v0/bin"
FACEID_OFFLINE_FEAT="/agibot/data/param/interaction/face_id/offline_face_features"
# 3. 可执行文件与配置文件的相对路径
EXEC="${FACEID_SCRIPT_DIR}/face_id_register"
CONF="${FACEID_SCRIPT_DIR}/face_id_config.json"
chmod +x "$EXEC"
export LD_LIBRARY_PATH="${FACEID_LIB_DIR}":$LD_LIBRARY_PATH
# 4. 调用
rm -rf "$FACEID_OFFLINE_FEAT"/*
"$EXEC" "$CONF" "$IMAGES_DIR"
将需要注册的人脸数据放置到脚本同目录下的 images 目录中,在 ORIN 上执行该脚本即可完成注册,注册完成后 ID 与图片对应关系以及是否成功注册的结果都存储在同目录下的 Result.txt 文件中,示例如下(其中模糊和人脸过小也注册成功了,但是实际使用中仍推荐使用 满足.png 中展示的清晰正面人脸图像,以免对识别率等造成不良影响):
bash
GID17648293009168001 满足.png OK 注册成功
GID17648293018063607 侧脸.png FAIL 人脸质量不满足要求
GID17648293020281011 过暗.png FAIL 人脸质量不满足要求
GID17648293021878934 模糊.png OK 注册成功
GID17648293024764703 过曝.png FAIL 人脸质量不满足要求
GID17648293026684491 无人脸.png FAIL 未检测到人脸
GID17648293028768487 非人脸.png FAIL 未检测到人脸
GID17648293030305970 人脸过小.png OK 注册成功
人脸注册识别逻辑规则说明:
- images 目录中存放 jpg、png、jpeg类型的人脸图片,图片只存在一个正面清晰的人脸,运行脚本即可注册。注册后需要重启 agent,在 ORIN 上运行
aima em stop-app agent && aima em start-app agent即可,也可直接重启机器人。 - 本地注册的人脸特征会存放在 ORIN 上 /agibot/data/param/interaction/face_id/offline_face_features 目录下。
- 注册的用户 ID 的构建规则是:"GID" + 时间戳 + 随机4位数;发布时会将当前机器的 SN (/agibot/data/info/sn)替换 "GID" 作为新的 UID 发布
- 另外灵心平台一样可以上传人脸,我们称之为云端人脸数据库,云端人脸数据库可配置打招呼等等信息,相应内容下发后会下发后存储在 ORIN 上 /agibot/data/param/interaction/face_id/user_info.json 文件中。
- 上述脚本每次注册会将原有的本地数据库清空,请每次都完整将所有人脸数据都重新注册,即维护一个 images 文件夹,其中包含所有需要识别的人脸图像,有任何增删改需重新运行注册脚本。
- 匹配规则永远是优先匹配云端数据库然后再匹配本地数据库,找到第一个匹配成功的人脸后不会继续匹配剩余人脸。
7.6.10 人脸识别结果 Topic接口
| 接口名 | /agent/vision/face_id |
|---|---|
| 功能概述 | 人脸识别结果 |
| 接口类型 | ROS2 Topic |
| 出参 | text
|
| 示例脚本 | examples/agent/get_face_id.py |
| 备注 |
|
7.6.11 唤醒结果上报
| 接口名 | /agent/wakeup |
|---|---|
| 功能概述 | 唤醒结果上报 |
| 接口类型 | ROS2 Topic |
| 出参 | text
|
| 示例脚本 | examples/agent/get_wakeup_result.py |
| 备注 |
|