সুচিপত্র:

Opencv অবজেক্ট ট্র্যাকিং: 3 টি ধাপ
Opencv অবজেক্ট ট্র্যাকিং: 3 টি ধাপ

ভিডিও: Opencv অবজেক্ট ট্র্যাকিং: 3 টি ধাপ

ভিডিও: Opencv অবজেক্ট ট্র্যাকিং: 3 টি ধাপ
ভিডিও: A40T AI-Tracking 40X Object Identification and Tracking Camera with 3-axis Gimbal 2024, নভেম্বর
Anonim
ওপেনসিভি অবজেক্ট ট্র্যাকিং
ওপেনসিভি অবজেক্ট ট্র্যাকিং

মুভিং অবজেক্ট ডিটেকশন হল কম্পিউটার ভিশন এবং ইমেজ প্রসেসিংয়ে ব্যবহৃত একটি কৌশল। একটি চলমান বস্তু সনাক্ত করা হয়েছে কিনা তা নির্ধারণ করার জন্য একটি ভিডিও থেকে একাধিক পরপর ফ্রেম বিভিন্ন পদ্ধতি দ্বারা তুলনা করা হয়।

মুভিং অবজেক্টস ডিটেকশন বিস্তৃত অ্যাপ্লিকেশনের জন্য ব্যবহার করা হয়েছে যেমন ভিডিও নজরদারি, কার্যকলাপ স্বীকৃতি, রাস্তার অবস্থা পর্যবেক্ষণ, বিমানবন্দর নিরাপত্তা, সামুদ্রিক সীমান্তে সুরক্ষা পর্যবেক্ষণ ইত্যাদি।

মুভিং অবজেক্ট ডিটেকশন হল একটি নির্দিষ্ট স্থানে বা অঞ্চলে কোনো বস্তুর শারীরিক গতিবিধি চিনে নেওয়া। [2] চলমান বস্তু এবং স্থির অঞ্চল বা অঞ্চলের মধ্যে বিভাজন কাজ করে, চলমান বস্তুর গতি ট্র্যাক করা যায় এবং এইভাবে পরে বিশ্লেষণ করা যায়। এটি অর্জনের জন্য, বিবেচনা করুন একটি ভিডিও একটি কাঠামো যা একক ফ্রেমের উপর নির্মিত, মুভিং অবজেক্ট ডিটেকশন হল ফোরগ্রাউন্ড মুভিং টার্গেট (গুলি) খুঁজে বের করা, প্রতিটি ভিডিও ফ্রেমে অথবা শুধুমাত্র যখন মুভিং টার্গেট ভিডিওতে প্রথম চেহারা দেখায়।

আমি রঙের উপর ভিত্তি করে বস্তু সনাক্ত এবং ট্র্যাক করতে Opnecv এবং Python সমন্বয় ব্যবহার করতে যাচ্ছি

ধাপ 1: স্বীকৃত বস্তুর উপর একটি আয়তক্ষেত্র আঁকা

যদি আপনার পিসিতে পাইথন বা ওপেনসিভি না থাকে তবে অনুগ্রহ করে নীচের ইন্সট্রাকটেবলগুলি অনুসরণ করুন

এখানে পাইথন কোড:

np হিসাবে cv2import numpy আমদানি করুন

ক্যাপ = সিভি ২. ভিডিওক্যাপচার (0)

যখন সত্য:

_, ফ্রেম = cap.read () hsv = cv2.cvtColor (ফ্রেম, cv2. COLOR_BGR2HSV)

নিম্ন_ হলুদ = np.array ([20, 110, 110])

উপরের_ হলুদ = np.array ([40, 255, 255])

হলুদ_মাস্ক = cv2.in রেঞ্জ (hsv, নিম্ন_ হলুদ, উপরের_ হলুদ)

