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