1. 简介
本文介绍了一种使用达摩院人体2D关键点检测模型对图片进行处理,识别出图片中人体关键点的方法。此模型可应用于射击游戏中,在达摩院强大图像识别能力的加持下,结合自动截屏和移动鼠标等辅助功能,让你成为射击游戏里的“神枪手”!
2. 操作步骤
参考快速开始,里面有一些关于ModelScope的基本介绍
2.1 环境准备
- 为了更快的体验产品,使用了ModelScope提供的远程环境,即Notebook进行开发,更加便捷。打开Notebook还挺慢的,需要几分钟等待时间。
- 如果本地测试,也可以先安装依赖:
# 深度学习依赖 pip install torch torchvision torchaudio # modelscope模型依赖 pip install "modelscope[cv]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
2.2 模型准备
本文涉及到的模型包括:
2.3 图片准备
我们找一张有人物的截图图片作为模型调试的实验对象:https://unblocked-games.s3.amazonaws.com/media/posts/1/512-2.jpg
2.4 模型调试
调用达摩院人体2D关键点检测模型代码
importnumpyasnpfrommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTasksfrommodelscope.outputsimportOutputKeysmodel_id='damo/cv_hrnetv2w32_body-2d-keypoints_image'body_2d_keypoints=pipeline(Tasks.body_2d_keypoints, model=model_id) image_path_or_url='https://unblocked-games.s3.amazonaws.com/media/posts/1/512-2.jpg'output=body_2d_keypoints(image_path_or_url) poses=np.array(output[OutputKeys.POSES]) scores=np.array(output[OutputKeys.SCORES]) boxes=np.array(output[OutputKeys.BOXES]) print('=== poses ===') print(poses) print('=== scores ===') print(scores) print('=== boxes ===') print(boxes)
模型结果如下,其中poses[0][0]对应的是第一个人物头部的坐标,其余同理,可以自行摸索
===poses===[[[142.0859375252.0140686] # 让你的鼠标瞄准这个坐标就完事了! [149.9296875271.6234436] [134.2421875275.5453186] [130.3203125302.9984436] [134.2421875295.1546936] [161.6953125271.6234436] [149.9296875302.9984436] [130.3203125295.1546936] [138.1640625334.3734436] [130.3203125385.3578186] [134.2421875424.5765686] [157.7734375334.3734436] [157.7734375393.2015686] [161.6953125444.1859436] [146.0078125334.3734436]]] ===scores===[[0.8917050.877682150.78836040.443730680.540117440.90697530.86034690.843778130.880357270.8770150.90723520.889524460.866058950.83708550.9151828 ]] ===boxes===[[[108.75222.6000061] [180.25473.3999939]]]
3. 结果展示
由于模型输出是一堆坐标,我们借用一小段代码对结果进行可视化:
frommodelscope.preprocessors.imageimportLoadImageimg=LoadImage()(image_path_or_url)['img'] img=LoadImage.convert_to_ndarray(img) # 画个方框把人框住cv2.rectangle(img, boxes[0][0].astype(int), boxes[0][1].astype(int), (0, 255, 0), 1) # 标注人体15点,其中0是头部foriinrange(15): cv2.circle(img, poses[0][i].astype(int), 1, (0, 0, 255), 3) cv2.imwrite('result.png', img)
4. 串联应用(课外阅读)
通过自动截屏+人体关键点检测+自动移动鼠标,我们可以在射击游戏过程中实现“0秒锁头”,斗宗强者,恐怖如斯!
4.1 自动截屏
参考https://blog.csdn.net/sinat_38682860/article/details/109388556
4.2 自动移动鼠标
参考https://zhuanlan.zhihu.com/p/132694910
5. 结语
标题是“我XXX没有开挂!”,可是这篇文章确实是在教大家作弊了,强烈不建议在公平对抗的环境中使用。在一些其他场景下,比如识别过马路的行人、动态建模虚拟形象等,达摩院模型确实是提升效率的神器。
最后不得不感叹,达摩院模型真强大!