بعد تدريب نموذجك الخاص باستخدام AutoML Vision Edge، يمكنك استخدامها في تطبيقك لرصد العناصر في الصور.
هناك طريقتان لدمج النماذج التي تم تدريبها من AutoML Vision Edge: يمكنك ودمج النموذج عن طريق وضعه في مجلد مواد العرض في تطبيقك، أو يمكنك لتنزيله ديناميكيًا من Firebase.
خيارات تجميع النموذج | |
---|---|
مُجمَّعة في تطبيقك |
|
مستضاف باستخدام Firebase |
|
قبل البدء
إذا كنت تريد تنزيل نموذج، تأكد من إضافة Firebase إلى مشروع Android إذا لم تكن قد قمت بذلك بالفعل. هذه العملية غير مطلوبة عند دمج النموذج.
أضف التبعيات لمكتبة مهام TensorFlow Lite إلى ملف Gradle على مستوى التطبيق، ويكون عادةً
app/build.gradle
:لتجميع نموذج مع تطبيقك:
dependencies { // ... // Object detection with a bundled Auto ML model implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly-SNAPSHOT' }
لتنزيل نموذج ديناميكيًا من Firebase، أضِف أيضًا تعلُّم الآلة في Firebase. التبعية:
dependencies { // ... // Object detection with an Auto ML model deployed to Firebase implementation platform('com.google.firebase:firebase-bom:26.1.1') implementation 'com.google.firebase:firebase-ml-model-interpreter' implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly' }
1- تحميل النموذج
إعداد مصدر نموذج محلي
لدمج النموذج مع تطبيقك:
- يمكنك استخراج النموذج من أرشيف ZIP الذي نزّلته من وحدة تحكُّم Google Cloud.
- تضمين النموذج في حزمة التطبيق:
- إذا لم يكن لديك مجلد مواد عرض في مشروعك، أنشئ واحدًا تلو الآخر
النقر بزر الماوس الأيمن على المجلد
app/
، ثم النقر على جديد > مجلد > مجلد مواد العرض: - انسخ ملف نموذج
tflite
مع البيانات الوصفية المضمّنة إلى مواد العرض. المجلد.
- إذا لم يكن لديك مجلد مواد عرض في مشروعك، أنشئ واحدًا تلو الآخر
النقر بزر الماوس الأيمن على المجلد
أضِف ما يلي إلى ملف
build.gradle
لتطبيقك للتأكّد من ذلك. لا تضغط Gradle ملف النموذج عند إنشاء التطبيق:android { // ... aaptOptions { noCompress "tflite" } }
سيتم تضمين ملف النموذج في حزمة التطبيق وسيكون متاحًا. كمادة عرض أولية
ضبط مصدر نموذج مستضاف على Firebase
لاستخدام النموذج المستضاف عن بُعد، أنشئ كائن RemoteModel
،
لتحديد الاسم الذي عينته للنموذج عند نشره:
جافا
// Specify the name you assigned when you deployed the model.
FirebaseCustomRemoteModel remoteModel =
new FirebaseCustomRemoteModel.Builder("your_model").build();
Kotlin
// Specify the name you assigned when you deployed the model.
val remoteModel =
FirebaseCustomRemoteModel.Builder("your_model_name").build()
بعد ذلك، ابدأ مهمة تنزيل النموذج، مع تحديد الشروط التي الذي تريد السماح بتنزيله إذا لم يكن الطراز موجودًا على الجهاز، أو إذا كان طرازًا أحدث إتاحة إصدار معين من النموذج، فإن المهمة ستنزّل بشكل غير متزامن النموذج من Firebase:
جافا
DownloadConditions downloadConditions = new DownloadConditions.Builder()
.requireWifi()
.build();
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(@NonNull Task<Void> task) {
// Success.
}
});
Kotlin
val downloadConditions = DownloadConditions.Builder()
.requireWifi()
.build()
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener {
// Success.
}
تبدأ العديد من التطبيقات مهمة التنزيل في رمز التهيئة الخاص بها، ولكن يمكنك القيام بذلك في أي وقت قبل أن تحتاج إلى استخدام النموذج.
إنشاء أداة رصد عناصر من نموذجك
بعد ضبط مصادر النموذج، أنشِئ عنصر ObjectDetector
من أحد العناصر.
منها.
إذا كان لديك نموذج مجمّع على الجهاز، ما عليك سوى إنشاء أداة رصد عناصر من ملف نموذجي وإعداد نتيجة الثقة الذي تريد طلبه (راجع تقييم النموذج):
جافا
// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);
Kotlin
// Initialization
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build()
val objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options)
فإذا كان لديك نموذج مستضاف عن بُعد، فعليك التحقق من أنه
تم تنزيله قبل تشغيله. يمكنك التحقّق من حالة تنزيل النموذج
باستخدام طريقة isModelDownloaded()
لمدير النموذج.
على الرغم من أنّه ما عليك سوى تأكيد ذلك قبل تشغيل أداة رصد الكائنات، إذا لكل من نموذج مُستضاف عن بُعد ونموذج مُجمع محليًا، فقد تجعل إجراء عملية الفحص هذه عند إنشاء مثيل لمكتشف الكائن: إنشاء كاشف عن الكائنات من النموذج البعيد إذا تم تنزيله، ومن الجهاز نموذج بخلاف ذلك.
جافا
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean isDownloaded) {
}
});
Kotlin
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener { success ->
}
وإذا كان لديك نموذج مستضاف عن بُعد فقط، يجب إيقاف النموذج المرتبط بالنموذج
وظائف - على سبيل المثال، الاستخدام الرمادي أو إخفاء جزء من واجهة المستخدم - حتى
التأكد من تنزيل النموذج. يمكنك إجراء ذلك من خلال إرفاق مستمع
إلى طريقة download()
لمدير النموذج.
وبعد معرفة أن نموذجك قد تم تنزيله، أنشئ أداة رصد الكائنات من ملف النموذج:
جافا
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnCompleteListener(new OnCompleteListener<File>() {
@Override
public void onComplete(@NonNull Task<File> task) {
File modelFile = task.getResult();
if (modelFile != null) {
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0)
.build();
objectDetector = ObjectDetector.createFromFileAndOptions(
getApplicationContext(), modelFile.getPath(), options);
}
}
});
Kotlin
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnSuccessListener { modelFile ->
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0f)
.build()
objectDetector = ObjectDetector.createFromFileAndOptions(
applicationContext, modelFile.path, options)
}
2- تحضير صورة الإدخال
بعد ذلك، لكل صورة تريد تصنيفها، أنشِئ عنصر TensorImage
من
. يمكنك إنشاء كائن TensorImage
من Bitmap
باستخدام
طريقة fromBitmap
:
جافا
TensorImage image = TensorImage.fromBitmap(bitmap);
Kotlin
val image = TensorImage.fromBitmap(bitmap)
إذا لم تكن بيانات الصورة في Bitmap
، يمكنك تحميل مصفوفة بكسل كما هو موضّح في
مستندات TensorFlow Lite.
3- تشغيل أداة رصد الكائنات
لرصد العناصر في صورة، مرِّر كائن TensorImage
إلى
طريقة detect()
لـ ObjectDetector
.
جافا
List<Detection> results = objectDetector.detect(image);
Kotlin
val results = objectDetector.detect(image)
4. الحصول على معلومات عن العناصر المصنّفة
إذا نجحت عملية اكتشاف الكائنات، سيتم عرض قائمة Detection
.
الأخرى. يمثل كل عنصر Detection
شيئًا تم رصده في
. يمكنك الحصول على مربع إحاطة كل كائن وتسمياته.
على سبيل المثال:
جافا
for (Detection result : results) {
RectF bounds = result.getBoundingBox();
List<Category> labels = result.getCategories();
}
Kotlin
for (result in results) {
val bounds = result.getBoundingBox()
val labels = result.getCategories()
}
نصائح لتحسين الأداء في الوقت الفعلي
إذا أردت تصنيف الصور في تطبيق في الوقت الفعلي، فاتبع هذه الإرشادات لتحقيق أفضل معدلات عرض الإطارات:
- تقييد الطلبات إلى مصنِّف الصور إذا أصبح إطار فيديو جديد
المتاحة أثناء تشغيل تصنيف الصور، أفلِت الإطار. يمكنك الاطّلاع على
صف واحد (
VisionProcessorBase
) في نموذج تطبيق Quickstart كمثال. - إذا كنت تستخدم مخرجات أداة تصنيف الصور لتراكب الرسومات على
الصورة المدخلة، احصل أولاً على النتيجة، ثم تعرض الصورة
وتراكبها في خطوة واحدة. ومن خلال القيام بذلك، يمكنك العرض على سطح الشاشة
مرة واحدة فقط لكل إطار إدخال يمكنك الاطّلاع على
CameraSourcePreview
وGraphicOverlay
صف في نموذج تطبيق البدء السريع مثال. -
في حال استخدام واجهة برمجة التطبيقات Camera2 API، يمكنك التقاط الصور في تنسيق
ImageFormat.YUV_420_888
إذا كنت تستخدم واجهة برمجة التطبيقات للكاميرا القديمة، يمكنك التقاط الصور في تنسيق
ImageFormat.NV21