كيفية إنشاء تطبيق جوال برؤية الكمبيوتر في Flutter
نشرت: 2020-04-22أصبحت ميزات التعلم الآلي ضرورية في تطبيقات اليوم. يمكنهم تحسين الرضا ومنح جمهورك تجربة التطبيق غير العادية التي يريدونها. بفضل تحسينات الأجهزة والبرامج الحديثة ، ينتقل تنفيذ نماذج التعلم الآلي من السحابة إلى الأجهزة المحمولة نفسها.
هذا له تأثير كبير على تجربة المستخدم ، من خلال إزالة زمن الاستجابة ومعالجة مشكلات الخصوصية. عندما قررنا بناء Planter ، وهو تطبيق يساعد المستخدمين على العناية بالنباتات المنزلية الخاصة بهم ، علمنا أن الشيء الذي يمكن أن يجعله بارزًا في سوق التطبيقات هو الذكاء الاصطناعي.
كانت فكرتنا هي إضافة وظيفة للتعرف على نوع النبات المنزلي من صورة باستخدام تقنيات رؤية الكمبيوتر. بفضل تحسينات TensorFlow Lite للأداء على الجهاز ، يمكن للتطبيق تشغيل نموذج التصنيف الخاص بنا فقط على جهاز المستخدم. في هذه المقالة ، سأشرح كيفية إعداد نموذج تصنيف الصور بسرعة ونشره في تطبيق تم تطويره باستخدام Flutter.
بناء وحدة التعلم الآلي في Flutter - خطوة بخطوة
التعامل مع مشكلة البيانات الصغيرة
الخطوة الأولى في بناء نموذج التعلم الآلي هي جمع البيانات. من أجل إنشاء مجموعة بيانات تدريبية ، استخدمنا Google Images Downloader الذي سمح لنا بتنزيل صور نباتية من بحث Google ، مع تسمية الحقوق لإعادة الاستخدام التجاري ، بالنص القصير التالي:
$ googleimagesdownload - كلمات رئيسية "Zamioculcas zamiifolia" --usage_rights المسمى مقابل إعادة الاستخدام
تتكون مجموعة البيانات النهائية لدينا من حوالي 70-170 صورة لكل نوع. كان من الصعب جدًا إعداد نموذج تصنيف صور جيد الأداء من البداية بقليل من البيانات.
لحسن الحظ ، هناك بعض الشبكات العصبية الاصطناعية القوية المدربة مسبقًا والمتاحة للجمهور والتي يمكن استخدامها لبناء مصنف صور عالي الدقة ، حتى لو كانت مجموعة البيانات الخاصة بك تتكون من حوالي مائة مثال فقط لكل فئة. هذه التقنية في استخدام وتعديل نموذج مدرب مسبقًا لحالة استخدام معينة تسمى نقل التعلم.
زيادة البيانات
من أجل تحقيق أقصى استفادة من مجموعة البيانات الخاصة بنا ، استخدمنا حزمة المعالجة المسبقة ImageDataGenerator من keras ، والتي تنشئ مجموعات من صور الموتر ، وتزيدها أثناء التنقل. استخدمنا التحولات التالية:
- تقليب المدخلات أفقيًا : orizontal_flip = صحيح
- ضبط قيمة إزاحة السطوع من النطاق: brightness_range = (0.75، 1.25)
- القص بالشدة المقدمة: shear_range = 15
- إعادة القياس ، عن طريق الضرب في قيمة محددة: إعادة القياس = 1. / 255
- التكبير والتصغير: zoom_range = 0.4
- التحول في أي اتجاه: width_shift_range = 0.1 ، height_shift_range = 0.15
train_datagen_augment = ImageDataGenerator (rotation_range = 30 ، أفقي_فليب = صحيح ، نطاق السطوع = (0.75،1.25) ، shear_range = 15 ، إعادة التدوير = 1. / 255 ، zoom_range = 0.4 ، width_shift_range = 0.1 ، height_shift_range = 0.15)
تمرين
استخدمنا NASNet-Mobile ، وهي شبكة عصبية تلافيفية مدربة على أكثر من مليون صورة من مجموعة بيانات ImageNet. تتكون بنية NasNetMobile من مجموعة من الكتل المبنية بخلايا الشبكة العصبية.
الكتلة هي وحدة تشغيلية تتضمن تحويلات معروفة من الشبكات العصبية لتصنيف الصور ، بما في ذلك: التلافيفات العادية ، والتلافيف القابلة للفصل ، والتجميع الأقصى ، والتجميع المتوسط ، وتعيين الهوية ، وما إلى ذلك. تم تدريب الشبكة لتعيين صورة 1 من أصل 1000 فئة تشمل الحيوانات والزهور والأثاث. نتيجة لذلك ، تعلمت الشبكة تمثيلات غنية بالميزات لمجموعة واسعة من الصور.
أنشأنا نموذجنا مكملين الخطوات التالية:
- قم بإزالة الطبقة الأخيرة من الشبكة المدربة مسبقًا
- أضف نموذج تلافيفي في نهاية الشبكة
- قم بتجميد كل الطبقات في الشبكة المدمجة باستثناء تلك التي تأتي من النموذج المضاف
- قم بتدريب النموذج حتى تتوقف الدقة عن التحسن
- قم بإلغاء تجميد جميع الطبقات في آخر كتلة تلافيفية مجمدة للنموذج المدرب مسبقًا
- قم بتدريب النموذج حتى تتوقف الدقة عن التحسن
- كرر النقطتين 5 و 6 خمس مرات
- قم بإلغاء تجميد النموذج بأكمله ، وقم بتدريبه حتى تتوقف الدقة عن التحسن
تقييم النموذج
يحاول نموذج تصنيف Planter تعيين نوع نبات لمصنع منزلي ، بناءً على صورته. يعيد النموذج ثلاثة أنواع خصص لها أعلى الاحتمالات ، والتي يمكن للمستخدم أن يختار منها. أثناء تقييم النموذج ، استخدمنا المقياسين التاليين:
- الدقة الفئوية ،
- top_k_categorical_accuracy (مع k = 3).
يعرض الرسم البياني التالي الدقة الفئوية لكل حقبة تدريب في نموذجنا.

