📄 本文档(《高中物理助手》周彦丞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