| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103147/download_problem_initial_project/355584/) دانلود کنید. |
| :--: |
تصور کنید در حساسترین مسابقه فصل، در اتاق تاریک *VAR* نشستهاید. داورهای اتاق *VAR*، بطور ناگهانی بینایی خود را از دست دادهاند و شما ماندهاید و بازیهای در حال برگزاری!
وظیفه شما نوشتن یک الگوریتم است که بتواند با نهایت دقت، خط آفساید را رسم کرده و فاصله بازیکنان خاطی را محاسبه کند. اما این یک لیگ معمولی نیست! شرایط زمین و لباس تیمها در هر مسابقه به شکلی تصادفی تغییر میکند و الگوریتم شما باید به اندازه کافی هوشمند باشد تا فریب نویزهای بصری را نخورد.
شما یک تصویر خام از نمای بالای زمین فوتبال دریافت میکنید. برنامه شما باید تصویر را پردازش کرده و خط آفساید را تشخیص دهد. در صورت وجود آفساید، باید بازیکنی که در آفساید قرار دارد را شناسایی کنید.
اگر چندین مهاجم در منطقه آفساید حضور داشتند، ماموریت شما پیدا کردن مهاجمی است که **کمترین فاصله** را با خط آفساید دارد. سپس باید فاصله دقیق این بازیکن تا خط را بر حسب متر محاسبه کنید.
||
|:-:|
|مشخصات یک زمین فوتبال|
## **نحوه ارسال پاسخ**
شما باید یک فایل پایتونی با نام `offside_detection.py` بسازید که درون آن یک تابع با نام `offside_detection` پیادهسازی شده است.
ورودی این تابع یک تصویر است (دقت کنید که منظور خود تصویر است که با استفاده از `OpenCv` به صورت رنگی خوانده شده و به تابع شما ورودی داده میشود) که شامل تصاویر سادهسازی شده از موقعیتهای مختلف بازی فوتبال در حال جریان است. برنامه شما پس از بررسی تصویر ابتدا باید تشخیص دهد که **آفساید** است یا نه. و در صورت وقوع آفساید باید **فاصله آخرین نقطه از نزدیکترین مهاجم بعد خط آفساید، با خط آفساید** را اندازهگیری کرده و با واحد متر با دو رقم اعشار ثبت کند.
#### **ورودی نمونه 1**
||
|:-:|
|در این تصویر دو مهاجم در موقعیت آفساید قرار دارند. اما شما باید آخرین نقطه از نزدیکترین مهاجم به خط آفساید را اندازهگیری و ثبت کنید.|
#### **خروجی نمونه 1**
```
Offside!
3.81
```
#### **ورودی نمونه 2**
||
|:-:|
|هیچ بازیکنی در موقعیت آفساید نیست.|
#### **خروجی نمونه 2**
```
Onside!
```
> **نکته: تصاویر ورودی تابع شما، تصاویری است که در پوشه `raw` وجود دارند. یعنی بدون خط آفساید و حاشیهنویسی.**
## **نحوه ارزیابی سوال**
برای سنجش عملکرد الگوریتمها، به دو بخش مجزا و با وزنهای متفاوت تقسیم شده است: **۱. دقت تشخیص** و **۲. دقت فاصلهسنجی**.
#### بخش اول: دقت تشخیص وضعیت - 35 امتیاز
در این مرحله، توانایی الگوریتم شما در تشخیص حضور یا عدم حضور بازیکن در منطقه آفساید ارزیابی میشود. مبنای محاسبه، معیار استاندارد $F_1\text{-Score}$ است.
#### بخش دوم: دقت فاصلهسنجی متری (Distance Score) - 65 امتیاز
اگر در تصویری آفساید رخ داده باشد، الگوریتم شما باید فاصله نزدیکترین بازیکنِ در آفساید تا خط مدافع را بر حسب متر محاسبه کند. در این بخش، آستانه تحمل خطا برابر با **۰.۵ متر (۵۰ سانتیمتر)** در نظر گرفته شده است. برای هر تصویری که در واقعیت دارای آفساید است، خطای مطلق شما به این شکل محاسبه میشود:
$$Error = \vert{}Distance_{pred} - Distance_{gt}\vert{}$$
سپس خطای به دست آمده با فرمول زیر به امتیازی بین ۰ تا ۱۰۰ تبدیل میگردد:
$$Score_{dist} = 100 \times \max\left(0, 1 - \frac{Error}{0.5}\right)$$
\**قوانین و جریمههای مهم در بخش فاصلهسنجی:**
+ **دقت میلیمتری:** اگر خطای محاسباتی شما صفر باشد، ۱۰۰ امتیاز کامل این بخش را میگیرید.
+ **سقف خطا:** اگر اختلاف محاسبه شما با واقعیت ۰.۵ متر یا بیشتر باشد، امتیاز شما برای آن تصویر **صفر** خواهد بود. اگر خطا کمتری از ۰.۵ متر باشد درصدی از امتیاز را کسب خواهید کرد.
+ **جریمه عدم تشخیص:** اگر تصویری دارای آفساید باشد اما شما آن را سالم (`Onside!`) تشخیص دهید، علاوه بر افت در بخش اول، برای بخش فاصلهسنجی آن تصویر نیز مستقیما **نمره صفر** دریافت میکنید.
در نهایت، میانگین امتیازات فاصلهسنجی در تمام تصاویری که دارای آفساید بودهاند ($Mean(Score_{dist})$) به عنوان نمره کل این بخش در نظر گرفته میشود. نمره نهایی شما در لیدربورد مسابقه، میانگین مستقیمی از دو بخش فوق خواهد بود:
$$Final Score = \left(0.35 \times Score_{cls}\right) + \left(0.65 \times Mean(Score_{dist})\right)$$
نبرد الگوریتمها در اتاق VAR
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.