چشم انداز رایانه ای با بودجه

چشم انداز رایانه ای با بودجه

پیاده سازی طبقه بندی کننده زنده در زیر 20 خط کد

در حالی که سعی داشت پیچیدگی های بینایی رایانه را برای برادر کوچکترم توضیح دهد ، از من درباره ساده ترین راه پیاده سازی طبقه بندی کننده تصویر زنده (نه کلمات دقیق او) سوال کرد. ).

مدتی به آن فکر کردم و به راه حلی رسیدم که تقریباً قادر به درک آن بود. از کتابخانه openCV استفاده می کند و باید در ارتباط با یک مدل از قبل استفاده شود. با این حال ، می توان آن را در کمتر از 20 خط کد پایتون اجرا کرد (وابستگی های بارگذاری بخشی از شمارش نیستند). > اگر نمی خواهید مدل خود را از ابتدا آموزش دهید ، می توانید وزن مدل های از پیش آموزش دیده را از Keras/Caffe

Prep Work

ابتدا بارگیری کنید کتابخانه های مورد نیاز و طبقه بندی کننده.

 وارد کردن cv2
وارد کردن numpy به عنوان np
از keras.applications import imagenet_utils ، VGG19 
 model = VGG19 (weights = 'imagenet') # بارگذاری وزن مدل 

برای این تمرین ، من از VGG19 ، یکی از مدل هایی که بر روی ImageNet آموزش دیده اند. VGG19 را می توان با استفاده از کتابخانه Keras بارگذاری کرد.

ما برای پیش پردازش تصاویر و رمزگشایی طبقه بندی های ارائه شده توسط VGG19 به imagenet_utils نیاز داریم.

بیایید شروع کنیم

 cam = cv2.VideoCapture (0) # باز کردن وب کم 

ایده این طبقه بندی کننده زنده این است که ضبط وب کم را در قالب فرعی قرار داده و هر فریم را به عنوان یک تصویر طبقه بندی شده در نظر بگیرید. برای انجام این کار ، ما باید یک حلقه بی نهایت ایجاد کنیم تا به طور مداوم فریم ها را ضبط کنیم.

 while True:
    
    ret، frame = cam.read ()
    k = cv2.wait کلید (1) 
 اگر k٪ 256 == 27: # اگر کلید esp فشار داده شود
        break 

این حلقه قاب بعدی (فریم) و اینکه آیا قاب قبلی وجود دارد (ret) را ثبت می کند. ما همچنین یک شرط خروج را وارد می کنیم ، به ویژه هنگامی که کلید فرار فشار داده می شود. برای نگاشت سایر کلیدهای مورد انتظار می توانید به Ascii Table مراجعه کنید.

در مرحله بعد ، می خواهیم قاب را گرفته و آن را مانند هر تصویر معمولی طبقه بندی کنیم. این همه در حلقه ما است.

 frame_pred = cv2.resize (قاب ، (224 ، 224))
   frame_pred = cv2.cvtColor (frame_pred ، cv2.COLOR_BGR2RGB). نوع (np.float32)
   frame_pred = frame_pred.reshape ((1 ،) + frame_pred.shape)
   frame_pred = imagenet_utils.preprocess_input (frame_pred) 
 predictions = model.predict (frame_pred)
   (imageID ، label ، score) = imagenet_utils.decode_predictions (پیش بینی ها) [0] [0] 

یک سری اتفاقات در اینجا در حال رخ دادن است. بیایید خط به خط برویم:

اندازه تصویر به (224 ، 224) تغییر کرده است ، اندازه ورودی پیش فرض برای VGG19 تصویر به فرمت RGB تبدیل می شود. OpenCV از فرمت BGR استفاده می کند در حالی که Keras (و تقریباً همه چیز دیگر) از RGB تصویر را تغییر می دهد تا متناسب با الزامات ورودی مدل ورودی با فرمت مورد نیاز پیش پردازش شود ما پیش بینی را بازیابی می کنیم پیش بینی را رمزگشایی می کنیم تا کلاس ، برچسب و امتیاز (احتمال حضور در آن کلاس)

برای همپوشانی پیش بینی ها در بالایخوراک وب کم:

 cv2.putText (قاب ، "٪ s با احتمال٪ .2f"٪ (برچسب ، امتیاز) ، (25 ، 25) ، cv2. FONT_HERSHEY_DUPLEX ، 0.9 ، (0 ، 0 ، 250 ) ، 2) 
 cv2.imshow ("چشم انداز کامپیوتر در بودجه" ، قاب) 

یکبار دیگر ، این در داخل حلقه اجرا می شود. آخرین خط ، ضبط وب کم اصلی (نه آنچه برای مدل افزایش یافته است) را با متن برچسب مورد نظر برمی گرداند.

در نهایت ، می خواهید وب کم خود را ببندید. این مرحله خارج از حلقه است و تنها در صورت فشار دادن کلید فرار اجرا می شود.

 cam.release ()
cv2.destroyAllWindows () 

برای مشاهده کامل 20 خط کد ، اینجا را کلیک کنید.

برخی از طبقه بندی های انجام شده. در گذشته ، قرمز رنگ خوبی برای برچسب نبود.

< /img>

این یک راه حل هک است که از رویکرد بیش از حد ساده برای مقابله با یک مشکل بسیار پیچیده طبقه بندی کننده اشیاء جداگانه را در فریم متمایز نمی کند و نمی شناسد. بسته به مدل استفاده شده ، می تواند بسیار کند نیز باشد. در حال خواندن!

اگر از این مقاله لذت بردید ، مقالات دیگر من در زمینه علوم داده ، ریاضی و برنامه نویسی را بررسی کنید. برای اطلاع از آخرین به روزرسانی ها ، Medium مرا دنبال کنید.

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد