【项目回顾】基于Yanshee的AI服务型机器人(三)

1月20日-1月25日
我参加了河海大学和深圳优必选公司联合举办的训练营
作为机器人领域的龙头企业,优必选公司的产品Alpha曾经登陆过春晚进行表演,这次活动中他们的机器人产品Yanshee也非常厉害
在训练营的末尾,我们小组用了一天半的时间做了一个小型的项目,当作我们的结营汇报,以下为项目内容。

功能1-4:【项目回顾】基于Yanshee的AI服务型机器人(一)
功能5-8:【项目回顾】基于Yanshee的AI服务型机器人(二)

功能9-12:

  1. 进行预设好的语音交互
  2. 拍照识别摄像头内人脸个数,与先前录入的人脸进行匹配,相似的返回姓名 拍照识别摄像头内人脸个数,与先前录入的人脸进行匹配,相似的返回姓名
  3. 分析拍摄的照片中人脸的情绪,并根据不同的情绪元素做出不同的反馈分析拍摄的照片中人脸的情绪,并根据不同的情绪元素做出不同的反馈
  4. 集体跳舞(千手观音与卡路里)集体跳舞(千手观音与卡路里)

这篇文章将回顾项目的第9-12项功能

9:进行预设好的语音交互

import RobotApi
from time import sleep

def voice_special():
    while True:
        ret = 1
        ret = RobotApi.ubtDetectVoiceMsg("你好",10)
        if ret == 0:
            RobotApi.ubtVoiceTTS(1,"你好")
        time.sleep(1)
    
        ret = RobotApi.ubtDetectVoiceMsg("名字",10)
        if ret == 0:
            RobotApi.ubtVoiceTTS(1,"我是 yanshee")
        time.sleep(1)

        ret = RobotApi.ubtDetectVoiceMsg("报菜名",10)
        if ret == 0:
            RobotApi.ubtVoiceTTS(1,"有蒸羊羔儿、蒸熊掌、蒸鹿尾儿、"
                               "烧花鸭、烧雏鸡、烧子鹅、卤猪、"
                               "卤鸭、酱鸡、腊肉、松花小肚儿、"
                               "晾肉、香肠儿、什锦苏盘儿、"
                               "熏鸡白肚儿、清蒸八宝猪")
        time.sleep(2)
    
        ret = RobotApi.ubtDetectVoiceMsg("再见",10)
        if ret == 0:
            RobotApi.ubtVoiceTTS(1,"再见")
            time.sleep(1)
            break

这个功能实现的并不是很好,主要的原因在于实现的思路,若是使用这段代码,就必须按顺序一条一条说出对应指令,并在适当的时候说出再见,不然程序就会反复运行,不停地按顺序检测是否听到对应的指令。
这一项功能除了语音识别意外,并不具有任何智能。
使用了RobotApi.ubtDetectVoiceMsg()这个方法,其使用介绍为
ubtDetectVoiceMsg的介绍
10:拍照识别摄像头内人脸个数,与先前录入的人脸进行匹配,相似的返回姓名 拍照识别摄像头内人脸个数,与先前录入的人脸进行匹配,相似的返回姓名

由于功能过多,所以在做的时候将各个功能分解进行实现

import RobotApi
import time

def vision_photo()
	num="0"
    RobotApi.ubtVisionDetect("face",num,5)
    print(num)
    time.sleep(0.5)
    ret = RobotApi.ubtTakeAPhoto("vision.jpg",10)
    time.sleep(0.5)
    ss='0'
    ret2 = RobotApi.ubtFaceCompare(10,ss)
    time.sleep(0.5)
    voice_resp.voice_special(ss)

若要实现这个功能,就要理解并且可以运用这三个函数
ubtVisionDetect的介绍
ubtTakeAPhoto的介绍
ubtFaceCompare的介绍
有了这三个函数,我们就可以进行照片的拍摄,人脸个数的识别并且可以将拍到的人脸和提前录入进机器的人脸进行比较,判断是否存在相似的结果,有的话还可以进行语音交互。

11:分析拍摄的照片中人脸的情绪,并根据不同的情绪元素做出不同的反馈分析拍摄的照片中人脸的情绪,并根据不同的情绪元素做出不同的反馈

首先通过机器人的分析读取当前表情,返回为表情占比,取其中的最大值存储为当前表情并且进行下一步的交互

def vision_Expression():
    vision_Photo()
    ss2=RobotApi.UBTEDU_FACEEXPRE_T()
    RobotApi.ubtFaceExpression(5,ss2)
    max0 = max_min(ss2.fHappinessValue,ss2.fSurpriseValue,ss2.fAngerValue,ss2.fSadnessValue,ss2.fNeutralValue,ss2.fDisgustValue,ss2.fFearValue)
    result=0
    if max0==ss2.fHappinessValue:
        result="fHappinessValue"
    if max0==ss2.fSurpriseValue:
        result="fSurpriseValue"
    if max0==ss2.fAngerValue:
        result="fAngerValue"
    if max0==ss2.fSadnessValue:
        result="fSadnessValue"
    if max0==ss2.fNeutralValue:
        result="fNeutralValue"
    if max0==ss2.fDisgustValue:
        result="fDisgustValue"
    if max0==ss2.fFearValue:
        result="fFearValue"
    print(result)
    voice_resp.voice_special(result)
    return result

这里要用到RobotApi.ubtFaceExpression()来读取表情参数
ubtFaceExpression的介绍

有了表情参数以后可以让机器人有针对性地进行反馈
由于只是示例,所以对应的反馈并没有全部写好

