مقدمه
شناسایی مسیر توپ یکی از مسائل مهم در حوزه بینایی ماشین و پردازش تصویر است که به کمک آن میتوانیم به تعقیب توپ در ویدیوهای ورزشی یا بازیهای رایانهای بپردازیم. در این مقاله، ما به کمک زبان برنامهنویسی پایتون قصد داریم که به شما نحوهی شناسایی مسیر توپ را آموزش دهیم.
برای شناسایی مسیر توپ، ابتدا باید توپ را در تصویر پیدا کنیم. برای این کار میتوانیم از یک الگوریتم تشدید رنگ مانند الگوریتم تشدید رنگ توپ (Ball Color Amplification) استفاده کنیم که در آن، توپ با استفاده از یک تفکیککننده (Separator) از پسزمینه جدا شده و سپس با استفاده از یک الگوریتم تشدید رنگ، رنگ توپ افزایش مییابد. بعد از این مرحله، میتوانیم از روشهای تشخیص شی مانند شبکههای عصبی پیچشی (CNN) استفاده کنیم تا موقعیت توپ را در تصویر تعیین کنیم.
با شناسایی موقعیت توپ، باید مسیر توپ را در تصویر تشخیص دهیم. برای این منظور، میتوانیم از روشهای ردیابی مانند ردیابی شی برای تعیین موقعیت توپ در فریمهای بعدی استفاده کنیم. با استفاده از این روش، میتوانیم مسیر توپ را در تصویر تعیین کنیم.
کد پایتون
مرحله اول: خواندن ویدئو
در این مرحله، ویدئویی که میخواهید مسیر توپ را بررسی کنید، را با استفاده از تابع cv2.VideoCapture در پایتون خوانده و آن را به صورت فریم به فریم بررسی میکنیم.
خواندن ویدئو
import cv2
cap = cv2.VideoCapture(‘video.mp4’)
while True:
ret, frame = cap.read()
if not ret:
break
مرحله دوم: تشخیص رنگ توپ
در این مرحله، با استفاده از تابع cv2.inRange، بازهی رنگی توپ را تعیین میکنیم و فقط پیکسلهایی که در این بازه رنگی هستند را انتخاب میکنیم.
تشخیص رنگ توپ
import cv2
import numpy as np
cap = cv2.VideoCapture(‘video.mp4’)
while True:
ret, frame = cap.read()
if not ret:
break
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower = np.array([30, 150, 50])
upper = np.array([255, 255, 180])
mask = cv2.inRange(hsv, lower, upper)
res = cv2.bitwise_and(frame, frame, mask=mask)
مرحله سوم: تشخیص مرکز توپ
در این مرحله، با استفاده از تابع cv2.HoughCircles، مرکز توپ را پیدا میکنیم.
تشخیص مرکز توپ
import cv2
import numpy as np
cap = cv2.VideoCapture(‘video.mp4’)
while True:
ret, frame = cap.read()
if not ret:
break
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower = np.array([30, 150, 50])
upper = np.array([255, 255, 180])
mask = cv2.inRange(hsv, lower, upper)
res = cv2.bitwise_and(frame, frame, mask=mask)
gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0)
حالت دوم کد پایتون
برای شناسایی مسیر توپ با استفاده از پایتون، می توانید از کتابخانه هایی مانند OpenCV و NumPy استفاده کنید. به طور کلی، روشی که برای شناسایی مسیر توپ استفاده می شود، محاسبه مسیر توپ بر اساس موقعیت تصویری آن در تصویر است. در ادامه یک کد پایتون برای شناسایی مسیر توپ ارائه شده است:
کد پایتونی
import cv2
import numpy as np
# خواندن تصویر
img = cv2.imread(‘ball_image.jpg’)
# تبدیل تصویر به حالت سیاه و سفید
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# برای کاهش نویز، اعمال فیلتر گاوسی
gray_blur = cv2.GaussianBlur(gray, (15, 15), 0)
# تشخیص مرزهای توپ با استفاده از تبدیل کانی
edges = cv2.Canny(gray_blur, 60, 100)
# تشخیص دایره های توپ با استفاده از تبدیل هاف
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=0, maxRadius=0)
# ترسیم دایره های تشخیص داده شده در تصویر اصلی
if circles is not None:
circles = np.round(circles[0, :]).astype(“int”)
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 4)
# نمایش تصویر اصلی
cv2.imshow(‘image’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
در این کد، ابتدا تصویر ورودی با استفاده از تابع cv2.imread خوانده شده و سپس به حالت سیاه و سفید تبدیل می شود. سپس برای کاهش نویز در تصویر اعمال فیلتر گاوسی و سپس با استفاده از تبدیل کانی، مرزهای توپ در تصویر شناسایی می شوند. در ادامه با استفاده از تبدیل هاف، دایره های توپ در تصویر شناسایی می شوند و در تصویر اصلی ترسیم می شوند. در نهایت، تصویر نهایی با است.
برای نوشتن دیدگاه باید وارد بشوید.