《基于百度AI的物理语音助教》周彦丞
学生作品 2025-06-24 作者:GT-maker

《基于百度AI的物理语音助教》周彦丞

📄 查看完整原文档 ↗ 查看原站页面 ↗
作品说明

📄 本文档(《高中物理助手》周彦丞020801.docx)由原站嵌入文档解析而来(含配图 11 张)。

2021宁德五中创客作品创作方案01

项目作品案例名称:《基于百度AI的物理语音助教》

作品案例类别:创意智造

学校:福建省宁德市第五中学

作者:周彦丞 高二(8)

指导教师:邬肖英

涉及学科或专业领域:人工智能、百度AI、掌控板

作品配图

一、项目作品概述

(在同学们的日常学习生活中,常常会遇到一些物理学科上的难题,而反复询问同学也无法得到一个准确的答案,物理老师也常常因为一些原因而找不到。如果想要上网查找问题的话又需要一字一句的查找,大大降低了学习的效率。因此,为了提高同学们日常学习生活的效率,我设计了这个高中物理助手。它能够通过计算,智能识别出人们所说出的话,将人说出的话从声音的形式转化为文字的形式,上传到互联网上,再通过互联网云计算搜索得到想要的答案,将答案用语音的形式表达出来。而且,它还可以在同学们学习上感到疲累的时候,与同学们进行闲聊,来缓解同学们学习的压力。文字虽然无处不在,但其始终存在限制。对于一般人来说,打字的速度很难跟上说话的速度,所以语音智能才是未来科技的发展方向。)

该装置要实现的功能为:

语音识别;

语音合成;

闲聊机器人;

训练回答高中物理技能;

二、项目作品创作过程

A、外型设计

作品配图

本作品主体是一个盒子,配上爱因斯坦的形象,主要是体现本盒子的主要用途,经过很多次的尝试,主体用3mm椴木板切割,爱因斯坦采用5mm亚克力板,外型设计有科技感,显得更有实用性。

作品配图

硬件搭建

[材料清单]

掌控板2.0 X1

2)I/O扩展板 IO 传感器扩展板 X1

3)大按键   X1

4)D类PAM8403功放模块 X1

5)喇叭 X1

[硬件连接]

作品配图

主要使用掌控板2.0+扩展板,用一个按键(接P13)触发,配上小功放模块(接P8),声音有保证,没有多余的功能设计,简洁实用。

编程程序

主程序

作品配图

编程代码:

from mpython import *

p13 = MPythonPin(13, PinMode.IN)

import time

import audio

import urequests

import urequests

import json

import time

import random

def mPythonChatbot(client_id,client_secret,chatbot_id,query):

baidu_chatbot_result = ""

host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}".format(client_id, client_secret)

response = urequests.get(host)

SYS_CHAT_HIST = ["你好","你也好啊","今天天气怎样","还不错,阳光明媚"]

access_token = response.json()["access_token"]

#随机生成用户id

random.seed(time.ticks_cpu())

user_id = str(random.randint(1, 10000))

api_url = "https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token="+ access_token

req = {

"log_id":"mPythonChatbot_"+user_id,

"version":"2.0",

"service_id":chatbot_id,

"session_id":"",

"request":{

"query":query,

"user_id":user_id,

},

"dialog_state":{

"contexts":{

"SYS_REMEMBERED_SKILLS":[""],

"SYS_PRESUMED_HIST": [],

"SYS_CHAT_HIST": SYS_CHAT_HIST.append(query)

}

}

}

headers = {"content-type": "application/json"}

req = json.dumps(req).encode("utf8")

try:

response = urequests.post(api_url, data=req , headers=headers)

parsed = response.json()

baidu_chatbot_result = parsed["result"]["response_list"][0]["action_list"][0]["say"]

except:

baidu_chatbot_result = ""

time.sleep_ms(200)

return baidu_chatbot_result;

import gc

import network

my_wifi = wifi()

my_wifi.connectWiFi('GT-ndwz', 'ndwz-chqzhc')

def _E5_88_9D_E5_A7_8B_E5_8C_96():

global B, audio1, audio2, audio3

B = 0

audio1 = 'my.mp3'

audio2 = 'my2.wav'

audio3 = 'my3.mp3'

oled.fill(0)