(_, কনট্যুরস, _) = cv2.findContours (হলুদ_মাস্ক, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

কনট্যুরে কনট্যুরের জন্য:

এলাকা = cv2.contourArea (কনট্যুর)

যদি (এলাকা> 800):

x, y, w, h = cv2.boundingRect (contour) frame = cv2.rectangle (frame, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow ("ট্র্যাকিং", ফ্রেম)

k = cv2.waitKey (5) & 0XFF

যদি k == 27: বিরতি

cv2.destroyAllWindows ()

cap.release ()

ধাপ 2: বস্তুটি সরানো হয়েছে এমন পথ খুঁজে বের করুন

পথ ট্রেস করতে:

i এর জন্য পরিসরে (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) যদি math.sqrt (((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ফ্রেম, কেন্দ্র_পয়েন্ট [i - 1], কেন্দ্র_পয়েন্ট , (b, g, r), 4)

ধাপ 3: উভয় কোড সংহত করা

আমি উভয় কোড সংহত করতে যাচ্ছি

আমদানি cv2import numpy হিসাবে np আমদানি র্যান্ডম থেকে সংগ্রহ আমদানি ডেক

ক্যাপ = cv2। ভিডিও ক্যাপচার (1)

# সমস্ত পয়েন্টের ট্র্যাক রাখতে যেখানে বস্তু পরিদর্শন করেছে কেন্দ্র_পয়েন্ট = ডেক ()

যখন সত্য:

# ফ্রেম পড়ুন এবং ফ্লিপ করুন, ফ্রেম = ক্যাপ.রেড () ফ্রেম = cv2.flip (ফ্রেম, 1)

# ফ্রেমটা একটু ঝাপসা করুন

blur_frame = cv2। গাউসিয়ান ব্লুর (ফ্রেম, (7, 7), 0)

# BGR থেকে HSV রঙ বিন্যাসে রূপান্তর করুন

hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)

# সনাক্ত করতে এইচএসভি রঙের নিম্ন এবং উপরের পরিসীমা নির্ধারণ করুন। এখানে নীল

lower_blue = np.array ([100, 50, 50]) আপার_ব্লু = np.array ([140, 255, 255]) মাস্ক = cv2.inRange (hsv, lower_blue, upper_blue)

# উপবৃত্তাকার কার্নেল তৈরি করুন

কার্নেল = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))

# খোলার রূপ (ক্ষয় পরে প্রসারণ)

মাস্ক = cv2. morphologyEx (মুখোশ, cv2. MORPH_OPEN, কার্নেল)

# সমস্ত রূপরেখা খুঁজুন

কনট্যুর, অনুক্রম = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]

যদি len (contours)> 0:

# সবচেয়ে বড় কনট্যুর খুঁজুন বৃহত্তম_কন্টুর = সর্বোচ্চ (কনট্যুর, কী = সিভি ২. কন্টুর এরিয়া)

# কনট্যুরের কেন্দ্র খুঁজুন এবং ভরাট বৃত্ত আঁকুন

মুহুর্ত = cv2.moments (বৃহত্তম_contour) centre_of_contour = (int (মুহূর্ত ['m10'] / মুহূর্ত ['m00']), int (মুহূর্ত ['m01'] / মুহূর্ত ['m00'])) cv2.circle (ফ্রেম, centre_of_contour, 5, (0, 0, 255), -1)

# বৃত্ত দিয়ে কনট্যুর আবদ্ধ করুন

ellipse = cv2.fitEllipse (বৃহত্তম_contour) cv2.ellipse (ফ্রেম, ellipse, (0, 255, 255), 2)

# কনট্যুরের কেন্দ্রটি সংরক্ষণ করুন যাতে আমরা এটি ট্র্যাক করে লাইন আঁকতে পারি

center_points.appendleft (centre_of_contour)

# কনট্যুরের সেন্টার পয়েন্ট থেকে লাইন আঁকুন

i এর জন্য পরিসরে (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) যদি math.sqrt (((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ফ্রেম, কেন্দ্র_পয়েন্ট [i - 1], কেন্দ্র_পয়েন্ট , (b, g, r), 4)

cv2.imshow ('মূল', ফ্রেম)

cv2.imshow ('মুখোশ', মুখোশ)

k = cv2.waitKey (5) & 0xFF

যদি k == 27: বিরতি

cv2.destroyAllWindows ()

cap.release ()

প্রস্তাবিত: