قم ببناء 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 config.py في جذر مستودع tensorflow .

قم بتكوين مساحة العمل و

قم بتشغيل البرنامج النصي ./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 Lite المدمجة والمخصصة ؛ واختيارياً ، يولد إطار العمل الثابت bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip إذا كانت النماذج الخاصة بك تحتوي على عمليات Select TensorFlow. لاحظ أنه يمكن استخدام علامة --target_archs النشر الخاصة بك.

استخدم في التطبيق الخاص بك

مطورو CocoaPods

هناك ثلاثة CocoaPods لـ TensorFlow Lite:

  • TensorFlowLiteSwift : يوفر Swift APIs لـ TensorFlow Lite.
  • TensorFlowLiteObjC : يوفر واجهات برمجة تطبيقات Objective-C لـ TensorFlow Lite.
  • TensorFlowLiteC : جراب القاعدة المشترك ، والذي يدمج وقت التشغيل الأساسي TensorFlow Lite ويكشف عن واجهات برمجة تطبيقات C الأساسية المستخدمة من قبل الحبتين المذكورتين أعلاه. لا يقصد استخدامها مباشرة من قبل المستخدمين.

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

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

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

  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 مقابل أحدث إصدار ليلي متاح من TensorFlowLiteC APIs (تم إنشاؤه كل ليلة بين 1-4 صباحًا بتوقيت المحيط الهادئ) بدلاً من الإصدار المستقر ، والذي قد يكون قديمًا مقارنةً بـ tensorflow المحلي. الدفع. بدلاً من ذلك ، يمكنك اختيار نشر إصدارك الخاص من TensorFlowLiteC واستخدام هذا الإصدار (راجع استخدام القسم الأساسي المحلي TensorFlow Lite أدناه).

  3. في Podfile الخاص بمشروع iOS الخاص بك ، قم بتغيير التبعية على النحو التالي للإشارة إلى المسار المحلي إلى الدليل الجذر لـ tensorflow الخاص بك.
    بالنسبة إلى Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    للهدف- C:
    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 pod في مشروع التطبيق الخاص بك.

مطوري Bazel

إذا كنت تستخدم Bazel كأداة بناء رئيسية ، يمكنك ببساطة إضافة تبعية TensorFlowLite إلى هدفك في ملف BUILD الخاص بك.

بالنسبة إلى Swift:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

للهدف- C:

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: انتقل إلى علامة التبويب "عام" لمحرر المشروع لهدف التطبيق الخاص بك ، وأضف إطار عمل TensorFlowLiteC.framework ضمن قسم "الأطر والمكتبات والمحتوى المضمن".
  • Xcode 10 وما يليه: انتقل إلى علامة التبويب "عام" في محرر المشروع لهدف التطبيق الخاص بك ، وأضف إطار TensorFlowLiteC.framework ضمن "الثنائيات المضمنة". يجب أيضًا إضافة إطار العمل تلقائيًا ضمن قسم "الأطر والمكتبات المرتبطة".

عند إضافة إطار العمل باعتباره ثنائيًا مضمنًا ، يقوم Xcode أيضًا بتحديث إدخال "مسارات البحث في الإطار" ضمن علامة التبويب "إعدادات الإنشاء" لتضمين الدليل الأصلي لإطار العمل الخاص بك. في حالة عدم حدوث ذلك تلقائيًا ، يجب عليك إضافة الدليل الرئيسي يدويًا إلى دليل TensorFlowLiteC.framework .

بمجرد الانتهاء من هذين الإعدادين ، يجب أن تكون قادرًا على استيراد واستدعاء واجهة برمجة تطبيقات C الخاصة بـ TensorFlow Lite ، المحددة بواسطة ملفات الرأس ضمن دليل TensorFlowLiteC.framework/Headers .