يوضّح هذا المستند كيفية إنشاء مكتبة TensorFlow Lite لنظام التشغيل iOS بنفسك. عادةً، لا تحتاج إلى إنشاء مكتبة TensorFlow Lite لنظام التشغيل iOS محليًا. إذا كنت ترغب فقط في استخدامه، فإن أسهل طريقة هي استخدام الإصدارات الثابتة أو المسائية التي تم إنشاؤها مسبقًا من TensorFlow Lite CocoaPods. يمكنك الاطّلاع على البدء السريع لنظام التشغيل iOS للحصول على مزيد من التفاصيل حول كيفية استخدامها في مشاريع iOS.
مبنى محليًا
في بعض الحالات، قد ترغب في استخدام إصدار محلي من TensorFlow Lite، على سبيل المثال عندما تريد إجراء تغييرات محلية على TensorFlow Lite واختبار تلك التغييرات في تطبيق iOS أو تفضّل استخدام إطار عمل ثابت مع الإطار الديناميكي الذي نوفّره. لإنشاء إطار عمل عالمي لنظام التشغيل iOS من أجل TensorFlow Lite محليًا، عليك إنشاؤه باستخدام Bazel على جهاز macOS.
تثبيت Xcode
إذا لم يسبق لك تثبيت Xcode 8 أو إصدار أحدث، عليك تثبيت الأدوات باستخدام xcode-select
:
xcode-select --install
إذا كان هذا تثبيتًا جديدًا، ستحتاج إلى قبول اتفاقية الترخيص لجميع المستخدمين باستخدام الأمر التالي:
sudo xcodebuild -license accept
تثبيت Bazel
Bazel هو نظام التصميم الأساسي لمنصة TensorFlow. ثبِّت Bazel وفقًا للتعليمات على موقع Bazel الإلكتروني. احرص على اختيار
إصدار بين _TF_MIN_BAZEL_VERSION
و_TF_MAX_BAZEL_VERSION
في
ملف configure.py
في جذر مستودع tensorflow
.
إعداد WORKSPACE و .bazelrc
شغِّل النص البرمجي ./configure
في دليل دفع TensorFlow الجذري، وأجب بـ "نعم" عندما يسألك النص البرمجي عمّا إذا كنت تريد إنشاء TensorFlow بمساعدة iOS.
إنشاء إطار عمل ديناميكي TensorFlowLiteC (يُنصح به)
بعد إعداد Bazel بشكل صحيح باستخدام نظام التشغيل iOS، يمكنك إنشاء
إطار عمل TensorFlowLiteC
باستخدام الأمر التالي.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
سيؤدي هذا الأمر إلى إنشاء ملف TensorFlowLiteC_framework.zip
ضمن دليل
bazel-bin/tensorflow/lite/ios/
ضمن الدليل الجذري TensorFlow.
يتضمّن إطار العمل الذي تم إنشاؤه تلقائيًا برنامجًا ثنائيًا "دهنيًا" يحتوي على Armv7 وarm64 وx86_64 (ولكن ليس i386). للاطّلاع على القائمة الكاملة لعلامات الإصدار المستخدَمة عند تحديد --config=ios_fat
، يُرجى الرجوع إلى قسم إعدادات iOS في ملف .bazelrc
.
إنشاء إطار عمل ثابت لمنصة TensorFlowLiteC
نوزِّع إطار العمل الديناميكي من خلال Cocoapods تلقائيًا. إذا كنت تريد استخدام إطار العمل الثابت بدلاً من ذلك، يمكنك إنشاء إطار عمل TensorFlowLiteC
ثابت باستخدام الأمر التالي:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
سينشئ الأمر ملفًا باسم TensorFlowLiteC_static_framework.zip
ضمن الدليل bazel-bin/tensorflow/lite/ios/
ضمن الدليل الجذري TensorFlow. ويمكن استخدام هذا الإطار الثابت بالطريقة نفسها التي يتم بها استخدام الإطار الديناميكي.
إنشاء إطارات عمل TFLite بشكل انتقائي
يمكنك إنشاء أُطر عمل أصغر تستهدف مجموعة فقط من النماذج باستخدام بنية انتقائية، ما سيتخطّى العمليات غير المستخدمة في مجموعة النماذج ولا يتضمن سوى نواة التشغيل المطلوبة لتشغيل المجموعة المحدّدة من النماذج. يكون الأمر على النحو التالي:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
سيؤدي الأمر أعلاه إلى إنشاء إطار العمل الثابت
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
للعمليات المضمَّنة والمخصّصة TensorFlow
وإنشاء إطار عمل ثابت اختياريًا
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
إذا كانت نماذجك تحتوي على عمليات Select TensorFlow. تجدر الإشارة إلى أنّه يمكن استخدام العلامة --target_archs
لتحديد بُنى النشر.
الاستخدام في تطبيقك الخاص
مطوّرو CocoaPods
يتوفّر ثلاثة من CocoaPods لمنصة TensorFlow Lite:
TensorFlowLiteSwift
: لتوفير واجهات برمجة تطبيقات Swift لمنصة TensorFlow Lite.TensorFlowLiteObjC
: لتوفير واجهات برمجة تطبيقات Objective-C لتطبيق TensorFlow LiteTensorFlowLiteC
: مجموعة الأجهزة المتسلسلة المشتركة التي تتضمن وقت التشغيل الأساسي TensorFlow Lite وتعرض واجهات برمجة تطبيقات C الأساسية التي تستخدمها اللوحتان أعلاه وليس الغرض منها أن يستخدم المستخدمون بشكل مباشر.
بصفتك مطوِّرًا، عليك اختيار مجموعة الإعلانات المتسلسلة TensorFlowLiteSwift
أو TensorFlowLiteObjC
حسب اللغة المستخدَمة في كتابة التطبيق، ولكن ليس عليك تنفيذ الإجراءين معًا. تختلف الخطوات الدقيقة لاستخدام الإصدارات المحلية من TensorFlow Lite،
استنادًا إلى الجزء الذي تريد إنشاءه تحديدًا.
استخدام واجهات برمجة تطبيقات Swift أو Objective-C المحلية
إذا كنت تستخدم CocoaPods، وأردت فقط اختبار بعض التغييرات المحلية على واجهات برمجة تطبيقات Swift أو واجهات برمجة تطبيقات Objective-C في TensorFlow Lite، يمكنك اتّباع الخطوات الواردة هنا.
يمكنك إجراء تغييرات على واجهات Swift أو واجهات Objective-C في صفحة الدفع على
tensorflow
.افتح الملف
TensorFlowLite(Swift|ObjC).podspec
وعدِّل هذا السطر:
s.dependency 'TensorFlowLiteC', "#{s.version}"
يكون:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
يهدف هذا إلى التأكد من إنشاء واجهات Swift أو Objective-C API مقارنةً بأحدث إصدار متاح ليلاً من واجهات برمجة تطبيقاتTensorFlowLiteC
(الذي تم إنشاؤه كل ليلة بين الساعة 1 و4 صباحًا بتوقيت المحيط الهادئ) بدلاً من الإصدار الثابت الذي قد يكون قديمًا مقارنةً بإصدارtensorflow
المحلي عند الدفع. وبدلاً من ذلك، يمكنك نشر إصدارك الخاص منTensorFlowLiteC
واستخدام ذلك الإصدار (راجِع القسم استخدام TensorFlow Lite الأساسي أدناه).في
Podfile
من مشروع iOS، غيِّر التبعية على النحو التالي للإشارة إلى المسار المحلي إلى الدليل الجذريtensorflow
.
بالنسبة إلى Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
بالنسبة إلى الهدف (ج):
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
عليك تعديل تثبيت المجموعة من الدليل الجذري لمشروع iOS.
$ pod update
أعد فتح مساحة العمل التي تم إنشاؤها (
<project>.xcworkspace
) وأعد إنشاء تطبيقك ضمن Xcode.
استخدام رمز TensorFlow Lite المحلي
يمكنك إعداد مستودع خاص لمواصفات CocoaPods ونشر إطار عمل
TensorFlowLiteC
المخصّص في مستودعك الخاص. يمكنك نسخ ملف podspec هذا وتعديل بعض القيم التالية:
...
s.version = <your_desired_version_tag>
...
# Note the `///`, two from the `file://` and one from the `/path`.
s.source = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
...
s.vendored_frameworks = 'TensorFlowLiteC.framework'
...
بعد إنشاء ملف TensorFlowLiteC.podspec
الخاص بك، يمكنك اتّباع
التعليمات المتعلقة باستخدام CocoaPods الخاصة لاستخدامه في
مشروعك. يمكنك أيضًا تعديل TensorFlowLite(Swift|ObjC).podspec
للإشارة إلى مجموعة TensorFlowLiteC
المخصّصة واستخدام لوحة Swift أو Objective-C في مشروع تطبيقك.
مطوّرو خبز Bazel
إذا كنت تستخدم Bazel كأداة تصميم رئيسية، يمكنك ببساطة إضافة
اعتمادية TensorFlowLite
إلى الهدف في ملف BUILD
.
بالنسبة إلى Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
بالنسبة إلى الهدف ج:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
عند إنشاء مشروع تطبيقك، سيتم التقاط أي تغييرات في مكتبة TensorFlow Lite ودمجها في تطبيقك.
تعديل إعدادات مشروع Xcode مباشرةً
يُوصى بشدة باستخدام CocoaPods أو Bazel لإضافة تبعية TensorFlow Lite
إلى مشروعك. إذا كنت لا تزال تريد إضافة إطار عمل TensorFlowLiteC
يدويًا، عليك إضافة إطار عمل TensorFlowLiteC
كإطار عمل مضمّن في مشروع التطبيق. يُرجى فك ضغط
TensorFlowLiteC_framework.zip
الذي تم إنشاؤه من الإصدار أعلاه للحصول على دليل
TensorFlowLiteC.framework
. هذا الدليل هو إطار العمل الفعلي الذي
يمكن لـ Xcode فهمه.
بعد إعداد TensorFlowLiteC.framework
، عليك أولاً إضافته
كبرنامج ثنائي مضمَّن إلى هدف التطبيق. قد يختلف قسم إعدادات المشروع الدقيق لذلك
اعتمادًا على إصدار Xcode لديك.
- Xcode 11: انتقِل إلى علامة التبويب "General" (عام) في محرّر المشروع لاستهداف تطبيقك،
وأضِف
TensorFlowLiteC.framework
ضمن قسم "Frameworks, Libraries and (المحتوى) المضمَّن". - Xcode 10 والإصدارات الأقدم: انتقل إلى علامة التبويب "General" (عام) في محرر المشروع لاستهداف التطبيق،
وأضف
TensorFlowLiteC.framework
ضمن "Binaries" (ثنائيات مضمّنة). يجب أيضًا إضافة إطار العمل تلقائيًا ضمن قسم "Linked Frameworks and Libraries" (أطر العمل والمكتبات المرتبطة).
عند إضافة إطار العمل كبرنامج ثنائي مضمن، ستعمل Xcode أيضًا على تحديث إدخال "مسارات بحث Framework" ضمن علامة التبويب "إعدادات الإنشاء" لتضمين الدليل الرئيسي لإطار العمل. وإذا لم يحدث ذلك تلقائيًا، عليك إضافة الدليل الرئيسي للدليل TensorFlowLiteC.framework
يدويًا.
بعد الانتهاء من هذين الإعدادَين، من المفترض أن تتمكّن من استيراد واجهة برمجة التطبيقات C API من TensorFlow Lite واستدعائها من خلال ملفات العناوين ضمن دليل TensorFlowLiteC.framework/Headers
.