import torch print("version:", torch.__version__) print("cuda available:", torch.cuda.is_available()) print("device count:", torch.cuda.device_count()) if torch.cuda.is_available(): print("device 0:", torch.cuda.get_device_name(0)) from pathlib import Path # Ajusta se o caminho base for outro root = Path(r"C:\ZendionInc\agrobot_base\Python\yolov8-seg") train_img_dir = root / "images" / "train" train_lbl_dir = root / "labels" / "train" print("=== DEBUG TRAIN ===") print("Pasta imagens:", train_img_dir) print("Pasta labels :", train_lbl_dir) # extensões que vamos considerar como imagem img_exts = {".jpg", ".jpeg", ".png", ".bmp"} imgs = sorted([p for p in train_img_dir.iterdir() if p.suffix.lower() in img_exts]) print(f"Total de imagens em train: {len(imgs)}") missing_lbl = [] empty_lbl = [] ok_lbl = [] for img in imgs: lbl = train_lbl_dir / f"{img.stem}.txt" if not lbl.exists(): missing_lbl.append(img.name) else: content = lbl.read_text(encoding="utf-8").strip() if not content: empty_lbl.append(img.name) else: ok_lbl.append(img.name) print("\nImagens COM label não vazio:", len(ok_lbl)) print("Imagens SEM arquivo de label:", len(missing_lbl)) print("Imagens COM label VAZIO:", len(empty_lbl)) if ok_lbl: exemplo = ok_lbl[0] exemplo_lbl = train_lbl_dir / f"{Path(exemplo).stem}.txt" print("\nExemplo de label não vazio (primeira linha):") print(exemplo_lbl.read_text(encoding="utf-8").splitlines()[0]) else: print("\nNenhum label não vazio encontrado.") # Repetir o mesmo para VAL se quiser: val_img_dir = root / "images" / "val" val_lbl_dir = root / "labels" / "val" print("\n=== DEBUG VAL ===") print("Pasta imagens:", val_img_dir) print("Pasta labels :", val_lbl_dir) imgs_val = sorted([p for p in val_img_dir.iterdir() if p.suffix.lower() in img_exts]) print(f"Total de imagens em val: {len(imgs_val)}") missing_lbl_val = [] empty_lbl_val = [] ok_lbl_val = [] for img in imgs_val: lbl = val_lbl_dir / f"{img.stem}.txt" if not lbl.exists(): missing_lbl_val.append(img.name) else: content = lbl.read_text(encoding="utf-8").strip() if not content: empty_lbl_val.append(img.name) else: ok_lbl_val.append(img.name) print("\nImagens COM label não vazio:", len(ok_lbl_val)) print("Imagens SEM arquivo de label:", len(missing_lbl_val)) print("Imagens COM label VAZIO:", len(empty_lbl_val)) from pathlib import Path root = Path(r"C:\ZendionInc\agrobot_base\Python\yolov8-seg") names = {0: "erva", 1: "cana"} # bate com seu data.yaml nc = len(names) def checar_pasta(subdir: str): lbl_dir = root / "labels" / subdir txts = sorted(lbl_dir.glob("*.txt")) print(f"\n=== CHECANDO {subdir.upper()} ===") print(f"Total de arquivos de label: {len(txts)}") total_linhas = 0 total_objs_validos = 0 total_objs_invalidos = 0 for p in txts: linhas = p.read_text(encoding="utf-8").strip().splitlines() if not linhas: print(f"[VAZIO] {p.name}") continue for idx, line in enumerate(linhas): total_linhas += 1 parts = line.strip().split() erro = None # 1) min fields: class + pelo menos 3 pontos (6 coords) if len(parts) < 1 + 6: erro = "menos de 3 pontos (precisa >= 7 valores)" else: # class try: cls = int(parts[0]) except ValueError: erro = "class não é inteiro" cls = None if erro is None and not (0 <= cls < nc): erro = f"class fora do range [0,{nc-1}]" # coords coords = parts[1:] if erro is None and len(coords) % 2 != 0: erro = f"nº de coords ímpar ({len(coords)})" # checar faixa [0,1] if erro is None: try: vals = list(map(float, coords)) except ValueError: erro = "coordenadas não numéricas" vals = [] if not erro: for v in vals: if not (0.0 <= v <= 1.0): erro = f"coord fora de [0,1]: {v}" break if erro: total_objs_invalidos += 1 print(f"[ERRO] {p.name} (linha {idx+1}): {erro}") print(" ->", line[:120], "...") else: total_objs_validos += 1 print(f"\nResumo {subdir}:") print(f" Linhas totais : {total_linhas}") print(f" Objetos válidos : {total_objs_validos}") print(f" Objetos inválidos : {total_objs_invalidos}") checar_pasta("train") checar_pasta("val") from ultralytics.data.utils import visualize_image_annotations img = "images/train/20260126_121341_900.jpg" lbl = "labels/train/20260126_121341_900.txt" label_map = {0: "erva", 1: "cana"} visualize_image_annotations(img, lbl, label_map)