Skip to content
Modified from emoji-tf-ios: https://github.com/h4x3rotab/emoji-tf-ios
Objective-C++ Swift Shell Objective-C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
LibTensorFlowForiOSSwift.xcodeproj
LibTensorFlowForiOSSwift
data
readmeImages
.gitignore
README.md
README_CN.md
run.sh

README.md

LibTensorFlowForiOSSwift

中文文档

This is a TensorFlow demo that can be run on iOS and use swift develop. It implements a text classifier that can predict emoji from short text (like tweets).

Modified from emoji-tf-ios; use emoji_frozen.pb model from emoji-tf-ios.

how to run

  • open terminal and go to project root folder

  • input sh run.sh.

In the end, will automatically open Xcode

you can run the project now

about run.sh

it will compile the TensorFlow for iOS automatically

about project setting

how to import TensorFlow in ios project

  • download TensorFlow to the root folder and compile

    befor compile source file, you should change flow TensorFlow Kernel files. (version <= 1.2.1)

    in run.sh, it will change them automatically

    kernel path: tensorflow/tensorflow/core/kernels

    • cwise_op_add_1.cc

      before:

       ...
       ...
       #include "tensorflow/core/kernels/cwise_ops_common.h"
      
       namespace tensorflow {
       REGISTER5(BinaryOp, CPU, "Add", functor::add, float, Eigen::half, double, int32,
                 int64);
      
       #if TENSORFLOW_USE_SYCL
       ...
       ...

      change to:

       ...
       ...
       #include "tensorflow/core/kernels/cwise_ops_common.h"
      
       namespace tensorflow {
       REGISTER5(BinaryOp, CPU, "Add", functor::add, float, Eigen::half, double, int32,
                 int64);
      
       // line 21 insert this code
       #if defined(__ANDROID_TYPES_SLIM__)
       REGISTER(BinaryOp, CPU, "Add", functor::add, int32);
       #endif  // __ANDROID_TYPES_SLIM__
       // insert end
      
       #if TENSORFLOW_USE_SYCL
       ...
       ...
    • cwise_op_less.cc

      before:

       ...
       ...
       #include "tensorflow/core/kernels/cwise_ops_common.h"
      
       namespace tensorflow {
       REGISTER8(BinaryOp, CPU, "Less", functor::less, float, Eigen::half, double,
                 int32, int64, uint8, int8, int16);
       #if GOOGLE_CUDA
       REGISTER7(BinaryOp, GPU, "Less", functor::less, float, Eigen::half, double,
                 int64, uint8, int8, int16);
       ...
       ...

      change to:

       ...
       ...
       #include "tensorflow/core/kernels/cwise_ops_common.h"
      
       namespace tensorflow {
       REGISTER8(BinaryOp, CPU, "Less", functor::less, float, Eigen::half, double,
                 int32, int64, uint8, int8, int16);
       
       // line 21 insert this code
       #if defined(__ANDROID_TYPES_SLIM__)
       REGISTER(BinaryOp, CPU, "Less", functor::less, int32);
       #endif  // __ANDROID_TYPES_SLIM__
       // insert end
      
       #if GOOGLE_CUDA
       REGISTER7(BinaryOp, GPU, "Less", functor::less, float, Eigen::half, double,
                 int64, uint8, int8, int16);
       ...
       ...
  • about libtensorflow-core.a

    • in Other Link Flags add $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a
    • in Library Search Paths add $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/gen/lib
  • about libprotobuf.a & libprotobuf-lite.a

    • in Build Phases | Link Binary With Libraries add libprotobuf.a & libprotobuf-lite.a (path: tensorflow/tensorflow/contrib/makefile/gen/protobuf_ios/lib/)
    • in Library Search Paths add $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/gen/protobuf_ios/lib
  • in Header Search Paths add flows

    • $(SRCROOT)/tensorflow/
    • $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/downloads/protobuf/src/
    • $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/downloads
    • $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/downloads/eigen
    • $(SRCROOT)/tensorflow/tensorflow/contrib/makefile/gen/proto
  • in Other Link Flags add -force_load

  • in Build Phases | Link Binary With Libraries add Accelerate.framework

  • in C++ Language Dialect select GNU++11 or GNU++14

  • in C++ Standard Library select libc++

  • Enable Bitcode set No

  • remove any -all_load ,use -ObjC replace it

    Remove any use of the -all_load flag in your project. The protocol buffers libraries (full and lite versions) contain duplicate symbols, and the -all_load flag will cause these duplicates to become link errors. If you were using -all_load to avoid issues with Objective-C categories in static libraries, you may be able to replace it with the -ObjC flag.

  • suppress TensorFlow warning:

    • in Other C Flags & Other C++ Flags add -isystem $(SRCROOT)/tensorflow

reference:

You can’t perform that action at this time.