社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

看了范伟和葛大爷的电影,我决定用Python做个石头剪刀布

菜鸟学Python • 5 年前 • 740 次点击  


最近大家都陆陆续续开始上班复工了,但是节后综合征让大家都没有很好的注意力来上班,所以小编为了给大家提供学习和游乐的好帮手,决定为大家开发一款新的游戏,名字叫做《人机猜拳大对决》。



技术要点:

  • 本程序主要是利用了百度的AI开放平台,我们只需要通过百度开放的接口;

  • 并按照接口的格式上传我们拍摄的图片,便可以返回我们的手势姿势;

  • 通过返回的手势姿势和电脑自动生成的手势,进行猜拳,并判断谁胜谁负。


用到的库:

  • 百度AI的API库: baidu-aip。

  • 用于打开摄像头并保存图片的opencv库:cv2

  • 用于延时的库: time

  • 随机选择参数的库: random

  • 获取接口返回数据的库:requests

  • 用于接口上传数据加密的库:base64




01

整体设计思路


游戏的玩法其实很简单,大家只需要运行程序,然后程序会自动启动电脑的摄像头,然后大家只需要在摄像头中比出剪刀、石头和布的形状,调整好姿势后,按“enter”键进行确认,程序便会自动的进行判断,到底谁胜谁负。


当然,在双方出拳的过程中,谁也不能发现对方的结果,这样就保证了游戏的公平性,下面就跟随小编一起来了解整个程序的流程吧。


1).获取手势的姿势

要获取我们比出的手势姿势,我们需要调用电脑的摄像头,这里小编利用的是opencv来打开摄像头,程序如下图所示:


上述的程序中,我们使用opencv打开摄像头,然后不断的去获取视频流中的帧,当我们调整好姿势之后,便点击“enter”按钮来保存我们视频流中的获取的最后一帧图像,并保存到本地当中,结果如下所示:





02

让电脑明白我们的手势


上面是保存了我们的手势的图像,接下来我们就要去判断我们比出的手势到底是什么了,这里我们利用的是百度的人体分析的API进行分析,程序如下所示:

上述的程序中,我们首先要构造我们的链接,这里的access_token关键字是我们的访问令牌,有了这个令牌我们才能获取得到我们的结果。然后我们技术分析我们的返回结果,如果不是剪刀、石头或者是布,则返回“unknown”。


那么我们如何获取这个access_token令牌呢:

  • 首先我们需要去到百度的AI开发者平台,创建一个人体分析的应用;

  • 并得到应用的API Key和Secret Key,然后运行下图中的程序,获取得到我们的access_token令牌;

  • 其中client_id就是我们的API Key,client_secret就是我们的secret_key


通过百度的API获得我们的答案后,接下来就是跟电脑出的拳进行PK了,程序如下图所示:


  • 上述的程序中,电脑首先随机出一个数字,并保存到computer_ges变量中;然后我们通过catch_gesture和get_gesture_result函数获取得到我们的输入;接着电脑会比较我们出的拳与电脑出的拳,并判断谁胜谁负,并给出提示;

  • 如果我们想退出游戏,点击‘q’即可停止;

  • 如果想继续的话,大家只需要点击其他的按键即可。


以上就是为大家进行程序的介绍,最后小编为大家带来视频的展示,通过趣味学习Python,如果觉得有趣,那就动起手来,玩起来吧!


视频展示:


需要源码,后台输入:菜鸟哥


近期热门:
高手心得|菜鸟学Python从入门到进阶
干货来了!菜鸟入门最经典的机器学习项目,面试必考!
400多人做过的8道Python极速入门题


 点击阅读原文,阅读菜鸟学Python 400篇干货!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54988
 
740 次点击