Opencv项目实战:21 美国ASL手势识别
0、项目介绍
首先,我可以保证在这里,你并不需要多么了解深的机器学习算法,我的初衷是通过本项目,激发大家学习机器学习的动力。选择这种手势原因是因为只有24个字母,你的电脑足以带的动,虽然我只训练A、B、C、D等字母的手势识别,但只要掌握了方法,你可以全部弄完24个字母的手势(我觉得没这必要)。

如果你的思维足够的发散,相信你一定会有其他的好点子。
1、效果展示

2、项目搭建

这个地方依赖的包有些多:{cv2、numpy、cvzone、tensorflow}
tensorflow的下载用pip下载不了,找了很多办法,本人有效解决的是:
pip install --index-url https://pypi.douban.com/simple tensorflow
3、代码的展示与讲解
# traing.pyimport cv2
import numpy as np
from cvzone.HandTrackingModule import HandDetector
import math
import timecap=cv2.VideoCapture(0)
detector=HandDetector(maxHands=1)offset=20
imgSize=300
folder=".21 Americal_ASL/Data/D"
count=0while True:ret,img=cap.read()hands,img=detector.findHands(img)if hands:hand = hands[0]x,y,w,h=hand['bbox']imgWhite=np.ones((imgSize,imgSize,3),np.uint8)*255imgCrop = img[y-offset:y+h+offset,x-offset:x+w+offset]imgCropShape = imgCrop.shapeaspectRatio = h/wif aspectRatio>1:k=imgSize/hwCal=math.ceil(k*w)imgResize=cv2.resize(imgCrop,(wCal,imgSize))imgResizeShape=imgResize.shapewGap=math.ceil((imgSize-wCal)/2)imgWhite[:,wGap:wGap+wCal]=imgResizeelse:k = imgSize / whCal = math.ceil(k * h)imgResize = cv2.resize(imgCrop, (imgSize,hCal))imgResizeShape = imgResize.shapehGap = math.ceil((imgSize - hCal) / 2)imgWhite[hGap:hGap + hCal,:] = imgResizecv2.imshow("ImageCrop",imgCrop)cv2.imshow("imageWhite",imgWhite)cv2.imshow("Image",img)k=cv2.waitKey(1)if k==ord('s'):count+=1cv2.imwrite(f"{folder}/Image_{time.time()}.jpg",imgWhite)print(count)elif k==27:break
首先,在这里先运行这个文件,它会出现下面这样的窗口:

