170 lines
5.1 KiB
Python
170 lines
5.1 KiB
Python
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) |