服务端:
from flask import Flask, request
import json
from funasr import AutoModel
app = Flask(__name__)
model = AutoModel(model=r'models/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch',
vad_model=r'models/speech_fsmn_vad_zh-cn-16k-common-pytorch',
punc_model=r'models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch')
@app.route('/', methods=['POST']) # 请输入用户端的url端口名称
def asr_service():
# 初始化响应结果
response = {'code': 0, 'message': '成功', 'data': ''}
# 获取音频文件
wav = request.files['wav']
name = wav.filename
wav.save(r'temp/temp.wav'.format(name))
response['data'] = r'temp/temp.wav'
# 识别音频文件
result = model.generate(input=r'temp/temp.wav', batch_size_s=300)
if len(result) >= 1:
response['data'] = result[0]['text']
print(response)
return json.dumps(response, ensure_ascii=False)
if __name__ == '__main__':
app.config['JSON_AS_ASCII'] = False
app.run(host='0.0.0.0', port=5000)
客户端:
import requests # 用于发送HTTP请求到API
import sounddevice as sd
import soundfile as sf
# 电子元器件类别
cls_names = ['电容', '电阻', 'LED', '芯片', '数码管']
def abc():
global words
while True:
fs = 44100
# 2.音频录制时长(s)
duration = 10
recorder = sd.rec(int(duration * fs), samplerate=fs, channels=2)
# 提示
print('请说话...')
sd.wait()
# 生成音频文件
sf.write(r'temp/temp.wav', recorder, fs)
url = '' #请输入自己的url
response = requests.post(url=url,
files={'wav':open(r'temp/temp.wav', 'rb')})
result = response.json()
if result['code'] == 0:
words = result['data']
# 检查是否存在模式和电子元器件
if '实时' in words:
mode = '实时计数'
elif '累计' in words:
mode = '累计计数'
else:
mode = ''
if '实时' in words and '累计' in words:
mode = ''
component_names = []
if mode:
for name in cls_names:
if name in words:
component_names.append(name)
#if '全部' in words:
#component_names = cls_names
print('语音识别:{}'.format(words))
print('功能模式:{}'.format(mode))
print('识别对象:{}'.format(component_names))
abc()