1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# TensorFlow iOS Examples
This folder contains examples of how to build applications for iOS devices using TensorFlow.
## Building the Examples
- You'll need Xcode 7.3 or later, with the command-line tools installed.
- Follow the instructions at
[tensorflow/contrib/makefile](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile)
under "iOS" to compile a static library containing the core TensorFlow code.
- Download
[Inception v1](https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip),
and extract the label and graph files into the data folders inside both the
simple and camera examples.
- Load the Xcode project inside the `simple` subfolder, and press Command-R to
build and run it on the simulator or your connected device.
- You should see a single-screen app with a "Run Model" button. Tap that, and
you should see some debug output appear below indicating that the example
Grace Hopper image has been analyzed, with a military uniform recognized.
- Once you have success there, make sure you have a real device connected and
open up the Xcode project in the camera subfolder. Once you build and run
that, you should get a live camera view that you can point at objects to get
real-time recognition results.
## Troubleshooting
If you're hitting problems, here's a checklist of common things to investigate:
- Make sure that you've run the `download_dependencies.sh` and
`compile_ios_protobuf.sh` scripts before you run `compile_ios_tensorflow`.
(These should be called by `build_all_ios.sh` if you are using it, but check
if they have run successful.)
- Check that you have version 7.3 of Xcode.
- If there's a complaint about no Sessions registered, that means that the C++
global constructors that TensorFlow relies on for registration haven't been
linked in properly. You'll have to make sure your project uses force_load, as
described below.
## Creating your Own App
You'll need to update various settings in your app to link against
TensorFlow. You can view them in the example projects, but here's a full
rundown:
- The `compile_ios_tensorflow.sh` script builds a universal static library in
`tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a`. You'll need to add
this to your linking build stage, and in Search Paths add
`tensorflow/contrib/makefile/gen/lib` to the Library Search Paths setting.
- You'll also need to add `libprotobuf.a` and `libprotobuf-lite.a` from
`tensorflow/contrib/makefile/gen/protobuf_ios/lib` to your _Build Stages_ and
_Library Search Paths_.
- The _Header Search_ paths needs to contain:
- the root folder of tensorflow,
- `tensorflow/contrib/makefile/downloads/protobuf/src`
- `tensorflow/contrib/makefile/downloads`,
- `tensorflow/contrib/makefile/downloads/eigen-latest`, and
- `tensorflow/contrib/makefile/gen/proto`.
- In the Linking section, you need to add `-force_load` followed by the path to
the TensorFlow static library in the _Other Linker_ Flags section. This ensures
that the global C++ objects that are used to register important classes
inside the library are not stripped out. To the linker, they can appear
unused because no other code references the variables, but in fact their
constructors have the important side effect of registering the class.
- The library doesn't currently support bitcode, so you'll need to disable that
in your project settings.
|