接下来,就按照美国ASL手势,对数据进行收集,你只需要在成功识别后,不断的点击键盘"s"键,对图片进行保存,一定要记住修改保存的文件位置,也就是变量folder,我收集的数量大概在300张左右,多一点少一些也无所谓,识别的效果还是相当不错的。
Teachable Machine 是一个基于 Web 的工具,为每个人创造快速、简明、易用的机器学习模型。
进入这个网站Teachable Machine,将文件{A、B、C、D}拖进去,可能需要一点时间,耐心等等就行,获得了keras_model.h5和labels.txt文件,我在得到labels.txt文件时,出现了点问题,不过你也可以手动添加一下,毕竟不是很多。
0 A 1
1 B 2
2 C 3
3 D 4
这个网站需要"KX"上网,当时做完没有保存图片,现在流量也已经用完了,所以这个地方大家就自己琢磨一下吧。
# test.py
import cv2
import numpy as np
from cvzone.HandTrackingModule import HandDetector
import math
from cvzone.ClassificationModule import Classifiercap=cv2.VideoCapture(0)
detector=HandDetector(maxHands=1)
classifier=Classifier("E:\pythonProject1\Opencv project training//21 Americal_ASL\Model\keras_model.h5","E:\pythonProject1\Opencv project training//21 Americal_ASL\Model\labels.txt")offset=20
imgSize=300
# folder=".21 Americal_ASL/Data/D"
count=0
labels = ['A','B','C','D']while True:ret,img=cap.read()imgOutput = img.copy()hands,img=detector.findHands(img)if hands:hand = hands[0]x,y,w,h=hand['bbox']imgWhite=np.ones((imgSize,imgSize,3),np.uint8)*255imgCrop = img[y-offset:y+h+offset,x-offset:x+w+offset]imgCropShape = imgCrop.shapeaspectRatio = h/wif aspectRatio>1:k=imgSize/hwCal=math.ceil(k*w)imgResize=cv2.resize(imgCrop,(wCal,imgSize))imgResizeShape=imgResize.shapewGap=math.ceil((imgSize-wCal)/2)imgWhite[:,wGap:wGap+wCal]=imgResizeprediction, index = classifier.getPrediction(imgWhite,draw=False)print(prediction,index)else:k = imgSize / whCal = math.ceil(k * h)imgResize = cv2.resize(imgCrop, (imgSize,hCal))imgResizeShape = imgResize.shapehGap = math.ceil((imgSize - hCal) / 2)imgWhite[hGap:hGap + hCal,:] = imgResizeprediction, index = classifier.getPrediction(imgWhite, draw=False)cv2.rectangle(imgOutput, (x - offset, y - 50),(x - offset+120, y - offset), (255, 0, 255), cv2.FILLED)cv2.putText(imgOutput,labels[index],(x+12,y-27),cv2.FONT_HERSHEY_COMPLEX,1.8,(255,255,255),2)cv2.rectangle(imgOutput,(x-offset,y-offset),(x+w+offset,y+h+offset),(255,0,255),4)cv2.imshow("ImageCrop",imgCrop)cv2.imshow("imageWhite",imgWhite)cv2.imshow("Image",imgOutput)k=cv2.waitKey(1)if k==27:break
这是用于测试的代码,运行之后,就可以展现我们本项目的效果了。
4、项目资源
GitHub:21 美国ASL手势识别
5、项目总结
顺利完成,因为这个是很早之前做的,一直没空写,而且因为之前python环境出现了问题,重新装了一次,下载的那些包都没了,有很多空缺,这几天装Tensorflow,也是把我搞得心态爆炸,但基础的效果总算是可以展现了。虽然teachable machine可能你进不去,但如果你只是抱着学习的态度,那么在GitHub里面我也提供了我做的A、B、C、D的文件。

