graph_detection_model / run_detect_testing.py
net-specter
Initial commit
ac4f80f
import argparse
import subprocess
import sys
from pathlib import Path
def find_latest_best_weight(root: Path) -> Path:
train_dir = root
candidates = sorted(
train_dir.glob("run/train/weights/best.pt"),
key=lambda p: p.stat().st_mtime,
reverse=True,
)
if not candidates:
raise FileNotFoundError("No best.pt found under run/train/weights/")
return candidates[0]
def main() -> int:
parser = argparse.ArgumentParser(
description="Detect graph bounding boxes in testing folder using trained YOLOv7 model."
)
parser.add_argument(
"--weights",
type=str,
default="",
help="Optional path to model weights. If empty, latest run/train/exp5_full_finetune3/weights/best.pt is used.",
)
parser.add_argument(
"--source",
type=str,
default="testing",
help="Input image folder or file path.",
)
parser.add_argument("--img-size", type=int, default=640, help="Inference image size")
parser.add_argument("--conf-thres", type=float, default=0.45, help="Confidence threshold")
parser.add_argument("--iou-thres", type=float, default=0.45, help="NMS IoU threshold")
parser.add_argument("--device", type=str, default="0", help="Device, e.g. 0 or cpu")
parser.add_argument("--name", type=str, default="testing_graph_bbox", help="Output run name")
parser.add_argument("--view-img", action="store_true", help="Show images while running")
parser.add_argument("--no-save-txt", action="store_true", help="Do not save YOLO txt labels")
args = parser.parse_args()
root = Path(__file__).resolve().parent
source = Path(args.source)
if not source.is_absolute():
source = (root / source).resolve()
if args.weights:
weights = Path(args.weights)
if not weights.is_absolute():
weights = (root / weights).resolve()
else:
weights = find_latest_best_weight(root)
if not weights.exists():
print(f"[ERROR] Weights not found: {weights}")
return 1
if not source.exists():
print(f"[ERROR] Source not found: {source}")
return 1
cmd = [
sys.executable,
str(root / "detect.py"),
"--weights",
str(weights),
"--source",
str(source),
"--img-size",
str(args.img_size),
"--conf-thres",
str(args.conf_thres),
"--iou-thres",
str(args.iou_thres),
"--device",
args.device,
"--classes",
"0",
"--project",
"run/detect",
"--name",
args.name,
"--exist-ok",
]
if not args.no_save_txt:
cmd.extend(["--save-txt", "--save-conf"])
if args.view_img:
cmd.append("--view-img")
print("Using weights:", weights)
print("Source:", source)
print("Running command:")
print(" ".join(cmd))
return subprocess.call(cmd, cwd=str(root))
if __name__ == "__main__":
raise SystemExit(main())