所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
AI教具-语音交互机械臂
1573227402 1573227402 2020-08-05 23:44:05
5
1
简单
projectImage
projectImage

        人工智能时代已经到来,根据《普通高中信息技术和通用技术课程标准》(2017年版)选择性必修内容中,已涉及人工智能、开源硬件和3D设计知识。人工智能教育已逐渐在中小学普及,现有的人工智能教育产品,价格高、平台不兼容、接口不开放、调试麻烦等问题一直存在,使我萌发设计一种接口开发、展示效果好、成本低及简单便捷的人工智能教具。 语音交互机器臂,利用百度语音识别技术、3D打印四轴机械臂和开源硬件虚谷号相结合,设计一款既能展示人工智能应用技术既语音识别的应用,又能进行多用户编程学习人工智能技术的教具,本项目具有较好的展示性和实用性。

 关键词:语音交互,机械臂,教具

探究课题:高中信息技术-模块6 :开源硬件项目设计   

                  高中通用技术  “技术与工程”-“机器人设计与制作”

步骤1 步骤1
1 研究背景与设计思路

1.1研究背景 

       为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,国务院于2017年7月8日印发《新一代人工智能发展规划》。 人工智能时代已经到来,在《国家教育事业发展“十三五”规划》中明确提出,要支持各级各类学校建设智慧校园,综合利用互联网、大数据、人工智能和虚拟现实技术探索未来教育教学新模式。当下,人工智能教育如火如荼,上海、广东等省市已经率先在中小学开展人工智能教育。并根据《普通高中信息技术和通用技术课程标准》(2017年版),选择性必修和选修模块中也都涉及人工智能知识。如何在中学开展好人工智能教育是值得探讨的问题,如需要配套的教学资源,教学平台、AI教具等。 当下的人工智能教具,如NAO机器人、优必选阿尔法机器人等人工智能教具或教学平台,呈现价格高、交互及展示效果欠佳、编程接口不开发等特点。从而促使我设计一款接口开发、展示效果好、成本低的人工智能教具。应用人工智能分为图像识别、语音识别和自然语音处理,语音识别识别和图像处理便于人们所理解,让我有了将开源硬件、语音识别和在线编译组合在一起设计一款语音交互机械臂的创意。

projectImage

1.2作品制作思路和方法       

       根据上述研究背景,预期设计一个人工智能教具,既具有展示交互效果,促使同学们深入了解和学习人工智能;还能在此教具上学习人工智能的知识和技术。经过思考和实践,最终选择设计一款语音交互机械臂,既可以通过语音识别和交互控制机械臂,还能多用无线连接编写程序。如此,语音交互机械臂,既可以达到较好的演示效果,也能作为一个工具学习! 主要涉及三方面选择,包括主控板,机械臂和人工智能平台。硬件选择,当下主流的开源硬件选择面较广,如Arduino、树莓派、虚谷号等。Arduino只能一个单片机,处理简单开关量、模拟量和数据采集端比较合适,但用于处理人工智能项目,如图像处理、语音识别就比较逊色。树莓派环境搭建比较麻烦,不适应初学者使用。而开源硬件虚谷号作为国产新秀,处理性能、环境配置和便携式都比较友好,还有多种模式,比较适合用于人工智能教育教学。 机械臂选择,考虑中学生成本和可重复使用性,选择开源4轴机械臂,通过收集现有的机械臂设计和改进机构设计,通过3D打印机打印出结构件和组装成机械臂。人工智能应用平台方面,选择百度大脑的语音识别API,程序设计语音方面,选择当下主流的Python。

projectImage
步骤2 步骤2
2 语音交互机械臂设计与制作

2.1硬件搭建 首先,通过设计软件Soildworks将机械臂修改和模拟装配,并通过3D打印机将结构件都打印出来组装四轴机械臂;其次将舵机、主控板、机械臂、音响和麦克风连接;然后,进行机械臂初始位置调试。

projectImage

2.1.1硬件清单 

四轴机械臂3D打印结构件、舵机、虚谷号主控板、扩展板、音响、麦克杜邦线和充电宝; 工具包括:PC电脑、3D打印机、斜口钳、电络铁、热熔胶枪和螺丝刀等。

projectImage
projectImage

2.2程序实现 

2.2.1四轴机械臂程序 程序设计分为对机械臂的控制和语音交互两大块,本人先对四轴机械臂的初始位置、左转、右转、抓取和放下几个重要操作进行编程,熟练掌握这些动作后,再将机械臂与百度大脑语音交互结合。 为简单方便控制四轴机械臂,选择单片机arudino进行简单编写。

projectImage

2.2.2语言识别API调用

       语音识别部分,选择使用百度大脑,然后依托Jupyter Notebook编写程序,并调用语音识别接口,详细代码见附件。

projectImage

2.2.3开源硬件程序调试

      虚谷号是一个面向中小学Python编程和人工智能教学而开发的开源硬件,板内集成高性能处理器和通用单片机,内置多功能扩展接口和多种通信接口。虚谷号的主处理器采用国产高性能4核处理器,主频高达1.5GHz,板载SSD,提供高速大容量运算处理能力,内置Mali-450MP2 GPU,支持OpenGL ES1.1/2.0,拥有优秀的图像处理能力。虚谷号运行开源的Linux桌面系统,内Python(jupyter notebook)、Arduino、Processing、Scratch等开发学习软件可以为初高级编程爱好者提供完整的学习和开发环境。 可搭建局域网,只需连接同一局域网,在浏览器输入http://【虚谷号IP】:8888,即可打开一个页面,输入密码scope,在浏览器中即可在线编程和调试又可控制机械臂。

