EthanH3514 / AL_Yolo

👺 基于Yolov5的Apex Legend游戏 AI 辅瞄外挂
Apache License 2.0
274 stars 46 forks source link

python多线程是没用,多进程呢? #29

Open 134820134820 opened 7 months ago

134820134820 commented 7 months ago

pythonGIL的问题可以用多进程来解决,但是问题是如何进行进程间的协调是个问题,作者有思路吗? 另外想问下目前整体运行帧数有多少

EthanH3514 commented 7 months ago

多进程没啥思路,之前有过尝试但没写出来,后来觉得开进程开销太大了,而且进程间通信消耗也比较大,写了也不一定有优化就放弃了。

最近在想怎么优化这些代码,发现这个项目可能就用不到多线程,之前搞的多线程感觉是个负优化。

之前的多线程是一个线程用于截图+推理,另一个线程按一个比较高的频率去监视推理得到的变量(敌人位置)的变化,并且控制将变量拿来给鼠标移动用

发现这样还不如不加,控制鼠标的那个线程以一个很高的频率去轮询是很耗资源的,尤其是在python这样并没有多线程的环境下,要加也应该加在推理内部或者截图里面,但这些都有现成写好的库

要加多线程也是一个线程给抓屏,一个线程推理+鼠标移动,但这样又涉及到抓屏出来的数据的时效性了。如果用某种数据结构缓存了抓屏线程的输出数据,每次推理理应拿取最新的数据,那么感觉应该没有多线程纯大循环差不多(?)

我的配置是RTX3050 Laptop

我本地把之前的多线程改掉了,目前是完全没有多线程的程序,截图+推理+鼠标移动 大循环,这样下来在同时跑Apex游戏和代码的情况下能达到90帧(如果关闭鼠标移动),但是开启鼠标移动就会降到30帧,发现了瓶颈是鼠标移动的部分的代码写的有问题

已经排除驱动的库的问题,感觉大概率是格式转换的锅

134820134820 commented 7 months ago

能否鼠标单独开一个进程,每50ms从另一个进程获得一个点,鼠标就一直向目标点的方向移动,毕竟本身就不该考虑大范围拉枪.而小范围内跟踪则不需要推理位置

EthanH3514 commented 7 months ago

我尝试一下多进程

134820134820 commented 7 months ago

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

EthanH3514 commented 7 months ago

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

这个库是我从别的开源项目里拿过来的,可能是这个库没有实现对应的功能。

但是库里有源码文件,感觉可以写一个函数,先点击左键,再移动,最后释放左键。

134820134820 commented 7 months ago

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

这个库是我从别的开源项目里拿过来的,可能是这个库没有实现对应的功能。

但是库里有源码文件,感觉可以写一个函数,先点击左键,再移动,最后释放左键。 就这样搞似乎不行,它会松开,但win32却可以,不知道啥原因

quijoo commented 6 months ago

多线程可能有时序问题, 屏幕位置 -> AI 推理 -> 修改鼠标移动目标 这个顺序如果不一样,多线程多出来的算力就是被浪费掉了(目标根本不在计算出来的位置)。 所以最多 截图 + YOLO 一个线程, 鼠标移动一个线程(固定时间间隔移动,保证平滑)

EthanH3514 commented 6 months ago

多线程可能有时序问题, 屏幕位置 -> AI 推理 -> 修改鼠标移动目标 这个顺序如果不一样,多线程多出来的算力就是被浪费掉了(目标根本不在计算出来的位置)。 所以最多 截图 + YOLO 一个线程, 鼠标移动一个线程(固定时间间隔移动,保证平滑)

是的,目前就是截图 -> 推理 -> 鼠标移动大循环了,调罗技驱动可以达到4w+ cps,鼠标移动耗时对循环速度几乎没有影响