首页 > 编程语言 >python实现手势识别的示例(入门)

python实现手势识别的示例(入门)

时间:2023-11-04 21:44:19浏览次数:56  
标签:入门 img 示例 python SCREEN cv2 Python 手势

原文:https://pythonjishu.com/yoprvijnxxyihab/

手势识别是计算机视觉领域的一个重要研究方向。在实际应用中,手势识别可以被用于人机交互、智能家居控制等领域。在本文中,我们将介绍如何使用Python实现手势识别的示例代码。

环境搭建

  1. 安装Python
    要使用Python进行手势识别的开发,首先需要在本地安装Python。Python的官方网站是 https://www.python.org/,可以在该网站上下载Python的安装包并按照提示进行安装。

  2. 安装OpenCV
    OpenCV是一个开源的计算机视觉库,支持多种操作系统,包括Windows、Linux、Mac OS等。可以在官网https://opencv.org/上找到OpenCV的下载链接,下载完成后按照安装提示进行安装。

  3. 安装其他依赖库
    在Python中实现手势识别需要用到一些其他的依赖库,比如numpy、scikit-learn等。可以使用pip命令来安装这些依赖库:

pip install numpy
pip install scikit-learn

手势识别示例

以下是两条手势识别的示例说明。

示例1:手势数字识别

这个示例展示了如何使用Python和OpenCV实现手势数字识别。首先需要收集一些手势数字的训练数据,可以在网络上找到一些数字手势的图片或者使用摄像头进行实时采集。然后使用OpenCV对数据进行预处理和特征提取,最后使用机器学习算法进行训练和测试。以下是代码示例:

import cv2
import numpy as np
from sklearn import svm

# 加载训练数据和标签
train_data = np.load('train_data.npy')
train_labels = np.load('train_labels.npy')

# 特征提取
def hog(img):
    hog = cv2.HOGDescriptor((64,64),(16,16),(8,8),(8,8),9)
    return hog.compute(img)

# 训练模型
clf = svm.SVC(kernel='linear')
clf.fit(np.array([hog(x) for x in train_data]), train_labels)

