agrobot_base/Python/yolov8-seg/test.py

170 lines
5.1 KiB
Python
Raw Permalink Normal View History

2026-02-24 13:38:14 +00:00
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)