硬件开发——语音模块开发 (包含语音识别模块代码等资料包 )

一、语音模块以及硬件模块开发的行情

硬件模块的开发——常用:语音模块

语音模块STC11L08XE

比如

  • 人脸识别打卡器——虹膜识别(购买方式)
  • 语音识别(购买方式)
  • 车牌识别(购买方式)
  • 华为手机(购买方式)

拿到硬件开发,首先要资料
在这里插入图片描述

一、语音识别模块参数

在这里插入图片描述

  • 型号:YS-LDV7
  • 名称:一体化语音识别模块
  • 规格:43*29.7MM
  • 供电电压:5V (内部工作电压 3.3V)
  • 待机电流:30MA
  • 识别时电流:45MA
  • IO 口输出:高电平为 3.3V
  • 通信方式:串口通信5V TTL 电平,不可直接接 RS232、RS485)
  • 单片机参数:型号 –>STC11L08XE 、flash–>8k、SRAM–>1280、eeprom–>32k
  • 识别词条个数:50句
  • 工作温度:-20 至 60℃

单片机参数:STC11L08XE
在这里插入图片描述

二、模块结构介绍

本模块实际原理为 1 片 STC11 单片机+1 片 LD3320 组合形成的一款语音识别模块,语音识别部分已写好驱动程序,用于只需要对 STC 单片机进行编程加入自己的识别语句和控制程序即可,语音识别部分无需理会和做编程处理。
本模块具备 1 个 5V TTL 串口16 个单片机 IO 口的引出,可与外部单片机进行通 信交互信息亦可控制继电器等设备。

在这里插入图片描述

三、串口连接图

本模块的串口如下图所示,从下至上的 5 根针分别为 GND、RXD、TXD、 5V、3.3V,其中 RXD 和 TXD 为实际内部单片机的串口接收和发射端口,故与 外部串口设备连接时要注意 RXD 接 TXD 的交叉接法。3.3V 的口为输出口, 可用于外部设备的供电利用,一般未用上直接忽略不用即可。
下图为 USB 转 TTL 与语音模块的连接方法,如与其他单片机 或者其他设备的连接时注意串口电平需要为 5V,与语音模块电平一致,如电平不一致可加入串口电平转换模块否则将导致通信异常甚至损坏设备端口。
在这里插入图片描述

四、验货测试方法

本模块在出厂前已经下载了口令模式版本的程序,收到货后可进行初步的测试。
口令模式需要先按一级口令识别成功后才能继续喊二级口令以此循环
内部默认的口令如下:
一级口令:小杰
二级口令:代码测试

  • 开发板验证

  • 开灯

  • 关灯

  • 北京

  • 上海

  • 广州

详细测试流程如下:

  1. 首先在电脑上安装“USB 转 TTL 驱动
  2. 根据以上串口连接图将 USB 转 TTL 模块与语音模块连接好
  3. 插入电脑 USB 口(注意不要加 USB 延长线直接插到主机的 USB 口)
  4. 打开“STC-ISP 下载软件”里面的串口助手
  5. 根据下图选择好各个选项:其中串口号可通关查看–我的电脑–设备管理器–端口)

在这里插入图片描述
另外我们打开软件串口后,我们可以拔下 GND 再把 GND 插上,这样重新上电可以看到接收串口会打印出相关的识别口令。

  1. 以上步骤都准备好后,我们距离模块的麦克风 50cm 左右,以正常的发音速度和音量进行识别,
  2. 第一句喊口令为:小杰 如识别正确,则模块 D1 指示灯将亮起,软件也将输出”收到”二字。
  3. 如没有 任何反应可以尝试再次发音,注意手不要碰到模块的线路。可以夹 住板边

最强代码阅读器sourceInsight工具

二、语音识别模块代码分析

语音识别模块资料包
链接:https://pan.baidu.com/s/1xkwbDIDrUeOck4Q6E4bC2w
提取码:jkdj

我们要想让语音模块识别我们想要的命令,就要改变固件代码。或者AT指令

总结主函数

void ExtInt0Handler(void) interrupt 0 中断处理函数
	当LD3320识别成功后,会引发IO口中断
	nAsrRes = LD_GetResult();		/*获取结果*/
	User_handle(nAsrRes);//用户执行函数 


