|
|
||
|---|---|---|
| .. | ||
| lab | ||
| README.md | ||
README.md
مقدمهای بر بینایی کامپیوتر
بینایی کامپیوتر شاخهای از علوم است که هدف آن فراهم کردن توانایی درک تصاویر دیجیتال در سطح بالا برای کامپیوترها است. این تعریف بسیار گسترده است، زیرا درک میتواند معانی مختلفی داشته باشد، از جمله پیدا کردن یک شیء در تصویر (تشخیص شیء)، فهمیدن آنچه در حال رخ دادن است (تشخیص رویداد)، توصیف یک تصویر با متن، یا بازسازی یک صحنه در سه بعد. همچنین وظایف خاصی مرتبط با تصاویر انسانی وجود دارد: تخمین سن و احساسات، تشخیص و شناسایی چهره، و تخمین حالت سهبعدی، به عنوان چند مثال.
آزمون پیش از درس
یکی از سادهترین وظایف بینایی کامپیوتر طبقهبندی تصویر است.
بینایی کامپیوتر اغلب به عنوان شاخهای از هوش مصنوعی در نظر گرفته میشود. امروزه، بیشتر وظایف بینایی کامپیوتر با استفاده از شبکههای عصبی حل میشوند. در این بخش، بیشتر درباره نوع خاصی از شبکههای عصبی که برای بینایی کامپیوتر استفاده میشوند، یعنی شبکههای عصبی کانولوشنی، یاد خواهیم گرفت.
با این حال، پیش از آنکه تصویر را به یک شبکه عصبی بدهید، در بسیاری از موارد منطقی است که از برخی تکنیکهای الگوریتمی برای بهبود تصویر استفاده کنید.
چندین کتابخانه پایتون برای پردازش تصویر در دسترس هستند:
- imageio برای خواندن/نوشتن فرمتهای مختلف تصویر استفاده میشود. همچنین از ffmpeg پشتیبانی میکند، که ابزاری مفید برای تبدیل فریمهای ویدئو به تصاویر است.
- Pillow (که به نام PIL نیز شناخته میشود) قدرتمندتر است و از برخی تغییرات تصویر مانند تغییر شکل، تنظیم پالت و موارد دیگر پشتیبانی میکند.
- OpenCV یک کتابخانه قدرتمند پردازش تصویر است که به زبان C++ نوشته شده و به استاندارد de facto برای پردازش تصویر تبدیل شده است. این کتابخانه یک رابط کاربری راحت برای پایتون دارد.
- dlib یک کتابخانه C++ است که بسیاری از الگوریتمهای یادگیری ماشین، از جمله برخی از الگوریتمهای بینایی کامپیوتر را پیادهسازی میکند. این کتابخانه نیز یک رابط پایتون دارد و میتواند برای وظایف چالشبرانگیزی مانند تشخیص چهره و نقاط کلیدی چهره استفاده شود.
OpenCV
OpenCV به عنوان استاندارد de facto برای پردازش تصویر در نظر گرفته میشود. این کتابخانه شامل بسیاری از الگوریتمهای مفید است که به زبان C++ پیادهسازی شدهاند. شما میتوانید OpenCV را از طریق پایتون نیز فراخوانی کنید.
یک منبع خوب برای یادگیری OpenCV این دوره آموزشی Learn OpenCV است. در برنامه درسی ما، هدف یادگیری کامل OpenCV نیست، بلکه نشان دادن چند مثال از کاربردهای آن و نحوه استفاده از آن است.
بارگذاری تصاویر
تصاویر در پایتون به راحتی میتوانند با آرایههای NumPy نمایش داده شوند. به عنوان مثال، تصاویر سیاه و سفید با اندازه 320x200 پیکسل در یک آرایه 200x320 ذخیره میشوند، و تصاویر رنگی با همان ابعاد دارای شکل 200x320x3 (برای 3 کانال رنگی) خواهند بود. برای بارگذاری یک تصویر، میتوانید از کد زیر استفاده کنید:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
به طور سنتی، OpenCV از کدگذاری BGR (آبی-سبز-قرمز) برای تصاویر رنگی استفاده میکند، در حالی که سایر ابزارهای پایتون از کدگذاری سنتیتر RGB (قرمز-سبز-آبی) استفاده میکنند. برای اینکه تصویر به درستی نمایش داده شود، باید آن را به فضای رنگی RGB تبدیل کنید، یا با جابجایی ابعاد در آرایه NumPy، یا با فراخوانی یک تابع OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
همین تابع cvtColor میتواند برای انجام سایر تبدیلهای فضای رنگی مانند تبدیل تصویر به سیاه و سفید یا به فضای رنگی HSV (رنگ-اشباع-مقدار) استفاده شود.
شما همچنین میتوانید از OpenCV برای بارگذاری فریمهای ویدئو به صورت فریم به فریم استفاده کنید - یک مثال در تمرین دفترچه OpenCV آورده شده است.
پردازش تصویر
پیش از آنکه یک تصویر را به یک شبکه عصبی بدهید، ممکن است بخواهید چندین مرحله پیشپردازش را اعمال کنید. OpenCV میتواند کارهای زیادی انجام دهد، از جمله:
- تغییر اندازه تصویر با استفاده از
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - تاری کردن تصویر با استفاده از
im = cv2.medianBlur(im,3)یاim = cv2.GaussianBlur(im, (3,3), 0) - تغییر روشنایی و کنتراست تصویر که میتواند با دستکاری آرایههای NumPy انجام شود، همانطور که در این یادداشت Stackoverflow توضیح داده شده است.
- استفاده از آستانهگذاری با فراخوانی توابع
cv2.threshold/cv2.adaptiveThreshold، که اغلب به تنظیم روشنایی یا کنتراست ترجیح داده میشود. - اعمال تبدیلات مختلف به تصویر:
- تبدیلات آفین میتوانند مفید باشند اگر نیاز به ترکیب چرخش، تغییر اندازه و کج کردن تصویر داشته باشید و مکانهای مبدا و مقصد سه نقطه در تصویر را بدانید. تبدیلات آفین خطوط موازی را موازی نگه میدارند.
- تبدیلات پرسپکتیو میتوانند مفید باشند وقتی مکانهای مبدا و مقصد چهار نقطه در تصویر را بدانید. به عنوان مثال، اگر از یک سند مستطیلی با دوربین گوشی هوشمند از زاویهای عکس بگیرید و بخواهید تصویری مستطیلی از خود سند داشته باشید.
- درک حرکت درون تصویر با استفاده از جریان نوری.
مثالهایی از استفاده از بینایی کامپیوتر
در دفترچه OpenCV، چند مثال از کاربردهای بینایی کامپیوتر برای انجام وظایف خاص آورده شده است:
- پیشپردازش یک عکس از کتاب بریل. ما بر روی نحوه استفاده از آستانهگذاری، تشخیص ویژگی، تبدیل پرسپکتیو و دستکاریهای NumPy تمرکز میکنیم تا نمادهای بریل جداگانه را برای طبقهبندی بیشتر توسط یک شبکه عصبی جدا کنیم.
![]() |
![]() |
![]() |
|---|
تصویر از OpenCV.ipynb
- تشخیص حرکت در ویدئو با استفاده از تفاوت فریمها. اگر دوربین ثابت باشد، فریمهای ویدئویی باید بسیار شبیه به یکدیگر باشند. از آنجا که فریمها به صورت آرایه نمایش داده میشوند، فقط با کم کردن آرایههای دو فریم متوالی میتوانیم تفاوت پیکسلها را به دست آوریم، که باید برای فریمهای ثابت کم باشد و با وجود حرکت قابل توجه در تصویر افزایش یابد.
تصویر از OpenCV.ipynb
-
تشخیص حرکت با استفاده از جریان نوری. جریان نوری به ما امکان میدهد بفهمیم که پیکسلهای فردی در فریمهای ویدئو چگونه حرکت میکنند. دو نوع جریان نوری وجود دارد:
- جریان نوری متراکم میدان برداری را محاسبه میکند که نشان میدهد هر پیکسل به کجا حرکت میکند.
- جریان نوری پراکنده بر اساس گرفتن برخی ویژگیهای متمایز در تصویر (مانند لبهها) و ساختن مسیر آنها از فریمی به فریم دیگر است.
تصویر از OpenCV.ipynb
✍️ دفترچههای مثال: OpenCV OpenCV در عمل را امتحان کنید
بیایید با کاوش در دفترچه OpenCV چند آزمایش با OpenCV انجام دهیم.
نتیجهگیری
گاهی اوقات، وظایف نسبتاً پیچیدهای مانند تشخیص حرکت یا تشخیص نوک انگشتان میتوانند صرفاً با استفاده از بینایی کامپیوتر حل شوند. بنابراین، دانستن تکنیکهای پایهای بینایی کامپیوتر و قابلیتهای کتابخانههایی مانند OpenCV بسیار مفید است.
🚀 چالش
این ویدئو از نمایش AI را تماشا کنید تا درباره پروژه Cortic Tigers و نحوه ساخت یک راهحل مبتنی بر بلوک برای دموکراتیزه کردن وظایف بینایی کامپیوتر از طریق یک ربات یاد بگیرید. درباره پروژههای مشابهی که به تازهواردان کمک میکنند تا وارد این حوزه شوند تحقیق کنید.
آزمون پس از درس
مرور و مطالعه شخصی
بیشتر درباره جریان نوری در این آموزش عالی بخوانید.
تکلیف
در این آزمایش، شما یک ویدئو با حرکات ساده ضبط خواهید کرد و هدف شما استخراج حرکات بالا/پایین/چپ/راست با استفاده از جریان نوری است.
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.




