استفاده از OpenCV برای بینایی ماشین: آموزش پایتون
بینایی ماشین، شاخهای از هوش مصنوعی است که به کامپیوترها امکان میدهد تصاویر را “ببینند” و تفسیر کنند. OpenCV (Open Source Computer Vision Library) یک کتابخانه قدرتمند و پرکاربرد در این زمینه است که ابزارهای متعددی را برای پردازش تصویر و ویدئو فراهم میکند. این مقاله به بررسی کاربردهای OpenCV در بینایی ماشین با تمرکز بر آموزش پایتون میپردازد. این آموزش در دسته بندی ‘کتابخانههای خاص و کاربردی’ قرار میگیرد.
مقدمهای بر OpenCV
OpenCV در ابتدا توسط اینتل توسعه یافت و اکنون به عنوان یک پروژه متنباز، توسط جامعهای بزرگ از توسعهدهندگان پشتیبانی میشود. این کتابخانه به زبانهای مختلفی از جمله پایتون، C++، جاوا و MATLAB قابل استفاده است. پایتون به دلیل سادگی و خوانایی، به یک انتخاب محبوب برای کار با OpenCV تبدیل شده است.
OpenCV شامل مجموعهای گسترده از الگوریتمها و توابع برای انجام وظایف مختلف بینایی ماشین است، از جمله:
- تشخیص اشیاء
- ردیابی اشیاء
- پردازش تصویر (فیلترها، تبدیلها، و غیره)
- کالیبراسیون دوربین
- بازسازی سهبعدی
- یادگیری ماشین
نصب OpenCV در پایتون
برای استفاده از OpenCV در پایتون، ابتدا باید آن را نصب کنید. سادهترین راه برای نصب OpenCV استفاده از pip است:
pip install opencv-python
پس از نصب، میتوانید OpenCV را در اسکریپتهای پایتون خود با استفاده از دستور import cv2 وارد کنید.
خواندن، نمایش و ذخیره تصاویر
یکی از اولین کارهایی که معمولاً در بینایی ماشین انجام میدهید، خواندن تصاویر است. OpenCV از تابع imread() برای خواندن تصاویر استفاده میکند:
import cv2
img = cv2.imread('image.jpg')
تابع imread() یک آرایه NumPy را برمیگرداند که نشاندهنده پیکسلهای تصویر است. برای نمایش تصویر، میتوانید از تابع imshow() استفاده کنید:
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
تابع waitKey(0) منتظر میماند تا یک کلید فشرده شود. تابع destroyAllWindows() تمام پنجرههای باز شده را میبندد. برای ذخیره تصویر، میتوانید از تابع imwrite() استفاده کنید:
cv2.imwrite('output.jpg', img)
پردازش تصویر با OpenCV
OpenCV ابزارهای متعددی را برای پردازش تصاویر فراهم میکند. برخی از رایجترین عملیات پردازش تصویر عبارتند از:
تغییر اندازه تصویر
برای تغییر اندازه تصویر، میتوانید از تابع resize() استفاده کنید:
resized_img = cv2.resize(img, (500, 400))
این کد تصویر را به ابعاد 500×400 پیکسل تغییر میدهد.
تبدیل به فضای رنگی خاکستری
تبدیل تصویر به فضای رنگی خاکستری میتواند به سادهسازی پردازش تصویر کمک کند. برای این کار، میتوانید از تابع cvtColor() استفاده کنید:
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
این کد تصویر را از فضای رنگی BGR (که OpenCV به طور پیشفرض از آن استفاده میکند) به فضای رنگی خاکستری تبدیل میکند.
اعمال فیلترها
OpenCV فیلترهای مختلفی را برای صاف کردن، تیز کردن و بهبود تصاویر فراهم میکند. برای مثال، برای اعمال یک فیلتر Gaussian blur، میتوانید از تابع GaussianBlur() استفاده کنید:
blurred_img = cv2.GaussianBlur(img, (5, 5), 0)
این کد یک فیلتر Gaussian blur با اندازه هسته 5×5 و انحراف معیار 0 اعمال میکند.
آستانهگذاری (Thresholding)
آستانهگذاری یک تکنیک ساده اما قدرتمند برای جداسازی اشیاء از پسزمینه است. برای این کار، میتوانید از تابع threshold() استفاده کنید:
ret, thresholded_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
این کد پیکسلهایی را که مقدار آنها از 127 بیشتر است، به 255 (سفید) و پیکسلهایی را که مقدار آنها کمتر از 127 است، به 0 (سیاه) تبدیل میکند.
تشخیص اشیاء با OpenCV
OpenCV ابزارهای مختلفی را برای تشخیص اشیاء در تصاویر فراهم میکند. یکی از رایجترین روشها استفاده از Cascade Classifier است. Cascade Classifier یک الگوریتم یادگیری ماشین است که برای تشخیص اشیاء خاصی مانند چهرهها، چشمها و ماشینها آموزش داده شده است.
برای استفاده از Cascade Classifier، ابتدا باید یک فایل XML حاوی دادههای آموزشدیده را دانلود کنید. OpenCV تعدادی از این فایلها را به طور پیشفرض ارائه میدهد. برای مثال، برای تشخیص چهرهها، میتوانید از فایل haarcascade_frontalface_default.xml استفاده کنید.
سپس، میتوانید Cascade Classifier را بارگیری کنید و از آن برای تشخیص اشیاء در تصویر استفاده کنید:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(img, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
این کد چهرهها را در تصویر تشخیص میدهد و یک مستطیل آبی رنگ دور آنها رسم میکند.
ردیابی اشیاء با OpenCV
ردیابی اشیاء به معنای دنبال کردن یک شیء خاص در یک دنباله از فریمهای ویدئویی است. OpenCV الگوریتمهای مختلفی را برای ردیابی اشیاء فراهم میکند. یکی از رایجترین الگوریتمها MeanShift است.
MeanShift یک الگوریتم مبتنی بر توزیع احتمال است که سعی میکند مرکز یک توزیع را پیدا کند. برای ردیابی یک شیء با MeanShift، ابتدا باید یک ناحیه اولیه را در اطراف شیء انتخاب کنید. سپس، الگوریتم MeanShift به طور مکرر مرکز ناحیه را به سمت ناحیهای با بالاترین چگالی پیکسلها حرکت میدهد.
کد زیر یک مثال ساده از ردیابی یک شیء با MeanShift را نشان میدهد:
# (کد ردیابی اشیاء با MeanShift - به دلیل طولانی بودن و پیچیدگی، در اینجا خلاصه شده است. شامل انتخاب ناحیه اولیه، محاسبه هیستوگرام، و بهروزرسانی ناحیه ردیابی در هر فریم است.)
نتیجهگیری
OpenCV یک کتابخانه قدرتمند و پرکاربرد برای بینایی ماشین است که ابزارهای متعددی را برای پردازش تصویر و ویدئو فراهم میکند. با استفاده از OpenCV و پایتون، میتوانید برنامههای کاربردی مختلفی را در زمینه بینایی ماشین توسعه دهید، از جمله تشخیص اشیاء، ردیابی اشیاء، و پردازش تصویر. این مقاله تنها یک مقدمه کوتاه بر OpenCV بود. برای یادگیری بیشتر، میتوانید به مستندات رسمی OpenCV و منابع آموزشی آنلاین مراجعه کنید.

بدون دیدگاه