MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度技术分析:手语识别系统

项目背景与痛点

手语是聋哑人士与世界沟通的重要途径,但在现代技术支持的缺乏下,手语的识别与翻译成为了聋哑人群体融入社会的一大障碍。在此背景下,harshbg/Sign-Language-Interpreter-using-Deep-Learning 提供了一个通过视频流对手语进行实时识别和翻译的方案。这个项目的诞生,旨在解决沟通技术短板,通过人工智能技术,为聋哑人士与听觉健全人士之间架起沟通的桥梁。

核心技术揭秘

该系统的核心技术围绕视频流处理与深度学习模型展开,通过实时视频输入,机器学习模型对手势进行识别和分类。技术栈可能涉及以下关键组件:

  1. 视频数据采集:使用摄像头实时捕获用户的手势动作。
  2. 图像处理与预处理:实时预处理图像,去除噪声,提取关键特征。
  3. 深度学习模型:通过训练模型以识别不同手势对应的含义。
  4. 实时预测与输出:在接收到用户的手势后,系统能实时输出其翻译文本。

主流技术流程架构图

graph TD A[视频采集] --> B("图像预处理") B --> C{"手势识别?"} C -->|"识别成功"| D("手势翻译") D --> E[输出翻译文本] C -->|"重新识别"| B

在数据处理阶段,系统需要高度稳定与准确,确保手语识别的实时性与准确性。深度学习模型的选择和训练也是核心,它直接影响到系统的识别效果。

功能亮点与差异

与其他手语识别系统的对比,此项目的核心优势在于其实时处理能力和深度学习模型的自定义性。它可以快速响应用户输入,且模型可根据不同的场景进行优化与调优。此外,开源特性也使得更多的开发者能对其做出贡献,进一步提升系统的准确性和鲁棒性。

应用场景与落地建议

在实际应用场景中,必须注意系统的运行环境兼容性,确保在不同硬件平台和操作系统下的稳定运行。同时,考虑到网络异常情况下的处理能力,也需要在网络不稳定时备份处理方案,以保证用户的使用体验。该系统适合教育机构、公共服务窗口、聋哑人家庭等场景,通过减少沟通障碍,提升聋哑人士的生活质量。

综合评价

总之,harshbg/Sign-Language-Interpreter-using-Deep-Learning 项目具有非常高的实用性和独特性,通过深度学习技术,显著改进了手语识别系统的效率与准确性。其开源性质也使其成为社区中推动手语识别技术发展的强大动力。然而,该项目仍需针对不同用户群体的特定需求进行进一步的优化和定制化开发,以实现更广泛的实用价值。

关于

GitHub 原始描述(英文)

A sign language interpreter using live video feed from the camera.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

Python

README

Stars Forks GitHub contributors Language GitHub Hits

Sign Language Interpreter using Deep Learning

A sign language interpreter using live video feed from the camera. The project was completed in 24 hours as part of HackUNT-19, the University of North Texas’s annual Hackathon. You can view the project demo on YouTube.

Table of contents

General info

The theme at HACK UNT 19 was to use technology to improve accessibility by finding a creative solution to benefit the lives of those with a disability. We wanted to make it easy for 70 million deaf people across the world to be independent of translators for there daily communication needs, so we designed the app to work as a personal translator 24*7 for the deaf people.

Demo

Example screenshot

Example screenshot

Example screenshot

Example screenshot

The entire demo of the project can be found on YouTube.

Screenshots

Example screenshot Example screenshot

Technologies and Tools

  • Python
  • TensorFlow
  • Keras
  • OpenCV

Setup

  • Use comand promt to setup environment by using install_packages.txt and install_packages_gpu.txt files.

pyton -m pip r install_packages.txt

This will help you in installing all the libraries required for the project.

Process

  • Run set_hand_histogram.py to set the hand histogram for creating gestures.
  • Once you get a good histogram, save it in the code folder, or you can use the histogram created by us that can be found here.
  • Added gestures and label them using OpenCV which uses webcam feed. by running create_gestures.py and stores them in a database. Alternately, you can use the gestures created by us here.
  • Add different variations to the captured gestures by flipping all the images by using Rotate_images.py.
  • Run load_images.py to split all the captured gestures into training, validation and test set.
  • To view all the gestures, run display_gestures.py .
  • Train the model using Keras by running cnn_model_train.py.
  • Run final.py. This will open up the gesture recognition window which will use your webcam to interpret the trained American Sign Language gestures.

