当前位置:首页 > 编程笔记 > 正文
已解决

pytorch-fastrcnn识别王者荣耀敌方英雄血条

来自网友在路上 176876提问 提问时间:2023-10-26 18:39:29阅读次数: 76

最佳答案 问答题库768位专家为你答疑解惑

文章目录

    • 前言
    • 效果如下
    • 实现
    • 训练数据获得
    • 训练数据和测试数据yaml文件
    • 训练py
    • 测试py

前言

最近看王者荣耀视频看到了一个别人提供的一个百里自动设计解决方案,使用一个外设放在百里的二技能上,然后拖动外设在屏幕上滑动,当外设检测到有敌方英雄时外设自动松开百里二技能达到自动射击的效果,
我的思路一下就打开了,之前什么指哪打哪,计算电脑上二技能圆坐标和敌方英雄椭圆射击坐标函数映射,都是屁话,直接让二技能射击线进行像雷达一样的扫描就可以了,当检测到敌方英雄时自动松开二技能,这样百里不就可以超神了吗?而且延时更低,射击更快
那么难点在哪里呢?
还是敌方英雄血条的识别上,当然,这个不是问题

效果如下

可以达到每秒60帧的识别效果,这个识别速度已经嘎嘎快了
我在桌面上打开了我打王者荣耀时录下的视频,然后对视频中的英雄进行实时识别
请添加图片描述

实现

fastrcnn不是很新鲜的高深技术,事实上他有模板可用
github上有项目路径
https://github.com/sovit-123/fasterrcnn-pytorch-training-pipeline#Tutorials
我所做的也仅仅是自己使用labelimg标注了1000张图片(过程真是痛苦,一个个拉框,中途吃了三个苹果看了会儿剧才断断续续坚持拉满了1000张),然后用fasterrcnn_mobilenetv3_large_fpn模型,迭代了50次进行了训练
我只是略微修改了下,参照烟雾识别模型,使其符合我自己的图片识别,其中我修改了如下文件,以做参考

训练数据获得

使用QtScrcpy连接手机,然后打开这个软件的自动录像功能,然后打了一局游戏,然后将得到的视频中敌人出现的视频片段使用pr进行裁剪得到一个新视频,然后使用python获得每一帧,然后使用labelIMG进行手动画框标注
我标注到1000张就开始训练了,从结果看效果识别很不错,
我其实想使用一种更加省力的方法,就是打开王者荣耀的单机模式,然后使用电脑调试,从内存中获得每位敌方英雄的坐标,对每帧敌方英雄动态标注,这样就不用手动拉框了,而且生成的坐标也更加精准,同时也可以做敌方英雄位置动态预测,但是我偷懒了,想赶紧获得训练数据看看效果,所以这个没做,如果有哪位实现了,分享我下,我去偷师

训练数据和测试数据yaml文件

就是修改了下血条数据存放路径和标签而已

TRAIN_DIR_IMAGES: ./data/blood_pascal_voc/archive/train/images
TRAIN_DIR_LABELS: ./data/blood_pascal_voc/archive/train/annotations
VALID_DIR_IMAGES: ./data/blood_pascal_voc/archive/valid/images
VALID_DIR_LABELS: ./data/blood_pascal_voc/archive/valid/annotations
# Optional test data path. If given, test paths (data) will be used in
# `eval.py`.
# TEST_DIR_IMAGES: 
# TEST_DIR_LABELS: # Class names.
CLASSES: ['__background__','blood'
]# Number of classes (object classes + 1 for background class in Faster RCNN).
NC: 2# Whether to save the predictions of the validation set while training.
SAVE_VALID_PREDICTION_IMAGES: True

训练py

不习惯使用参数化方式训练数据,于是我修改了下train文件直接预设参数进行训练,直接执行train文件
至于模型的微调,你自己看着办吧,我不能保证我微调的模型一定更加合理,你可以直接使用预设的模型

def parse_opt():# Construct the argument parser.parser = argparse.ArgumentParser()parser.add_argument('-m', '--model',default='fasterrcnn_resnet50_fpn',help='name of the model')parser.add_argument('--data',default=r"data_configs/bloodLine.yaml",help='path to the data config file')parser.add_argument('-d', '--device',default='cuda',help='computation/training device, default is GPU if GPU present')parser.add_argument('-e', '--epochs',default=50,type=int,help='number of epochs to train for')parser.add_argument('-j', '--workers',default=4,type=int,help='number of workers for data processing/transforms/augmentations')parser.add_argument('-b', '--batch',default=16,type=int,help='batch size to load the data')parser.add_argument('--lr',default=0.001,help='learning rate for the optimizer',type=float)parser.add_argument('-ims', '--imgsz',default=640,type=int,help='image size to feed to the network')parser.add_argument('-n', '--name',default="blood_training4-fasterrcnn_resnet50_fpn",type=str,help='training result dir name in outputs/training/, (default res_#)')parser.add_argument('-vt', '--vis-transformed',dest='vis_transformed',action='store_true',help='visualize transformed images fed to the network')parser.add_argument('--mosaic',default=0.0,type=float,help='probability of applying mosaic, (default, always apply)')parser.add_argument('-uta', '--use-train-aug',dest='use_train_aug',action='store_true',help='whether to use train augmentation, blur, gray, \brightness contrast, color jitter, random gamma \all at once')parser.add_argument('-ca', '--cosine-annealing',dest='cosine_annealing',action='store_true',help='use cosine annealing warm restarts')parser.add_argument('-w', '--weights',default=None,# default=r"outputs/training/blood_training-fasterrcnn_mobilenetv3_large_fpn/best_model.pth",type=str,help='path to model weights if using pretrained weights')parser.add_argument('-r', '--resume-training',dest='resume_training',action='store_true',help='whether to resume training, if true, \loads previous training plots and epochs \and also loads the otpimizer state dictionary')parser.add_argument('-st', '--square-training',dest='square_training',action='store_true',help='Resize images to square shape instead of aspect ratio resizing \for single image training. For mosaic training, this resizes \single images to square shape first then puts them on a \square canvas.')parser.add_argument('--world-size',default=1,type=int,help='number of distributed processes')parser.add_argument('--dist-url',default='env://',type=str,help='url used to set up the distributed training')parser.add_argument('-dw', '--disable-wandb',dest="disable_wandb",action='store_true',default='3',help='whether to use the wandb')parser.add_argument('--sync-bn',dest='sync_bn',help='use sync batch norm',action='store_true')parser.add_argument('--amp',action='store_true',help='use automatic mixed precision')parser.add_argument('--seed',default=0,type=int ,help='golabl seed for training')parser.add_argument('--project-dir',dest='project_dir',default=None,help='save resutls to custom dir instead of `outputs` directory, \--project-dir will be named if not already present',type=str)args = vars(parser.parse_args())return args

测试py

我修改其为获得桌面指定区域的动态图像,然后对桌面图像的每一帧进行识别
修改其inference.py文件,然后修改其图片获取方式为桌面图像

x, y = 0, 0width, height = 641, 321while(1):image_name='aa'screenshot = pyautogui.screenshot(region=(x, y, width, height))# 显示截图# 将截图转换为NumPy数组screenshot = np.array(screenshot)orig_image = cv2.cvtColor(screenshot, cv2.COLOR_RGB2BGR)#对每一帧桌面图像进行识别...
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"pytorch-fastrcnn识别王者荣耀敌方英雄血条":http://eshow365.cn/6-25335-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!