查看: 4092|回复: 0

【角蜂鸟试用】模拟Rock-paper-sissors!游戏

[复制链接]
  • TA的每日心情
    开心
    2019-6-20 14:08
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-9-5 14:15:14 | 显示全部楼层 |阅读模式
    分享到:
           这段期间一直在消化角蜂鸟的代码,以期望能作出个东西出来。目前的想法是做一个仿真儿时游玩的Rock-paper-scissors!游戏(也就是常说的:石头剪刀布游戏),实现场景是角蜂鸟AI套件会自动随即的产生石头剪刀布动作的编码(比如石头用数字2(之所以用数字2,不用数字1,稍后会解释)代替,剪刀用数字3代替,布用数字4代替。),而用户的手势动作通过角蜂鸟AI套件(预先采集了石头剪刀布的对应图像)自带的摄像头采集其相应的动作,最终角蜂鸟AI套件根据相应规则(剪刀>布,布>石头,石头>剪刀,其他情况为平局)作出胜负判断。
           对此,我采用角蜂鸟AI套件示例代码中的SceneRecorder进行编写,下面进行总结。
           1.  场景学习              首先通过角蜂鸟AI套件的SceneRecorder将希望分类的图像实时储存在不同的“存档”下并立即生成一个分类模型,以便在辨识它们对应的场景。比如石头手势时候将图像录制进[存档2],剪刀手势时候录制进[存档3],布手势时候录进存档[4]生成。这里需要注意的是因为考虑到手势的变换,所以我将摄像头视野中没有出现手势的情况存档为1(我的应用中就是白色的墙体)。这样就不会出现当没有摄像头视野中没有手势出现时,仍能做出胜负判断的错误结论。              其次,依次对着角蜂鸟AI摄像头进行手势学习。先运行SceneRecorder.py程序,然后根据提示依次录入手势姿态。录入完毕后,记得依次按下‘r’键清理存档中图像,筛选去除每个存档中的冗余图像特征,并生成模型。按下 s’键将存档录入至 指定的路径中(我的应用是../../../../myStudy/my_record.dat文件)。每次运行程序时按下 ‘l’ 键从指定路径中读入存档,这样就不必每次重新学习场景(目前感受是:角蜂鸟AI套件生成的模型比较可靠,手势模型是我几天前生成的,其余时间一直在做程序,录像时手势识别还是比较成功的,基本没有受到环境光的影响。)。
           2.  胜负判断
                 这个过程比较简单,就不用详细细说了,代码也很简单,写法不太符合python的形式(我对python还不是很熟练,再次贻笑大方了,感觉封装成一个函数可能更python些)。这里用到了随机函数,以保证每次机器的出值不一样。
    1. #start to judge
    2. machine = random.randint(2,4)
    3.                         person = prob.argmax()+1
    4.                         print("%d" %machine)       #print the value of machine
    5.                 # rock-paper-scissors
    6.                 #   2     4        3
    7.                         if machine == person :
    8.         print("%s"%("play even"))
    9.                         elif machine == 2  and person == 4:
    10.         print("%s"%("you win!"))
    11.                         elif machine == 2  and person == 3:
    12.         print("%s"%("you lost!"))
    13.                         elif machine == 3  and person == 2:
    14.        print("%s"%("you win!"))
    15.                         elif machine == 3  and person == 4:
    16.         print("%s"%("you lost!"))
    17.                         elif machine == 4 and person == 2:
    18.         print("%s"%("you lost!"))
    19.                         elif machine == 4 and person == 3:
    20.        print("%s"%("you win!"))
    21.                         cv2.waitKey(10)
    复制代码
            3.  应用效果
             最终实现效果从下图1-图6和视频
    中能看出来问题,个人认为有以下几点。
             (1)   因为一直在输出模型识别的概率,所以胜负判断的结果基本一闪而过(这里我加入了上面的代码cv2.waitKey(10)后效果还好些,仔细观察还是能看到结果的。),如果能去除这些识别率的代码,可能效果会好些(这里关键我不知道如何去掉)。
             (2)  当然,如果能开辟另一个显示窗体来显示比赛结果,那么可能效果会好些,当然加些动画/声效会不会更美呢  下一步尝试学习下pygame,看能否将其作的更美观些。   
                                                     模型识别概率.png
                                                                图1      模型识别概率的输出
                                                    场景1.png
                                                               图2     没有手势时的场景图
                                                     场景2.png
                                                             图3    Rock(出“石头”)时场景图   
                                                     场景3.png
                                                              图4    Sissors(出“剪刀”)时场景图
                                                     场景4.png
                                                               图5     Paper(出“布”)时场景图
                                                     应用1.png
                                                                    图6     比赛中的场景-1
                                                    应用2.png
                                                                    图7     比赛中的场景-2
                                                    应用3.png
                                                                      图8   比赛中的场景-3




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 05:08 , Processed in 0.123578 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.