Code Examples

# Model Traiining using CNN

import numpy as np
import pickle
import cv2, os
from glob import glob
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils
from keras.callbacks import ModelCheckpoint
from keras import backend as K
K.set_image_dim_ordering('tf')

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

def get_image_size():
	img = cv2.imread('gestures/1/100.jpg', 0)
	return img.shape

def get_num_of_classes():
	return len(glob('gestures/*'))

image_x, image_y = get_image_size()

def cnn_model():
	num_of_classes = get_num_of_classes()
	model = Sequential()
	model.add(Conv2D(16, (2,2), input_shape=(image_x, image_y, 1), activation='relu'))
	model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
	model.add(Conv2D(32, (3,3), activation='relu'))
	model.add(MaxPooling2D(pool_size=(3, 3), strides=(3, 3), padding='same'))
	model.add(Conv2D(64, (5,5), activation='relu'))
	model.add(MaxPooling2D(pool_size=(5, 5), strides=(5, 5), padding='same'))
	model.add(Flatten())
	model.add(Dense(128, activation='relu'))
	model.add(Dropout(0.2))
	model.add(Dense(num_of_classes, activation='softmax'))
	sgd = optimizers.SGD(lr=1e-2)
	model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
	filepath="cnn_model_keras2.h5"
	checkpoint1 = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
	callbacks_list = [checkpoint1]
	#from keras.utils import plot_model
	#plot_model(model, to_file='model.png', show_shapes=True)
	return model, callbacks_list

def train():
	with open("train_images", "rb") as f:
		train_images = np.array(pickle.load(f))
	with open("train_labels", "rb") as f:
		train_labels = np.array(pickle.load(f), dtype=np.int32)

	with open("val_images", "rb") as f:
		val_images = np.array(pickle.load(f))
	with open("val_labels", "rb") as f:
		val_labels = np.array(pickle.load(f), dtype=np.int32)

	train_images = np.reshape(train_images, (train_images.shape[0], image_x, image_y, 1))
	val_images = np.reshape(val_images, (val_images.shape[0], image_x, image_y, 1))
	train_labels = np_utils.to_categorical(train_labels)
	val_labels = np_utils.to_categorical(val_labels)

	print(val_labels.shape)

	model, callbacks_list = cnn_model()
	model.summary()
	model.fit(train_images, train_labels, validation_data=(val_images, val_labels), epochs=15, batch_size=500, callbacks=callbacks_list)
	scores = model.evaluate(val_images, val_labels, verbose=0)
	print("CNN Error: %.2f%%" % (100-scores[1]*100))
	#model.save('cnn_model_keras2.h5')

train()
K.clear_session();

Features

Our model was able to predict the 44 characters in the ASL with a prediction accuracy >95%.

Features that can be added:

  • Deploy the project on cloud and create an API for using it.
  • Increase the vocabulary of our model
  • Incorporate feedback mechanism to make the model more robust
  • Add more sign languages

Status

Project is: finished. Our team was the winner of the UNT Hackaton 2019. You can find the our final submission post on devpost.

Future Work

Link for future Github repo : https://github.com/Manishms18/Sign-Language-Advance

Citation

@misc{shuklaSignLanguageInterpreter2025,
  title        = {Sign Language Interpreter Using Deep Learning},
  author       = {Shukla, Manish and Gupta, Harsh and Sharma, Ashish},
  year         = 2025,
  howpublished = {\url{https://doi.org/10.21203/rs.3.rs-7465375/v1}},
  note         = {Preprint posted on Research Square (Version 1). Licensed under CC BY 4.0},
}

Shukla, M., Gupta, H., & Sharma, A. (2025). Sign Language Interpreter Using Deep Learning [Preprint]. Research Square. https://doi.org/10.21203/rs.3.rs-7465375/v1

Contact

Created by me with my teammates Siddharth Oza, Ashish Sharma, and Manish Shukla.

Subscribe to my newsletter and unlock the secrets to becoming a 10X Data Scientist!

If you loved what you read here and feel like we can collaborate to produce some exciting stuff, or if you just want to shoot a question, please feel free to connect with me on email, LinkedIn, or Twitter. My other projects can be found here.

GitHub Twitter

评论

暂无评论