def playMusic(filename, loops=0, start=0.0, value=0.5):
    """
    :param filename: 文件名
    :param loops: 循环次数
    :param start: 从多少秒开始播放
    :param value: 设置播放的音量,音量value的范围为0.0到1.0
    :return:
    """
    flag = False  # 是否播放过
    pygame.mixer.init()  # 音乐模块初始化
    while 1:
        if flag == 0:
            pygame.mixer.music.load(filename)
            # pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
            pygame.mixer.music.play(loops=loops, start=start)
            pygame.mixer.music.set_volume(value)  # 来设置播放的音量,音量value的范围为0.0到1.0。
        if pygame.mixer.music.get_busy() == True:
            flag = True
        else:
            if flag:
                pygame.mixer.music.stop()  # 停止播放
                break


def voice_special(a):
    if a == "C":
        RobotApi.ubtVoiceTTS(1,"爸爸好")
    time.sleep(1)
    if  a == "fSadnessValue":
        RobotApi.ubtVoiceTTS(1,"主人,我看你有点不高兴,给你讲一个笑话吧,一天,你遇到狮子,故作镇定,用可怕的眼神瞪狮子,突然狮子双手合十并跪下来,你得意地说 知道厉害了吧,少倾,狮子幽幽的道,祷告完毕,可以用餐了!哈哈哈哈哈啊,主人,你觉得好笑吗")
    if a == "fNeutralValue":
        RobotApi.ubtVoiceTTS(1,"不悲不喜,来去从容,是生活最好的姿态,yanshee给你点赞,我们一起来听一首歌吧!")
    if a == "fNeutralValue":
        playMusic("xiaoyu.mp3")

    if a == "fFearValue":
        RobotApi.ubtVoiceTTS(1,"不悲不喜,来去从容,是生活最好的姿态,yanshee给你点赞,我们一起来听一首歌吧!")
        playMusic("xiaoyu.mp3")
    if a == "fSurpirseValue":
        RobotApi.ubtVoiceTTS(1,"不悲不喜,来去从容,是生活最好的姿态,yanshee给你点赞,我们一起来听一首歌吧!")    
        playMusic("xiaoyu.mp3")
    if a == "fAngerValue":
        RobotApi.ubtVoiceTTS(1,"不悲不喜,来去从容,是生活最好的姿态,yanshee给你点赞,我们一起来听一首歌吧!")
        playMusic("xiaoyu.mp3")
    if a == "fDisgustValue":
        RobotApi.ubtVoiceTTS(1,"不悲不喜,来去从容,是生活最好的姿态,yanshee给你点赞,我们一起来听一首歌吧!")
        playMusic("xiaoyu.mp3")
    playMusic("xiaoyu.mp3")

    if a == "fHappinessValue":
        RobotApi.ubtVoiceTTS(1,"主人,你这么高兴,能和我分享一下嘛!")

通过以上的程序,Yanshee机器人具备了在用户有着不同表情的时候采取不同策略的能力,更加地人性化和智能。

12:集体跳舞(千手观音与卡路里)集体跳舞(千手观音与卡路里)
(这里只介绍千手观音)
千手观音分为两部分,最前面的机器人和后方的机器人,所以用了两个函数来分别实现

import RobotApi
import time

def motion_InitAngle(servoAngle,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17):
    #set angel
    
    servoAngle.SERVO1_ANGLE=n1
    servoAngle.SERVO2_ANGLE=n2
    servoAngle.SERVO3_ANGLE=n3
    servoAngle.SERVO4_ANGLE=n4
    servoAngle.SERVO5_ANGLE=n5
    servoAngle.SERVO6_ANGLE=n6
    servoAngle.SERVO7_ANGLE=n7
    servoAngle.SERVO8_ANGLE=n8
    servoAngle.SERVO9_ANGLE0=n9
    servoAngle.SERVO10_ANGLE=n10
    servoAngle.SERVO11_ANGLE=n11
    servoAngle.SERVO12_ANGLE=n12
    servoAngle.SERVO13_ANGLE=n13
    servoAngle.SERVO14_ANGLE=n14
    servoAngle.SERVO15_ANGLE=n15
    servoAngle.SERVO16_ANGLE=n16
    servoAngle.SERVO17_ANGLE=n17


def motion_setAngle(servoAngle,n2,n3,n5,n6):
    #set angel
    #2,3 right
    #5,6 left
    servoAngle.SERVO2_ANGLE=n2
    servoAngle.SERVO3_ANGLE=n3
    servoAngle.SERVO5_ANGLE=n5
    servoAngle.SERVO6_ANGLE=n6

def motion_moreHands(RobotApi):
    servoAngle=RobotApi.UBTEDU_ROBOTSERVO_T()
    #First one
    motion_InitAngle(servoAngle,90,0,90,90,0,90,90,59,75,110,90,90,120,104,70,90,90)
    RobotApi.ubtSetRobotServo(servoAngle,20) 
    time.sleep(1)
        
    motion_setAngle(servoAngle,30,89,30,90)
    RobotApi.ubtSetRobotServo(servoAngle,20)
    time.sleep(1)

    motion_setAngle(servoAngle,75,89,75,90)
    RobotApi.ubtSetRobotServo(servoAngle,20)
    time.sleep(1)
   

    motion_setAngle(servoAngle,120,89,120,90)
    RobotApi.ubtSetRobotServo(servoAngle,20)
    time.sleep(1)


    motion_setAngle(servoAngle,165,89,165,90)
    RobotApi.ubtSetRobotServo(servoAngle,20)
    time.sleep(1)
    
    RobotApi.ubtStopRobotAction()

以上就是这次项目的所有功能。
感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值