بعد تدريب نموذجك الخاص باستخدام 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
في تطبيق نموذج البدء السريع للحصول على مثال. - إذا كنت تستخدِم الناتج من أداة تصنيف الصور لوضع الرسومات فوق
صورة الإدخال، احصل أولاً على النتيجة، ثم اعرض
الصورة وطبِّق الرسم عليها في خطوة واحدة. ومن خلال القيام بذلك، يمكنك العرض على سطح الشاشة
مرة واحدة فقط لكل إطار إدخال يمكنك الاطّلاع على
CameraSourcePreview
وGraphicOverlay
صف في نموذج تطبيق البدء السريع مثال. -
في حال استخدام واجهة برمجة التطبيقات Camera2 API، يمكنك التقاط الصور في تنسيق
ImageFormat.YUV_420_888
إذا كنت تستخدم واجهة برمجة التطبيقات للكاميرا القديمة، يمكنك التقاط الصور في تنسيق
ImageFormat.NV21