π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[v0.34]μμμ²λ¦¬_κ°μ²΄ μΆμ μ μν Tracking API λ³Έλ¬Έ
[v0.34]μμμ²λ¦¬_κ°μ²΄ μΆμ μ μν Tracking API
μ§μ§μνμΉ΄ 2022. 1. 18. 01:07220118 μμ±
<λ³Έ λΈλ‘κ·Έλ κ·νμ΄ μμ¬λμ λΈλ‘κ·Έλ₯Ό μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€>
OpenCV - 32. κ°μ²΄ μΆμ μ μν Tracking API
μ΄λ² ν¬μ€ν μμλ κ°μ²΄ μΆμ μ μν Tracking APIμ λν΄ λ°°μλ³΄κ² μ΅λλ€. μ΄λ² ν¬μ€ν μμ 'νμ΄μ¬μΌλ‘ λ§λλ OpenCV νλ‘μ νΈ(μ΄μΈμ° μ )'λ₯Ό μ 리ν κ²μμ λ°νλλ€. μ½λ: github.com/BaekKyunShin/Open
bkshin.tistory.com
1. Tracking API
: Tracking APIλ₯Ό μ΄μ©νλ©΄ μ½κ² κ°μ²΄ μΆμ
: μΆμ νκ³ μ νλ κ°μ²΄λ§ μ§μ ν΄μ£Όλ©΄ APIκ° μμμ κ°μ²΄λ₯Ό μΆμ
: OpenCVμμ μ 곡νλ Tracking APIμμ±μ (μλ)
- tracker = cv2.TrackerBoosting_create() : AdaBoost μκ³ λ¦¬μ¦ κΈ°λ°
- tracker = cv2.TrackerMIL_create() : MIL(Multiple Instance Learning) μκ³ λ¦¬μ¦ κΈ°λ°
- tracker = cv2.TrackerKCF_create() : KCF(Kernelized Correlation Filters) μκ³ λ¦¬μ¦ κΈ°λ°
- tracker = cv2.TrackerTLD_create() : TLD(Tracking, Learning and Detection) μκ³ λ¦¬μ¦ κΈ°λ°
- tracker = cv2.TrackerMedianFlow_create() : κ°μ²΄μ μ λ°©ν₯/μλ°©ν₯μ μΆμ ν΄μ λΆμΌμΉμ±μ μΈ‘μ
- tracker = cv2.TrackerGOTURN_cretae() : CNN(Convolutional Neural Networks) κΈ°λ° (OpenCV 3.4 λ²κ·Έλ‘ λμX)
- tracker = cv2.TrackerCSRT_create() : CSRT(Channel and Spatial Reliability)
- tracker = cv2.TrackerMOSSE_create() : λ΄λΆμ μΌλ‘ κ·Έλ μ΄ μ€μΌμΌ μ¬μ©
: μμ±ν Trackerλ init() ν¨μλ‘ μ΄κΈ°ν
: init() ν¨μμ νλΌλ―Έν°λ‘ λ κ°μ§ (μ λ ₯ μμκ³Ό μΆμ λμ κ°μ²΄κ° μλ μ’ν) μ λ¬
retval = cv2.Tracker.init(img, boundingBox)
: Tracker μ΄κΈ°ν
: μ΄κΈ°ν ν μλ‘μ΄ μμ νλ μμμ μΆμ λμ κ°μ²΄μ μμΉλ₯Ό μ°ΎκΈ° μν΄ update() ν¨μλ₯Ό νΈμΆ
- img: μ
λ ₯ μμ
- boundingBox : μΆμ λμ κ°μ²΄κ° μλ μ’ν (x, y)
retval, boundingBox = cv2.Tracker.update(img)
: μλ‘μ΄ νλ μμμ μΆμ λμ κ°μ²΄ μμΉ μ°ΎκΈ°
- img: μλ‘μ΄ νλ μ μμ
- retval : μΆμ μ±κ³΅ μ¬λΆ
- boundingBox : μλ‘μ΄ νλ μμμμ μΆμ λμ κ°μ²΄μ μλ‘μ΄ μμΉ (x, y, w, h)
import cv2
import sys
# cv2 λ²μ νμΈ
(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
if __name__ == '__main__' :
tracker_types = ['BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE']
tracker_type = tracker_types[2]
if int(minor_ver) < 3:
tracker = cv2.Tracker_create(tracker_type)
else:
if tracker_type == 'BOOSTING':
tracker = cv2.TrackerBoosting_create()
if tracker_type == 'MIL':
tracker = cv2.TrackerMIL_create()
if tracker_type == 'KCF':
tracker = cv2.TrackerKCF_create()
if tracker_type == 'TLD':
tracker = cv2.TrackerTLD_create()
if tracker_type == 'MEDIANFLOW':
tracker = cv2.TrackerMedianFlow_create()
if tracker_type == 'GOTURN':
tracker = cv2.TrackerGOTURN_create()
if tracker_type == 'MOSSE':
tracker = cv2.TrackerMOSSE_create()
# Read video
video = cv2.VideoCapture("img/highway.mp4")
# Exit if video not opened.
if not video.isOpened():
print ("Could not open video")
sys.exit()
# Read first frame.
ok, frame = video.read()
if not ok:
print ('Cannot read video file')
sys.exit()
# Define an initial bounding box
# bbox = (x,y,x+w,y+h)
# Uncomment the line below to select a different bounding box
bbox = cv2.selectROI(frame, False)
# Initialize tracker with first frame and bounding box
ok = tracker.init(frame, bbox)
while True:
# Read a new frame
ok, frame = video.read()
if not ok:
break
# Start timer
timer = cv2.getTickCount()
# Update tracker
ok, bbox = tracker.update(frame)
# Calculate Frames per second (FPS)
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
# Draw bounding box
if ok:
# Tracking success
p1 = (int(bbox[0]), int(bbox[1]))
p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1)
else :
# Tracking failure
cv2.putText(frame, "Tracking failure detected", (100,80), cv2.FONT_HERSHEY_SIMPLEX, 0.75,(0,0,255),2)
# Display tracker type on frame
cv2.putText(frame, tracker_type + " Tracker", (100,20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50),2);
# Display FPS on frame
cv2.putText(frame, "FPS : " + str(int(fps)), (100,50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50), 2);
# Display result
cv2.imshow("Tracking", frame)
# Exit if ESC pressed
k = cv2.waitKey(1) & 0xff
if k == 27 : break
- μ½λλ₯Ό μ²μ μ€ννλ©΄ νλ©΄μ΄ λ©μΆ°μμ
- μΆμ μ μνλ κ°μ²΄λ₯Ό λλκ·Έ + λ€μμΌλ‘ μ€νμ΄μ€(space) ν€λ₯Ό λλ₯΄κΈ°
- μλμΌλ‘ μ¬μλκ³ , κ°μ²΄ μΆμ μ μμ
- ν€λ³΄λ 0~7 μ«μ ν€λ₯Ό λλ¬ νΈλ컀 μκ³ λ¦¬μ¦μ μ ν κ°λ₯
- λ€λ§ 5λ₯Ό λλ₯΄λ©΄ μ€λ₯κ° λ¨λ©΄μ μ’ λ£ (λ²κ·Έλμ)
- νλ©΄ μλ¨μ 0 : TrackerBoosting, 1 : TrackerMIL λ±μ΄ λ¬λ€
- νμ¬ μ΄λ€ νΈλμ»€λ‘ κ°μ²΄ μΆμ μ νκ³ μλμ§λ₯Ό λνλ΄λ νμ
μ€ν μ΄λ°κ±Έλ‘ μμ¨μ£Όν νλκ³€κ°
'π©βπ» IoT (Embedded) > Image Processing' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
1. λ² μ΄μ¦ νλ₯ λ‘ μμΉ μμΈ‘νκΈ° βμ€μ’ λ λνμ μ μμ μ°ΎμλΌβ (0) | 2022.10.17 |
---|---|
[v0.35]μμμ²λ¦¬_νΉμ§ 맀μΉ(Feature Matching) (0) | 2022.01.18 |
[v0.33]μμμ²λ¦¬_κ΄ν νλ¦(Optical Flow) (0) | 2022.01.18 |
[v0.32]μμμ²λ¦¬_λ°°κ²½ μ κ±° (0) | 2022.01.18 |
[v0.31]μμμ²λ¦¬_μ¬λ°λ₯Έ 맀μΉμ μ°ΎκΈ° (0) | 2022.01.17 |