# 项目说明 ❤️
这是“会说话的猫猫”系列项目
![820ce07f8264948a015394d67b895967c9b59024.jpg](//image.lceda.cn/pullimage/G6mmAvPwLQuwTdozMsSGdNb040TNPofXyIaX6MLB.jpeg)
第一版演示介绍视频blibili
[我做了一个ChatGPT的语音对话猫猫](https://www.bilibili.com/video/BV1cD4y1P7by/?share_source=copy_web&vd_source=f1cb6a2ddd4b8a00dcafce0abbcc5195)
第二版演示介绍视频bilibli
未制作...
| | 第一版 | 第二版 |
|-----------|-------|--------------------|
| 终端设备 | 香橙派(Linux) | ESP32 |
| 语音识别 | 百度语音API--付费 | PySpeechRecognition |
| 语音合成 | 百度语音API--付费 | Vits|
| ChatGPT接口 | API版--付费 | ChatGPT网页逆向库|
|电量消耗|快|慢|
|尺寸|被linux系统限制 | 通过改进pcb,可以做的很小|
|性能|好| 够用|
|外观|两个pcb+电池 需要大盒子| 足够塞入毛绒玩具中|
|使用|可单独使用|需要一个电脑或者服务器|
>第一版可以通过软件升级达到第二版的所有效果,故接下来按照硬件的不同分为Linux版和ESP32版
Linux版:功能上限高,独立性更强
ESP32版: 小巧,成本低
# 发现 🔍
> 这一栏用来介绍项目的最近的活跃度
### 2023.10.11
- 添加两个模拟视频,分别是电器猫猫和门禁猫猫,用于测试给猫猫分配工作,让猫猫也能实现更多的价值。该功能预计先上线Linux版本。
- 更改项目进度,给Linux版实现ESP32全部功能为下一个进度,由于学业和其他事务影响,预计在11月中旬之前完成,争取先完成一个全功能使用版本
### 2023.10.13
- 添加Linux版流程图
### 2023.11.1
- 添加ESP32版流程图
# 项目相关功能 🎈
- 扮演可爱猫猫和你对话或者充当博学的语音助手
- 借助ChatGPT函数调用功能,使其可以控制实体设备
# 项目进度 ⏱️
- 想法出现 2023/1
- 制作Linux版本,PCB设计,打样,3D模型设计 2023/2
- 完成语音转文字,文字转语音,chatgpt的电脑端代码 2023/8
- 完成ESP32 PCB的设计 2023/8
- PCB打样+SMT 2023/8
- PCB测试 2023/9
- 与电脑端对接,实现基础功能 2023/9
- 给Linux版实现ESP32全部功能 [由于一些事情,项目已延期]
- 设计好看的外壳
- 升级ESP32代码
- 制作视频
# 设计原理 🧩
## Linux版
这个版本由一个基本的linux派和语言扩展模版组成。 PCB中提供的是香橙派Zero的扩展版,通过修改PCB理论可以支持绝大多数的派,选择香橙派主要是因为其尺寸迷你,价格性能也不错。未来会设计树莓派和其他水果派的扩展板。
扩展模块提供了一个基本的麦克风输入和一个功放,同时提供锂电池充放电系统,达到便携的目的。
这个版本电路非常简单,制作难度很小。
![香橙派扩展版.png](//image.lceda.cn/pullimage/rDrv3KvlTQMNTfF2o3EbVdgBPz76KjmANdSNjdeC.png)
### API版本
![API版本.png](//image.lceda.cn/pullimage/RaujhsRwcJm6Oz8cfOAzq6ump6LyM4oNXNtk7uJL.png)
### 逆向库版本(测试)
![逆向库版本.png](//image.lceda.cn/pullimage/A6TvwkHqyCDZimQirJD7zzriNHBLvEyHk3XqPEkF.png)
## ESP32版
这个版本由于ESP32性能不足,需要一个服务端处理语音数据。故分为两个部分,一个是服务端,一个是边缘设备(ESP32)。服务端需要完成计算量较大的语言语音转文字和语言合成工序,同时也要和ChatGPT进行通讯。边缘设备(ESP32)需要做的事情很简单,捕捉语音传给服务端,同时从服务端下载合成好的语音在输出。
目前PCB基本兼容ESP32-LyraT-Mini开发版,代码使用ADF库的话只需修改按钮定义。
未来会设计更加迷你的PCB板子。
### ESP32版结构流程图
![ESP32.png](//image.lceda.cn/pullimage/WioByFRm7kHdkAb8UI0hmeyGumKZon7TpYDrf1Sa.png)
## 关于Vits
借助vits可以合成你喜欢角色的语音模型,测试模型使用原神纳西妲语音训练,仅供测试使用。
# 软件说明
## Linux版代码
Linux版代码目前适配的是第一版,使用免费体验的百度智能云语音api。未来的更新计划会让其适配第二版,脱离百度语音api。
### 代码仓库
ChatMeow/chat-meow-vits: 这是有vits的🐱 (github.com)
https://github.com/ChatMeow/chat-meow-vits
| Python |v3|
|-|-|
|Docker|kjqaq/chatmeow|
### 1.克隆本项目到OrangePi (使用Unbuntu20.04系统为例),并安装依赖
```commandline
git clone https://github.com/meowkj/chat-meow.git && cd chat-meow
```
安装必备依赖
```commandline
apt-get update -y && RUN apt-get install -y python3-dev portaudio19-dev python3-pyaudio
pip install Flask openai PyAudio PyYAML requests
```
或者使用准备好的Docker镜像(测试)
```commandline
docker pull kjqaq/chatmeow
```
### 2.获取百度和openai的key
#### 百度
获取百度云KEY,需要有短文字识别,语音合成权限
百度官方文档地址
- 语音识别:<http://ai.baidu.com/docs#/ASR-API/top>
- 语音合成:<http://ai.baidu.com/docs#/TTS-API/top>
#### openai
openai apikey 查看链接
<https://platform.openai.com/account/api-keys>
根目录下创建**key.yml**文件,按照如下格式填入
```yaml
BAIDU_KEY:
- "4E1BG9lTnlSeIf1NQFlrxxxx" # 填写网页上申请的appkey
- "544ca4657ba8002e3dea3ac2f5fxxxxx" # 填写网页上申请的APP SECRET
- "123456PYTHON" # 填写一个CUID 只是用来区分不同应用 随意填写
OPENAI_API_KEY: "sk-xxxxxxxxxxxxxxxxxxxxx" # openai的apikey
```
### 3.运行
在根目录下
使用自己的python环境
```commandline
python3 mian.py
```
使用docker提供的环境(测试)
```commandline
docker run --itd -v .:/chat --privileged -itd kjqaq/chatmeow
```
### 可能的问题
荔枝派Zero的音频可能默认不会打开,需要像电脑调音量一样打开音量
### 修改WebUI(可选)
Linux版代码目前带了一个网页UI可以调整一些参数,也能动态显示GPT返回的参数。
UI编译好已经放在Flask服务器中,如果要修改UI的话
#### 1. 环境准备
| NodeJS |Latest|
|-|-|
|pnmp|Latest|
|Vue|v3|
安装NodeJS,最新稳定版即可
使用pnmp作为包管理器
使用Vue3框架简单快速构建了一下页面
#### 2.克隆代码仓库
```commandline
git clone https://github.com/ChatMeow/chat-meow-ui.git
cd chat-meow-ui
```
#### 3.安装依赖
```commandline
pnpm install
```
#### 3.5编译并启动支持热重载的测试服务器
```commandline
pnpm run serve
```
#### 4.编译为生产准备的文件
```commandline
pnpm run build
```
编译好得到dist目录里面的文件,放入chat-mewo/meow/web,其中html文件放入templates文件夹中,js/css文件放入static文件夹中对应的js/css目录中
## ESP32版
>代码仓库有两个,一个服务端的代码由Python驱动,一个是ESP32端由ESP-ADF驱动
### ESP32版服务端代码仓库(Python)
ChatMeow/chat-meow-vits: 这是有vits的🐱 (github.com)
https://github.com/ChatMeow/chat-meow-vits
| Python | v3.10 |
|--------|----------------------------------------------------|
| 逆向库 | [revchatgpt](https://github.com/acheong08/ChatGPT) |
> pyopenjtalk库似乎只能在Python3.10上安装成功,此库只影响日语生成
#### 1.环境安装
克隆本项目
```commandline
git clone https://github.com/ChatMeow/chat-meow-vits.git
cd chat-mewo-vits
```
安装环境(推荐使用虚拟环境)
```commandline
pip install -r requirements.txt
```
如果不存在配置文件的话,第一次运行会生成配置文件
```commandline
python server.py
```
#### 2.配置参数
需要先配置OpenAI登录信息,在文件`openai.ini`中
配置access_token
- 这是实际用于身份验证的内容喵,可以在https://chat.openai.com/api/auth/session找到
- 2周后失效
- 推荐的身份验证方法
- 如果您登录到https://chat.openai.com/,然后转到https://chat.openai.com/api/auth/session,就可以找到
或者配置email(邮箱) password(密码)字段
> 只需配置access_token(推荐)或者是email&password, 如果都配置了,优先使用access_token
你需要准备一个Vits模型文件,测试用模型可以在Release处下载,仅供参考
模型文件(*.pth config.json)放入根目录model(可改)文件夹里面,同时需要在config.ini中填入对应的文件名称
#### 3.启动测试服务器
```commandline
python main.py
```
#### 4.开始测试服务器
- 开始运行后,将启动默认端口8000的服务器
- /upload接口支持POST方法,和ESP32配置项目`Server URL to send data`对应
- 完成tts,vits后在static目录生成out.wav文件,和ESP32配置项目`Server FILE URL to play voice`对应
#### 即将支持
- 一个网页界面来配置参数
- 支持RockChinQ大佬的free-one-api接口
### ESP32端代码仓库(ESP-IDF)
MeowKJ/chat-meow-esp32 (github.com)
https://github.com/ChatMeow/chat-meow-esp32
| ESP-IDF | v4.4.5 |
| ---- | ---- |
| ESP-ADF | ESP-ADF Master |
| ESP32 Board | ESP32-LyraT-Mini or MeowBoard (ESP32 WROVER)|
#### 1.环境安装
使用的是 ESP-IDF v4.4 理论上支持ESP-IDF v5
- 参考 [ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html) 安装ESP-IDF环境
- 参考 [乐鑫音频应用开发指南](https://docs.espressif.com/projects/esp-adf/zh_CN/latest/get-started/index.html) 安装ESP-ADF环境(如果已配置好VSCode+ESP-IDF插件环境,在vscode`命令面板 -> ESP-IDF:安装ESP-ADF` 可以直接安装ESP-ADF)
克隆代码仓库
```commandline
git clone https://github.com/ChatMeow/chat-meow-esp32.git
cd chat-meow-esp32
```
#### 2.配置参数
需要先配置 Wi-Fi 连接信息,通过运行 `menuconfig > Example Configuration` 填写 `Wi-Fi SSID` 和 `Wi-Fi Password`。
```commandline
menuconfig > Example Configuration > (myssid) WiFi SSID > (myssid) WiFi Password
```
其次需要选择服务器地址, ,默认情况下`192.168.8.5:8000`需要修改为自己的服务器地址
```commandline
menuconfig > Example Configuration > Server URL to send data > Server FILE URL to play voice
```
#### 3.编译和下载
请先编译版本并烧录到开发板上,然后运行 monitor 工具来查看串口输出(替换 PORT 为端口名称):
```commandline
idf.py build
idf.py -p PORT flash monitor
```
#### 4.开始
- 开始运行后,将主动连接 Wi-Fi 热点
- 检测是否按下REC(ESP32-LyraT-Mini)按键,如果使用喵板则需要修改按键参数
- 从麦克风读取语音上传到服务器
- 从服务器播放服务器生成好的语言
- 循环-->>>>
#### 即将支持
- 静默状态识别自动识别是否讲话,读取语音开始循环
- 通过`ChatGPT函数调用`功能返回参数,接口对外输出信息,控制其他实体设备
更多具体的软件说明可参考Github上的README内容
# 实物展示🍔
可爱的茶会猫猫,最初的设想是塞到这个铁罐子里面去
---
荔枝派的拓展版,结果正反反了,屏幕在夹层里面,屏幕暂时就不能使用了
![](//image.lceda.cn/pullimage/R5RFoQmbev36PEftAdXz8dNn5f5iWZEOSfucc44Z.jpeg)
---
第二版ESP32语音板子图片,使用嘉立创SMT工艺,比我自己焊接的好太多了,可惜没用上彩色丝印
![](//image.lceda.cn/pullimage/ipqPaOtQcqOnaj6mMMGf3s4OqI3Czwww8IF8cTni.jpeg)
---
未完待续...
# 设计注意事项⚠️
## Linux版
- OLED屏幕位置搞反了,暂时不能用,不影响其他
## ESP32版
- 目前设计的PCB存在不能自动下载程序的现象
- ESP32版麦克风声音有点小,还需要更换不同麦克风测试
## 其他
- 本项目由于代码仓库众多,涉及到软硬件,但是非常简单,所以推荐理解原理以后再复刻。
# 项目属性 🦴
本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。
## 关于这个项目 🔍
不知道大家有没有玩过一个Gal-ATRI-My Dear Moments-,讲述了一个机器少女寻找"心"的过程,这是这个项目的灵感来源。 AI的发展正在逐渐加速,那个世界也许离我们已经不再遥远。
在V1版本完成后,这个版本缺陷比较大,主要百度语音API免费用一个星期然后就得付费了,不是很适合个人,提到了V2版本,自己做语音识别和语音合成,但一时半并没有做V2的想法,按照正常进度估计得鸽到明年。
但是碰巧尝试了这个星火计划,投了一个PCB,`感谢嘉立创以及工作人员创提供的大力支持`,这下不得不先完成这个项目了。
主要之前也怎么没有接触过ESP32,特别是ESP-IDF一点都搞不明白,这算是是用ESP32完成的第一个项目,有所不足还请多多指教。
目前ESP32代码还不是很充分,但是只需要后续跟进代码即可,保留了串口输出可以和其他设备通讯,GPT的`Function Calling`能力带来了无限可能,GPT可以在理解了文字意义后去主动用相关参数“调用”函数,基本的例子就是GPT本身不能联网搜索,但是我们给定一个联网搜索函数,参数是一个url,当GPT觉得她需要搜索时,她就不会回答我不能搜索,而是可以去给出一个要搜索的url,告诉程序要调用联网搜索函数,程序完成网络GET操作后将返回内容给GPT,这样GPT在分析返回内容就实现了GPT联网。
借助这个GPT功能也许可以实现一种更加智能的家居模型,通过各种传感器给GPT参数,由事先告诉GPT的自然语言(吩咐),或者直接和GPT对话,GPT去判断该怎么控制终端设备,这样可以实现一些非常复杂且人性化的家居自动化。(下一个项目?)
# 其他
## 注
- 所有的代码都在Github组织https://github.com/ChatMeow里面
演示视频:Linux版及其制作视频:https://www.bilibili.com/video/BV1cD4y1P7by/?share_source=copy_web&vd_source=f1cb6a2ddd4b8a00dcafce0abbcc5195
ESP32版:仍在制作
# 视频标题排序
## 电器猫猫模拟-门禁猫猫模拟-Linux版演示-原代码包