رؤية الجهاز للبيع بالتجزئة. كيفية قراءة بطاقات الأسعار في المتجر

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

ستناقش المقالة بالضبط كيفية استخدامها لتعريب وتحديد العديد من الكائنات على نفس سعر المتجر ، وكذلك التعرف على محتوياته. تم بالفعل حل مهمة مماثلة تتمثل في التعرف على علامات أسعار ايكيا على Habré باستخدام أدوات معالجة الصور الكلاسيكية المتوفرة في مكتبة OpenCV.

بشكل منفصل ، أود أن أشير إلى أن الحل يمكن أن يعمل على كل من منصة SAP HANA بالاشتراك مع Tensorflow Serving ، وعلى SAP Cloud Platform.

إن مهمة التعرف على سعر السلع هي مهمة للمشترين الذين يرغبون في "تحسس" الأسعار مع بعضهم البعض واختيار متجر للمشترين وبائعي التجزئة - فهم يريدون معرفة أسعار المنافسين في الوقت الفعلي.

كلمات كافية - اذهب إلى التقنية!

مجموعة أدوات

للكشف عن الصور وتصنيفها ، استخدمنا الشبكات العصبية التلافيفية المنفذة في مكتبة TensorFlow والمتاحة للتحكم عبر واجهة برمجة التطبيقات Object Detection API.
إن TensorFlow Object Detection API عبارة عن إطار تعريف مفتوح المصدر يعتمد على TensorFlow يبسط إنشاء النماذج ونشرها للكشف عن الكائنات والتدريب عليها ونشرها.

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

من الممكن أن تطرح سؤالاً - لماذا لا تتم جميع عمليات المعالجة على TF؟ الجواب بسيط للغاية - سيتطلب المزيد من الوقت للتنفيذ ، ولكن لم يكن هناك الكثير منه على أي حال. كان من الأسهل التضحية بسرعة المعالجة وتجميع نموذج أولي منتهي عن الإزعاج باستخدام OCR محلي الصنع.

إنشاء وإعداد مجموعة بيانات

بادئ ذي بدء ، كان من الضروري جمع المواد للعمل. قمنا بزيارة 3 متاجر والتقطنا حوالي 400 صورة لبطاقات أسعار مختلفة على كاميرا هاتف محمول في الوضع التلقائي

صور عينة:


التين. 1. مثال لصورة بطاقة الثمن


التين. 2. مثال لصورة بطاقة السعر

بعد ذلك ، تحتاج إلى معالجة جميع صور علامات الأسعار ووضع علامة عليها. في عملية جمع الصور ، حاولنا جمع صور عالية الجودة (بدون قطع أثرية): بطاقات أسعار بنفس التنسيق تقريبًا ، بدون ضبابية ، دوران كبير ، إلخ. تم ذلك لتسهيل مزيد من المقارنة بين المحتوى الموجود على بطاقة الأسعار الحقيقية وصورتها الرقمية. ومع ذلك ، إذا قمنا بتدريب الشبكة العصبية فقط على الصور المتاحة عالية الجودة ، فسيؤدي ذلك بشكل طبيعي جدًا إلى حقيقة أن ثقة النموذج في تحديد الأمثلة المشوهة ستنخفض بشكل كبير. من أجل تدريب الشبكة العصبية على مقاومة مثل هذه المواقف ، استخدمنا الإجراء المعروف لتوسيع مجموعة التدريب بنسخ مشوهة من الصور (تكبير). لتكملة عينة التدريب ، قمنا بتطبيق خوارزميات من مكتبة Imgaug: التحولات ، المنعطفات الصغيرة ، الضبابية الغوسية ، الضوضاء. تمت إضافة صور مشوهة إلى العينة ، مما أدى إلى زيادتها بنحو 5 مرات (من 300 إلى 1500 صورة).

لوضع علامة على الصورة وتحديد الكائنات ، تم استخدام برنامج LabelImg ، وهو متاح في المجال العام. يسمح لك بتحديد الكائنات الضرورية في الصورة بمستطيل وتعيين كل فئة للمربع المحيط. يتم حفظ جميع إحداثيات وتسميات الإطارات التي تم إنشاؤها لكل صورة في ملف XML منفصل.

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


