این سند نحوه ساخت کتابخانه 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
را در دایرکتوری root TensorFlow Checkout اجرا کنید و وقتی اسکریپت پرسید که آیا میخواهید 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 شما ایجاد می کند. بهطور پیشفرض، چارچوب تولید شده حاوی یک باینری «fat» است که شامل 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 ایجاد می کند. و به صورت اختیاری، اگر مدلهای شما دارای گزینههای Select TensorFlow هستند، چارچوب استاتیک bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
را ایجاد میکند. توجه داشته باشید که پرچم --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های محلی سوئیفت یا Objective-C
اگر از CocoaPods استفاده میکنید و فقط میخواهید برخی تغییرات محلی را در APIهای Swift یا Objective-C 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
خود اشاره کنید.
برای سوئیفت:
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_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
در بخش «Frameworks, Libraries, and Embedded Content» اضافه کنید. - Xcode 10 و پایین تر: به برگه "عمومی" ویرایشگر پروژه برای هدف برنامه خود بروید و
TensorFlowLiteC.framework
را در قسمت "باینری های جاسازی شده" اضافه کنید. چارچوب همچنین باید به طور خودکار در بخش «چارچوبهای مرتبط و کتابخانهها» اضافه شود.
هنگامی که چارچوب را بهعنوان یک باینری جاسازی شده اضافه میکنید، Xcode همچنین ورودی «مسیرهای جستجوی چارچوب» را در زیر تب «تنظیمات ساخت» بهروزرسانی میکند تا فهرست والد فریمورک شما را نیز شامل شود. در صورتی که این به طور خودکار اتفاق نیفتد، باید دایرکتوری والد دایرکتوری TensorFlowLiteC.framework
را به صورت دستی اضافه کنید.
پس از انجام این دو تنظیمات، باید بتوانید API C TensorFlow Lite را که توسط فایلهای هدر زیر فهرست TensorFlowLiteC.framework/Headers
تعریف شده است، وارد کرده و فراخوانی کنید.