ROS 语音包 (robot_speaker)
注册阿里云百炼获取api_key
https://bailian.console.aliyun.com/?tab=model#/api-key ->密钥管理 放到config/voice.yaml
安装依赖
- 系统依赖
sudo apt-get update
sudo apt-get install -y python3-pyaudio portaudio19-dev alsa-utils ffmpeg swig meson ninja-build build-essential pkg-config libwebrtc-audio-processing-dev
- Python依赖
cd ~/ros_learn/hivecore_robot_voice
# 在 Python 3.10 环境下,需要单独安装 aec-audio-processing 以跳过版本检查
pip3 install aec-audio-processing --no-binary :all: --ignore-requires-python --break-system-packages
pip3 install -r requirements.txt --break-system-packages
编译启动
- 注册声纹
-
启动节点后可以说:er gou我现在正在注册声纹,这是一段很长的测试语音,请把我的声音录进去。
-
正确的注册姿势:包含唤醒词二狗,不要停顿的尽量说完3秒
-
现在的逻辑只要识别到二狗就注册,然后退出节点,识别不到二狗继续等待
-
多注册几段,换方向距离注册,可以提高识别相似度,注册方向对声纹相似性影响很大
cd ~/ros_learn/hivecore_robot_voice
colcon build
source install/setup.bash
# 终端1: 启动ASR节点
ros2 run robot_speaker asr_audio_node
# 终端2: 注册声纹
ros2 run robot_speaker register_speaker_node
- 主节点
- 启动节点后每句交互包含唤醒词,唤醒词和语句之间不要有停顿
- 二狗拍照看看开启图文交互
- 支持已注册声纹用户打断
cd ~/ros_learn/hivecore_robot_voice
colcon build
source install/setup.bash
ros2 launch robot_speaker voice.launch.py
- ASR节点
ros2 run robot_speaker asr_audio_node
- TTS节点
# 终端1: 启动TTS节点
ros2 run robot_speaker tts_audio_node
# 终端2: 启动播放
source install/setup.bash
ros2 service call /tts/synthesize robot_speaker/srv/TTSSynthesize \
"{command: 'synthesize', text: '这是一段很长的测试文本,用于测试TTS中断功能。我需要说很多很多内容,这样你才有足够的时间来测试中断命令。让我继续说下去,这是一段很长的测试文本,用于测试TTS中断功能。我需要说很多很多内容,这样你才有足够的时间来测试中断命令。让我继续说下去,这是一段很长的测试文本,用于测试TTS中断功能。我需要说很多很多内容,这样你才有足够的时间来测试中断命令。', voice: ''}"
# 终端3: 立即执行中断
source install/setup.bash
ros2 service call /tts/synthesize robot_speaker/srv/TTSSynthesize \
"{command: 'interrupt', text: '', voice: ''}"
- 完整运行
# 终端1:启动 brain 节点
# 终端2:启动 voice 节点
# 终端3:启动 bridge 节点
# 终端4:订阅相机
用到的命令
- 音频设备
# 1. 查看所有音频设备
cat /proc/asound/cards
# 2. 查看 card(1)的流信息(设备参数)
cat /proc/asound/card1/stream0
- 相机设备
# 1. 查看相机所有基础信息(型号、固件版本、序列号等)
rs-enumerate-devices -c
- 模型下载
modelscope download --model iic/speech_campplus_sv_zh-cn_16k-common --local_dir [指定路径]
Description
Languages
Python
100%