التين. 3. مثال لصورة زوج من علامات الأسعار المميزة في LabelImg. يتم تمييز المناطق التي تحتوي على وصف المنتج والسعر والباركود.


التين. 4. مثال لصورة لعلامة سعر مميزة في LabelImg. يتم تمييز المناطق التي تحتوي على وصف المنتج والسعر والباركود.

بعد معالجة جميع الصور ووضع علامة عليها ، نقوم بإعداد مجموعة البيانات مع فصل جميع الصور وملفات العلامات في عينة تدريب واختبار. عادة ما تأخذ 80٪ من عينة التدريب إلى 20٪ من عينة الاختبار وتخلط بشكل عشوائي.

بعد ذلك ، على الجهاز حيث سيتم تدريب النموذج ، من الضروري تثبيت جميع المكتبات الضرورية. بادئ ذي بدء ، نقوم بتثبيت مكتبة التعلم الآلي TensorFlow. اعتمادًا على نوع النظام الخاص بك وتحتاج إلى تثبيت مكتبة إضافية للحوسبة على GPU. بعد ذلك ، قم بتثبيت مكتبة Tensorflow Object Detection API ومكتبات إضافية للعمل مع الصور والرسوم البيانية. فيما يلي قائمة بالمكتبات التي استخدمناها في عملنا:

TensorFlow-GPU v1.5، CUDA v9.0، cuDNN v7.0
Protobuf 3+ ، Python-tk ، وسادة 1.0 ، lxml ، tf Slim ، دفتر Jupyter ، Matplotlib
Tensorflow ، Cython ، Cocoapi ؛ Opencv-python ؛ الباندا

عند اكتمال جميع خطوات التثبيت ، يمكنك المتابعة لإعداد البيانات وتعيين معلمات التعلم.

تدريب نموذجي

لحل مشكلتنا ، استخدمنا نسختين من الشبكة العصبية المدربة مسبقًا MobileNet V2 و Faster-RCNN V2 على مجموعة بيانات coco كمستخرجات خاصية الصورة. تم إعادة تدريب النماذج على 4 فئات جديدة: ثمن ، وصف المنتج ، السعر ، الباركود. بصفتنا الرئيسي ، اخترنا MobileNet V2 ، وهو نموذج بسيط نسبيًا يتيح لنا توفير جودة مقبولة بسرعة ممتعة. يتيح لك MobileNet V2 تنفيذ التعرف على الصور حتى على جهاز محمول.

أولاً ، تحتاج إلى إخبار مكتبة API لكشف كائن Tensorflow بعدد التسميات ، بالإضافة إلى أسماء هذه التسميات.

آخر شيء يجب القيام به قبل التدريب هو إنشاء خريطة مختصرة وتحرير ملف التكوين. تُعلم خريطة الملصق النموذج وتعيّن أسماء الفئات لأرقام معرّف الفئة لكل كائن.



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



تبدأ إجراءات التدريب من قبل القيادة:

python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/mobilenet.config 

إذا تم تكوين كل شيء بشكل صحيح ، يقوم TensorFlow بتهيئة إعادة تدريب الشبكة العصبية. يمكن أن تستغرق التهيئة ما يصل إلى 30 ثانية قبل بدء التدريب الفعلي. مع إعادة تدريب الشبكة العصبية في كل خطوة ، سيتم عرض قيمة وظيفة خطأ (خسارة) الخوارزمية. بالنسبة إلى MobileNet V2 ، تبلغ القيمة الأولية لوظيفة الخسارة حوالي 20. يجب تدريب النموذج حتى تنخفض وظيفة الخسارة إلى قيمة تقارب 2. لتصور عملية التعلم للشبكة العصبية ، يمكنك استخدام الأداة المساعدة TensorBoard المناسبة.

 : tensorboard --logdir=training 

يقوم الأمر بتهيئة واجهة الويب على الجهاز المحلي ، والتي ستكون متاحة في localhost: 6006. بعد التوقف ، يمكن استئناف إجراء التدريب لاحقًا باستخدام نقاط التفتيش التي يتم حفظها كل 5 دقائق.

التعرف على بطاقات الأسعار وعناصرها

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

 python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2.config --trained_checkpoint_prefix training/model.ckpt-**** --output_directory inference_graph 

