从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

  • Post author:
  • Post category:其他



首先要明确一点,这个搭建的是自己的API服务器;不是什么科大讯飞、百度语音这种付费API,而且那是直接使用别人的API,这是搭建自己的API,相比之下还是有区别的



材料准备

云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统))



环境搭建



1. Python 3.7

话不多说直接上代码

sudo su
yum -y install git
yum -y install gcc
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz

tar -zxvf Python-3.7.3.tgz

mkdir /usr/local/python3
cd Python-3.7.3
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3

到这里python 3.7 的环境搭建完毕


测试一下

输入

python3

回车

python 3.7环境


ctrl+Z

退出python编辑器



2. 使用pip3一键安装其他环境

在当前所在的目录下新建一个

libs.txt

文件


libs.txt

文件中内容如下:

absl-py==0.8.1
astor==0.8.0
certifi==2019.9.11
cycler==0.10.0
gast==0.2.2
google-pasta==0.1.7
grpcio==1.24.1
h5py==2.10.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
kiwisolver==1.3.1
Markdown==3.1.1
matplotlib==3.4.2
numpy==1.17.2
opt-einsum==3.1.0
Pillow==8.2.0
protobuf==3.10.0
pyparsing==2.4.7
python-dateutil==2.8.1
python-speech-features==0.6
scipy==1.6.3
six==1.12.0
tensorboard==2.0.0
tensorflow-estimator==2.0.0
tensorflow==2.0.0
termcolor==1.1.0
Werkzeug==0.16.0
wrapt==1.11.2
Keras==2.2.4
tensorflow-cpu==1.4.0

保存之后,输入

pip3 install -r libs.txt

回车

然后,见证奇迹,如果没报错,恭喜你,环境已经配置成功了

如果。。。呸呸呸!哪有那么多如果

o(´^`)o



下载ASRT开源项目

cd ..
wget https://d.ailemon.net/asrt_released/ASRT_v0.6.1.zip
yum install -y unzip
unzip ASRT_v0.6.1.zip
cd ASRT_v0.6.1



运行API服务器


让项目可以在后台一直运行

yum install screen
screen -S ASRT_1


在打开的新窗口中输入以下代码运行服务器

python3 asrserver.py

运行成功

出现图中服务器已开启则证明服务器已成功运行

这时候点击

ctrl+A+D

键,在不关闭该程序的情况下离开该窗口



配置开放20000端口

这个开放的端口号需要到asrserver.py文件中修改(默认是20000)

在这里插入图片描述

创建安全组

配置20000端口

保存后就搭建完成了



API测试

  1. 打开浏览器,访问http://xxx.xxx.xxx.xxx:20000/ (前面的XXX是您服务器的IPV4地址)

    访问到的界面如下:

    在这里插入图片描述

    则证明API部署成功

  2. 接下来测试一下API效果

    打开API测试工具,根据使用说明操作。

    在这里插入图片描述


    测试工具免费下载

  3. 使用项目testClient.py代码,上传指定路径音频转文字测试

测试代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import wave
import numpy as np
import requests

def main():
    url = 'https://api.ailemon.net/asrt/v1/'   # 测试API接口地址,如果使用自己的请注释
    # url = 'http://127.0.0.1:666/'
    # url = 'http://xxx.xxx.xxx.xxx:20000/'    # 修改为自己的API接口,并取消注释
    token = 'qwertasd'

    wavsignal, fs = read_wav_data('D:\\lfasr.wav')  # 音频文件路径
    print(wavsignal, fs)

    datas = {'token': token, 'fs': fs, 'wavs': wavsignal}
    print("类型:", type(datas))
    print("datas:", datas)
    r = requests.post(url, datas)

    r.encoding = 'utf-8'

    print("识别结果:", r.text)


def read_wav_data(filename):
    '''
    读取一个wav文件,返回声音信号的时域谱矩阵和播放时间
    '''
    wav = wave.open(filename, "rb")  # 打开一个wav格式的声音文件流
    num_frame = wav.getnframes()  # 获取帧数
    num_channel = wav.getnchannels()  # 获取声道数
    framerate = wav.getframerate()  # 获取帧速率
    num_sample_width = wav.getsampwidth()  # 获取实例的比特宽度,即每一帧的字节数
    str_data = wav.readframes(num_frame)  # 读取全部的帧
    wav.close()  # 关闭流
    wave_data = np.frombuffer(str_data, dtype=np.short)  # 将声音文件数据转换为数组矩阵形式
    wave_data.shape = -1, num_channel  # 按照声道数将数组整形,单声道时候是一列数组,双声道时候是两列的矩阵
    wave_data = wave_data.T  # 将矩阵转置
    # wave_data = wave_data
    return wave_data, framerate


if __name__ == '__main__':
    main()

测试结果如下:

在这里插入图片描述



版权声明:本文为zhi_qian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。