import os import cv2 import numpy as np from glob import glob from tqdm import tqdm # 1. INPUT: Your seed data (Original 31 images) INPUT_FOLDER = r"C:\Users\charu\Desktop\seed_data" # 2. OUTPUT: Where to save the checked images OUTPUT_FOLDER = r"C:\Users\charu\Desktop\seed_verification_output" def verify_and_save(): if not os.path.exists(OUTPUT_FOLDER): os.makedirs(OUTPUT_FOLDER) print(f"🕵️ Checking data in: {INPUT_FOLDER}") txt_files = glob(os.path.join(INPUT_FOLDER, "*.txt")) if not txt_files: print("❌ No text files found! Check your path.") return print(f" -> Found {len(txt_files)} files. Drawing polygons...") for txt_path in tqdm(txt_files): # Load Image filename = os.path.basename(txt_path).replace('.txt', '') img_path_jpg = os.path.join(INPUT_FOLDER, filename + ".jpg") img_path_png = os.path.join(INPUT_FOLDER, filename + ".png") img_path_jpeg = os.path.join(INPUT_FOLDER, filename + ".jpeg") if os.path.exists(img_path_jpg): img_path = img_path_jpg elif os.path.exists(img_path_png): img_path = img_path_png elif os.path.exists(img_path_jpeg): img_path = img_path_jpeg else: print(f"⚠️ Image missing for {filename}") continue img = cv2.imread(img_path) if img is None: continue h, w, _ = img.shape # Load Labels with open(txt_path, 'r') as f: lines = f.readlines() for line in lines: parts = line.strip().split() if not parts: continue try: cls_id = int(parts[0]) # Parse Polygons coords = [float(x) for x in parts[1:]] # Check format (Is it Box or Polygon?) if len(coords) == 4: # It is a BOX (x, y, w, h) -> Draw Rectangle cx, cy, bw, bh = coords x1 = int((cx - bw/2) * w) y1 = int((cy - bh/2) * h) x2 = int((cx + bw/2) * w) y2 = int((cy + bh/2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 3) label_text = "BOX" pt = (x1, y1 - 10) else: # It is a POLYGON -> Draw Shape points = [] for i in range(0, len(coords), 2): px = int(coords[i] * w) py = int(coords[i+1] * h) points.append([px, py]) pts = np.array(points, np.int32).reshape((-1, 1, 2)) cv2.polylines(img, [pts], isClosed=True, color=(0, 255, 0), thickness=2) label_text = "POLY" pt = tuple(points[0]) # Add Text cv2.putText(img, f"{cls_id}-{label_text}", pt, cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2) except Exception as e: print(f"Error parsing {filename}: {e}") # Save to Output Folder save_path = os.path.join(OUTPUT_FOLDER, filename + "_check.jpg") cv2.imwrite(save_path, img) print(f"\n✅ Done! Go open this folder and look at the images:") print(f" {OUTPUT_FOLDER}") if __name__ == "__main__": verify_and_save()