# 读取测试图像
img = cv2.imread('test.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 预处理
img_blur = cv2.GaussianBlur(img_gray, (5, 5), 0)
img_thresh = cv2.threshold(img_blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
img_dilate = cv2.dilate(img_thresh, np.ones((2, 2), np.uint8), iterations=1)
img_erode = cv2.erode(img_dilate, np.ones((2, 2), np.uint8), iterations=1)

# 特征提取
hog_data = hog(img_erode)

# 预测手势数字
pred = clf.predict(hog_data.reshape(1, -1))[0]

示例2:手势控制桌面

这个示例展示了如何使用Python和OpenCV实现手势控制桌面的操作。首先使用OpenCV对摄像头的图像进行处理,识别手势的位置和动态轨迹,然后根据不同手势进行不同的操作。例如,当手势为放大操作时,将放大当前窗口的内容;当手势为左移操作时,将当前窗口左移等等。以下是代码示例:

Python技术站热门推荐: PDF电子发票识别软件,一键识别电子发票并导入到Excel中! 10大顶级数据挖掘软件! 人工智能的十大作用!

 

import cv2
import numpy as np
import pyautogui

# 配置
SCREEN_WIDTH, SCREEN_HEIGHT = pyautogui.size()
SCREEN_CENTER_X, SCREEN_CENTER_Y = SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2

# 初始化摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

# 读取背景
_, background = cap.read()

# 帧循环
while True:
    # 读取当前帧
    _, frame = cap.read()

    # 背景差分
    diff = cv2.absdiff(background, frame)

    # 灰度化
    gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)

    # 二值化
    _, thresh = cv2.threshold(gray, 20, 255, cv2.THRESH_BINARY)

    # 膨胀和腐蚀
    thresh = cv2.dilate(thresh, None, iterations=3)
    thresh = cv2.erode(thresh, None, iterations=3)

    # 查找轮廓
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 遍历轮廓
    for contour in contours:
        # 计算轮廓面积
        area = cv2.contourArea(contour)
        if area < 1000:
            continue

        # 计算轮廓中心点
        x, y, w, h = cv2.boundingRect(contour)
        center_x, center_y = x + w // 2, y + h // 2

        # 手势控制
        if center_x < SCREEN_CENTER_X:
            pyautogui.press('left')
        elif center_x > SCREEN_CENTER_X:
            pyautogui.press('right')
        if center_y < SCREEN_CENTER_Y:
            pyautogui.press('up')
        elif center_y > SCREEN_CENTER_Y:
            pyautogui.press('down')

    # 更新背景
    _, background = cap.read()
    cv2.imshow('Gesture Control', frame)

    # 按ESC键退出
    if cv2.waitKey(1) & 0xFF == 27:
        break

# 释放摄像头
cap.release()

# 关闭窗口
cv2.destroyAllWindows()

以上就是两个手势识别的示例说明。希望对读者有所帮助。

标签:入门,img,示例,python,SCREEN,cv2,Python,手势
From: https://www.cnblogs.com/bruce1992/p/17809834.html

相关文章

  • 升级linux下的python版本
    以centos7为例将python升级到3.10.111、安装必备软件包:##第一步基础包yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-devellibpcap-develxz-develgcc##第二步安装db4-devel,必先安装epel-releaseyumi......
  • Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿......
  • 【python进阶】14大模块200页知识体系md笔记,第4篇:linux命令进阶(2)
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里共14......
  • Python02
    判断语句bool类型#bool类型bool_1=Truebool_2=Falseprint(f"bool_1变量的内容是:{bool_1},类型是:{type(bool_1)}")print(f"bool_2变量的内容是:{bool_2},类型是:{type(bool_2)}")#比较运算符的使用#==,!=,>,<,>=,<=num1=10num2=10print(f"10==10的结果是:{nu......
  • python3
    循环 1"""2while条件:3满足条件4#只要条件满足,会无限循环执行5"""6i=07sum=08whilei<=100:9sum=sum+i10i+=111print(sum)while循环猜数字1#无限次猜数字2importrandom3num=random.randint(1,100)......
  • python 4
    python函数函数:组织好的,可重复使用,实现功能的代码段len是python中内置的函数 str1="asdfaf"str2="asdfasdfasdff"str3="asdfasaf"#计算字符串的长度#用循环遍历的方法实现count=0foriinstr1:count+=1print(f"字符串{str1}的长度为:{count}")coun......
  • Shell的基本操作和编程入门
    操作:1)给变量赋值,练习echo命令,做下面这个题目:安装中文输入环境:http://rpm.pbone.net  选择第二个,点击右键,复制地址: 按顺序输入下面的命令:     安装完成后,输入zhcon,进入中文输入环境 a)把自己的名字赋值给变量name,把"是"赋值给变量is,把自己的班级名称......
  • 学JAVA用PYTHON重写day02.5
    packageday02;publicclassDemo05{/*三个数字排序*/publicstaticvoidmain(String[]args){System.out.println("三个数字排序,从大到小:");inta=2;intb=5;intc=1;intt;if(a<b){......
  • python实现shellcode异或加密自动化
    实现的结果如下:1.python脚本里面xorkey随机生成长度16位2.加密后的payload和key直接写入到模板里面3.编译使用gcc编译每次输出文件名随机完成一个自动化过程用法pythonmain.pyshellcode.bin其中shellcode.bin是自己的shellcode二进制文件,项目中的是一个弹出错误框......
  • x86平台SIMD编程入门(5):提示与技巧
    1、提示与技巧访问内存的成本非常高,一次缓存未命中可能会耗费100~300个周期。L3缓存加载需要40~50个周期,L2缓存大约需要10个周期,即使L1缓存的访问速度也明显慢于寄存器。所以要尽量保持数据结构对SIMD友好,优先选择std::vector、CAtlArray、eastl::vector等容器,按照顺序读取数据......