首页 > 其他分享 >ESP32 本地大模型部署语音助手

ESP32 本地大模型部署语音助手

时间:2024-09-24 10:22:15浏览次数:10  
标签:esp ESP demo ESP32 py IDF 助手 语音 idf

ESP32S3 Box 提供了 chatgpt 的 demo。因为访问不了的原因,打算改来做一个本地化部署的专用语音助手。

文章目录


前置条件:

  • >=12GB显存的显卡
  • ESP32S3-Box

准备工作

ESP-IDF 是我用过的最难用的 IDE!

Windows 安装 ESP-IDF

Windows 安装下载release版本的离线安装包就好了,然后进入powershell,找到example里的 Hello world

idf.py set-target esp32s3
idf.py menuconfig
idf.py build
idf.py -p COM3 flash

在这里插入图片描述

WSL 安装 ESP-IDF

配置 IDF

由于 ChatGPT demo 需要指定ESP-IDF的版本或者最新版本(Windows中编译出现了BUG),所以需要在linux环境中手动安装指定版本的 ESP-IDF:

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

git clone [email protected]:espressif/esp-idf.git
cd esp-idf/

export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"
./install.sh esp32s3

# 完成后配置shell环境
. ./export.sh

卡住哪个压缩包下载不下来,就到网页中手动下载,然后它会创建python虚拟环境,到idf-tool.py中找到pip下载的部分,在后面加上-i https://mirrors.aliyun.com/pypi/simple/以加快速度

设置环境变量:

vim ~/.bashrc
alias get_idf='. $HOME/esp/esp-idf/export.sh'

使用get_idf进入python虚拟环境

编译 chatgpt demo

git clone [email protected]:espressif/esp-box.git
cd examples/chatgpt_demo/factory_nvs
idf.py menuconfig

这里设置一下wifi和openAI密钥等信息:

在这里插入图片描述

OpenAI Key:https://platform.openai.com/api-keys

在这里插入图片描述

这里它会手动为IDF-ESP下载submodule,时间比较长,尤其会卡在esp_wifi包,如果卡住了,ctrl-C后继续,它会跳过这个包的更新去继续下载,然后进入menuconfig,但是最后编译的时候会报错,因为找不到库

ninja: error: '/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a', needed by 'factory_nvs.elf', missing and no known rule to make it
ninja failed with exit code 1, output of the command is in the work/esp-box/examples/chatgpt_demo/factory_nvs/build/log/idf_py_stderr_output_18950 and /work/esp-box/examples/chatgpt_demo/factory_nvs/build/log/idf_py_stdout_output_18950

到esp-idf/components/esp_wifi目录下,删除里面所有文件后通过git checkout 将文件还原,可以解决上述这个问题。

也有可能是网好了给我下载下来了,总之,祈祷网是好的。

完成后,开始build

idf.py build

编译chatgpt-demo:

cd examples/chatgpt_demo/
idf.py menuconfig
idf.py build

串口映射

参考:wsl2中访问windows上的串口。windows下载安装:usbipd-win

在WSL中

sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

管理员模式下打开Powershell:

$ usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-1    303a:1001  USB 串行设备 (COM7), USB JTAG/serial debug unit                Not shared

Persisted:
GUID                                  DEVICE
$ usbipd bind --busid 1-1
$ usbipd attach --wsl --busid=1-1
$ usbipd: info: Using WSL distribution 'Ubuntu-20.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.18.128.1 to reach the host.

WSL中,找到TTY:

$ ls /dev/tty*
/dev/ttyACM0

下载

idf.py -p /dev/ttyACM0 flash

烧写不进去,按住BOOT,再按reset,等待串口烧录。找不到串口时,在powershell重复上述的操作。

语音助手

在这里插入图片描述

Roadmap:

  • 更改demo中的默认界面语言,并且删除与OpenAI相关的代码实现
  • 更新demo的默认语音
  • 更新语音唤醒的提示词
  • 写一个python上位机服务器,接受ESP32的请求,处理完数据后
    • 接收ESP的音频
    • 下发语音识别结果,即第一串字符
    • 下发ollama生成的结果,即第二串字符
    • 下发语音生成的结果,即第三段数据
    • ESP继续超时等待结果,收到后,播放声音

在这里插入图片描述

调试步骤

  • Windows 运行 Docker Desktop

  • 打开FunASR

    sudo bash work/funasr/funasr-runtime-deploy-online-cpu-zh.sh restart
    
  • 打开Ollama serve

    [Environment]::SetEnvironmentVariable('OLLAMA_HOST', '0.0.0.0:11434', 'Process')
    [Environment]::SetEnvironmentVariable('OLLAMA_ORIGINS', '*', 'Process')
    ollama serve
    
  • 运行cosyvoice docker,在Docker Desktop中直接运行

  • 管理员模式打开powershell,绑定 ESP-IDF 串口

    usbipd attach --wsl --busid=1-1
    
  • 运行 server.py 脚本

    python3 \\wsl.localhost\Ubuntu-20.04\home\sjl\work\esp-box\examples\chatgpt_demo\main\server.py
    
  • 下载烧录

    get_idf
    idf.py -p /dev/ttyACM0 flash
    idf.py -p /dev/ttyACM0 monitor
    