projectImage
projectImage

2.2.4核心代码 

要实现语音交互,首先要进行录音处理,然后通过百度语音将录音转化为文字,并使用tts函数的作用是将文字result转为语音,并且朗读出来,接下来通过选择结构讲语音交互和机械臂控制一一对应,并调试机械臂速度等细节既可完成程序。核心代码如下

projectImage

2.3项目调试 

硬件搭建与程序实现后,对整个语音交互机械臂进行调试。分别测试机械臂的执行动作和输入语音识别是否正常;然后通过PC端控制进行模拟调试,最后,对整个语音交互机械臂装置进行整体调试。

projectImage
步骤3 步骤3
3 总结与展望

3.1总结 

       本教具紧扣高中信息技术和通用技术课程标准选择性必须人工智能知识,学生通过语音交互机械臂能真实体验和理解人工智能,从而达到较好的教学效果,学生还能利用语音交互机械臂学习人工智能和程序设计相关知识,并软件和硬件交互,能达到较好的教学效果。 本教具从AI教具初期想法的产生,再到硬件平台、机械臂和语音识别平台的选择,程序调试,整个演示装置的项目设计与实践,自己乐在其中。不管是开源硬件的学习,还是人工智能技术的学习,或研究报告的撰写,都让我体验到教具制作的快乐。 

最后,十分感谢大家的默默付出和支持我的科技教育工作。 

3.2 展望 (1)后续能否扩展人脸识别功能,交互效果更佳。

参考文献 

[1]陈杰,姚琦,李晓坤. Arduino与通用技术[M].北京:清华大学出版社,2017.

[2]Simon Mank. 基于Arduino的趣味电子制作[M].吴兰臻 王天祥译科学出版社 北京. [3]http://arduino.cc/en/uploads/Main/arduino-mega2560-schematic.pdf. 

[4]Arduino创始人谈硬件为什么也要开源- 开源中国社区: http://www.oschina.net/.

代码 代码
	                    					AI教具-语音交互机械臂代码
程序设计:

初始位置
servob. write_angle(100)
time.sleep(1) # 持续 1 秒
servof.write_angle(50)
time.sleep(1) 
servof.write_angle(140)
time.sleep(1) 
servor.write_angle(60)
time.sleep(1) 
servoc.write_angle(0)
time.sleep(1) 

抓取位置
servor.write_angle(170)
time.sleep(1)
servob.write_angle(15)
time.sleep(1) # 持续 1 秒
servof.write_angle(60)
time.sleep(1)
servoc.write_angle(90)
time.sleep(1)
import pyaudio
import wave
import os
from aip import AipSpeech
import time # 导入 time 模块
from xugu import Servo

""" 你的 APPID AK SK """
APP_ID = "********9"
API_KEY = "*******************k"
SECRET_KEY = "***************GzvTCA"
""" 这里是参数设置 """
CHUNK = 1024 
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
RECORD_SECONDS = 3
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
servob = Servo(11)
servor = Servo(10)
servof = Servo(6)
servoc = Servo(3)
servob.write_angle(90)
time.sleep(1) # 持续 1 秒
def chushi():
    #time.sleep(0.1) # 等待0.1秒
    servob.write_angle(50)
    time.sleep(1) # 持续 1 秒
    servor.write_angle(90)
    time.sleep(1) 
    servof.write_angle(60)
    time.sleep(1) 
    servoc.write_angle(90)
    time.sleep(1) 
return 0
def zuozhuan():
    for i in range(1,110,10):
        servob. write_angle(i)
        time.sleep(0.1)
return 1
def youzhuan():
    for i in range(110,10,-10):
        servob. write_angle(i)
        time.sleep(0.1)
return 1
核心函数1:
rec函数的作用是录音处理
def rec(file_name):
    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    print("****,请说话...")
    frames = []
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)
    print("录音结束!")
    stream.stop_stream()
    stream.close()
    p.terminate()
    wf = wave.open(file_name, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()
return file_name


核心函数2:
audio_to_text函数的作用是将录音转化为文字。
def audio_to_text(wav_file):
    with open(wav_file, 'rb') as fp:
        file_context = fp.read()
    print("正在识别语音...")
    res = client.asr(file_context, 'wav', 16000, {
        'dev_pid': 1537,
    })
    if (res["err_msg"]=="success."):
        res_str = res.get("result")[0]
    else:
        res_str = "错误,没有识别出任何内容!"
    return res_str
核心函数3:
tts函数的作用是将文字result转为语音,并且朗读出来。
def tts(txt):
    result = client.synthesis(txt, 'zh', 1, {'vol': 5,})
    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('auido.mp3', 'wb') as f:
            f.write(result)
        os.system('play auido.mp3')
        #zuozhuan()
        #youzhuan()
        zhuanqu()
        #chushi()
	                    				
Makelog作者原创文章,未经授权禁止转载。
5
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]