μΈλΆν κ°μ²΄ 격리
μΈκ·Έλ¨ΌνΈ μμ μ μνν ν μΆλ‘ κ²°κ³Όμμ κ³ λ¦½λ κ°μ²΄λ₯Ό μΆμΆνλ κ²μ΄ λ°λμ§ν λκ° μμ΅λλ€. μ΄ κ°μ΄λμμλ Ultralytics μμΈ‘λͺ¨λλ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό μννλ λ°©λ²μ λν μΌλ°μ μΈ λ°©λ²μ μ 곡ν©λλ€.
λ μνΌ μν¬μ€λ£¨
-
νμν λΌμ΄λΈλ¬λ¦¬ μ€μΉμ λν λΉ λ₯Έ μλ΄λUltralytics λΉ λ₯Έ μμ μ€μΉ μΉμ μ μ°Έμ‘°νμΈμ.
-
λͺ¨λΈμ λ‘λνκ³ μ€ν
predict()
λ©μλλ₯Ό μ¬μ©ν©λλ€.from ultralytics import YOLO # Load a model model = YOLO("yolo11n-seg.pt") # Run inference results = model.predict()
μμΈ‘ μΈμκ° μλμ?
μμ€λ₯Ό μ§μ νμ§ μμΌλ©΄ λΌμ΄λΈλ¬λ¦¬μ μλ μμ μ΄λ―Έμ§κ° μ¬μ©λ©λλ€:
μ΄λ μ μν ν μ€νΈμ μ μ©ν©λλ€.
predict()
λ©μλλ₯Ό μ¬μ©ν©λλ€.μΈλΆν λͺ¨λΈμ λν μμΈν λ΄μ©μ λ€μμ μ°Έμ‘°νμΈμ. μΈκ·Έλ¨ΌνΈ μμ νμ΄μ§λ‘ μ΄λν©λλ€. λ€μμ λν΄ μμΈν μμλ³΄λ €λ©΄
predict()
λ©μλμ λν μμΈν λ΄μ©μ μμΈ‘ λͺ¨λ μΉμ μ μ°Έμ‘°νμΈμ.
-
μ΄μ κ²°κ³Όμ μ€κ³½μ μ λ°λ³΅ν©λλ€. μ΄λ―Έμ§λ₯Ό νμΌλ‘ μ μ₯νλ €λ μν¬νλ‘μ°μ κ²½μ° μμ€ μ΄λ―Έμ§
base-name
λ° νμ§class-label
λ λμ€μ μ¬μ©ν μ μλλ‘ κ²μλ©λλ€(μ ν μ¬ν).from pathlib import Path import numpy as np # (2) Iterate detection results (helpful for multiple images) for r in res: img = np.copy(r.orig_img) img_name = Path(r.path).stem # source image base-name # Iterate each object contour (multiple detections) for ci, c in enumerate(r): # (1) Get detection class name label = c.names[c.boxes.cls.tolist().pop()]
- νμ§ κ²°κ³Ό μμ μ λν΄ μμΈν μμλ³΄λ €λ©΄ μμΈ‘ λͺ¨λμ λ°μ€ μΉμ μ μ°Έμ‘°νμΈμ.
- μμΈν μμ보기
predict()
κ²°κ³Ό μ°Έμ‘° μμΈ‘ λͺ¨λμ κ²°κ³Ό μμ
For-Loop
λ¨μΌ μ΄λ―Έμ§λ 첫 λ²μ§Έ 루νλ₯Ό ν λ²λ§ λ°λ³΅ν©λλ€. λ¨μΌ κ°μ§λ§ μλ λ¨μΌ μ΄λ―Έμ§λ κ° λ£¨νλ₯Ό ν λ²λ§ λ°λ³΅ν©λλ€.
-
λ¨Όμ μμ€ μ΄λ―Έμ§μμ μ΄μ§ λ§μ€ν¬λ₯Ό μμ±ν λ€μ λ§μ€ν¬μ μ±μμ§ μ€κ³½μ 그립λλ€. μ΄λ κ² νλ©΄ κ°μ²΄λ₯Ό μ΄λ―Έμ§μ λ€λ₯Έ λΆλΆκ³Ό λΆλ¦¬ν μ μμ΅λλ€. μμ
bus.jpg
νμ§λ κ² μ€ νλμ λν΄person
ν΄λμ€ κ°μ²΄λ₯Ό μ€λ₯Έμͺ½μ νμν©λλ€.import cv2 # Create binary mask b_mask = np.zeros(img.shape[:2], np.uint8) # (1) Extract contour result contour = c.masks.xy.pop() # (2) Changing the type contour = contour.astype(np.int32) # (3) Reshaping contour = contour.reshape(-1, 1, 2) # Draw contour onto mask _ = cv2.drawContours(b_mask, [contour], -1, (255, 255, 255), cv2.FILLED)
-
λ€μμ λν μμΈν μ 보
c.masks.xy
μ°Έμ‘° μμΈ‘ λͺ¨λμ λ§μ€ν¬ μΉμ . -
μ¬κΈ°μ κ°μ λ€μκ³Ό κ°μ΄ μΊμ€ν λ©λλ€.
np.int32
μμ νΈνμ±μ μν΄drawContours()
ν¨μμμ OpenCV. -
OpenCV
drawContours()
ν¨μλ μ€κ³½μ μ΄ λ€μκ³Ό κ°μ λͺ¨μμ κ°μ§ κ²μΌλ‘ μμν©λλ€.[N, 1, 2]
μλ μΉμ μ νμ₯νμ¬ μμΈν λ΄μ©μ νμΈνμΈμ.
νμ₯νμ¬ μ μν λ μ΄λ€ μΌμ΄ λ°μνλμ§ μ΄ν΄ν©λλ€.
contour
λ³μμ λλ€.-
c.masks.xy
:: λ§μ€ν¬ μ€κ³½μ μ μ’νλ₯Ό λ€μκ³Ό κ°μ νμμΌλ‘ μ 곡ν©λλ€.(x, y)
. μμΈν λ΄μ©μ μμΈ‘ λͺ¨λμ λ§μ€ν¬ μΉμ . -
.pop()
:: Asmasks.xy
κ° λ¨μΌ μμλ₯Ό ν¬ν¨νλ λͺ©λ‘μΈ κ²½μ°, μ΄ μμλpop()
λ©μλλ₯Ό μ¬μ©ν©λλ€. -
.astype(np.int32)
:: μ¬μ©masks.xy
μ λ°μ΄ν° μ νμ΄float32
λ₯Ό μ¬μ©ν μ μμ§λ§, μ΄λ OpenCVdrawContours()
ν¨μλ₯Ό νΈμΆνλ©΄ λ°μ΄ν° μ νμ΄ λ€μκ³Ό κ°μ΄ λ³κ²½λ©λλ€.int32
νΈνμ±μ νμΈν©λλ€. -
.reshape(-1, 1, 2)
:: λ°μ΄ν°λ₯Ό νμν λͺ¨μμΌλ‘ λ€μ ν¬λ§·ν©λλ€.[N, 1, 2]
μ΄λN
λ μ€κ³½ μ μ μμ΄λ©°, κ° μ μ λ¨μΌ νλͺ©μΌλ‘ νμλ©λλ€.1
νλͺ©μ λ€μκ³Ό κ°μ΄ ꡬμ±λ©λλ€.2
κ°μ λλ€. The-1
λ μ΄ μ°¨μμ κ° μκ° μ μ°νλ€λ κ²μ λνλ λλ€.
νμ₯νλ©΄
drawContours()
ꡬμ±.-
μΊ‘μν
contour
λ³μλ₯Ό λκ΄νΈ μμ λ£μ΅λλ€,[contour]
λ₯Ό μ¬μ©νλ©΄ ν μ€νΈ μ€μ μνλ μ€κ³½ λ§μ€ν¬λ₯Ό ν¨κ³Όμ μΌλ‘ μμ±νλ κ²μΌλ‘ λνλ¬μ΅λλ€. -
κ°
-1
μ μ§μ λdrawContours()
맀κ°λ³μλ μ΄λ―Έμ§μ μ‘΄μ¬νλ λͺ¨λ μ€κ³½μ μ 그리λλ‘ ν¨μμ μ§μν©λλ€. -
그리κ³
tuple
(255, 255, 255)
λ μ΄ μ΄μ§ λ§μ€ν¬μμ μ€κ³½μ μ 그릴 λ μνλ μμμΈ ν°μμ λνλ λλ€. -
μΆκ°
cv2.FILLED
λ μ€κ³½ κ²½κ³λ‘ λλ¬μΈμΈ λͺ¨λ ν½μ μ μμ λμΌνκ² μ§μ νλ©°, μ΄ κ²½μ° λλ¬μΈμΈ λͺ¨λ ν½μ μ ν°μμ΄ λ©λλ€. -
μ°Έμ‘° OpenCV λ¬Έμ
drawContours()
μμ μμΈν λ΄μ©μ νμΈνμΈμ.
-
-
λ€μμΌλ‘ μ΄ μμ μμ μ΄λ―Έμ§λ₯Ό μ§ννλ λ°©λ²μ λν λ κ°μ§ μ΅μ κ³Ό κ° μ΅μ μ λν νμ μ΅μ μ΄ μμ΅λλ€.
κ°μ²΄ 격리 μ΅μ
μ
# Create 3-channel mask mask3ch = cv2.cvtColor(b_mask, cv2.COLOR_GRAY2BGR) # Isolate object with binary mask isolated = cv2.bitwise_and(mask3ch, img)
μ΄λ»κ² μλνλμ?
-
λ¨Όμ λ°μ΄λ리 λ§μ€ν¬κ° λ¨Όμ λ¨μΌ μ±λ μ΄λ―Έμ§μμ 3μ±λ μ΄λ―Έμ§λ‘ λ³νλ©λλ€. μ΄ λ³νμ λ§μ€ν¬μ μλ³Έ μ΄λ―Έμ§κ° κ²°ν©λλ νμ λ¨κ³μ νμν©λλ€. λΈλ λ© μμ κ³Ό νΈνλλ €λ©΄ λ μ΄λ―Έμ§μ μ±λ μκ° κ°μμΌ ν©λλ€.
-
μλ³Έ μ΄λ―Έμ§μ 3μ±λ λ°μ΄λ리 λ§μ€ν¬λ OpenCV ν¨μλ₯Ό μ¬μ©νμ¬ λ³ν©λ©λλ€.
bitwise_and()
. μ΄ μμ μ λ€μμ μ μ§ν©λλ€. λ§ 0λ³΄λ€ ν° ν½μ κ°(> 0)
λ₯Ό μ κ±°ν©λλ€. λ§μ€ν¬ ν½μ μ΄ 0λ³΄λ€ ν¬λ―λ‘(> 0)
λ§ μ€κ³½μ μμ λ΄μμ μλ³Έ μ΄λ―Έμ§μμ λ¨μ ν½μ μ μ€κ³½μ κ³Ό κ²ΉμΉλ ν½μ μ λλ€.
κ²μμ ν½μ λ‘ κ²©λ¦¬: νμ μ΅μ
μ 체 ν¬κΈ° μ΄λ―Έμ§
μ 체 ν¬κΈ° μ΄λ―Έμ§λ₯Ό μ μ§νλ κ²½μ° μΆκ° λ¨κ³κ° νμνμ§ μμ΅λλ€.
μλ¦° κ°μ²΄ μ΄λ―Έμ§
κ°μ²΄ μμλ§ ν¬ν¨νλλ‘ μ΄λ―Έμ§λ₯Ό μλ₯΄λ €λ©΄ μΆκ° λ¨κ³κ° νμν©λλ€.
# (1) Bounding box coordinates x1, y1, x2, y2 = c.boxes.xyxy.cpu().numpy().squeeze().astype(np.int32) # Crop image to object region iso_crop = isolated[y1:y2, x1:x2]
- λ°μ΄λ© λ°μ€ κ²°κ³Όμ λν μμΈν λ΄μ©μ μμΈ‘ λͺ¨λμ λ°μ€ μΉμ μ μ°Έμ‘°νμμμ€.
μ΄ μ½λλ μ΄λ€ κΈ°λ₯μ νλμ?
-
그리κ³
c.boxes.xyxy.cpu().numpy()
νΈμΆμ λ°μ΄λ© λ°μ€λ₯Ό NumPy λ°°μ΄λ‘ κ²μν©λλ€.xyxy
νμμΌλ‘, μ¬κΈ°μxmin
,ymin
,xmax
λ°ymax
λ λ°μ΄λ© λ°μ€ μ§μ¬κ°νμ μ’νλ₯Ό λνλ λλ€. μ°Έμ‘° μμΈ‘ λͺ¨λμ λ°μ€ μΉμ μμ μμΈν λ΄μ©μ νμΈνμΈμ. -
그리κ³
squeeze()
μ°μ°μ NumPy λ°°μ΄μμ λΆνμν μΉμλ₯Ό μ κ±°νμ¬ μμλλ λͺ¨μμ κ°λλ‘ ν©λλ€. -
λ€μμ μ¬μ©νμ¬ μ’ν κ° λ³ννκΈ°
.astype(np.int32)
μμ μμ μ’ν λ°μ΄ν° μ νμ λ³κ²½ν©λλ€.float32
μint32
λ₯Ό μ¬μ©νμ¬ μΈλ±μ€ μ¬λΌμ΄μ€λ₯Ό μ¬μ©ν μ΄λ―Έμ§ μλ₯΄κΈ°μ νΈνλ©λλ€. -
λ§μ§λ§μΌλ‘ μΈλ±μ€ μ¬λΌμ΄μ±μ μ¬μ©νμ¬ μ΄λ―Έμ§μμ λ°μ΄λ© λ°μ€ μμμ μλΌλ λλ€. κ²½κ³λ
[ymin:ymax, xmin:xmax]
κ°μ§ κ²½κ³ μμμ μ’νμ λλ€.
# Isolate object with transparent background (when saved as PNG) isolated = np.dstack([img, b_mask])
μ΄λ»κ² μλνλμ?
- NumPy μ¬μ©
dstack()
ν¨μ(κΉμ΄ μΆμ λ°λΌ λ°°μ΄ μ€ννΉ)λ₯Ό μμ±λ μ΄μ§ λ§μ€ν¬μ ν¨κ» μ¬μ©νλ©΄ 4κ°μ μ±λμ΄ μλ μ΄λ―Έμ§κ° μμ±λ©λλ€. μ΄λ κ² νλ©΄ μ€λΈμ νΈ μ€κ³½μ μΈλΆμ λͺ¨λ ν½μ μ ν¬λͺ νκ² λ§λ€ μ μμ΅λλ€.PNG
νμΌμ λ§λλλ€.
ν¬λͺ ν½μ λ‘ κ²©λ¦¬: νμ μ΅μ
μ 체 ν¬κΈ° μ΄λ―Έμ§
μ 체 ν¬κΈ° μ΄λ―Έμ§λ₯Ό μ μ§νλ κ²½μ° μΆκ° λ¨κ³κ° νμνμ§ μμ΅λλ€.
μλ¦° κ°μ²΄ μ΄λ―Έμ§
κ°μ²΄ μμλ§ ν¬ν¨νλλ‘ μ΄λ―Έμ§λ₯Ό μλ₯΄λ €λ©΄ μΆκ° λ¨κ³κ° νμν©λλ€.
# (1) Bounding box coordinates x1, y1, x2, y2 = c.boxes.xyxy.cpu().numpy().squeeze().astype(np.int32) # Crop image to object region iso_crop = isolated[y1:y2, x1:x2]
- λ°μ΄λ© λ°μ€ κ²°κ³Όμ λν μμΈν λ΄μ©μ μμΈ‘ λͺ¨λμ λ°μ€ μΉμ μ μ°Έμ‘°νμμμ€.
μ΄ μ½λλ μ΄λ€ κΈ°λ₯μ νλμ?
-
μ¬μ© μ
c.boxes.xyxy.cpu().numpy()
λ₯Ό μ¬μ©νμ¬ κ²½κ³ μμλ₯Ό NumPy λ°°μ΄λ‘ λ°νν©λλ€.xyxy
μμ μ’ν νμμΌλ‘, ν¬μΈνΈμ ν΄λΉνλxmin, ymin, xmax, ymax
λ°μ΄λ© λ°μ€(μ§μ¬κ°ν)μ κ²½μ°, λ€μμ μ°Έμ‘°νμμμ€. μμΈ‘ λͺ¨λμ λ°μ€ μΉμ μμ μμΈν λ΄μ©μ νμΈνμΈμ. -
μΆκ°
squeeze()
λ λΆνμν μ°¨μμ΄ NumPy λ°°μ΄μμ μ κ±°λλλ‘ ν©λλ€. -
λ€μμ μ¬μ©νμ¬ μ’ν κ° λ³ννκΈ°
.astype(np.int32)
μμ μμ μ’ν λ°μ΄ν° μ νμ λ³κ²½ν©λλ€.float32
μint32
μΈλ±μ€ μ¬λΌμ΄μ€λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μλ₯Ό λ νΈνλ©λλ€. -
λ§μ§λ§μΌλ‘ μΈλ±μ€ μ¬λΌμ΄μ±μ μ¬μ©νμ¬ κ²½κ³ μμμ λν μ΄λ―Έμ§ μμμ μλ₯΄κ³ , μ¬κΈ°μ κ²½κ³λ
[ymin:ymax, xmin:xmax]
κ°μ§ κ²½κ³ μμμ μ’νμ λλ€.
λ°°κ²½μ ν¬ν¨νμ¬ μλ¦° κ°μ²΄λ₯Ό μνλ©΄ μ΄λ»κ² νλμ?
μ΄ κΈ°λ₯μ Ultralytics λΌμ΄λΈλ¬λ¦¬μ λ΄μ₯λ κΈ°λ₯μ λλ€. λΌμ΄λΈλ¬λ¦¬μμ
save_crop
μ λν μΈμ μμΈ‘ λͺ¨λ μΆλ‘ μΈμ λ₯Ό μ°Έμ‘°νμΈμ.
-
-
λ€μμ μνν μμ μ μ μ μΌλ‘ κ°λ°μμκ² λ¬λ € μμ΅λλ€. κ°λ₯ν λ€μ λ¨κ³(λμ€μ μ¬μ©ν μ μλλ‘ μ΄λ―Έμ§λ₯Ό νμΌμ μ μ₯)μ κΈ°λ³Έ μκ° λμ μμ΅λλ€.
- μ°Έκ³ : μ΄ λ¨κ³λ μ ν μ¬νμ΄λ©° νΉμ μ¬μ© μ¬λ‘μ νμνμ§ μμ κ²½μ° κ±΄λλΈ μ μμ΅λλ€.
μ΅μ’ λ¨κ³ μμ
- μ΄ μμ μμλ
img_name
μ μμ€ μ΄λ―Έμ§ νμΌμ κΈ°λ³Έ μ΄λ¦μ λλ€,label
μ κ°μ§λ ν΄λμ€ μ΄λ¦μ΄κ³ci
λ 물체 κ°μ§ (λμΌν ν΄λμ€ μ΄λ¦μ κ°μ§ μΈμ€ν΄μ€κ° μ¬λ¬ κ° μλ κ²½μ°).
μ 체 μμ μ½λ
μ¬κΈ°μμλ μ΄μ μΉμ
μ λͺ¨λ λ¨κ³λ₯Ό νλμ μ½λ λΈλ‘μΌλ‘ κ²°ν©ν©λλ€. λ°λ³΅μ μΌλ‘ μ¬μ©νλ €λ©΄ μΌλΆ λλ λͺ¨λ λͺ
λ Ήμ μννλ ν¨μλ₯Ό μ μνλ κ²μ΄ κ°μ₯ μ’μ΅λλ€. for
-루νλ₯Ό μ¬μ©ν μλ μμ§λ§, μ΄λ λ
μμ νλ¨μ λ§‘κΈ°κ² μ΅λλ€.
from pathlib import Path
import cv2
import numpy as np
from ultralytics import YOLO
m = YOLO("yolo11n-seg.pt") # (4)!
res = m.predict() # (3)!
# Iterate detection results (5)
for r in res:
img = np.copy(r.orig_img)
img_name = Path(r.path).stem
# Iterate each object contour (6)
for ci, c in enumerate(r):
label = c.names[c.boxes.cls.tolist().pop()]
b_mask = np.zeros(img.shape[:2], np.uint8)
# Create contour mask (1)
contour = c.masks.xy.pop().astype(np.int32).reshape(-1, 1, 2)
_ = cv2.drawContours(b_mask, [contour], -1, (255, 255, 255), cv2.FILLED)
# Choose one:
# OPTION-1: Isolate object with black background
mask3ch = cv2.cvtColor(b_mask, cv2.COLOR_GRAY2BGR)
isolated = cv2.bitwise_and(mask3ch, img)
# OPTION-2: Isolate object with transparent background (when saved as PNG)
isolated = np.dstack([img, b_mask])
# OPTIONAL: detection crop (from either OPT1 or OPT2)
x1, y1, x2, y2 = c.boxes.xyxy.cpu().numpy().squeeze().astype(np.int32)
iso_crop = isolated[y1:y2, x1:x2]
# TODO your actions go here (2)
- μ€ μ±μ°κΈ°
contour
λ μμμ μ¬λ¬ μ€λ‘ λλμ΄ μλ κ²μ μ¬κΈ°μλ ν μ€λ‘ ν©μ³€μ΅λλ€. - μ¬κΈ°μ 무μμ λ£μμ§λ μ¬λ¬λΆμκ² λ¬λ € μμ΅λλ€!
- μμΈν λ΄μ©μ μμΈ‘ λͺ¨λλ₯Ό μ°Έμ‘°νμΈμ.
- μμΈν λ΄μ©μ μΈκ·Έλ¨ΌνΈ μμ μ μ°Έμ‘°νμΈμ.
- κ²°κ³Ό μμ μ λν΄ μμΈν μμ보기
- μΈλΆν λ§μ€ν¬ κ²°κ³Όμ λν΄ μμΈν μμ보기
μμ£Ό 묻λ μ§λ¬Έ
μΈλΆν μμ μ Ultralytics YOLO11 μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό 격리νλ €λ©΄ μ΄λ»κ² νλμ?
Ultralytics YOLO11 μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό 격리νλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μΈμ:
-
λͺ¨λΈμ λ‘λνκ³ μΆλ‘ μ μ€νν©λλ€:
-
λ°μ΄λ리 λ§μ€ν¬λ₯Ό μμ±νκ³ μ€κ³½μ μ 그립λλ€:
-
λ°μ΄λ리 λ§μ€ν¬λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό λΆλ¦¬ν©λλ€:
μμΈν λ΄μ©μ μμΈ‘ λͺ¨λ λ° μΈκ·Έλ¨ΌνΈ μμ μ λν κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
μΈλΆν ν λΆλ¦¬λ κ°μ²΄λ₯Ό μ μ₯νλ λ° μ¬μ©ν μ μλ μ΅μ μλ μ΄λ€ κ²μ΄ μλμ?
Ultralytics YOLO11 λ 격리λ κ°μ²΄λ₯Ό μ μ₯νλ λ κ°μ§ μ£Όμ μ΅μ μ μ 곡ν©λλ€:
-
κ²μμ λ°°κ²½:
-
ν¬λͺ ν λ°°κ²½μ μ¬μ©ν©λλ€:
μμΈν λ΄μ©μ μμΈ‘ λͺ¨λ μΉμ μ μ°Έμ‘°νμΈμ.
Ultralytics YOLO11 μ μ¬μ©νμ¬ κ³ λ¦½λ κ°μ²΄λ₯Ό κ²½κ³ μμλ‘ μλ₯΄λ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
κ³ λ¦½λ κ°μ²΄λ₯Ό κ²½κ³ μμλ‘ μλ¦ λλ€:
-
λ°μ΄λ© λ°μ€ μ’νλ₯Ό κ²μν©λλ€:
-
λΆλ¦¬λ μ΄λ―Έμ§λ₯Ό μλ¦ λλ€:
λ°μ΄λ© λ°μ€ κ²°κ³Όμ λν μμΈν λ΄μ©μ μμΈ‘ λͺ¨λ λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.
μΈλΆν μμ μμ κ°μ²΄ 격리λ₯Ό μν΄ Ultralytics YOLO11 μ μ¬μ©ν΄μΌ νλ μ΄μ λ 무μμΈκ°μ?
Ultralytics YOLO11 λ₯Ό μ 곡ν©λλ€:
- κ³ μ μ€μκ° κ°μ²΄ κ°μ§ λ° μΈλΆν.
- μ νν λ°μ΄λ© λ°μ€ λ° λ§μ€ν¬ μμ±μΌλ‘ μ νν μ€λΈμ νΈ κ²©λ¦¬κ° κ°λ₯ν©λλ€.
- ν¨μ¨μ μΈ κ°λ°μ μν ν¬κ΄μ μΈ λ¬Έμμ μ¬μ©νκΈ° μ¬μ΄ APIλ₯Ό μ 곡ν©λλ€.
μΈκ·Έλ¨ΌνΈ μμ λ¬Έμμμ YOLO μ¬μ©μ μ΄μ μ μ΄ν΄λ³΄μΈμ.
Ultralytics YOLO11 μ μ¬μ©νμ¬ λ°°κ²½μ ν¬ν¨νμ¬ κ³ λ¦½λ κ°μ²΄λ₯Ό μ μ₯ν μ μλμ?
μ, μ΄κ²μ Ultralytics YOLO11 μ λ΄μ₯λ κΈ°λ₯μ
λλ€. μ΄ κΈ°λ₯μ μ¬μ©νλ €λ©΄ save_crop
μΈμμ predict()
λ©μλλ₯Ό μ¬μ©ν©λλ€. μλ₯Ό λ€μ΄
μμΈν μμ보기 save_crop
μΈμμ μμΈ‘ λͺ¨λ μΆλ‘ μΈμ μΉμ
μΌλ‘ μ΄λν©λλ€.