oled.DispChar('高中物理助教', 28, 16, 1)

oled.DispChar('将为您服务', 34, 30, 1)

oled.show()

import gc;gc.collect()

audio.player_init(i2c)

audio.set_volume(100)

baidu_params = {"API_Key":'FaRbRg7fKOZOwGnPUs04lOjs', "Secret_Key":'APosPUm7w6D4pccXEzBS5ajynb6eW7bE', "text":'您好,我是高中物理助教,有什么问题问我吗?', "filename":audio1}

_rsp = urequests.post("http://119.23.66.134:8085/baidu_tts", params=baidu_params)

with open(audio1, "w") as _f:

while True:

dat = _rsp.recv(1024)

if not dat:

break

_f.write(dat)

audio.play(audio1)

audio.player_deinit()

gc.collect()

_E5_88_9D_E5_A7_8B_E5_8C_96()

while True:

B = p13.read_digital()

time.sleep(0.2)

if B == 1:

oled.fill(0)

oled.DispChar('高中物理助教', 28, 0, 1)

oled.DispChar('正在录音,时长 3 秒 ...', 0, 16, 1)

oled.show()

rgb[0] = (int(255), int(0), int(0))

rgb.write()

time.sleep_ms(1)

audio.recorder_init(i2c)

audio.record(audio2, 3)

audio.recorder_deinit()

oled.fill(0)

oled.DispChar('高中物理助教 ', 28, 0, 1)

oled.DispChar('正在识别语音文字 ...', 0, 16, 1)

oled.show()

rgb[0] = (int(51), int(255), int(51))

rgb.write()

time.sleep_ms(1)

baidu_params = {"API_Key":'FaRbRg7fKOZOwGnPUs04lOjs', "Secret_Key":'APosPUm7w6D4pccXEzBS5ajynb6eW7bE'}

_rsp = urequests.post("http://119.23.66.134:8085/baidu_asr", files={"file":(audio2, "audio/wav")}, params=baidu_params)

try:

baidu_iat_result = _rsp.json()

if not "result" in baidu_iat_result:

baidu_iat_result["result"] = ["ERRNO " + str(baidu_iat_result["err_no"])]

except:

baidu_iat_result = {"err_msg":"","result":[""]}

oled.fill(0)

oled.DispChar('高中物理助教', 28, 0, 1)

oled.DispChar(str('识别内容:') + str((baidu_iat_result["result"][0])), 0, 32, 1)

oled.DispChar('按下 按键 开始录音', 0, 16, 1)

oled.show()

rgb[0] = (0, 0, 0)

rgb.write()

time.sleep_ms(1)

baidu_chatbot_result = mPythonChatbot('I7g1wjwUFoy4W52DwaikADFj', 'Yio0l2n58aTwIqBsesFLn6pegR2591xE', 'S48744',baidu_iat_result["result"][0])

audio.player_deinit()

gc.collect()

import gc;gc.collect()

audio.player_init(i2c)

audio.set_volume(100)

baidu_params = {"API_Key":'FaRbRg7fKOZOwGnPUs04lOjs', "Secret_Key":'APosPUm7w6D4pccXEzBS5ajynb6eW7bE', "text":str(baidu_chatbot_result), "filename":audio3}

_rsp = urequests.post("http://119.23.66.134:8085/baidu_tts", params=baidu_params)

with open(audio3, "w") as _f:

while True:

dat = _rsp.recv(1024)

if not dat:

break

_f.write(dat)

audio.play(audio3)

audio.player_deinit()

gc.collect()

百度AI服务器设置

作品配图

作品配图

作品配图

作品配图

作品配图

作品完成

(设计、制作现场照片)

作品配图

四、作品设计的体会

本作品还有很多不足之处,特别是语音识别的准确率不太高,机器人技能训练还要进一步完善,最好能做成语音触发,那就更加智能;设计源于生活,又服务于生活,人们的生活离不开设计,设计与我们的生活息息相关。这次设计我们收获很多、学会很多、比以往更有耐心很多。希望我们的作品能真正应用到我们学生的的实际学习中,给我们的学习带来便利,促进学习进步,真正成为我们学习的好助手。

——

原文档链接:https://ai-gtmaker.com/wp-content/uploads/《高中物理助手》周彦丞020801.docx