main{
	Led_test(); 开机闪灯3MCU_init(); 单片机本身初始化,开启中断
	LD_Reset(); ld3320初始化
	UartIni(); /*串口初始化*/
}
	while(1){
		RunASR(); 启动识别
			LD_AsrStart();
				LD_Init_ASR();厂家提供的启动时序代码
		LD_AsrAddFixed(); 向LD模块添加关键词
		LD_AsrRun();  	运行ASR 启动ASR运算(“开始识别”)
			ProcessInt0();  判断识别是否有结果
	}

1. LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c

2. 识别出结果后,把数据从语音模块发出来!void 	User_handle(uint8 dat)  main

修改代码

1.修改 LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c
在这里插入图片描述
在这里插入图片描述
2. 修改 识别出结果后,把数据从语音模块发出来!void User_handle(uint8 dat) 在main.c里
在这里插入图片描述
然后编译成功,我们插入模块,打开STC进行烧录代码,(记得烧录时候,拔开GND,在插入,重新上电),打开串口助手,进行测试。
在这里插入图片描述

  • 14
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
中文语音识别是一个复杂的任务,需要大量的数据和计算资源。以下是一个示例代码,用于演示如何使用深度神经网络进行中文语音识别。 首先,我们需要导入必要的库和数据集。在这里,我们使用了 THCHS-30 数据集,该数据集包含了大约 10 小时的中文语音数据。 ```python import os import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, LSTM, TimeDistributed, Activation, Bidirectional, BatchNormalization from tensorflow.keras.callbacks import ModelCheckpoint from tensorflow.keras.utils import to_categorical from python_speech_features import mfcc from tqdm import tqdm # Load THCHS-30 dataset def load_data(): data = [] labels = [] label_map = {} mfcc_feature_len = 13 with open('data/thchs30/data' + os.sep + 'data' + os.sep + 'train' + os.sep + 'train.wav.lst', 'r') as f: lines = f.readlines() for line in tqdm(lines): parts = line.strip().split() wav_file = 'data/thchs30/data' + os.sep + 'train' + os.sep + parts[0] + '.wav' label_file = 'data/thchs30/data' + os.sep + 'train' + os.sep + parts[0] + '.trn' with open(label_file, 'r') as f2: label = f2.read().strip() if label not in label_map: label_map[label] = len(label_map) labels.append(label_map[label]) signal, rate = tf.audio.decode_wav(tf.io.read_file(wav_file)) signal = tf.squeeze(signal, axis=-1) mfcc_features = mfcc(signal.numpy(), rate.numpy(), numcep=mfcc_feature_len) data.append(mfcc_features) return np.array(data), np.array(labels), label_map # Load data data, labels, label_map = load_data() num_labels = len(label_map) ``` 接下来,我们需要将数据集分成训练集和测试集,并将标签转换为 one-hot 编码。 ```python train_ratio = 0.8 num_train = int(len(data) * train_ratio) # Split data into train and test sets train_data = data[:num_train] train_labels = labels[:num_train] test_data = data[num_train:] test_labels = labels[num_train:] # Convert labels to one-hot encoding train_labels = to_categorical(train_labels, num_labels) test_labels = to_categorical(test_labels, num_labels) ``` 然后,我们可以构建一个简单的双向 LSTM 模型。 ```python model = Sequential() model.add(Bidirectional(LSTM(128, return_sequences=True), input_shape=(None, mfcc_feature_len))) model.add(Dropout(0.2)) model.add(Bidirectional(LSTM(128))) model.add(Dropout(0.2)) model.add(Dense(num_labels)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 我们还可以添加一些回调函数,以便在训练过程中自动保存最佳模型。 ```python # Define checkpoint callback checkpoint_callback = ModelCheckpoint('model.h5', monitor='val_accuracy', save_best_only=True, mode='max') # Train model history = model.fit(train_data, train_labels, batch_size=32, epochs=100, validation_data=(test_data, test_labels), callbacks=[checkpoint_callback]) ``` 最后,我们可以使用训练好的模型进行预测。 ```python # Load best model model.load_weights('model.h5') # Predict labels for test data predicted_labels = model.predict(test_data) # Convert predicted labels to integers predicted_labels = np.argmax(predicted_labels, axis=-1) # Convert labels back to text predicted_labels = [list(label_map.keys())[list(label_map.values()).index(label)] for label in predicted_labels] ``` 这就是一个简单的中文语音识别模型的实现。当然,为了达到更好的性能,我们需要更复杂的模型和更多的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值