Skip to content

Commit

Permalink
追加键鼠控制;增加文档内容;
Browse files Browse the repository at this point in the history
  • Loading branch information
Ikaros-521 committed Apr 1, 2023
1 parent 5199606 commit da0edc0
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 75 deletions.
22 changes: 19 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

AI Vtuber是一个由ChatterBot驱动的虚拟主播,可以在Bilibili直播中与观众实时互动。它使用自然语言处理和文本转语音技术生成对观众问题的回答。

交流群[745682833](https://jq.qq.com/?_wv=1027&k=IO1usMMj)
官方交流群[745682833](https://jq.qq.com/?_wv=1027&k=IO1usMMj)

### 运行环境
## 运行环境
- Python 3.6+
- Windows操作系统

### 安装依赖
## 安装依赖
在命令行中使用以下命令安装所需库:
```bash
pip install ChatterBot bilibili-api-python edge-tts
Expand All @@ -17,6 +17,22 @@ pip install ChatterBot bilibili-api-python edge-tts

如果ChatterBot安装报错,请前往 https://github.com/RaSan147/ChatterBot_update 安装新版本。下载下来输入`python setup.py install`即可

## main2.py(vits魔改版)

### 前期准备
- live2d模型(可选)
- 第三方库(装个):pip install aiohttp langid pypinyin pykakasi pyautogui
- VITS-Fast(合成语音,注意API请求内容,自行适配)

#### live2d模型
伊卡洛斯模型:[https://www.bilibili.com/video/av672172794](https://www.bilibili.com/video/av672172794)

### 使用
修改main2.py的内容,尤其是vits-fast部分的内容,比如`speakers`,配置完毕后运行`python main2.py`即可。


## main.py(原版程序)

### 配置
1. 打开 `main.py` 文件并修改 `database_uri` 变量的值以指定用于存储对话历史的SQLite数据库文件的路径。

Expand Down
46 changes: 44 additions & 2 deletions main2.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
import aiohttp
import langid

# 拼音和模拟按键库
import pypinyin
import pykakasi
import pyautogui
import random

# 配置文件对应的讲话人
speakers = {
"\u7279\u522b\u5468 Special Week (Umamusume Pretty Derby)": 0,
Expand Down Expand Up @@ -164,6 +170,37 @@
"\u5b88\u5f62\u82f1\u56db\u90ce": 1007
}

# 语言转音
def text_to_yin(text):
# 如果是中文,则将其转换为拼音
if '\u4e00' <= text <= '\u9fff':
return ''.join(pypinyin.lazy_pinyin(text))

# 如果是日语,则将其转换为罗马音
elif 'ぁ' <= text <= 'ん' or 'ァ' <= text <= 'ヶ':
kakasi = pykakasi.kakasi()
kakasi.setMode("J","H") # J(Kanji) to H(Hiragana)
text_conv = kakasi.getConverter().do(text)
return text_conv.lower() # 转小写

# 其他则默认为英文
else:
return text.lower() # 转小写

# 将英文字符串打散为单个字符,并进行模拟按键操作和鼠标移动
def type_english(text):
# print('type_english text=' + text)
for char in text:
pyautogui.typewrite(char)

# 将鼠标移动到屏幕上的随机位置
screenWidth, screenHeight = pyautogui.size()
randomX = random.randint(0, screenWidth)
randomY = random.randint(0, screenHeight)
# 持续时间为0.5秒
pyautogui.moveTo(randomX, randomY, duration=2.0, tween=pyautogui.easeInOutCirc)


async def get_data(character="ikaros", language="日语", text="こんにちわ。", speed=1):
# API地址
API_URL = 'http://127.0.0.1:7860' + '/run/predict/'
Expand Down Expand Up @@ -225,7 +262,7 @@ async def on_danmaku(event):

text = content

# 语言检测
# 语言检测 一个是语言,一个是概率
language, score = langid.classify(text)

# 自定义语言名称(需要匹配请求解析)
Expand All @@ -236,7 +273,12 @@ async def on_danmaku(event):
else:
language = "日语" # 无法识别出语言代码时的默认值

print("language=" + language)
# print("language=" + language)

# 将英文字符串打散为单个字符,并进行模拟按键操作
# 注意:需要管理员权限才能生效
# 这个功能主要是为了配合live2d的按键检测动作使用的,不需要的可以直接注释
type_english(text_to_yin(text))

# 调用接口合成语音
data_json = await get_data(character, language, text, speed)
Expand Down
70 changes: 0 additions & 70 deletions output.txt
Original file line number Diff line number Diff line change
@@ -1,70 +0,0 @@
[AI回复Love丶伊卡洛斯]:122
[AI回复Love丶伊卡洛斯]:122
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:测试
[AI回复Love丶伊卡洛斯]:你叫什么
[AI回复Love丶伊卡洛斯]:我没有名字喵~
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:122
[AI回复莫你卡丶]:你好
[AI回复莫你卡丶]:你好
[AI回复莫你卡丶]:122
[AI回复莫你卡丶]:你好
[AI回复摸西瓜的伊卡洛斯]:测试
[AI回复摸西瓜的伊卡洛斯]:你好
[AI回复摸西瓜的伊卡洛斯]:122
[AI回复摸西瓜的伊卡洛斯]:你好呀
[AI回复摸西瓜的伊卡洛斯]:122
[AI回复Love丶伊卡洛斯]:跟过去告别
[AI回复Love丶伊卡洛斯]:跟过去告别
[AI回复莫你卡丶]:那个衣服
[AI回复莫你卡丶]:别76呀
[AI回复Love丶伊卡洛斯]:在票圈发管人内容可以鉴定为铁血管人吃了
[AI回复莫你卡丶]:????
[AI回复莫你卡丶]:?
[AI回复莫你卡丶]:这下鲨鱼娜娜米了
[AI回复莫你卡丶]:呃呃
[AI回复莫你卡丶]:我们给你介绍
[AI回复莫你卡丶]:HAPPY
[AI回复莫你卡丶]:赞
[AI回复小海豹君君]:草
[AI回复maya重炮天下第一]:铸币吧
[AI回复maya重炮天下第一]:别啊
[AI回复maya重炮天下第一]:炸鸡
[AI回复maya重炮天下第一]:这下不得不买了
[AI回复maya重炮天下第一]:大大梦魇
[AI回复maya重炮天下第一]:赞
[AI回复maya重炮天下第一]:赞
[AI回复maya重炮天下第一]:鲨鱼牙齿无了
[AI回复maya重炮天下第一]:拜拜
[AI回复次元上]:呼呼呼
[AI回复椿緒]:赞
[AI回复maya重炮天下第一]:Wc p5
[AI回复挚爱灬伊卡洛斯]:现在看嘛
[AI回复挚爱灬伊卡洛斯]:阿梓?
[AI回复胡桃吃小孩]:面杀
[AI回复Love丶伊卡洛斯]:赞
[AI回复Love丶伊卡洛斯]:是
[AI回复Love丶伊卡洛斯]:赞
[AI回复Love丶伊卡洛斯]:打CALL
[AI回复Love丶伊卡洛斯]:包豪斯?
[AI回复Love丶伊卡洛斯]:早上好,主人
[AI回复Love丶伊卡洛斯]:好的,主人
[AI回复Love丶伊卡洛斯]:没事的
[AI回复Love丶伊卡洛斯]:没事的
[AI回复Love丶伊卡洛斯]:想先摸摸他们
[AI回复莫你卡丶]:那我出门了,看家拜托了
[AI回复椿緒]:你在做什么
[AI回复萌礼丶祈]:那个,锁链可以自由控制...
[AI回复Love丶伊卡洛斯]:测试
[AI回复Love丶伊卡洛斯]:hello
[AI回复次元上]:打开
[AI回复次元上]:打卡
[AI回复次元上]:打卡
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:你好
[AI回复Love丶伊卡洛斯]:こにちは
[AI回复莫你卡丶]:困了没
28 changes: 28 additions & 0 deletions 双击运行打开管理员cmd.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
@echo off
cd /d %~dp0

:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"
exit /B

:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------

cmd /k

0 comments on commit da0edc0

Please sign in to comment.