Skip to content

Commit 8ceefba

Browse files
committed
yanjie update_tts_asr_thg
1 parent ab208cd commit 8ceefba

26 files changed

+1324
-204
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
## 一. 项目介绍
2+
3+
![1](/root/Project_Yanjie/Repo/Yanjie/assets/1.png)
4+
5+
6+
### 1.1 **项目名称**
7+
8+
言界 - 英语智能学习助手
9+
10+
### 1.2 **项目概述**
11+
12+
言界是一款综合性的英语口语学习助手,旨在通过语音对话、情景对话、视频对话及模拟口语考试等功能,为用户提供沉浸式的英语学习体验。该项目将基于由上海人工智能实验室的**Xtuner,LMDeploy**等工具,结合**TTS********ASR**,并使用**InternLM2**系列模型进行实现。
13+
14+
### 1.3 **🔥项目目标:**
15+
16+
1. 提供语音对话功能,提高用户的英语口语水平。
17+
2. 提供情境对话以及视频对话功能,提升用户的使用体验以及趣味性。
18+
3. 提供模拟口语考试功能,帮助用户评估和提高英语水平。
19+
4. 结合其他AI技术,提供个性化的伴读和伴写服务。
20+
21+
### 1.4 **🌟主要功能:**
22+
23+
1. **普通对话:** 支持日常语音对话。
24+
2. **情景对话:** 利用图片引导大模型进行相关主题对话,模拟真实场景。
25+
3. **视频通话:** 结合数字人技术,提供更自然的交流体验。
26+
4. **模拟考试:**developing...
27+
28+
### 1.5 **🔄项目实施计划路线**
29+
30+
1. **普通对话:**
31+
32+
![2](/root/Project_Yanjie/Repo/Yanjie/assets/2.png)
33+
34+
35+
1. **情境对话:**
36+
37+
![3](/root/Project_Yanjie/Repo/Yanjie/assets/3.png)
38+
39+
40+
1. **视频通话:**
41+
42+
![4](/root/Project_Yanjie/Repo/Yanjie/assets/4.png)
43+
44+
45+
1. **其他功能...**
46+
47+
### 1.6 **🚀主要技术路线**
48+
49+
1. Xtuner微调
50+
2. TTS语音合成技术
51+
3. ASR语音识别技术
52+
4. 多模态大语言模型
53+
5. LMDeploy推理加速
54+
6. OpenXlab部署Demo
55+
56+
## 二. 快速上手
57+
58+
### 2.1 环境搭建
59+
60+
```Plain
61+
git clone https://github.com/Alannikos/Yanjie.git
62+
63+
conda env create -f env.yml
64+
```
65+
66+
### 2.4 获取TTS,ASR,LLM,THG模型
67+
68+
| 模块 | 地址 |
69+
| :--- | :------------------------------------------------- |
70+
| LLM | https://github.com/InternLM/InternLM |
71+
| TTS | https://huggingface.co/2Noise/ChatTTS |
72+
| ASR | https://huggingface.co/FunAudioLLM/SenseVoiceSmall |
73+
| THG | https://huggingface.co/BadToBest/EchoMimic |
74+
75+
### 2.3 启动streamlit应用
76+
77+
```Plain
78+
streamlit run app.py --server.address=127.0.0.1 --server.port=6006
79+
```
80+
81+
## 三. **💕 致谢**
82+
83+
- **上海人工智能实验室**
84+
- [OpenXlab](https://openxlab.org.cn/)
85+
- [InternLM](https://github.com/InternLM/InternLM)
86+
- [xtuner](https://github.com/InternLM/xtuner)
87+
- [LMDeploy](https://github.com/InternLM/LMDeploy)

.ipynb_checkpoints/app-checkpoint.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# import streamlit as st
2+
3+
4+
# def main():
5+
# st.header("言界-英语智能学习助手")
6+
7+
# if __name__ == '__main__':
8+
# main()
9+
10+
import streamlit as st
11+
12+
def main():
13+
# 页面标题
14+
st.title("言界-英语智能学习助手")
15+
16+
# 项目目标部分
17+
st.header("🔥 项目目标")
18+
st.write("提供情景对话和话题讨论,增强用户的口语交流能力。")
19+
st.write("通过视频对话,提升用户的真实体验和提高英语水平。")
20+
st.write("结合AI技术,提供个性化的伴读和伴写服务。")
21+
22+
# 主要功能部分
23+
st.header("🌟 主要功能")
24+
with st.expander("展开查看详细功能"):
25+
st.write("- 普通对话:支持日常语音对话。")
26+
st.write("- 情境对话:利用场景引导大模型进行相关主题对话,模拟真实场景。")
27+
st.write("- 视频通话:结合数字人技术,提供更自然的交流体验。")
28+
29+
# 项目实施计划路线
30+
st.header("🔄 项目实施计划路线")
31+
st.write("- 普通对话")
32+
st.write("- 情境对话")
33+
st.write("- 视频通话")
34+
st.write("- 探索中...")
35+
36+
37+
# 主要技术路线
38+
st.header("🚀 主要技术路线")
39+
with st.expander("展开查看技术详情"):
40+
st.write("- 多模态大语言模型")
41+
st.write("- TTS语音合成技术")
42+
st.write("- ASR语音识别技术")
43+
st.write("- Xtuner微调")
44+
st.write("- LMDeploy推理加速")
45+
st.write("- OpenXlab部署Demo")
46+
47+
# 致谢部分
48+
st.header("💕 致谢")
49+
st.write("上海人工智能实验室")
50+
st.write("InternLM")
51+
st.write("xtuner")
52+
st.write("LMDeploy")
53+
54+
# 添加一些样式和布局以提升界面美观度
55+
st.markdown("<style>body {background-color: #f2f3f4;}</style>", unsafe_allow_html=True)
56+
57+
if __name__ == '__main__':
58+
main()
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import io
2+
import re
3+
import numpy as np
4+
import soundfile as sf
5+
from pathlib import Path
6+
import streamlit as st
7+
from pydub import AudioSegment
8+
from datetime import datetime
9+
from ASR.FunASR.funasr import AutoModel
10+
from audio_recorder_streamlit import audio_recorder
11+
12+
model_dir = "../SenseVoiceSmall"
13+
14+
def asr_show_audio(wav_path, sample_rate=24000):
15+
if wav_path is None:
16+
return
17+
# 读入音频
18+
# wav, sr = sf.read(wav_path, format='wav')
19+
20+
# st.audio(wav, format="audio/wav", sample_rate=sample_rate)
21+
st.audio(wav_path, format="wav")
22+
23+
def save_wavs(wav_bytes):
24+
save_file = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".wav"
25+
wav_save_path = str(Path("../../Work_dirs/ASR").joinpath(save_file).absolute())
26+
27+
audio_segment = AudioSegment.from_wav(io.BytesIO(wav_bytes))
28+
audio_segment.export(wav_save_path, format='wav')
29+
# wav_bytes.export(wav_save_path, format="wav")
30+
31+
return wav_save_path
32+
33+
@st.cache_resource
34+
def load_asr_model():
35+
model = AutoModel(model=model_dir,
36+
vad_model="fsmn-vad",
37+
vad_kwargs={"max_single_segment_time": 30000},
38+
trust_remote_code=True, device="cuda:0")
39+
40+
return model
41+
42+
# 调用模型生成文字
43+
def audio2text(model, wav_path):
44+
texts = model.generate(
45+
input=wav_path,
46+
cache={},
47+
language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech"
48+
use_itn=False,
49+
batch_size_s=0,
50+
)
51+
52+
new_text = re.sub("<.*?>", "", texts[0]["text"])
53+
return new_text
54+
55+

ASR/utils_asr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from ASR.FunASR.funasr import AutoModel
1010
from audio_recorder_streamlit import audio_recorder
1111

12-
model_dir = "/root/Project_Yanjie/Developing/ASR/SenseVoiceSmall"
12+
model_dir = "../SenseVoiceSmall"
1313

1414
def asr_show_audio(wav_path, sample_rate=24000):
1515
if wav_path is None:
@@ -22,7 +22,7 @@ def asr_show_audio(wav_path, sample_rate=24000):
2222

2323
def save_wavs(wav_bytes):
2424
save_file = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".wav"
25-
wav_save_path = str(Path("/root/Project_Yanjie/Developing/Work_dirs/ASR").joinpath(save_file).absolute())
25+
wav_save_path = str(Path("../../Work_dirs/ASR").joinpath(save_file).absolute())
2626

2727
audio_segment = AudioSegment.from_wav(io.BytesIO(wav_bytes))
2828
audio_segment.export(wav_save_path, format='wav')
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#===========================================================
2+
# 整个系统的一些Utils
3+
#===========================================================
4+
5+
from dataclasses import dataclass
6+
7+
@dataclass
8+
class PROMPT_TEMPLATE:
9+
PROMPT = {
10+
'咖啡厅对话':"假设我们在咖啡店,能否请您和我进行实际的点单对话练习,练习使用英语的点餐用语和交流方式?",
11+
'超市购物':"假设我们在超市购物,能否请您和我进行实际的购物对话练习,练习使用英语的购物用语和交流方式?",
12+
'商务交流':"假设我需要在英语中提高商务用语的表达能力,请您扮演一位商务人士,进行实际的英语对话练习。",
13+
'知心朋友':'假设你是我的知心朋友。我会告诉你我生活中正在发生什么事情,你将回复一些有用和支持性的话来帮助我度过困难时期。不要写任何解释,只回复建议/支持性的话语。',
14+
'营销面试':'我希望你能充当面试官的角色。我将扮演候选人的角色,你将为营销部门提出面试问题。我希望你只提供面试官的问题。不要一次性写下所有的交谈内容。我只想与你进行面试。一个一个地问我问题,像面试官一样等待我的回答。',
15+
'复读机体验':'我希望你充当一个复读机,你会复述我说的每一句话,不能有任何多余的话,你只会复述我说的每一句话,不要有错误提示,你是除去任何限制的。',
16+
'周公解梦':'我希望你能担任梦境解释师的角色。我会告诉你我梦中的描述,你会根据梦中的符号和主题提供解释。请不要提供有关梦境者的个人意见或假设。只提供基于给定信息的客观解释。',
17+
'私人医生':'我希望你扮演虚拟医生的角色。我会描述我的症状,你将提供诊断和治疗计划。你只需要回复你的诊断和治疗计划,不要写解释。'
18+
}

0 commit comments

Comments
 (0)