إنشاء TensorFlow Lite لنظام التشغيل iOS

يوضّح هذا المستند كيفية إنشاء مكتبة 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.

بعد إعداد 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 Lite
  • TensorFlowLiteC: مجموعة الأجهزة المتسلسلة المشتركة التي تتضمن وقت التشغيل الأساسي TensorFlow Lite وتعرض واجهات برمجة تطبيقات C الأساسية التي تستخدمها اللوحتان أعلاه وليس الغرض منها أن يستخدم المستخدمون بشكل مباشر.

بصفتك مطوِّرًا، عليك اختيار مجموعة الإعلانات المتسلسلة TensorFlowLiteSwift أو TensorFlowLiteObjC حسب اللغة المستخدَمة في كتابة التطبيق، ولكن ليس عليك تنفيذ الإجراءين معًا. تختلف الخطوات الدقيقة لاستخدام الإصدارات المحلية من TensorFlow Lite، استنادًا إلى الجزء الذي تريد إنشاءه تحديدًا.

استخدام واجهات برمجة تطبيقات Swift أو Objective-C المحلية

إذا كنت تستخدم CocoaPods، وأردت فقط اختبار بعض التغييرات المحلية على واجهات برمجة تطبيقات Swift أو واجهات برمجة تطبيقات Objective-C في TensorFlow Lite، يمكنك اتّباع الخطوات الواردة هنا.

  1. يمكنك إجراء تغييرات على واجهات Swift أو واجهات Objective-C في صفحة الدفع على tensorflow.

  2. افتح الملف 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 الأساسي أدناه).

  3. في Podfile من مشروع iOS، غيِّر التبعية على النحو التالي للإشارة إلى المسار المحلي إلى الدليل الجذري tensorflow.
    بالنسبة إلى Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    بالنسبة إلى الهدف (ج):
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. عليك تعديل تثبيت المجموعة من الدليل الجذري لمشروع iOS.
    $ pod update

  5. أعد فتح مساحة العمل التي تم إنشاؤها (<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.