本教程将会教你如何使用Python3.7和Yolo3来实现识别语音播报功能。对于初学者,我们会先讲解一些必备的基础知识。接着,我们会带你一步一步实现该功能。
在开始实现前,需要掌握以下基础知识:
首先需安装以下环境:
1.从互联网中下载必要的模型参数到本地
2.必备库安装
python -m pip install pyaudio
python -m pip install wave
3.下载 Yolo3 物体识别算法源代码并且编译
git clone https://github.com/qqwweee/keras-yolo3.git # 下载源代码
cd keras-yolo3/
wget https://pjreddie.com/media/files/yolov3.weights # 下载权重文件,并且放在 /keras-yolo3/models/ 文件夹中
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5 # 转换成 keras 训练好的 h5 模型
在本教程中,我会通过一个简单的示例来演示如何编写识别代码。下面是示例代码:
import time
import wave
import os
import numpy as np
from pyaudio import PyAudio, paInt16
from keras_yolo3.yolo import YOLO
import cv2
from io import BytesIO
from gtts import gTTS
from pygame import mixer
from PIL import Image
# 采集音频的基本参数
framerate = 8000
NUM_SAMPLES = 2000
channels = 1
sampwidth = 2
# 初始化PyAudio和pygame.mixer
pa = PyAudio()
mixer.init()
# 初始化YOLO3模型
yolo = YOLO()
# 循环录音、识别、播报流程
while True:
# 录音
stream = pa.open(format=paInt16, channels=channels, rate=framerate, input=True, frames_per_buffer=1024)
audio_data = stream.read(NUM_SAMPLES)
stream.close()
# 语音识别
img = BytesIO()
np_audio_data = np.frombuffer(audio_data, dtype=np.int16)
wav_data = wave.open(img, 'wb')
wav_data.setnchannels(channels)
wav_data.setsampwidth(sampwidth)
wav_data.setframerate(framerate)
wav_data.writeframes(audio_data)
wav_data.close()
# 将录音数据转换为图像数据
img = Image.open(img)
image_data = np.array(img)
# 物体识别
boxes, scores, classes = yolo.detect_image(image_data)
# 播报
for i, bbox in enumerate(boxes):
# 获得物体名
name = yolo.classes[int(classes[i])]
# 播报
tts = gTTS(text=name, lang='en')
tts.save('{}.mp3'.format(name))
mixer.music.load('{}.mp3'.format(name))
mixer.music.play()
time.sleep(1)
# 关闭PyAudio和pygame.mixer
pa.terminate()
mixer.quit()
编写完识别代码后,可以通过运行代码来测试功能。在完成代码输入后,通过终端进入代码所在的目录并输入以下命令即可启动识别语音播报功能:
python VoiceRecognition.py
当代码运行成功后,它应该能够正确地录制、识别、播报声音。