相关文章:
Opencv项目实战:21 美国ASL手势识别
0、项目介绍 首先,我可以保证在这里,你并不需要多么了解深的机器学习算法,我的初衷是通过本项目,激发大家学习机器学习的动力。选择这种手势原因是因为只有24个字母,你的电脑足以带的动,虽然我只训练A、B、…...
强化学习RL 01: Reinforcement Learning 基础
目录 RL理解要点 1. RL数学基础 1.1 Random Variable 随机变量 1.2 概率密度函数 Probability Density Function(PDF) 1.3 期望 Expectation 1.4 随机抽样 Random Sampling 2. RL术语 Terminologies 2.1 agent、state 和 action 2.2 策略 policy π 2.3 奖励 reward …...
C语言之练习题合集
💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 文章目录leetcode 题号:728. 自除数leetcode 题号:238.…...
sublimeText3新建文件自动添加注释头
参考: https://github.com/shiyanhui/FileHeader/blob/master/README.rst https://packagecontrol.io/packages/FileHeader https://github.com/shiyanhui/FileHeader fileheader:https://codeload.github.com/shiyanhui/FileHeader/zip/refs/heads/m…...
AndroidStudio打包HBuilderX的H5+项目为安卓App【一次过,无任何异常报错】
目录 1.查看HBuilderX的版本号 2.下载Dcloud上对应的安卓SDK 3.下载完安卓SDK后,我们解压它,注意不要放在任何有中文组成的文件夹中【是否有中文决定于你鼠标单击上面路径后,第一张图还没鼠标单击,第二张已鼠标单击,…...
【Linux】进程概念
目录 一、基本概念 二、查看进程 三、系统调用获取进程标示符 1、获取自己的PID 2、获取父进程的PID 四、创建进程 1、初识fork 2、使用fork的方式 五、进程状态 1、阻塞 2、挂起 3、R状态 4、S状态 5、D状态 6、T状态 6.1、kill指令 6.2、暂停进程与继续进程 …...
使用pyinstaller库打包exe时显示KeyError怎么办
PyInstaller是一个Python库,用于将Python应用程序转换为独立的可执行文件(executable)文件,支持多平台。它可以将Python解释器、依赖的库和脚本打包成一个单独的可执行文件,从而使应用程序可以独立运行,而无…...
k8s新增节点机器,无法拉取和推送镜像的解决方案
1、首先检查配置,查看镜像仓库是否已授权,若无授权,则进行授权。 命令:cat /etc/systemd/system/docker.service.d/docker-options.conf内容如果有这样一句就是已经授权,如果没有,就需要把这句加进去&…...
测试报告踩坑的点
测试报告作为测试人员的核心输出项,是体现自己工作价值的重要承载工具,需要我们认真对待,所以我们要重视测试报告的输出,那么在编写测试报告的时候,我们有哪些点需要注意的呢? 01 不要乱用模板 很多测试新人在编写测试…...
【Java】创建多线程的四种方式
一、方式1:继承Thread类 步骤: 创建一个继承于Thread类的子类重写Thread类的run()方法 ----> 此线程执行的操作声明在方法体中创建当前Thread子类的对象通过实例对象调用start()方法,启动线程 ----> Java虚拟机会调用run()方法 注意…...
【数据结构】队列的接口实现(附图解和源码)
队列的接口实现(附图解和源码) 文章目录队列的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)1.初始化队列2.销毁队列3.队尾入队列4.判断队列是否为空5.队头出队列6.获取队列头部元素7…...
日本知名动画公司东映动画加入 The Sandbox 元宇宙
与 Minto 合作将东映动画的 IP 呈现在元宇宙。 The Sandbox 很荣幸能与东映动画合作,与 Minto 携手在 The Sandbox 元宇宙中创建基于东映动画 IP 的相关体验。 作为日本动画的先驱,东映动画制作了日本最大和世界领先的动画作品,包括《龙珠》、…...
QuickHMI Hawk R3 Crack
基于网络的 SCADA / HMI 系统 QuickHMI Hawk R3 QuickHMI是一个 100% 基于网络的SCADA/HMI 系统。 得益于HTML5、SVG和Javascript等现代网络技术,可视化可以在任何当前浏览器和设备中显示。作为浏览器的替代品,可以使用“独立查看器”和移动应用程序。 Q…...
【C语言】寻找隐藏字母游戏
编程实现一个游戏程序,会将连续三个字母中的一个隐去,由玩家填写隐去的那个字母,如屏幕上显示A ? C,则玩家需要输入B;屏幕上显示?B C,则玩家需要输入A。记录玩家完成20次游戏的时间以及正确率。…...
【C++】list 相关接口的模拟实现
list 模拟实现回顾准备构造析构函数的构造构造方法析构方法赋值运算符重载容量相关接口元素获取元素修改相关接口push 、popinserterase清空交换迭代器 **(重点)迭代器基本概念迭代器模拟实现回顾 在上一篇博客中我们大致了解了 list 相关接口的使用方法…...
快速找到外贸客户的9种方法(建议收藏)
所有外贸企业想要做好外贸出口的头等大事,就是要快速的找到优质的外贸客户和订单,没有订单的达成,所有的努力都是图劳,还有可能会陷入一种虚假的繁荣,每天都很忙,但是没有结果。今天,小编就来分…...
TCP状态转换
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP状态转换专栏:《Linux从小白到大神》《网络编程》 TCP状态转换示意图如下 针对上面的示…...
3500年里,印度被11个文明征服
转自:3500年里,印度被11个文明征服,如今看似统一,实际上却是缝合怪 (qq.com)今天的印度是亚洲第二大国,南亚第一大国,世界第二人口大国。如果我们将时间线拉长,纵观历史的长河,就会惊…...
Java编程问题top100---基础语法系列(一)
Java编程问题top100---基础语法系列一一、Java 操作符实质二、将InputStream转换为String使用IOUtils自己写轮子三、将数组转换为List四、如何遍历map对象使用For-Each迭代entries(方法一)使用For-Each迭代keys和values(方法二)使…...
【C#基础】C# 异常处理操作
序号系列文章6【C#基础】C# 常用语句讲解7【C#基础】C# 常用数据结构8【C#基础】C# 面向对象编程文章目录前言1,异常的概念2,处理异常3,自定义异常4,编译器异常结语前言 🌷大家好,我是writer桑,…...
Unity 2D横版闯关游戏:从零到一构建像素风丛林冒险
1. 像素风游戏的前期准备 第一次打开Unity时,看着空荡荡的场景视图,我完全不知道从哪里开始。后来发现,制作2D横版游戏就像搭积木,需要先准备好所有零件。这里分享我制作《丛林法则》时的完整筹备过程。 像素风游戏最迷人的就是那…...
浏览器光标锁定技术:Pointer Lock API与全屏API实战指南
1. 项目概述:一个解决浏览器光标“越狱”问题的实用工具如果你是一名前端开发者,或者经常需要制作在线演示、录屏教程,甚至是在开发一个网页端的游戏,那你一定遇到过这个让人头疼的问题:鼠标光标在网页里“不老实”。当…...
Claude代码会话实战指南:从问答到结构化协作的效能提升
1. 项目概述:Claude Code Session 的实战效能提升指南最近在深度使用 Claude 进行代码开发时,我发现了一个宝藏仓库:mantra-hq/claude-code-session-tips。这并非一个可以直接运行的软件库,而是一份由社区高手们精心整理的、关于如…...
从淘宝几块钱的2804云台电机开始,手把手教你DIY一个桌面机械臂关节(STM32/GD32 + SimpleFOC)
从零打造低成本机械臂关节:2804云台电机FOC控制实战指南 在创客圈里,机械臂项目总是让人既向往又却步——商用伺服电机动辄上千元的单价,让许多爱好者望而却步。但当我发现淘宝上仅售几元的2804云台电机时,一个大胆的想法诞生了&a…...
jdk1.8.0_05 在 SpringBootTest Debug模式下奔溃
之前好好的项目,最近换了之前的电脑,但是在使用SpringBootTest 启动debug模式时,虚拟机就会奔溃,通过修改如果把 junit5 import org.junit.jupiter.api.Test; 修改为 junit4 ,就不奔溃了 import org.junit.Test; 但是这样的话就得在测试类上加上 @RunWith(SpringRunn…...
从零开始使用Taotoken为你的爬虫项目添加AI解析功能
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始使用Taotoken为你的爬虫项目添加AI解析功能 在数据采集项目中,我们常常会遇到非结构化或半结构化的网页内容。…...
终极Element Plus Admin指南:快速构建企业级后台管理系统的完整解决方案
终极Element Plus Admin指南:快速构建企业级后台管理系统的完整解决方案 【免费下载链接】element-plus-admin 基于vitetselementPlus 项目地址: https://gitcode.com/gh_mirrors/el/element-plus-admin 你是否正在寻找一个能够快速搭建企业级后台管理系统的…...
AI赋能图像分割:跨界应用的未来
自然图像域自适应分割是一种技术,通过强化不同数据集(域)的图像样本的边界(boundary)和不确定区域(entropy)特征的一致性,以实现更好的域自适应的分割结果。自然图像域自适应分割技术…...
多物流机器人任务调度与路径规划【附程序】
✨ 长期致力于物流机器人、任务调度、路径规划、沙猫群算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)栅格-拓扑双层地图建模与任务分配…...
TimeIndex:专为海量时间序列数据设计的轻量级高效索引方案
1. 项目概述与核心价值 最近在折腾一个数据可视化项目,需要处理海量的时间序列数据,比如传感器读数、用户行为日志、金融行情这类东西。数据量一大,最头疼的就是查询效率。你写个SQL,想查某个时间点之后的数据,或者按天…...
