python手势控制游戏_厌倦了小游戏?划桨手势识别玩游戏玩新把戏!,玩腻,Paddle,玩转,出,新花样...

本文介绍了如何使用Python进行手势数据采集,通过PaddleX训练ResNet18模型进行手势识别,训练准确率超过93%,并将识别结果应用于游戏控制,实现新颖的手势控制体验。
摘要由CSDN通过智能技术生成

4882cb8ba19e704b461f3c9465ff8f46.png

文章目录:

1. 手势数据采集

2. PaddleX训练模型

3. 测试手势识别模型

4. 测试游戏种手势控制

5. 大功告成~

# 解压代码

!unzip /home/aistudio/data/data41298/code.zip -d /home/aistudio/work/

!pip install paddlex

拳头表示向下走:

9ae44ca2ce32588c2f51bad7395c5af9.png

手掌表示向上走:

6b3fe78dc6a9abcedfc6978e7845f435.png

下面两个分别是向左和向右:

45197b91f5b5647b98aa710400e9df87.png

35c42b32d5932fcadbb2a6ed7907d423.png

空白表示按位不动:

1c5c98b65c3246ad45675a7bd258d5cb.png

# 设置工作路径

import os

os.chdir('/home/aistudio/work/Pacman-master/')

1. 手势数据采集:

这一步需要在本地运行collect文件夹下PalmTracker.py文件进行手势数据采集;

运行该程序时会打开摄像头,在指定区域做出手势,按s保存;

b64fa31b0c6ff105e3acad9c5c776baa.png

# !python collect/PalmTracker.py

collect data game.py pacman.pytest.jpg utils.py

config.py demo.py images srctools weights

2. PaddleX训练模型

这一步使用PaddleX提供的ResNet18进行训练;

预训练模型使用在’IMAGENET’上训练的权重,PaddleX选择参数 pretrain_weights=‘IMAGENET’ 即可;

我这里每种手势共收集了40张左右,训练结果准确率在93%以上;

2.1 定义数据集

from paddlex.cls import transforms

import os

import cv2

import numpy as np

import paddlex as pdx

base = './data'

with open(os.path.join('train_list.txt'), 'w') as f:

for i, cls_fold in enumerate(os.listdir(base)):

cls_base = os.path.join(base, cls_fold)

files = os.listdir(cls_base)

print('{} train num:'.format(cls_fold), len(files))

for pt in files:

img = os.path.join(cls_fold, pt)

info = img + ' ' + str(i) + '\n'

f.write(info)

with open(os.path.join('labels.txt'), 'w') as f:

for i, cls_fold in enumerate(os.listdir(base)):

f.write(cls_fold+'\n')

train_transforms = transforms.Compose([

transforms.RandomCrop(crop_size=224),

transforms.Normalize()

])

train_dataset = pdx.datasets.ImageNet(

data_dir=base,

file_list='train_list.txt',

label_list='labels.txt',

transforms=train_transforms,

shuffle=True)

2.2 使用ResNet18训练模型

此处训练20个epoch,初始学习率为2e-2

num_classes = len(train_dataset.labels)

model = pdx.cls.ResNet18(num_classes=num_classes)

model.train(num_epochs=20,

train_dataset=train_dataset,

train_batch_size=32,

lr_decay_epochs=[5, 10, 15],

learning_rate=2e-2,

save_dir='w',

log_interval_steps=5,

save_interval_epochs=4)

3 测试手势识别模型:

from paddlex.cls import transforms

import matplotlib.pyplot as plt

import paddlex

import cv2

import warnings

warnings.filterwarnings('ignore')

train_transforms = transforms.Compose([

transforms.RandomCrop(crop_size=224),

transforms.Normalize()

])

model = paddlex.load_model('weights/final')

im = cv2.imread('test.jpg')

result = model.predict(im, topk=1, transforms=train_transforms)

print("Predict Result:", result)

%matplotlib inline

plt.imshow(im)

("Predict Result:", result)

%matplotlib inline

plt.imshow(im)

plt.show()

2020-06-23 09:27:29 [INFO]Model[ResNet18] loaded.

Predict Result: [{'category_id': 1, 'category': 'left', 'score': 0.9999609}]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDGN7LG1-1592877702883)(output_13_1.png)]

4. 测试游戏中手势控制:

本地运行demo.py即可;

2328a1c2285eeb422a10bd6698531f8a.png

!python demo.py

5. 大功告成

然后将该控制嵌入到游戏中即可~

游戏代码来自:https://github.com/hbokmann/Pacman

!python game.py

38f86f35e8764bdc6d85ff4149e65b21.png

演示视频我放到Youtube了(因为B站审核太慢了,,,)

更新,B站审核通过啦!

关于作者:

北京理工大学 大二在读

感兴趣的方向为:目标检测、人脸识别、EEG识别等

也欢迎大家fork、评论交流

联系我们:

权重文件或者源码需要的请私戳作者~

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值