栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于Opencv的虚拟键盘(附完整代码及报告)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于Opencv的虚拟键盘(附完整代码及报告)

用到的库:opencv、cvzone、pynput

一、从Opencv到计算机视觉领域:

Opencv是传统计算机视觉库,OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS操作系统。

为什么说他是传统的计算机视觉库,因为随着神经网络的发展,人们开始发现卷积神经网络在图像识别方面的显著效果,卷积神经网络一时间占领了计算机视觉领域的神坛,人们一提到计算机视觉,首先想到的就是卷积神经网络。

神经网络其实早在1950年就被提出,但是因为他对数据需求大、对算力要求高、训练时间长、同期一些更加有效传统的的机器学习算法被提出等等因素而一直无人问津。

寒冬直到2000年,新世纪到来时,神经网络算法被大规模应用的各项条件已经成熟:神经网络算法被不断优化、全球数据量激增、芯片、云技术迅猛发展、而且此时的传统机器学习算法受到限制,很难再提升预测的准确性,算法、数据与算力的进步,完全释放了神经网络的潜力。当数据量够大、神经网络够复杂时,神经网络的性能会远远超出其他机器学习算法,甚至超越人类。这为预测算法的商业化应用打下了基础。

神经网络开始变得火热,而在计算机视觉领域,利用神经网络训练图像数据仍有一定难度,一直到2012年Alexnet等网络架构被提出,神经网络正式改名深度学习,计算机视觉领域才开始进入人们的视野,而这距离现在不过短短的十年时间,所以说计算机视觉是一个很年轻的领域。

计算机视觉的一些成果:

83 Most Popular Computer Vision Applications in 2022 - viso.ai

 

 

OpenCV能做什么?

1、人机互动

2、物体识别

3、图像分割

4、人脸识别

5、动作识别

6、运动跟踪

7、机器人

8、运动分析

9、机器视觉

10、结构分析

11、汽车安全驾驶

百度安全验证

Cvzone:“三哥”第三方库  啥都会一点的研究生

Pynput:控制或监控鼠标和键盘的模块

  • 关于项目:

    现实生活中,我们大多是使用鼠标,键盘与计算机进行交互,或者是使信号等控制计算机,如果不与计算机进行物理接触,也不用红外线等信号进行控制,仅仅是通过手部某些特征的识别来控制与计算机进行交互将会是一件很有意思的事情。未来,如果说元宇宙成为可能,那么使用双手控制虚拟界面将会是不可或缺的功能之一。

    具体实现流程:

    1. 链接摄像头
    2. 识别手势
    3. 3.绘制键盘
    4.  3.1创建键盘字母List
    5.  3.2通过循环绘制键盘

    4.根据坐标,取得返回字母

    5.扩展,修改键盘背景

    6.利用pynput模拟真实键盘输入

    三、项目存在的缺陷与不足:

    项目仍存在很多劣势与不足,例如:

    1、每次点击可能一次性输入多个字母

    2、摄像头实时追踪对计算机性能有一定要求,可能出现轻微卡顿等情况

    3、用手去追踪定位键盘按键不够灵活。

    完整代码如下:

    import cv2
    from cvzone.HandTrackingModule import HandDetector
    from time import sleep
    import numpy as np
    import cvzone
    from pynput.keyboard import Key,Controller
    
    #实例化摄像头
    cap = cv2.VideoCapture(0)
    cap.set(3,1280)
    cap.set(4,720)
    
    #识别手势
    detector = HandDetector(detectionCon=0.8)
    keyboard = Controller()
    
    #键盘关键字
    keys = [['Q','W','E','R','T','Y','U','I','O','P'],
            ['A','S','D','F','G','H','J','K','L',' '],
            ['Z','X','C','V','B','N','M',',','.','!']]
    #定义一个按钮类
    class Button():
        def __init__(self,pos,text,size = [50,50]):
            self.pos = pos
            self.text = text
            self.size = size
    
    
    buttonList = []
    finalText = ''
    for j in range(len(keys)):
        for x,key in enumerate(keys[j]):
            #循环创建buttonList对象列表
            buttonList.append(Button([60*x+600,100+j*60],key))
    
    #定义函数:在视频的每一帧上显示键盘
    def drawAll(img,buttonList):
        for button in buttonList:
            x, y = button.pos
            w, h = button.size
            cvzone.cornerRect(img,(x,y,w,h),20,rt = 0)
            cv2.rectangle(img, button.pos, (x + w, y + h), ((x+w)%255, 200, (y+h)%255), cv2.FILLED)
            cv2.putText(img, button.text, (x + 10, y + 40),
                        cv2.FONT_HERSHEY_PLAIN, 3, (255, 255, 255), 2)
        return img
    
    
    while True:
        success,img = cap.read()
        img = cv2.flip(img, 1)
        #识别手势
        img = detector.findHands(img)
        lmList,bboxInfo = detector.findPosition(img)
    
    
        img = drawAll(img,buttonList )
        if lmList:
            for button in buttonList:
                x,y = button.pos
                w,h = button.size
                #判断:如果手指某个部位(这里是8号位处于按钮上,该按钮显示其他颜色)
                if x 
    

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/755233.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号