الدقة الفئوية النهائية لمجموعة التقييم هي 0.870 ، وأعلى 3 دقة فئوية هي 0.916. كانت هذه النتائج مرضية للغاية ، مع الأخذ في الاعتبار الحجم الصغير لمجموعة بيانات التدريب المستخدمة.
نموذج التحويل
إذا أردنا استخدام نموذج keras في تطبيق جوال ، فيجب تحويله إلى كائن TensorFlow Lite FlatBuffer. يمكن القيام بذلك باستخدام الكود الموضح في المثال أدناه.
استيراد tensorflow.lite كما لايت keras_model_path = "النموذج / keras_model" tflite_model_path = "model / model.tflite" model.save (keras_model_path) المحول = lite.TFLiteConverter.from_keras_model_file (keras_model_path) tflite_model = converter.convert () فتح (tflite_model_path، "wb"). اكتب (tflite_model)
الآن بعد أن تم تخزين النموذج الأمثل في مسار model / model.tflite ، يمكننا استخدامه بسهولة في تطبيقات الأجهزة المحمولة الأصلية ، باستخدام:
- Core ML - لتطبيقات iOS
- مكتبة دعم Android TensorFlow Lite - لتطبيقات Android
سأريكم الآن ، بناءً على تجربتنا مع Planter ، كيفية استخدام هذا النموذج مع Flutter.

