File size: 3,084 Bytes
017c046
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""
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()

    # ๋ชจ๋ธ ๋กœ๋“œ (COCO ์‚ฌ์ „ํ•™์Šต, ์ฒซ ์‹คํ–‰ ์‹œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ)
    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()