Spaces:
No application file
No application file
import cv2 | |
from cvzone.HandTrackingModule import HandDetector | |
from cvzone.ClassificationModule import Classifier | |
import numpy as np | |
import math | |
import gradio as gr | |
#cap = cv2.VideoCapture(0) | |
detector = HandDetector(maxHands=1) | |
classifier = Classifier("Model/keras_model.h5", "Model/labels.txt") | |
offset = 20 | |
imgSize = 300 | |
folder = "Data/C" | |
counter = 0 | |
labels = ["A", "B"] | |
def sign(img): | |
#img = cv2.imread("sign.jpg") | |
imgOutput = cv2.flip(img.copy(),1) | |
hands, img = detector.findHands(cv2.flip(img[:,:,::-1],1)) | |
if hands: | |
print('hand detected') | |
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] | |
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), | |
(x + w+offset, y + h+offset), (255, 0, 255), 4) | |
imgOutput = cv2.flip(imgOutput,1) | |
#cv2.rectangle(imgOutput, (x - offset, y - offset-50), | |
# (x - offset+90, y - offset-50+50), (255, 0, 255), cv2.FILLED) | |
#cv2.putText(imgOutput, labels[index], (x, y -26), cv2.FONT_HERSHEY_COMPLEX, 1.7, (255, 255, 255), 2) | |
cv2.rectangle(imgOutput, (30,30), | |
(80,80), (255, 0, 255), cv2.FILLED) | |
cv2.putText(imgOutput, labels[index], (30, 80), cv2.FONT_HERSHEY_COMPLEX, 1.7, (255, 255, 255), 2) | |
#cv2.imshow("ImageCrop", imgCrop) | |
#cv2.imshow("ImageWhite", imgWhite) | |
#cv2.imshow("Image", imgOutput) | |
return imgOutput | |
with gr.Blocks() as demo: | |
with gr.Tabs(): | |
with gr.TabItem('Webcam'): | |
with gr.Row(): | |
with gr.Column(): | |
img_input2 = gr.Webcam() | |
image_button2 = gr.Button("Submit") | |
with gr.Column(): | |
output2 = gr.outputs.Image() | |
image_button2.click(fn=sign, | |
inputs = img_input2, | |
outputs = output2) | |
demo.launch(debug=True) | |