دليل الشروع في العمل: الكشف عن الهدف في الوقت الحقيقي باستخدام Python (الكود مضمّن)

نص كامل 6821 الكلمات ، المدة المقدرة للدراسة 20 دقيقة

المصدر: Pexels

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

يسمى هذا المجال الخاص رؤية الكمبيوتر (CV) ولديه مجموعة واسعة من التطبيقات في الحياة الحديثة.

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

يمكن لأداة السيرة الذاتية الحالية تطبيق اكتشاف الهدف بسهولة على الصور أو حتى الفيديو المباشر. ستوضح هذه المقالة ببساطة كيفية استخدام TensorFlow لإنشاء كاشف للهدف في الوقت الحقيقي.

قم ببناء كاشف هدف بسيط

متطلبات الإعداد:

إصدار TensorFlow هو 1.15.0 أو أعلى

قم بتشغيل TensorFlow لتثبيت النقطة الأخيرة

كل شيء جاهز ، ابدأ الآن!

تهيئة البيئة

الخطوة 1: قم بتنزيل أو نسخ رمز الكشف عن الهدف TensorFlow من Github إلى الكمبيوتر المحلي

قم بتشغيل الأمر التالي في المحطة:

gone clonehttps: //github.com/tensorflow/models.git

الخطوة 2: تثبيت التبعيات

الخطوة التالية هي تحديد أن الكمبيوتر مزود بالمكتبات والمكونات اللازمة لتشغيل كاشف الهدف.

يسرد ما يلي المكتبات التي يعتمد عليها هذا المشروع. (يتم تضمين معظم التبعيات في TensorFlow)

سيثون

السياق 2

وسادة

Lxml

ماتبلوتليب

إذا كانت هناك مكونات مفقودة ، فقم بتنفيذ تثبيت النقطة في بيئة التشغيل.

الخطوة 3: تثبيت مترجم Protobuf

بروتوبوف من Google ، والمعروف أيضًا باسم المخازن المؤقتة للبروتوكول ، هي آلية مستقلة عن اللغة ومستقلة عن النظام الأساسي وقابلة للتطوير لتسلسل البيانات المنظمة. تساعد Protobuf المبرمجين على تحديد هياكل البيانات وكتابة وقراءة البيانات المنظمة بسهولة بلغات مختلفة في تدفقات البيانات المختلفة.

Protobuf هي أيضًا واحدة من تبعيات هذا المشروع. انقر هنا لمعرفة المزيد حول Protobufs. بعد ذلك ، قم بتثبيت Protobuf على جهاز الكمبيوتر الخاص بك.

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

نماذج مؤتمر نزع السلاح / البحث / wget -Oprotobuf.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.9.1/protoc-3.9.1-osx-x86_64.zip\unzipprotobuf.zip

ملاحظة: تأكد من فك ضغط ملف protobuf.zip في دليل النماذج / البحث.

المصدر: Pexels

الخطوة 4: تحرير المترجم Protobuf

قم بتنفيذ الأمر التالي من دليل البحث / الدليل لتحرير المترجم Protobuf:

./bin/protoc object_detection / protos / *. proto - python_out =.

استخدام Python لتحقيق الكشف عن الهدف

الآن بعد أن تم تثبيت كل التبعيات ، يمكنك استخدام Python لتحقيق الكشف عن الهدف.

في مستودع الكود الذي تم تنزيله ، قم بتغيير الدليل إلى:

النماذج / البحث / الكشف عن الأشياء

يوجد دفتر ipython يسمى object_detection_tutorial.ipynb في هذا الدليل. هذا الملف هو عرض توضيحي يوضح خوارزمية الكشف عن الهدف ، وسيتم استخدام النموذج المحدد أثناء التنفيذ:

ssd_mobilenet_v1_coco_2017_11_17

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

يتطلب اكتشاف الهدف في الفيديو المباشر بعض الضبط الدقيق. قم بإنشاء دفتر ملاحظات Jupyter جديد في نفس المجلد واتبع التعليمات البرمجية أدناه:

