1414
1515这是一个使用PaddlePaddle库进行离线目标检测的iOS Demo。该Demo调用PaddlePaddle C-API接口,使用预训练好的PaddlePaddle模型,可以检测到通过摄像头捕获到的目标的类别,并将其标记出来,展示给用户。
1616
17- 更多关于SSD模型架构特征,以及如何使用PaddlePaddle训练得到一个好的SSD模型,可以参考[ 这里] ( https://github.com/PaddlePaddle/models/tree/develop/ssd ) 。我们也提供了一个[ Linux Demo] ( https://github.com/PaddlePaddle/Mobile/tree/develop/Demo/linux ) ,可以在Linux系统上快速地验证模型.
17+ 更多关于SSD模型架构特征,以及如何使用PaddlePaddle训练得到一个好的SSD模型,可以参考[ 这里] ( https://github.com/PaddlePaddle/models/tree/develop/ssd ) 。我们也提供了一个[ Linux Demo] ( https://github.com/PaddlePaddle/Mobile/tree/develop/Demo/linux ) ,可以在Linux系统上快速地验证模型。
1818
1919### 模型
2020
2121我们提供3个预训练的模型以进行测试。其中,` vgg_ssd_net ` 和` pascal_mobilenet_300_66 ` 模型可进行20类通用物体检测和识别,` face_mobilenet_160_91 ` 可以对人脸进行检测。其识别精度如下表所示:
2222
2323| Model | Dimensions | Accuracy | Size |
2424| ------------------------ | :----------:| --------:| ------:|
25- | [ pascal\_ mobilenet\_ 300\_ 66] ( http://cloud.dlnel.org/filepub/?uuid=39c325d9-b468-4940-ba47-d50c8ec5fd5b ) | 300 x 300 | 66% | 23.2MB |
26- | [ vgg\_ ssd\_ net] ( http://cloud.dlnel.org/filepub/?uuid=1116a5f3-7762-44b5-82bb-9954159cb5d4 ) | 300 x 300 | 71% | 104.3MB |
27- | [ face\_ mobilenet\_ 160\_ 91] ( http://cloud.dlnel.org/filepub/?uuid=038c1dbf-08b3-42a9-b2dc-efccd63859fb ) | 160 x 160 | 91% | 18.4MB |
25+ | [ pascal\_ mobilenet\_ 300\_ 66.paddle] ( http://cloud.dlnel.org/filepub/?uuid=39c325d9-b468-4940-ba47-d50c8ec5fd5b ) | 300 x 300 | 66% | 23.2MB |
26+ | [ vgg\_ ssd\_ net.paddle] ( http://cloud.dlnel.org/filepub/?uuid=1116a5f3-7762-44b5-82bb-9954159cb5d4 ) | 300 x 300 | 71% | 104.3MB |
27+ | [ face\_ mobilenet\_ 160\_ 91.paddle] ( http://cloud.dlnel.org/filepub/?uuid=038c1dbf-08b3-42a9-b2dc-efccd63859fb ) | 160 x 160 | 91% | 18.4MB |
28+
29+ 点击表格中各模型名字,会自动通过浏览器下载对应模型。
2830
2931### 演示效果
3032
31- App模型需要开启摄像头权限。启动App后,点击屏幕,将会出现设置主界面,其中
33+ App模型需要开启摄像头权限。启动App后,点击屏幕,将会出现设置主界面(如图-1(1)所示) ,其中
3234
3335- 模型选择层:可以选择` Pascal MobileNet 300 ` 或` Face MobileNet 160 ` ,进行20类通用目标检测或者人脸检测。注意:默认情况下` Pascal VGG 300 ` 功能是关闭的。每一次改变设置,App将需要重新启动。
3436- 摄像头选择层:可选择` Front/Back Camera ` ,即` 前置/后置摄像头 ` 来捕获图像,进行检测。
35- - 精度阈值控制层:控制识别结果的准确度。取值越高,检测到目标的准确性也越高,但检测到目标的数量可能会降低。
36- - 刷新时间间隔控制层:控制摄像头捕获图像的频率。
37-
38- <img src =" assets/demo_main.jpeg " width = " 25% " />
39- <img src =" assets/demo_pascal.jpg " width = " 25% " />
40- <img src =" assets/demo_face.jpeg " width = " 25% " />
41-
42- 图-1 App设置主界面,20类通用目标检测效果,人脸检测效果
37+ - 精度阈值控制层(` Accuracy threshold ` ):控制识别结果的准确度。取值越高,检测到目标的准确性也越高,但检测到目标的数量可能会降低。
38+ - 刷新时间间隔控制层(` Time Refresh Rate ` ):控制摄像头捕获图像的频率。
39+
40+ <p align =" center " >
41+ <img src =" assets/demo_main.jpeg " width = " 25% " />
42+ <img src =" assets/demo_pascal.jpg " width = " 25% " />
43+ <img src =" assets/demo_face.jpeg " width = " 25% " /><br />
44+ 图-1
45+ (1)App设置主界面  ;  ;  ;  ;  ;  ;
46+ (2)20类通用目标检测效果  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;
47+ (3)人脸检测效果
48+ </p >
4349
4450进行20类通用目标检测时,App将会框选出检测到的目标,并且显示对应目标的类别和概率。进行人脸检测时,App将会框选出目标人脸的位置。
4551
@@ -49,13 +55,13 @@ App模型需要开启摄像头权限。启动App后,点击屏幕,将会出
4955
5056成功安装App后,你还需要安装如下步骤进一步设置:设置 → 通用 → 设备管理 → Baidu USA llc → 信任“Baidu USA llc”。
5157
52- <img src =" assets/qr_code_ios.png " width = " 20% " />
58+ <img src =" assets/qr_code_ios.png " width = " 20% " align = " middle " />
5359
5460## 源码安装
5561
5662该Demo基于最新的XCode(XCode 9.1)开发。由于Demo中需要调用摄像头进行目标检测,因此不能在模拟器上测试。
5763
58- 该Demo前端使用Swift绘制,基于API 10.0+,因此要求设备的iOS版本在10.0以上。由于Swift不能直接调用Paddle的C API,因此我们使用Objective-C实现了一个中间层,来调用Paddle的C API接口。
64+ 该Demo前端使用Swift绘制,基于API 10.0+,因此要求设备的iOS版本在10.0以上。由于Swift不能直接调用Paddle的C- API,因此我们使用Objective-C实现了一个中间层,来调用Paddle的C- API接口。
5965
6066### 准备模型
6167
@@ -67,7 +73,7 @@ VGG模型的识别精度高,但由于模型较大(104.3MB),需要占用
6773
6874用户可按照[ iOS平台编译指南] ( https://github.com/PaddlePaddle/Paddle/blob/develop/doc/mobile/cross_compiling_for_ios_cn.md ) ,拉取[ Paddle] ( https://github.com/PaddlePaddle/Paddle ) 最新的源码,编译适用于iOS平台的PaddlePaddle库。在执行` make install ` 之后,PaddlePaddle库将会安装在` CMAKE_INSTALL_PREFIX ` 所指定的目录下。该目录包含如下子目录:
6975
70- - ` include ` ,其中包含使用PaddlePaddle所需要引入的头文件,通常代码中加入#include <paddle/capi.h>即可。
76+ - ` include ` ,其中包含使用PaddlePaddle所需要引入的头文件,通常代码中加入` #include <paddle/capi.h> ` 即可。
7177- ` lib ` ,其中包含了PaddlePaddle对应架构的库文件。iOS平台只生成了静态库,包括` libpaddle_capi_layers.a ` 和` libpaddle_capi_engine.a ` 。
7278- ` third_party ` ,PaddlePaddle所依赖的第三方库。
7379
@@ -80,23 +86,26 @@ VGG模型的识别精度高,但由于模型较大(104.3MB),需要占用
8086在准备好一切之后,项目的目录结构应如下所示:
8187
8288```
83- .
84- ├── AICamera
85- ├── PDCamera.xcodeproj
86- ├── README.md
87- ├── README_cn.md
88- ├── assets
89- ├── models
90- │ ├── face_mobilenet_160_91.paddle
91- │ ├── pascal_mobilenet_300_66.paddle
92- │ └── vgg_ssd_net.paddle
93- └── paddle-ios
94- ├── include
95- ├── lib
96- │ ├── libpaddle_capi_engine.a
97- │ ├── libpaddle_capi_layers.a
98- │ └── libpaddle_capi_whole.a
99- └── third_party
89+ $ git clone https://github.com/PaddlePaddle/Mobile.git
90+ $ cd Mobile/Demo/iOS/AICamera
91+ $ tree
92+ .
93+ ├── AICamera
94+ ├── PDCamera.xcodeproj
95+ ├── README.md
96+ ├── README_cn.md
97+ ├── assets
98+ ├── models
99+ │ ├── face_mobilenet_160_91.paddle
100+ │ ├── pascal_mobilenet_300_66.paddle
101+ │ └── vgg_ssd_net.paddle
102+ └── paddle-ios
103+ ├── include
104+ ├── lib
105+ │ ├── libpaddle_capi_engine.a
106+ │ ├── libpaddle_capi_layers.a
107+ │ └── libpaddle_capi_whole.a
108+ └── third_party
100109```
101110
102111然后,你就可以构建和运行该Demo了。
@@ -105,7 +114,7 @@ VGG模型的识别精度高,但由于模型较大(104.3MB),需要占用
105114
106115## 如何链接PaddlePaddle库
107116
108- 用户若想在自己的iOS项目中链接PaddlePaddle库 ,则需要按照如下4个步骤配置项目。在这里,我们假设PaddlePaddle库安装在项目根目录的` paddle-ios ` 目录下面。
117+ 开发者若想在自己的iOS项目中链接PaddlePaddle库 ,则需要按照如下4个步骤配置项目。在这里,我们假设PaddlePaddle库安装在项目根目录的` paddle-ios ` 目录下面。
109118
110119- 将头文件目录` paddle-ios/include ` 添加到** Header Search Paths** 。
111120
@@ -114,7 +123,7 @@ VGG模型的识别精度高,但由于模型较大(104.3MB),需要占用
114123- 如果编译PaddlePaddle库时设置了` IOS_USE_VECLIB_FOR_BLAS=ON ` ,则需要将加速框架` Accelerate.framework ` 或` veclib.framework ` 添加到你的项目中。
115124- 将PaddlePaddle静态库` libpaddle_capi_layers.a ` 和` libpaddle_capi_engine.a ` ,以及所有依赖的第三方库添加到项目中。
116125
117- <img src =" https://user-images.githubusercontent.com/12538138/32492222-2ecef414-c37f-11e7-9913-b90fc88be10f.png " width = " 30% " />
126+ <img src =" https://user-images.githubusercontent.com/12538138/32492222-2ecef414-c37f-11e7-9913-b90fc88be10f.png " width = " 30% " align = " middle " />
118127
119128- 为` libpaddle_capi_layers.a ` 设置` -force_load ` 属性。
120129
0 commit comments