import cv2 from cvzone.HandTrackingModule import HandDetector import numpy as np import math import time cap = cv2.VideoCapture(0) detector = HandDetector(maxHands=1) offset = 20 imgSize = 300 folder = "Data/Hi" counter = 0 while True: success, img = cap.read() if not success: print("Failed to capture image") continue 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 try: imgCrop = img[y - offset:y + h + offset, x - offset:x + w + offset] if imgCrop.size == 0: raise ValueError("Empty image crop detected") 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 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 cv2.imshow("ImageCrop", imgCrop) cv2.imshow("ImageWhite", imgWhite) except cv2.error as e: print("OpenCV error:", e) except ValueError as e: print(e) cv2.imshow("Image", img) key = cv2.waitKey(1) if key == ord("s"): if imgCrop.size == 0: continue counter += 1 cv2.imwrite(f'{folder}/Image_{time.time()}.jpg', imgWhite) print(counter)