Download app.py from vikranth1111/sign_language_detection: direct link, hf CLI and curl.
- Browser
- Download file 2.15 kB
-
https://huggingface.co/vikranth1111/sign_language_detection/resolve/main/app.py
- Command line
-
hf download hf://vikranth1111/sign_language_detection/app.py
-
curl -L -o app.py https://huggingface.co/vikranth1111/sign_language_detection/resolve/main/app.py
2.15 kB
| import cv2 | |
| from cvzone.HandTrackingModule import HandDetector | |
| from cvzone.ClassificationModule import Classifier | |
| import numpy as np | |
| import math | |
| cap = cv2.VideoCapture(0) | |
| detector = HandDetector(maxHands=1) | |
| classifier = Classifier("keras_model.h5", "labels.txt") | |
| offset = 20 | |
| imgSize = 300 | |
| counter = 0 | |
| labels = ["iam", "ok", "going", "no", "yes" , "hi",] | |
| while True: | |
| success, 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) * 255 | |
| imgCrop = img[y - offset:y + h + offset, x - offset:x + w + offset] | |
| # Add a check to ensure imgCrop is not empty | |
| if imgCrop.size == 0: | |
| continue | |
| imgCropShape = imgCrop.shape | |
| aspectRatio = h / w | |
| if aspectRatio > 1: | |
| k = imgSize / h | |
| wCal = math.ceil(k * w) | |
| imgResize = cv2.resize(imgCrop, (wCal, imgSize)) | |
| imgResizeShape = imgResize.shape | |
| wGap = math.ceil((imgSize - wCal) / 2) | |
| imgWhite[:, wGap: wCal + wGap] = imgResize | |
| prediction, index = classifier.getPrediction(imgWhite, draw=False) | |
| print(prediction, index) | |
| else: | |
| k = imgSize / w | |
| hCal = math.ceil(k * h) | |
| imgResize = cv2.resize(imgCrop, (imgSize, hCal)) | |
| imgResizeShape = imgResize.shape | |
| hGap = math.ceil((imgSize - hCal) / 2) | |
| imgWhite[hGap: hCal + hGap, :] = imgResize | |
| prediction, index = classifier.getPrediction(imgWhite, draw=False) | |
| cv2.rectangle(imgOutput, (x - offset, y - offset - 70), (x - offset + 400, y - offset + 60 - 50), (0, 255, 0), | |
| cv2.FILLED) | |
| cv2.putText(imgOutput, labels[index], (x, y - 30), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 0, 0), 2) | |
| cv2.rectangle(imgOutput, (x - offset, y - offset), (x + w + offset, y + h + offset), (0, 255, 0), 4) | |
| cv2.imshow('ImageCrop', imgCrop) | |
| cv2.imshow('ImageWhite', imgWhite) | |
| cv2.imshow('Image', imgOutput) | |
| cv2.waitKey(1) | |