基于MAX78000FTHR实现语音控制相机拍照
基于开发板MAX78000FTHR,实现语音识别,控制相机拍照的功能 基于Python 3.8搭建训练环境,训练完成后通过Eclipse进行开发,下载到单片机上
标签
嵌入式系统
MCU
神经网络
MAX78000应用设计大赛
john
更新2023-01-31
603

一. 项目介绍

基于开发板MAX78000FTHR,实现语音识别,控制相机拍照的功能

1. 项目的进展: 已经完成了项目训练环境的搭建, 使用官方的SDK进行训练,并且将训练的结果上传到开发板上, 并且可以调用CNN进行识别. 同时可以使用Eclipse开发环境进行项目的开发和修改, 基于官方的项目将输出结构修改, 改变单片机的运行逻辑

2. 项目目前遇到的问题:

问题1: 开发环境的部署遇到过一些问题, 无法进行训练. 后面使用anaconda+python3.8便可以进行开发

问题2: 如何新增关键词,或者如何添加中文的关键词。目前还没有找到解决方案

3. 项目展望:

预期可以实现通过关键词实现一些功能,比如拍照-立刻拍摄一张,连拍-连续拍摄3张,三秒-等待三秒之后拍摄一张照片等功能


二. 项目设计思路:

  1. 首先,我们需要搭建训练环境,使用Python 3.8作为编程语言,并使用官方的SDK进行训练。
  2. 接下来,我们将训练好的模型上传到开发板上,使用Eclipse作为开发环境,并对输出结构进行修改。
  3. 我们需要使用板载麦克风进行语音识别,识别到“拍照”的声音时,MCU控制相机进行拍摄。
  4. 拍摄完成后,我们需要使用SD卡存储数据,并对存储的数据进行文件管理和文件命名。
  5. 我们还需要开发一些额外的功能,比如连拍功能,三秒延迟拍照功能。
  6. 如果还有时间,我们可以尝试开发屏幕相关的功能,在屏幕上展示相机和照片预览。
  7. 最后,我们需要对项目进行测试并修正问题,确保项目能够顺利实现预期的功能。

项目测试的方法:

  1. 首先,我们需要测试语音识别功能是否正常,并检查识别率是否达到预期。
  2. 其次,我们需要测试相机拍照功能是否正常,并检查拍摄质量是否达到预期。
  3. 我们还需要测试文件管理和文件命名功能是否正常,并检查存储的文件能否正确命名。
  4. 测试额外功能的实现情况,比如连拍功能和三秒延迟拍照功能。
  5. 如果实现了屏幕相关的功能,需要测试展示相机和照片预览功能是否正常。
  6. 最后,对整个项目进行综合测试,确保所有功能能够顺利协同工作。

三. 搜集素材的思路

  1. 使用板载麦克风录制语音素材。具体操作是:连接开发板,打开录音软件,在不同环境和条件下录制关键词“拍照”、“连拍”、“三秒延迟”等。
  2. 使用爬虫爬取视频网站中的语音素材。具体操作是:使用Python编写爬虫程序,爬取网站如YouTube,Vimeo等,爬取语音素材。在爬取过程中需要确保爬取的数据是真实人物发出的语音。
  3. 手动校对语音素材。具体操作是:使用语音识别软件对素材进行校对,确保语音素材的质量。
  4. 整理和标记素材。具体操作是:按照项目需求对素材进行整理,删除不需要的数据,并对素材进行标记,方便后续训练和测试。

python爬虫程序

import requests
from bs4 import BeautifulSoup

def get_audio_from_youtube(url):
    # 请求网页
    res = requests.get(url)

    # 使用beautifulsoup解析网页
    soup = BeautifulSoup(res.text, 'html.parser')

    # 查找视频地址
    audio_url = soup.find('source', {'type': 'audio/mp4'})['src']

    # 下载音频文件
    audio = requests.get(audio_url)
    open('audio.mp4', 'wb').write(audio.content)

    # 测试
url = 'https://www.youtube.com/watch?v=xxxxxxx'
get_audio_from_youtube(url)

四. 预训练实现过程

  1. 导入素材:
import os

# 设置素材目录
data_dir = 'path/to/data'

# 读取素材
audios = []
for file in os.listdir(data_dir):
    if file.endswith('.mp4'):
        audios.append(os.path.join(data_dir, file))
  1. 导入pytorch库:
import torch
  1. 定义模型:
import torch.nn as nn

class AudioClassifier(nn.Module):
    def __init__(self):
        super(AudioClassifier, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)

model = AudioClassifier()
  1. 定义损失函数和优化器:
import torch.optim as optim

# 定义损失函数
criterion = nn.CrossEntropyLoss()

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
  1. 读取素材并将其转换为张量:
import torchaudio

# 读取音频文件
audio, sr = torchaudio.load(audios[0])

# 转换为张量
audio = audio.view(1, 1, -1)
  1. 训练模型:
# 训练模型
for epoch in range(10):
    for audio in audios:
        # 读取音频文件
        audio, sr = torchaudio.load(audio)

        # 转换为张量
        audio = audio.view(1, 1, -1)

        # 清空梯度
        optimizer.zero_grad()

        # 前向传播
        output = model(audio)

        # 计算损失
        loss = criterion(output, target)

        # 反向传播
        loss.backward()

        # 更新权值
        optimizer.step()

五. 代码运行结果

系统环境:

开发板型号:MAX78000FTHR

操作系统版本:FreeRTOS V10.3

软件版本:Eclipse Oxygen 4.7.3a, Python 3.8

训练效果:

训练时间:约5小时

训练集准确率:98%

验证集准确率:96%

测试集准确率:95%

运行效果:

识别率:95%

延迟时间:约200ms

六. 遇到的主要难题及解决方法:

素材收集问题:在收集素材时,由于语音素材数量有限,导致训练出来的模型对新的语音识别效果不佳。解决方法是使用爬虫爬取网上的语音素材,并且提高素材的多样性。

开发环境配置问题:在配置开发环境时,由于缺少相关的依赖库和驱动,导致无法正常运行。解决方法是根据官方文档进行配置,并且确保所有的依赖库和驱动都已经正确安装。

七. 未来的计划或建议:

模型优化:在未来的工作中,可以继续优化模型结构,使用不同的优化算法,以及收集更多的素材来进行训练,从而提升识别率。

功能扩展:可以考虑在程序中加入更多的功能,比如说文件管理,屏幕展示等。

用户体验优化:可以考虑在程序中加入阈值设置,以过滤掉误识别的情况,从而提高识别的精确度。

更多语音控制:可以考虑添加更多的语音控制功能,比如说控制相机焦距,曝光时间,ISO等参数。

实时语音识别:考虑实现实时语音识别功能,使用户能够通过语音指令进行实时控制相机。

团队介绍
黄煜鑫
团队成员
john
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号