يصف هذا المستند كيفية إنشاء مكتبة TensorFlow Lite iOS بنفسك. عادةً، لا تحتاج إلى إنشاء مكتبة TensorFlow Lite iOS محليًا. إذا كنت ترغب فقط في استخدامه، فإن أسهل طريقة هي استخدام الإصدارات المستقرة أو الليلية المعدة مسبقًا من TensorFlow Lite CocoaPods. راجع التشغيل السريع لنظام iOS للحصول على مزيد من التفاصيل حول كيفية استخدامها في مشاريع iOS الخاصة بك.
البناء محليا
في بعض الحالات، قد ترغب في استخدام إصدار محلي من TensorFlow Lite، على سبيل المثال عندما تريد إجراء تغييرات محلية على TensorFlow Lite واختبار تلك التغييرات في تطبيق iOS الخاص بك أو إذا كنت تفضل استخدام إطار العمل الثابت على الإطار الديناميكي المقدم لدينا. لإنشاء إطار عمل iOS عالمي لـ TensorFlow Lite محليًا، تحتاج إلى إنشائه باستخدام Bazel على جهاز يعمل بنظام macOS.
قم بتثبيت اكس كود
إذا لم تقم بذلك بالفعل، فستحتاج إلى تثبيت Xcode 8 أو إصدار أحدث والأدوات التي تستخدم xcode-select
:
xcode-select --install
إذا كان هذا تثبيتًا جديدًا، فستحتاج إلى قبول اتفاقية الترخيص لجميع المستخدمين باستخدام الأمر التالي:
sudo xcodebuild -license accept
تثبيت بازل
Bazel هو نظام البناء الأساسي لـ TensorFlow. قم بتثبيت Bazel وفقًا للتعليمات الموجودة على موقع Bazel الإلكتروني . تأكد من اختيار إصدار بين _TF_MIN_BAZEL_VERSION
و _TF_MAX_BAZEL_VERSION
في ملف configure.py
في جذر مستودع tensorflow
.
قم بتكوين مساحة العمل و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 Lite؛ واختياريًا، قم بإنشاء إطار العمل الثابت bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
إذا كانت نماذجك تحتوي على Select TensorFlow ops. لاحظ أنه يمكن استخدام علامة --target_archs
لتحديد بنيات النشر الخاصة بك.
استخدامها في التطبيق الخاص بك
مطورو CocoaPods
هناك ثلاثة CocoaPods لـ TensorFlow Lite:
-
TensorFlowLiteSwift
: يوفر واجهات برمجة التطبيقات Swift لـ TensorFlow Lite. -
TensorFlowLiteObjC
: يوفر واجهات برمجة التطبيقات Objective-C لـ TensorFlow Lite. -
TensorFlowLiteC
: حجرة أساسية مشتركة، والتي تتضمن وقت التشغيل الأساسي لـ TensorFlow Lite وتكشف عن واجهات برمجة تطبيقات C الأساسية التي تستخدمها البودتان المذكورتان أعلاه. ليس من المفترض أن يتم استخدامها مباشرة من قبل المستخدمين.
كمطور، يجب عليك اختيار إما TensorFlowLiteSwift
أو TensorFlowLiteObjC
pod بناءً على اللغة التي كتب بها تطبيقك، ولكن ليس كليهما. تختلف الخطوات الدقيقة لاستخدام الإصدارات المحلية من 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 مقابل أحدث إصدار ليلي متاح من واجهات برمجة تطبيقاتTensorFlowLiteC
(التي يتم إنشاؤها كل ليلة بين الساعة 1 و4 صباحًا بتوقيت المحيط الهادئ) بدلاً من الإصدار الثابت، الذي قد يكون قديمًا مقارنة بـtensorflow
المحلي الخاص بك الدفع. وبدلاً من ذلك، يمكنك اختيار نشر الإصدار الخاص بك منTensorFlowLiteC
واستخدام هذا الإصدار (راجع القسم الأساسي لاستخدام TensorFlow Lite المحلي أدناه).في
Podfile
الخاص بمشروع iOS الخاص بك، قم بتغيير التبعية كما يلي للإشارة إلى المسار المحلي إلى الدليل الجذر لـtensorflow
.
بالنسبة لسويفت:
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 في مشروع التطبيق الخاص بك.
مطوري بازل
إذا كنت تستخدم Bazel كأداة البناء الرئيسية، فيمكنك ببساطة إضافة تبعية TensorFlowLite
إلى هدفك في ملف BUILD
الخاص بك.
بالنسبة لسويفت:
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
ضمن قسم "Frameworks، Libraries، and Embedded Content". - Xcode 10 والإصدارات الأقدم: انتقل إلى علامة التبويب "عام" في محرر المشروع لهدف تطبيقك، وأضف
TensorFlowLiteC.framework
ضمن "الثنائيات المضمنة". يجب أيضًا إضافة إطار العمل تلقائيًا ضمن قسم "أطر العمل والمكتبات المرتبطة".
عند إضافة إطار العمل كإطار ثنائي مضمن، سيقوم Xcode أيضًا بتحديث إدخال "مسارات بحث الإطار" ضمن علامة التبويب "إعدادات البناء" لتضمين الدليل الأصلي لإطار العمل الخاص بك. في حالة عدم حدوث ذلك تلقائيًا، يجب عليك إضافة الدليل الأصلي لدليل TensorFlowLiteC.framework
يدويًا.
بمجرد الانتهاء من هذين الإعدادين، يجب أن تكون قادرًا على استيراد واستدعاء واجهة برمجة تطبيقات TensorFlow Lite's C، المحددة بواسطة ملفات الرأس ضمن دليل TensorFlowLiteC.framework/Headers
.