מסמך זה מתאר כיצד לבנות ספריית 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). כדי לראות את הרשימה המלאה של דגלי ה-build המשמשים כאשר אתה מציין --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
: מספק את ממשקי ה-API של Swift עבור TensorFlow Lite. -
TensorFlowLiteObjC
: מספק את ממשקי ה-API של Objective-C עבור TensorFlow Lite. -
TensorFlowLiteC
: תרמיל בסיס משותף, המטמיע את זמן הריצה הליבה של TensorFlow Lite וחושף את ממשקי ה-API של הבסיס C המשמשים את שני הפודים לעיל. לא נועד לשמש ישירות את המשתמשים.
כמפתחים, עליך לבחור TensorFlowLiteSwift
או TensorFlowLiteObjC
pod על סמך השפה שבה האפליקציה שלך כתובה, אך לא בשניהם. השלבים המדויקים לשימוש בבנייה מקומית של TensorFlow Lite שונים, תלוי באיזה חלק בדיוק תרצה לבנות.
שימוש בממשקי API מקומיים של Swift או Objective-C
אם אתה משתמש ב-CocoaPods, וברצונך לבדוק רק כמה שינויים מקומיים ב- Swift APIs או Objective-C APIs של TensorFlow Lite, בצע את השלבים כאן.
בצע שינויים בממשקי ה-API של Swift או Objective-C בקופה שלך ב-
tensorflow
.פתח את
TensorFlowLite(Swift|ObjC).podspec
ועדכן את השורה הזו:
s.dependency 'TensorFlowLiteC', "#{s.version}"
להיות:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
זה כדי להבטיח שאתה בונה את ממשקי ה-API של Swift או Objective-C מול הגרסה הלילית העדכנית ביותר הזמינה של ממשקי API שלTensorFlowLiteC
(שנבנתה כל לילה בין 1-4 לפנות בוקר שעון האוקיינוס השקט) במקום הגרסה היציבה, שעשויה להיות מיושנת בהשוואהtensorflow
המקומית שלך. לבדוק. לחלופין, תוכל לבחור לפרסם גרסה משלך שלTensorFlowLiteC
ולהשתמש בגרסה זו (ראה סעיף הליבה המקומי של TensorFlow Lite להלן).ב-
Podfile
של פרויקט ה-iOS שלך, שנה את התלות באופן הבא כדי להצביע על הנתיב המקומי לספריית השורש שלtensorflow
.
עבור Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
עבור Objective-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
אם אתה משתמש ב-Bazel ככלי הבנייה הראשי, אתה יכול פשוט להוסיף תלות של TensorFlowLite
ליעד שלך בקובץ BUILD
שלך.
עבור Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
עבור Objective-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
תחת 'Binaries Embedded'. יש להוסיף את המסגרת אוטומטית גם בקטע 'מסגרות וספריות מקושרות'.
כאשר אתה מוסיף את המסגרת כקובץ בינארי משובץ, Xcode יעדכן גם את הערך 'נתיבי חיפוש מסגרת' בכרטיסייה 'הגדרות בנייה' כדי לכלול את ספריית האב של המסגרת שלך. במקרה שזה לא קורה אוטומטית, עליך להוסיף ידנית את ספריית האב של ספריית TensorFlowLiteC.framework
.
לאחר ביצוע שתי ההגדרות הללו, אתה אמור להיות מסוגל לייבא ולהתקשר ל-C API של TensorFlow Lite, המוגדר על ידי קבצי הכותרות תחת TensorFlowLiteC.framework/Headers
.