مهمة التصنيف من خلال عيون تلميذ: تحديد وجود سيارة في موقف السيارات بإطارات من كاميرا مراقبة

مرحبًا ، أنا طالب في الصف الحادي عشر ، وأنا مهتم بالبرمجة ، والموضوعات المتعلقة بتكنولوجيا المعلومات.

أكتب هذا المنشور من أجل مشاركة مشروعي ، الذي استغرق 10 ساعات من حياتي في عطلة نهاية الأسبوع وتم الانتهاء منه لفهم إمكانيات الأساليب الحديثة لتحليل البيانات. يمكن اعتبار المنشور مثالاً للتنفيذ الناجح للأشخاص الذين يجهلون في هذا المجال من المعرفة ، وكذلك طلب للإشارة إلى أخطائي للأشخاص الذين لديهم دراية وفقًا لذلك.

المقدمة: دفق الفيديو من كاميرا المراقبة ، التي يوجد بها جزء من 100 × 50 بكسل مع صورة لمكان وقوف محدد ، والتي يمكن أن تكون موجودة فقط سيارة معينة أو غائبة.

صورة الكاميرا

صورة لوقوف السيارات


الهدف: تحديد وجود أو عدم وجود سيارة في مكان لوقوف السيارات.

تلقي صورة الكاميرا


يمكنني استخدام مكتبة openCV للحصول على الصورة ومعالجتها مسبقًا.
التعليمة البرمجية التالية التي استخدمتها لإنشاء مجموعة البيانات التي أستخدمها لتدريب الشبكة العصبية: قمت بتصوير مساحة وقوف السيارات كل ساعة ، وبعد تلقي 60 صورة ، أقسمها يدويًا إلى صورة باستخدام آلة وبدونها.

dataminer.py
import cv2 as cv import numpy as np import time cap = cv.VideoCapture() r = 0 while r <=100: cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') #URL-  hasFrame, frame = cap.read()#    frame = frame[100:200, 300:750] box = [0,335,100,385] quantframe = frame[box[0]:box[2], box[1]:box[3]]#         r+=1 cv.imwrite(str(r)+'.png',quantframe) #     print('saved') cap.release() time.sleep(3600) key = cv.waitKey(1) if key & 0xFF == ord('q'): cv.destroyAllWindows() break 


معالجة الصور


اعتقدت أنه كان القرار الصحيح لتدريب الشبكة العصبية ليس على الصور المصدر ، ولكن على الصور مع ملامح السيارة التي تم العثور عليها باستخدام وظيفة cv2.findcontours (...).

إليك الرمز الذي يحول الصورة الأصلية إلى صورة تفصيلية:

العثور على ملامح
 def contoursfinder(image): img = image.copy() srcimg = img.copy() hsv_min = np.array((0, 0, 0), np.uint8) hsv_max = np.array((255, 255, 60), np.uint8) #         ,   ,      hsv = cv.cvtColor( img, cv.COLOR_BGR2HSV ) thresh = cv.inRange( hsv, hsv_min, hsv_max ) contours, _ = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) img = np.zeros((100,50,3), np.uint8) cv.drawContours(img, contours, -1, (255,255,255), 1, cv.LINE_AA) return cv.cvtColor(img, cv.COLOR_BGR2GRAY) 


نتيجة الوظيفة:

النص المخفي

الشبكة العصبية


لقد استخدمت مكتبة tensorflow (keras).

تم نسخ بنية الشبكة من المثال من الإنترنت: بالنسبة لي ، التفسير ليس واضحًا لماذا هو كذلك. إذا أخبر الأشخاص المطلعون أو أخبروا أين يقرؤون لماذا هذه البنية فعالة أو لماذا سيكون البعض الآخر أكثر فعالية ، سأكون ممتنًا للغاية.
يتكون نموذج الشبكة العصبية: متسلسل ، من طبقتين مخفيتين كثيفتين مكونتان من 256 و 128 خلية عصبية ومدخلات ، وطبقات مخرجات.

كود
 model = keras.Sequential([ keras.layers.Flatten(input_shape=(100, 50)), keras.layers.Dense(256, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(2, activation=tf.nn.softmax) ]) model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(trainingimagesarr, trainingimagesarrlabel, epochs=1, callbacks=[tbCallBack]) 


قبل التدريب ، تم تقسيم المصفوفة السيئة بالكامل على 255 لإعطاء أرقام في النطاق من 0 إلى 1 لإدخال الشبكة العصبية.

 trainingimagesarr = trainingimagesarr / 255.0 trainingimagesarrlabel = np.array(trainingimagesarrlabel)-1 

الآن يمكنني استدعاء الوظيفة:

 def realtest(): cap = cv.VideoCapture() cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') hasFrame, frame = cap.read() frame = frame[100:200, 300:750] quantframe = frame[0:100,275:325] quantframe = contoursfinder(quantframe) return model.predict(np.array([quantframe]))[0][1]>0.60 

الحصول على بيانات حول وجود السيارة في موقف السيارات.

لا ترفس كثيراً ، لكن قليلاً :-)

شكرا لك

Source: https://habr.com/ru/post/ar440608/


All Articles