:

استيراد numpy مثل npimport osimport six.moves.urllib مثل urllibimport sysimport tarfileimport tensorflow مثل tfimport zipfilefrom distutils.version استيراد StrictVersionfrom مجموعات استيراد defaultdictfrom io استيراد StringIOf mat matototlib استيراد pyplot كما pltfrom هو PIL صورة sys.path.append ("..") من utils استيراد العمليات كـ utils_opsif StrictVersion (tf .__ version__) <  StrictVersion ('1.12.0'): رفع ImportError ('الرجاء ترقية تثبيت TensorFlow إلى v1.12. *.')

:

# هذا ضروري لعرض الصور .get_ipython (). Run_line_magic ('matplotlib'، 'inline')

:

# واردات كشف الكائنات # هنا توجد عمليات الاستيراد من وحدة الكشف عن الكائنات. من أدوات الاستيراد label_map_util

:

# Modelpreparation # Anymodel الذي تم تصديره باستخدام أداة `export_inference_graph.py` يمكن تحميله بشكل بسيط عن طريق تغيير` PATH_TO_FROZEN_GRAPH` للإشارة إلى ملف .pb جديد. # Bydefault نستخدم نموذج "SSD مع Mobilenet" هنا. # راجع https: // github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md# لقائمة من النماذج الأخرى التي يمكن تشغيلها خارج الصندوق بسرعات ودقة متفاوتة. # Whatmodel للتحميل. MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'MODEL_FILE = MODEL_NAME +' .tar.gz'DOWNLOAD_BASE = ' الرسم البياني لاكتشاف المسار. = MODEL_NAME + '/frozen_inference_graph.pb'# قائمة السلاسل المستخدمة لإضافة تسمية صحيحة لكل صندوق. PATH_TO_LABELS = os.path.join (' data '،' mscoco_label_map.pbtxt ')

:

#DownloadModelopener = urllib.request.URLopener () opener.retrieve (DOWNLOAD_BASE + MODEL_FILE، MODEL_FILE) tar_file = tarfile.open (MODEL_FILE) للملف الموجود في tar_file.getmembers (): file_name = os.path.basame (): file_name = os.path.basame (): frozen_inference_graph.pb'in file_name: tar_file.extract (file، os.getcwd ())

:

# قم بتحميل نموذج Tensorflow (مجمد) إلى memory.detection_graph = tf.Graph () مع detect_graph.as_default (): od_graph_def = tf.GraphDef () withtf.gfile.GFile (PATH_TO_FROZEN_GRAPH، 'rb') كما fid: serialized_graph = .read () od_graph_def.ParseFromString (serialized_graph) tf.import_graph_def (od_graph_def، name = '')

:

# Loadinglabel map # مؤشرات خرائط Labelmaps لأسماء الفئات ، بحيث عندما تتوقع شبكة الالتفاف الخاصة بنا `5` ، # فنحن نعرف أن هذا يتوافق مع` الطائرة`. هنا نستخدم وظائف الأداة الداخلية ، # ولكن أي شيء يُرجع أعدادًا صحيحة لرسم الخرائط للقوائم الوسيطة المناسبة finecategory_index = label_map_util.create_category_index_from_labelmap (PATH_TO_LABELS، use_display_name = True)

:

defrun_inference_for_single_image (صورة ، رسم بياني): مع graph.as_default (): مع tf.Session () as sess: # احصل على مقابض لإدخال وإخراج أجهزة tensors ops = tf.get_default_graph (). get_operations () all_tensor_names = (output.name لـ op in ops for output in op.outputs} tensor_dict = {} للمفتاح في : tensor_name = key + ': 0' if tensor_name in all_tensor_names : tensor_dict = tf.get_default_graph (). get_tensor_by_name (tensor_name) if'detection_masks'in tensor_dict: # المعالجة التالية فقط للكشف عن الصور المفردة = tf.squeeze (tensor_dict،) كشف_الماس = tf. مطلوب لترجمة القناع من boxcoordinates إلى إحداثيات الصورة وتناسب حجم الصورة. real_num_detection = tf.cast (tensor_dict، tf.int32) detect_boxes = tf.slice (الكشف_صناديق ، ،،) كشف_الماس = tf.slice (اكتشاف_الماس ،،) .reframe_box_masks_to_image_ أقنعة (كشف_قصص ، كشف_صناديق ، صورة. شكل ، صورة. شكل) كشف_ماس_إصلاح = tf.cast (tf.gكثر (كشف_ماس_إكسفرامد ، 0.5) ، tf.uint8) # اتبع الاتفاقية عن طريق إعادة إدخال مقياس الدُفعة tensor_dict = tf.expand_dims (كشف ، ماسكس_ريفام) 0) image_tensor = tf.get_default_graph (). Get_tensor_by_name ('image_tensor: 0') # تشغيل الاستدلال output_dict = sess.run (tensor_dict، feed_dict = (image_tensor: image)) # جميع المخرجات عبارة عن صفائف عائمة 32 ، لذا قم بتحويل الأنواع = int (output_dict) output_dict = output_dict . astype (np.int64) output_dict = output_dict output_dict = output_dict if'detection_masks'in output_dict: output_dict = output_dict return output_dict

:

import cv2cam = cv2.cv2.VideoCapture (0) rolling = Truewhile (rolling): ret، image_np = cam.read () image_np_expanded = np.expand_dims (image_np، axis = 0) # الاكتشاف الفعلي. output_dict = run_inference_for_single_image (image_np ) # تصور نتائج الكشف. Vis_util.visualize_boxes_and_labels_on_image_array (image_np، output_dict، output_dict، output_dict، category_index، example_masks = output_dict.get ('الكشف_الماسك') ، استخدام_الطبيعة_التسوية = صحيح = سطر ") ، cv2.resize (image_np، (1000،800)))) إذا كان cv2.waitKey (25) & 0xFF == ord ('q'): break cv2.destroyAllWindows () cam.release ()

عند تشغيل دفتر ملاحظات Jupyter ، سيفتح نظام كاميرا الويب ويكتشف جميع فئات العناصر التي تم تدريبها بواسطة النموذج الأصلي.

شكرا لقراءة هذا المقال ، إذا كان لديك أي اقتراحات ، يرجى التحدث بنشاط في مجال الرسالة ~

اترك تعليقا

دعونا نتشارك في السلع الجافة لتعلم وتطوير الذكاء الاصطناعي معًا

إذا أعيد طبعه ، يرجى ترك رسالة في الخلفية واتباع مواصفات إعادة الطباعة

اليوم صوت الأساسية | إشعار! 2020 عرض 3.15 CCTV سيتم بث تأخر

تضحك كثير من الأحيان! قائمة نكتة شعبية 2019 المبرمجين تطوير

لماذا سيئة جدا، ما يمكن القيام به معظم رمز لتحسين الرمز؟

ييتشانغ، هوبى إزالة من السيطرة على جميع نقاط التفتيش على الطرق

جي لين Yuanhan ممرضة "العدوى" 50 يوم: آخر يوم لي في ووهان

ومواجهة التحديات معا! الاتحاد الدولي العام للتضامن قرار التمديد الحركة الأولمبية

رائد فضاء، ساونا، قلم رائع الأطباء الكتابة على الجدران احتجاجا الجبهة مفصلة "البيضاء" معدات الحماية

تدخل البرازيل في حالة الكوارث العامة ، ويبرد الشاطئ الساخن بسرعة

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

تشونغشان تنفيذ تدريبات المدرسة! ارتداء زي مدرسي تتغير "طالب" العودة إلى المدرسة محاكاة مشهد المدرسة

أجهزة Bacheng والمؤسسات / المستطلعين الشركات المملوكة للدولة تشارك في الوقاية وأكثر من تسعين في المئة لديها ثقة فى الوقاية من الاوبئة والسيطرة

شكرا للقتال من خلال الحياة ووهان، اعتبارا ليلة رأس السنة في الفريق الطبي قوانغدونغ عاد