遇到的问题

在WSL2中,server.py 脚本无法被ESP访问端口

通过转发端口方式,实际操作总是有问题。解决:把server放windows端,带来了下面的问题。

server.py 脚本无法访问 Ollama server

把 VPN 关了。

WSL2部署的 cosyvoice server 无法访问

创建 cosyvoice fastapi docker 容器,先提前下载一个镜像

docker pull pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime

按照官方教程编译fasapi container。

cosyvoice fasapi container 无法外部访问

需要将cosyvoice fastapi docker的ip设为0.0.0.0,以让host能够访问,需要下载一个vim。

cosyvoice fastapi container 运行报错

显示为:CUFFT_INTERNAL_ERROR

Windows Server 保存音频时保存

在wsl2的客户端保存音频没问题

raise RuntimeError(f"Couldn't find appropriate backend to handle uri {uri} and format {format}.")
RuntimeError: Couldn't find appropriate backend to handle uri tmp.wav and format None.

在 save 时无法保存音频。解决,安装后端,并且不要使用windows conda,导致 pip 包混乱。

pip3 install ffmpeg soudfile

ESP32 只能录音一部分,后面会丢失

TODO

如何将 audio 写入 ESP32

TODO

标签:esp,ESP,demo,ESP32,py,IDF,助手,语音,idf
From: https://blog.csdn.net/JackSparrow_sjl/article/details/142482023

相关文章

  • 语音歌曲识别智能体的感想
    语音歌曲识别智能体的内容主要涉及将用户的语音输入转换为文本信息,进而识别出相应的歌曲。这项技术通常包括以下几个关键步骤:音频信号采集:通过麦克风等设备捕捉用户的语音或哼唱。预处理:对采集到的音频进行去噪、增强等处理,以提高识别准确率。特征提取:利用短时傅里叶变换等方法提取......
  • ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino IDE和wokwi web
    ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwiESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwi什么是迷宫?不合适的学习和研究方式,花费大量的精力和时间,收效甚微。这种又称之为学习和研究的“黑洞”出路从传统到现代:降本增效!E......
  • 语音识别与语音控制的原理介绍
    硬件平台机器硬件:OriginBot(导航版/视觉版)PC主机:Windows(>=10)/Ubuntu(>=20.04)扩展硬件:X3语音版运行案例首先进入OriginBot主控系统,运行一下指令。请注意,部分操作OriginBot内暂未放入,请根据内容进行适当处理。cd/userdata/dev_ws/#配置TogetheROS环境source/opt/tros/setup.ba......
  • 小咖批量剪辑助手款视频批量自动剪辑软件
    小咖批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包......
  • 小咖批量剪辑助手款视频批量自动剪辑软件
    小咖批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包......
  • 小咖批量剪辑助手款视频批量自动剪辑软件
    小咖批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包......
  • kimi智能助手1.4.5,2024-09-21,什么是大语言模型(LLM)?
    大语言模型(LargeLanguageModels,简称LLM)是指通过深度学习技术训练出的、具有大量参数的语言处理模型。这些模型通常使用大量的文本数据进行训练,以学习语言的模式和结构,从而能够理解和生成自然语言。大语言模型的特点包括:参数众多:大语言模型通常拥有数十亿甚至数千亿个参数,这......
  • 智能写作新体验:AI写作小助手助力内容创作
    在信息时代的浪潮中,内容创作已成为连接世界、传递价值的重要桥梁。然而,传统的写作方式在效率和质量上往往难以满足现代社会的需求。此时,AI写作小助手的诞生,为内容创作带来了全新的体验。本文将深入探讨AI写作小助手如何助力内容创作,开启智能写作的新篇章。AI写作小助手:开......
  • 一文了解AI写作小助手,让创意无限放大
     在创作的海洋中,每一位作者都是一艘探索未知的小船,而AI写作小助手,便是那助推船只驶向深蓝的劲风。在这个信息爆炸、创意为王的时代,我们不仅要追求写作的速度与效率,更要让创意无限放大。本文将带你深入了解AI写作小助手,探讨它是如何成为创作者们放大创意的得力工具。 AI写作小......
  • 基于IDF的ESP32S3-LVGL DEMO移植
    简介ESP32-32出色的性价比,较好的性能与内存空间,可以好利用来完成GUI显示库的加载LVGLLVGL是一款比较流行的致力于MCU与MPU创建漂亮UI的嵌入式图形库,免费且开源。硬件硬件采用的是正点原子的ESP32-S3屏幕使用的是SPI通信方式,配合IO口控制(RST,A0),来实现LCD屏幕的驱动移植步骤......