لماذا Flutter؟
Flutter عبارة عن مجموعة أدوات لواجهة المستخدم مملوكة لشركة Google. تم إنشاؤه لبناء تطبيقات مجمعة أصلاً للجوال والويب وسطح المكتب من قاعدة بيانات واحدة. إذا كنت تتساءل عما إذا كان يجب عليك استخدام Flutter ، فإنني أوصي بقراءة هذه المقالة ، وهي دراسة حالة عن Topline بواسطة استوديوهات Abbey Road التي تم تطويرها في Flutter بواسطة M Liquido.
يمكننا الاستفادة من نموذجنا مع مكتبة tflite. إنه مكون إضافي Flutter للوصول إلى TensorFlow Lite API. وهو يدعم تصنيف الصور واكتشاف الكائنات و Pix2Pix و Deeplab و PoseNet على كل من أنظمة iOS و Android.
هل تشعر بالفضول حيال تطوير Flutter؟
يتعلم أكثرفي عملية تطوير التطبيق لدينا ، كان علينا إكمال الخطوات التالية:
- أضف tflite كعنصر تبعية في ملف pubspec.yaml الخاص بنا
- قم بإنشاء مجلد الأصول ووضع ملف تسمية وملف نموذج فيه.
- في pubspec.yaml ، أضف:
أصول: - الأصول / labels.txt - الأصول / mobilenet_v1_1.0_224.tflite
- استيراد مكتبة tflite:
استيراد "الحزمة: tflite / tflite.dart" ؛
- قم بتحميل النموذج والتسميات:
دقة السلسلة = انتظار Tflite.loadModel ( النموذج: "الأصول / model.tflite" ، التصنيفات: "Assass / labels.txt" ، numThreads: 1 // الافتراضي إلى 1 ) ؛
- قم بتشغيل النموذج على صورة (قم بالتنبؤ):
var الاعترافات = انتظار Tflite.runModelOnImage ( المسار: tfResizedImage.path ، imageStd: 255.0 ، عدد النتائج: 3 ، العتبة: 0.00001 ، asynch: صحيح ) ؛
إخراج التنبؤ له التنسيق الموضح في المثال التالي:
[{trust: 0.03441339731216431، index: 46، label: Vriesea splendens}، {trust: 2.086162567138672e-7، index: 7، label: Aphelandra squarrosa}، {trust: 1.4901161193847656e-7، index: 19، label: Fern arum }]
- الافراج عن الموارد:
انتظار Tflite.close () ؛
النتائج النهائية
يتيح لك Planter إضافة نبتة مع صورة إلى مكتبتك. يمكنك الحصول على الصورة من خلال التقاط صورة للنبات الخاص بك ، أو اختيار واحدة من معرض الهاتف. يُرجع نموذج تصنيف المنزل والنبات المضمن ثلاثة أنواع معترف بها بأعلى احتمالية ، ويقدمها في قائمة.
سيؤدي النقر فوق أحد الأنواع إلى نقلك إلى عرض ملخص النبات ، والذي يحتوي على نموذج مملوء مسبقًا بجداول الري والتسميد المقترحة ، وبعض المعلومات الإضافية حول النبات. في التدفق أدناه ، يمكنك رؤية مثال يتم فيه التعرف على Zamioculcas zamiifolia في صورة تم التقاطها بهاتف مزود بكاميرا.



انقل تعلم الآلة إلى الأجهزة المحمولة!
في هذه المقالة ، أردت إقناعك بأن إضافة ميزات AI المبهجة للمستخدم في تطبيق هاتفك المحمول يمكن أن تكون بسيطة وسريعة. علاوة على ذلك ، فإن نقل تنفيذ النموذج إلى الهاتف المحمول يمنح المستخدمين تجربة مستخدم مبهجة عن طريق إزالة فترات الاستجابة لاستجابة واجهة برمجة التطبيقات. كما أنه يساعد في ضمان أمان البيانات ، حيث إن إرسال البيانات إلى السحابة غير مطلوب.
يمكنك الاستفادة بشكل كبير من استخدام Flutter وقدرته على تجميع التعليمات البرمجية لكل من تطبيقات iOS و Android الأصلية في نفس الوقت. بقليل من الجهد ، يمكنك جعل تطبيقك متميزًا في السوق ، وزيادة الاحتفاظ بجمهور تطبيقك إلى أقصى حد.
جاهز لمشروعك القادم؟ لا تتردد وتواصل معنا!