بعد هذا الإجراء ، يكون مصنف اكتشاف الكائن جاهزًا للعمل. للتحقق من التعرف على الصورة ، يكفي تشغيل برنامج نصي يأتي مع مكتبة Tensorflow Object Detection Library التي تشير إلى النموذج الذي تم تدريبه مسبقًا والصور للتعرف عليه. يتم توفير مثال نصي Python قياسي هنا .

في مثالنا ، يستغرق التعرف على صورة واحدة باستخدام نموذج ssd mobilenet على كمبيوتر محمول بسيط حوالي 1.5 ثانية.


التين. 5. نتيجة التعرف على الصور مع بطاقات الأسعار في عينة الاختبار


التين. 6. نتيجة التعرف على الصور مع بطاقات الأسعار في عينة الاختبار

عندما نكون مقتنعين بأن علامات الأسعار يتم اكتشافها بشكل طبيعي ، فمن الضروري تعليم النموذج لقراءة المعلومات من العناصر الفردية: سعر البضائع واسم البضائع والرمز الشريطي. لهذا ، هناك مكتبات متاحة في Python للتعرف على الشخصيات والرموز الشريطية في الصور الفوتوغرافية - Pyzbar و Tesseract.

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



ثم نستخدم هذه الإحداثيات لقطع صورتنا إلى أجزاء للتعرف على المنطقة الضرورية فقط.




التين. 7. مثال للأجزاء المميزة من بطاقة الأسعار

بعد ذلك ، ننقل جميع المناطق المقطوعة إلى المكتبات: يتم نقل اسم المنتج وسعر المنتج إلى tesseract ، والرمز الشريطي إلى pyzbar ، ونحصل على نتيجة التعرف.



التين. 8. من الأمثلة على المحتوى المعترف به منطقة بطاقة الأسعار.

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

مثال للتعرف على الصور السيئة:





التين. 9. مثال على الأجزاء المظللة من علامة سعر غير واضحة ومحتوى معترف به

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

نفس النص بنوعية جيدة.



التين. 10. مثال على أجزاء السعر المميز والمحتوى المعترف به

الاستنتاجات

في النهاية ، تمكنا من الحصول على نموذج للجودة المقبولة مع نسبة منخفضة من الأخطاء ونسبة عالية من الكشف عن الأشياء ذات الصلة. يتمتع Faster-RCNN Inception V2 بجودة تعرف أفضل من MobileNet SSD V2 ، ولكنه يتعلق بترتيب من حيث الحجم أدنى من السرعة ، وهو قيد كبير.

الدقة التي تم الحصول عليها من التعرف على بطاقة الأسعار على عينة مؤجلة من 50 صورة هي 100٪ ، أي أنه تم تحديد جميع بطاقات الأسعار بنجاح في جميع الصور. كانت دقة التعرف على المناطق ذات الباركود والسعر 90٪. دقة التعرف على منطقة النص 85٪. كانت دقة قراءة السعر حوالي 95٪ ، والنص - 80-85٪. بالإضافة إلى ذلك ، كتجربة ، نقدم نتيجة التعرف على بطاقة الأسعار ، والتي تختلف تمامًا عن علامات الأسعار في عينة التدريب.


التين. 11. مثال على التعرف على بطاقات الأسعار غير النمطية التي ليست في مجموعة التدريب.

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

ما الذي يمكن فعله أيضًا؟

1) تم نشر مقال رائع حول التعزيز التلقائي مؤخرًا ، والذي يمكن استخدام منهج
2) يمكن ويجب أن يضغط النموذج المدرب النهائي بشكل كبير
3) أمثلة على نشر الخدمات النهائية في SCP و TFS

في إعداد النموذج الأولي وهذه المقالة ، تم استخدام المواد التالية:

1. جلب التعلم الآلي (TensorFlow) إلى المؤسسة مع SAP HANA
2. مؤسسة SAP Leonardo ML - أحضر النموذج الخاص بك (BYOM)
3. TensorFlow كائن كشف مستودع GitHub
4. مقالة التعرف على شيكات ايكيا
5. مقال عن مزايا MobileNet
6. TensorFlow المادة كشف الكائن

المقال من إعداد:
سيرجي عبد الراكيبوف ، دميتري بوسلوف ، أليكسي خريستينكو

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


All Articles