基于OpenCV+深度学习CNN+Keras的智能手语/手势识别系统

 第一步:准备数据

十种手势数据:'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',总共有2062张图片,每个文件夹单独放一种数据

第二步:搭建模型

算法流程:

1.通过肤色检测获取手部

2.将获取的手部截图出来,送入到cnn网络进行识别

模型代码如下:

def mini_XCEPTION(input_shape, num_classes, l2_regularization=0.01):
    regularization = l2(l2_regularization)

    # base
    img_input = Input(input_shape)
    x = Conv2D(8, (3, 3), strides=(1, 1), kernel_regularizer=regularization,
                                            use_bias=False)(img_input)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv2D(8, (3, 3), strides=(1, 1), kernel_regularizer=regularization,
                                            use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)

    # module 1
    residual = Conv2D(16, (1, 1), strides=(2, 2),
                      padding='same', use_bias=False)(x)
    residual = BatchNormalization()(residual)

    x = SeparableConv2D(16, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(16, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)

    x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
    x = layers.add([x, residual])

    # module 2
    residual = Conv2D(32, (1, 1), strides=(2, 2),
                      padding='same', use_bias=False)(x)
    residual = BatchNormalization()(residual)

    x = SeparableConv2D(32, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(32, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)

    x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
    x = layers.add([x, residual])

    # module 3
    residual = Conv2D(64, (1, 1), strides=(2, 2),
                      padding='same', use_bias=False)(x)
    residual = BatchNormalization()(residual)

    x = SeparableConv2D(64, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(64, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)

    x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
    x = layers.add([x, residual])

    # module 4
    residual = Conv2D(128, (1, 1), strides=(2, 2),
                      padding='same', use_bias=False)(x)
    residual = BatchNormalization()(residual)

    x = SeparableConv2D(128, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = SeparableConv2D(128, (3, 3), padding='same',
                        kernel_regularizer=regularization,
                        use_bias=False)(x)
    x = BatchNormalization()(x)

    x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
    x = layers.add([x, residual])

    x = Conv2D(num_classes, (3, 3),
            #kernel_regularizer=regularization,
            padding='same')(x)
    x = GlobalAveragePooling2D()(x)
    output = Activation('softmax',name='predictions')(x)

    model = Model(img_input, output)
    return model

第三步:训练过程种的loss变化和正确率

验证正确率高达1

第四步:搭建GUI界面(具有识别和摄像头功能)

第六步:整个工程的内容

提供整套,提供测试数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”

代码的下载路径(新窗口打开链接)基于OpenCV+深度学习CNN+Keras的智能手语/手势识别系统

有问题可以私信或者留言,有问必答

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手势识别技术在近年来得到了越来越广泛的应用,常用于人机交互、虚拟现实、智能家居等领域。而基于opencv mediapipe的手势识别技术,相较于传统的计算机视觉方案,具有更加精准、实时、可靠的特点。 mediapipe是Google开发的一套跨平台机器学习框架,其中包含了许多强大的算法和模型,其中就包括了手部姿势估计。通过这些算法,我们可以实现对手的关键点位置进行实时预测,并进行手势识别分类,从而实现数字、石头剪刀布等手势的识别。 在手势识别的实现过程中,关键的问题在于对手部关键点的识别和跟踪。在mediapipe中提供了一种基于深度学习的神经网络,用来精准地检测出手部的21个关键点。这个模型还可以在不同背景下进行对比度调整、亮度调整、旋转调整等图像处理操作,从而适应不同环境下的手势识别场景。 在实际应用中,我们可以使用Python和OpenCV库来实现基于mediapipe的手势识别。通过摄像头获取到实时视频流后,我们可以先对图像进行预处理,然后对关键点进行检测,最终进行手势分类和识别。在实际场景中,我们可以通过改变背景颜色、增加光照环境等方式来测试手势识别算法的鲁棒性和相对误差。 总之,基于opencv mediapipe的手势识别技术,是一种精准、实时、可靠的手势识别方案,具有广泛的应用前景。通过这种技术,我们可以实现更加自然和直观的人机交互方式,带来更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值