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)