| """ |
| YOLOv8 ์ถ๋ก ์คํฌ๋ฆฝํธ (Ultralytics) |
| ===================================== |
| COCO ์ฌ์ ํ์ต YOLOv8๋ก ์ด๋ฏธ์ง์์ ๊ฐ์ฒด๋ฅผ ํ์งํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค. |
| ์์ ๋ง๋ ๋ฐ๋ฐ๋ฅ Faster R-CNN(infer.py)๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ก ๋น๊ตํด๋ณด๊ธฐ ์ข๋ค. |
| |
| ์ค์น: |
| pip install ultralytics |
| |
| ์คํ ์: |
| # ์ด๋ฏธ์ง ํ ์ฅ |
| python yolo_infer.py --image test.jpg |
| |
| # ํด๋ ์ ์ฒด |
| python yolo_infer.py --image_dir ./samples --out_dir ./yolo_results |
| |
| # ๋ชจ๋ธ ํฌ๊ธฐ ๋ณ๊ฒฝ (n < s < m < l < x, ๋ค๋ก ๊ฐ์๋ก ์ ํยท๋ฌด๊ฑฐ์) |
| python yolo_infer.py --image test.jpg --model yolov8s.pt |
| |
| # ์ ์ ์๊ณ๊ฐ ์กฐ์ (๊ธฐ๋ณธ 0.25) |
| python yolo_infer.py --image test.jpg --conf 0.4 |
| |
| ๋ฉ๋ชจ: |
| - ์ฒ์ ์คํ ์ ๋ชจ๋ธ ๊ฐ์ค์น(yolov8n.pt ๋ฑ)๊ฐ ์๋ ๋ค์ด๋ก๋๋๋ค. |
| - Faster R-CNN(20 VOC ํด๋์ค)๊ณผ ๋ฌ๋ฆฌ YOLOv8์ COCO 80 ํด๋์ค๋ฅผ ํ์งํ๋ค. |
| - ๋ผ์ด์ ์ค: Ultralytics YOLO๋ AGPL-3.0. ์์
์ ํ์์์ค ์ฌ์ฉ ์ ์์ฉ ๋ผ์ด์ ์ค ํ์. |
| """ |
|
|
| import os |
| import argparse |
| from ultralytics import YOLO |
|
|
|
|
| def main(): |
| ap = argparse.ArgumentParser() |
| ap.add_argument("--model", default="yolov8n.pt", |
| help="yolov8n/s/m/l/x.pt (์์ผ๋ฉด ์๋ ๋ค์ด๋ก๋)") |
| ap.add_argument("--image", help="๋จ์ผ ์ด๋ฏธ์ง ๊ฒฝ๋ก") |
| ap.add_argument("--image_dir", help="์ด๋ฏธ์ง ํด๋ ๊ฒฝ๋ก") |
| ap.add_argument("--out_dir", default="./yolo_results", help="๊ฒฐ๊ณผ ์ ์ฅ ํด๋") |
| ap.add_argument("--conf", type=float, default=0.25, |
| help="์ด ์ ๋ขฐ๋ ์ด์๋ง ํ์ (๊ธฐ๋ณธ 0.25)") |
| args = ap.parse_args() |
|
|
| |
| print(f"๋ชจ๋ธ ๋ก๋: {args.model}") |
| model = YOLO(args.model) |
|
|
| |
| targets = [] |
| if args.image: |
| targets.append(args.image) |
| if args.image_dir: |
| for fn in os.listdir(args.image_dir): |
| if fn.lower().endswith((".jpg", ".jpeg", ".png", ".bmp")): |
| targets.append(os.path.join(args.image_dir, fn)) |
|
|
| if not targets: |
| print("์ด๋ฏธ์ง๋ฅผ ์ง์ ํ์ธ์: --image ๋๋ --image_dir") |
| return |
|
|
| os.makedirs(args.out_dir, exist_ok=True) |
|
|
| for path in targets: |
| |
| results = model(path, conf=args.conf, verbose=False) |
| r = results[0] |
|
|
| |
| n = len(r.boxes) |
| names = r.names |
| detected = {} |
| for cls_id in r.boxes.cls.tolist(): |
| name = names[int(cls_id)] |
| detected[name] = detected.get(name, 0) + 1 |
|
|
| |
| out_path = os.path.join(args.out_dir, "yolo_" + os.path.basename(path)) |
| r.save(filename=out_path) |
|
|
| summary = ", ".join(f"{k}ร{v}" for k, v in detected.items()) or "์์" |
| print(f" {os.path.basename(path)}: {n}๊ฐ ํ์ง ({summary}) โ {out_path}") |
|
|
| print(f"์๋ฃ. ๊ฒฐ๊ณผ๋ {args.out_dir} ํด๋์ ์ ์ฅ๋จ.") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|