معرفی کتابخانه OpenCV بخش ۱
کتابخانه opencv یک کتابخانه منبع باز (اوپن سورس) هست که تو حوزه های پردازش تصویر بینایی ماشین و یادگیری ماشین استفاده زیادی ازش میشه . opencv توسط شرکت اینتل و به زبان سی پلاس پلاس طراحی شده اما در حال حاضر رپر (wrapper) های پایتون و جاوا اون وجود داره یعنی اینکه شما به زبون پایتون یا جاوا میتونید همون توابع و کلاس های سی پلاس پلاس رو پیاده سازی کنید و از لحاظ سرعت پردازش هم تفاوت زیادی با سی پلاس پلاس نداره .
قبل از اینکه سراغ کد زنی برم یه توضیح مختصری در مورد بینایی ماشین و پردازش تصویر میدم .
به طور خلاصه میشه گفت که به فرایند فهم تصویر و فیلم و چگونگی ذخیره سازی و کنترل اون بینایی ماشین گفته میشه و تو حوزه های زیادی مثل دوربین های نظارتی٬ ماشین های خودران ٬ تشخیص چهره و خیلی چیزای دیگه استفاده میشه .
به فرایند هایی که روی یک تصویر برای بهینه سازی اون یا استخراج اطلاعات از اون تصویر انجام میشه پردازش تصویر گفته میشه مثلا فیلتر کردن طیف های رنگی توی تصویر استخراج متن یا شکلی مشخص از تصویر کلا میشه گفت که پردازش تصویر بخشی از بینایی ماشین محسوب میشه .
برای پیاده سازی opencv از پایتون استفاده می کنیم چون راحتره و خوبیش اینه که بعدا میشه کد رو به سی پلاس پلاس برگردوند . ورژن پایتونی هم که استفاده می کنید ۳.۷ به بعد باشه بهتره .
برای نصب کتابخونه opencv از دستور زیر استفاده می کنید اگه هم ورژن مد نظرو پیدا نکرد با یه سرچ ساده اروری که داده مشکلو میشه حل کرد .
pip install opencv-python
محیط کدزنی هم من خودم pycharm رو ترجیح میدم نسبت به vscode چون اینتلی سنس یا سیستم پیشنهادی قوی تری داره اما کلا فرق زیادی نداره .
خب واسه شروع کتابخونه اوپن سی وی و نامپای رو اد می کنیم . نامپای فعلا استفاده ای نمیشه اما جلوتر برای خیلی کارا مثل کرنل ساختن یا تغییر ماتریس ها یا چیز های دیگه استفاده میشه .
import cv2
import numpy as np
توی اولین مثال می خوایم یه عکس به فورمت jpg یا png رو نشون بدیم .
img = cv2.imread("image.jpg")
cv2.imshow("shrek", img)
cv2.waitKey(0)
خط اول عکس رو از مسیری که بهش دادیم میخونه و توی متغیر img میریزه خط بعدی عکس رو نشون میده و خط آخر به برنامه میگه که چقدر باید صبر بکنه مقدار عددی که به عنوان پارامتر میگیره بر حس میلی ثانیه هست وقتی هم که مقدارشو صفر بدیم برنامه منتظر میمونه تا ما کلیدی رو فشار بدیم .
خروجی برنامه این میشه
توی مثال دوم یه فیلم رو توی برنامه نمایش میدیدم .
cap = cv2.VideoCapture("video.mp4")
# or
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
cap.set(10, 120)
while True :
success, frame = cap.read()
cv2.imshow("webcam", frame)
if cv2.waitKey(1) & 0xff == ord('q'):
break
خط اول ویدیو رو داخل متغییر cap قرار میده اگه پارامتر تابع صفر بدیم ورودی وبکم داده میشه و اگه دوربین خارجی دارید که با USB به کامپیوتر وصل میشه بسته به تعداد پورتی که دستگاه داره مثلا اگه سه تا داشته باشه یکی از عددای ۱٬۲٬۳ میتونه باشه .
دو خط بعدی تعیین پهنا و ارتفاع متغییری هست که نشون میده که توی این مثال پهنا 640 پیکسل و ارتفاع 480 پیکسل هست . خط بعدی هم میزان روشنایی رو تنظیم می کنه که هر چه قدر عددش بیشتر باشه روشن تر هست .
توی حلقه تابع read دوتا متغییر میده یکی success که درست بودن فریمی که گرفته رو چک میکنه (یعنی True or False ) متغییر frame هم هر فریم فیلم رو توی خودش ذخیره می کنه قدم بعدی هم مثل مثال اول نشون دادن تصویر هست و شرطی که بعدش اومده چک می کنه که اگه ما کلید q رو بزنیم از حلقه خارج بشه .
خب توی پست های بعدی سعی می کنم بقیه بخش های opencv رو توضیح بدم این رو هم اضافه بکنم من فقط سعی می کنم یه توضیح مختصری در مورد هر بخش بدم اگه علاقه به یادگیری بیشتر داشتید کورس های زیاد و خیلی خوبی هست که میتونه کمکتون کنه
مطلبی دیگر از این انتشارات
باگ باونتی (bug bounty) چیست ؟
مطلبی دیگر از این انتشارات
خاطرات سفر دوچرخه در قرقیزستان و بیشکک و مناطق عشایری و دریاچه ها و … (:
مطلبی دیگر از این انتشارات
یک حقیقت تلخ.