YOLOv5-CSGO深度学习图像识别自动瞄准技术用到的各个技术简述,着重分析使用的库和函数,如何实现鼠标调用,屏幕截取,制作训练集

0x00 方案概述,技术栈

深度学习训练模型:YOLOv5框架

图像识别:OpenCV

编程语言:python

IDE:Pycharm

运行环境:Pytorch+CUDA+Anaconda

这篇博客我不会特别具体的讲操作流程,更注重用到的一些函数和库之类的

实现方法大概是:实时截取屏幕,然后通过比对模型来识别截取图片上的CT,T阵营人物。然后获取坐标,传给我们自己写的函数,然后调用操控鼠标的库,实现开枪。

0x01 YOLOv5框架

什么叫yolov5?其实就是 You Only Look Once 意思是这个框架简单到你看一次,或者上手试着用一次你就会了。

V5和V4没有递进关系,两个是独立的框架,不存在哪个最好哪个不好。

首先我们从GitHub上把yolov5的框架clone下来,为了方便,我们使用Ceaser的Csgo-yolov5模型,全是中文备注,更方便我们去训练模型

制作数据集,打标签:

配置环境:

要在本地先查看你的CUDA版本

然后根据一系列信息在官网安装pytorch

首先先在csgo游戏中截取大量游戏过程中的图片

打标签有两种方式:

1:Make Sense在线打标签

2:python的一个库labelimg 使用pip install安装

使用train.py等待完成安装

0x02 实现屏幕截取

api-生成窗口cv2.namedWindow

    cv2.namedWindow('csgo-detect', cv2.WINDOW_NORMAL)

函数原型:

void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;

arg1:新建的窗口的名称。自己随便取

arg2:窗口的标识,一般默认为WINDOW_AUTOSIZE

  • WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。(上面图1就是使用的它)

  • WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)

  • WINDOW_OPENGL 窗口创建的时候会支持OpenGL

api-改变窗口尺寸cv2.resizeWindow

    cv2.resizeWindow('csgo-detect', re_x // 3, re_y // 3)

arg1:窗口名

arg2,arg3:位置

api-展示窗口cv2.imshow

cv2.imshow('csgo-detect', img)

arg1:窗口名

arg2:图片

api-等待函数cv2.waitKey

    if cv2.waitKey(1) & 0xFF == ord('q'):        cv2.destroyAllWindows()        break

刚开始只知道加上cv2.waitKey之后cv2.imshow就可以显示图像了

为什么cv2.imshow之后要跟cv2.waitkey

imshow的作用是在GUI里显示一幅图像,但是它有个特点我们没有太注意,就是它的持续时间。

测试后可得

waitkey控制着imshow的持续时间,当imshow之后不跟waitkey时,相当于没有给imshow提供时间展示图像,所以只有一个空窗口一闪而过。添加了waitkey后,哪怕仅仅是cv2.waitkey(1),我们也能截取到一帧的图像。所以cv2.imshow后边是必须要跟cv2.waitkey的。

imshow源码里的注释

This function should be followed by cv::waitKey function which displays the image for specified . milliseconds. Otherwise, it won't display the image.

这个函数之后应接cv2.waitKey函数来显示指定图像。否则,它不会显示图像。

为什么要这么麻烦的设计

This function is the only method in HighGUI that can fetch and handle events, so it needs to be

这个函数是HighGUI窗口中唯一的获取和处理事件的方法,因此它必须存在

cv2.waitKey(1) & 0xFF == ord(‘q’) 的作用

在linux上使用waitkey有时会出现waitkey返回值超过了(0-255)的范围的现象,通过&0xff来解决这个现象

ord是把字符转换成ascii码

cv2.waitkey和time.sleep的区别

有人写在代码时把waitkey当sleep用过,你会发现有时waitkey并不起作用。

官方解释:The function only works if there is at least one HighGUI window created and the window is active

翻译:这个函数只有在至少一个HighGUI窗口存在的情况下才会起作用。

waitkey的延时机制是有条件的,必须在它之前创造HighGUI窗口它才会起作用。而time.sleep是无条件的延时机制。

api-关闭所有窗口destroyAllWindows()

cv2.destroyAllWindows(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiujiaHuan13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值