نص كامل 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 ، سيفتح نظام كاميرا الويب ويكتشف جميع فئات العناصر التي تم تدريبها بواسطة النموذج الأصلي.
شكرا لقراءة هذا المقال ، إذا كان لديك أي اقتراحات ، يرجى التحدث بنشاط في مجال الرسالة ~
اترك تعليقا
دعونا نتشارك في السلع الجافة لتعلم وتطوير الذكاء الاصطناعي معًا
إذا أعيد طبعه ، يرجى ترك رسالة في الخلفية واتباع مواصفات إعادة الطباعة