در حالی که سعی داشت پیچیدگی های بینایی رایانه را برای برادر کوچکترم توضیح دهد ، از من درباره ساده ترین راه پیاده سازی طبقه بندی کننده تصویر زنده (نه کلمات دقیق او) سوال کرد. ).
مدتی به آن فکر کردم و به راه حلی رسیدم که تقریباً قادر به درک آن بود. از کتابخانه openCV استفاده می کند و باید در ارتباط با یک مدل از قبل استفاده شود. با این حال ، می توان آن را در کمتر از 20 خط کد پایتون اجرا کرد (وابستگی های بارگذاری بخشی از شمارش نیستند). >
ابتدا بارگیری کنید کتابخانه های مورد نیاز و طبقه بندی کننده.
وارد کردن 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]
یک سری اتفاقات در اینجا در حال رخ دادن است. بیایید خط به خط برویم:
برای همپوشانی پیش بینی ها در بالایخوراک وب کم:
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 مرا دنبال کنید.