与AI大语言模型进行语音对话(ollama voice)

admin 2024年10月30日19:13:49评论13 views字数 5437阅读18分7秒阅读模式

如果想通过语音与AI大语言模型进行对话,可以使用AI语音助手,Ollama Voice语音助手,可以将用户的语音转换成文字,向Ollama大语言模型工具提问,返回的文字再转换成音频播放出来,实现用户与大语言模型之间的语音对话。

ollama可以在本机运行,普通的电脑就可以运行。

1.安装ARM64 Conda

在苹果M系列的ARM64芯片笔记本,可以安装ARM64版本的Conda,如下:

# 下载 Mambaforge 安装脚本

curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-arm64.sh"

# 运行安装脚本

bash Mambaforge-MacOSX-arm64.sh

# 初始化

Conda ~/.mambaforge/bin/conda init

# 重新加载 shell 配置

source ~/.zshrc

# 或者 使用的是 Bash

source ~/.bashrc

# 创建一个新的 arm64 架构的 Conda 环境

mamba create -n my_arm64_env python=3.9 -c conda-forge

# 激活环境

conda activate my_arm64_env

# 验证环境架构

uname -m

# 使用 Python 解释器验证

python -c "import platform; print(platform.machine())"

2.安装LLVM@16

如果系统已经安装版本16的clang编译工具,可以不再手动安装llvm@16,用系统的当前版本的clang,16以下的版本不可用,安装编译pyaudio时会报.h中函数编译参数错误。    

brew install llvm@16

brew list llvm@16

3.安装ollama

去https://ollama.com下载安装程序,安装完后,执行指令,如下:

ollama run llama3

4.安装portaudio

portaudio是pyaudio依赖的低层库,所以portaudio的正确安装很重要,可以用C代码测试是否好用。pyaudio在安装时要正确的引用正确版本的portaudio库,才可以正确使用苹果系统上的音频设备,否则会出现错误,无法启动麦克风进行收音。

brew uninstall portaudio && brew install portaudio --HEAD

查看portaudio安装的目录位置,如下:

brew list portaudio

安装libsndfile,保存音频文件的时候使用,用GCC编译的时候要引用这个库。

brew install libsndfile

测试用C语言代码,如下:

#include#include#include#include#include#define SAMPLE_RATE 44100    #define FRAMES_PER_BUFFER 256#define NUM_SECONDS 5#define NUM_CHANNELS 1/* 回调函数,用于处理音频数据 */static int recordCallback(const void *inputBuffer, void *outputBuffer,                          unsigned long framesPerBuffer,                          const PaStreamCallbackTimeInfo *timeInfo,                          PaStreamCallbackFlags statusFlags,                          void *userData) {    float *in = (float *)inputBuffer;    float *data = (float *)userData;    for (unsigned int i = 0; i < framesPerBuffer; i++) {        data[i] = *in++;    }    return paContinue;}int main(void) {    PaStream *stream;    PaError err;    float data[NUM_CHANNELS * SAMPLE_RATE * NUM_SECONDS];    /* 初始化PortAudio */    err = Pa_Initialize();    if (err != paNoError) {        fprintf(stderr, "PortAudio error: %sn", Pa_GetErrorText(err));        return 1;    }    /* 打开音频流 */    err = Pa_OpenDefaultStream(&stream, NUM_CHANNELS, 0, paFloat32, SAMPLE_RATE,                               FRAMES_PER_BUFFER, recordCallback, data);        if (err != paNoError) {        fprintf(stderr, "PortAudio error: %sn", Pa_GetErrorText(err));        return 1;    }    /* 开始录音 */    err = Pa_StartStream(stream);    if (err != paNoError) {        fprintf(stderr, "PortAudio error: %sn", Pa_GetErrorText(err));        return 1;    }    printf("Recording...n");    Pa_Sleep(NUM_SECONDS * 1000);    /* 停止录音 */    err = Pa_StopStream(stream);    if (err != paNoError) {        fprintf(stderr, "PortAudio error: %sn", Pa_GetErrorText(err));        return 1;    }    /* 关闭音频流 */    err = Pa_CloseStream(stream);    if (err != paNoError) {        fprintf(stderr, "PortAudio error: %sn", Pa_GetErrorText(err));        return 1;    }    /* 终止PortAudio */    Pa_Terminate();    printf("Recording complete.n");    /* 保存音频到文件 */    SF_INFO sfinfo;        memset(&sfinfo, 0, sizeof(sfinfo));    sfinfo.samplerate = SAMPLE_RATE;    sfinfo.frames = NUM_SECONDS * SAMPLE_RATE;    sfinfo.channels = NUM_CHANNELS;    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;    SNDFILE *outfile = sf_open("output.wav", SFM_WRITE, &sfinfo);    if (!outfile) {        fprintf(stderr, "Error opening output file: %sn", sf_strerror(NULL));        return 1;    }    sf_write_float(outfile, data, NUM_CHANNELS * SAMPLE_RATE * NUM_SECONDS);    sf_close(outfile);    printf("Audio saved to output.wavn");    return 0;}

编译生成执行文件,运行main3执行文件进行录音。

gcc -o main3 main3.c -I/opt/homebrew/Cellar/portaudio/HEAD-57aa393/include/ -I/opt/homebrew/Cellar/libsndfile/1.2.2/include/ -L/opt/homebrew/Cellar/portaudio/HEAD-57aa393/lib/ -L/opt/homebrew/Cellar/libsndfile/1.2.2/lib/ -lportaudio -lsndfile

5.安装PyAudio

安装pyaudio和whisper,可以使用ollama vocie中有requirements.txt,按依赖文件中定的版本,用pip安装依赖库,文件内容,如下:

torch==2.1.2    

torchvision==0.16.2

torchaudio==2.1.2

pyttsx3==2.90

blobfile==2.1.1

openai==1.7.0

Wave==0.0.2

PyAudio==0.2.14

PyYAML==6.0.1

pygame==2.5.2

soundfile==0.12.1

pyObjC==9.0.1

openai-whisper @ git+https://github.com/openai/whisper.git@ba3f3cd54b0e5b8ce1ab3de13e32122d0d5f98ab%

6.测试 whipser

whisper可以显示mp3声音文件说的说话内容的文本,命令如下:

whisper test.mp3

带参数安装,可以观察在安装时出现的问题,命令如下:

pip install --no-cache-dir --verbose -r requirements.txt

安装时添加参数--verbose,查看安装编译pyaudio时,使用的clang版本,引用那个版本的portaudio的头文件和库文件。--no-chache-dir是从远程服务器下载,不从本地缓冲安装。

7.测试pyaudio

执行下面的的python代码,用苹果笔记本的内置麦克风进行声音的录制,并播放声音,代码如下:

import pyaudioimport wave# 录音设置FORMAT = pyaudio.paInt16CHANNELS = 1RATE = 48000  # 48kHz的采样率CHUNK = 1024RECORD_SECONDS = 5WAVE_OUTPUT_FILENAME = "output_48kHz.wav"# 初始化PortAudioaudio = pyaudio.PyAudio()# 打开麦克风音频流stream = audio.open(format=FORMAT, channels=CHANNELS,                    rate=RATE, input=True,                    frames_per_buffer=CHUNK)print("Recording...")frames = []# 录制音频数据for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):    data = stream.read(CHUNK)    frames.append(data)print("Recording finished.")# 停止并关闭音频流stream.stop_stream()stream.close()    audio.terminate()# 将录音数据保存到文件wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(audio.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()print(f"Audio recorded and saved to {WAVE_OUTPUT_FILENAME}")

8.启动ollama vocie

assistant.yaml配置文件中,指定whisper需要的模型文件,模型文件的下载位置,如下:

https://openaipublic.azureedge.net/main/whisper/models/25a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead/base.en.pt

其他模型的下载位置,如下:

https://github.com/openai/whisper/discussions/63#discussioncomment-3798552

assistant.yaml文件内容,如下:

messages:  pressSpace: "Press and hold space to speak"  loadingModel: "Loading..."  noAudioInput: "Error: No sound input!"whisperRecognition:  modelPath: "whisper/base.en.pt"  lang: "en"ollama:  url: "http://localhost:11434/api/generate"  model: "llama3"conversation:  greeting: "Hi, how can I help you?"

ollama的模型可以根据自己主机的情况选择,高配置的主机可以下载上大一些的模型。

运行ollama vocie,命令以下:

python assistant.py

按住空格,进行声音输入,如下:

与AI大语言模型进行语音对话(ollama voice)

红色表示可以讲话了,以下:

与AI大语言模型进行语音对话(ollama voice)

在终端界面,可以看到对话的内容,已经对ollama大语言模型的访问过程。

与AI大语言模型进行语音对话(ollama voice)

   与AI大语言模型进行语音对话(ollama voice)

原文始发于微信公众号(AI安全运营):与AI大语言模型进行语音对话(ollama voice)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月30日19:13:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   与AI大语言模型进行语音对话(ollama voice)http://cn-sec.com/archives/3334849.html

发表评论

匿名网友 填写信息