Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Latest commit

 

History

History
140 lines (98 loc) · 8.25 KB

README.cn.md

File metadata and controls

140 lines (98 loc) · 8.25 KB

PDCamera

简介

这是一个使用PaddlePaddle库进行离线目标检测的iOS Demo。该Demo调用PaddlePaddle C-API接口,使用预训练好的PaddlePaddle模型,可以检测到通过摄像头捕获到的目标的类别,并将其标记出来,展示给用户。

更多关于SSD模型架构特征,以及如何使用PaddlePaddle训练得到一个好的SSD模型,可以参考这里。我们也提供了一个Linux Demo,可以在Linux系统上快速地验证模型。

模型

我们提供3个预训练的模型以进行测试。其中,vgg_ssd_netpascal_mobilenet_300_66模型可进行20类通用物体检测和识别,face_mobilenet_160_91可以对人脸进行检测。其识别精度如下表所示:

Model Dimensions Accuracy Size
pascal_mobilenet_300_66.paddle 300 x 300 66% 23.2MB
vgg_ssd_net.paddle 300 x 300 71% 104.3MB
face_mobilenet_160_91.paddle 160 x 160 91% 18.4MB

点击表格中各模型名字,会自动通过浏览器下载对应模型。

演示效果

App模型需要开启摄像头权限。启动App后,点击屏幕,将会出现设置主界面(如图-1(1)所示),其中

  • 模型选择层:可以选择Pascal MobileNet 300Face MobileNet 160,进行20类通用目标检测或者人脸检测。注意:默认情况下Pascal VGG 300功能是关闭的。每一次改变设置,App将需要重新启动。
  • 摄像头选择层:可选择Front/Back Camera,即前置/后置摄像头来捕获图像,进行检测。
  • 精度阈值控制层(Accuracy threshold):控制识别结果的准确度。取值越高,检测到目标的准确性也越高,但检测到目标的数量可能会降低。
  • 刷新时间间隔控制层(Time Refresh Rate):控制摄像头捕获图像的频率。


图-1 (1)App设置主界面     (2)20类通用目标检测效果             (3)人脸检测效果

进行20类通用目标检测时,App将会框选出检测到的目标,并且显示对应目标的类别和概率(如图-1(2)所示)。进行人脸检测时,App将会框选出目标人脸的位置(如图-1(3)所示)。

快速安装

如果你想快速地体验PDCamera,可通过扫描以下二维码进行安装。成功识别二维码之后,会自动跳转到安装页面,点击**“Install PDCamera”**链接,App会自动下载并安装到你的iOS设备上。

成功安装App后,你还需要按照如下步骤设置你的iOS设备:设置 → 通用 → 设备管理 → Baidu USA llc → 信任“Baidu USA llc”

源码安装

该Demo基于最新的XCode(XCode 9.1)开发。由于Demo中需要调用摄像头进行目标检测,因此不能在模拟器上测试。

该Demo前端使用Swift绘制,基于API 10.0+,因此要求设备的iOS版本在10.0以上。由于Swift不能直接调用Paddle的C-API,因此我们使用Objective-C实现了一个中间层,来调用Paddle的C-API接口。

准备模型

Github上面只维护了该Demo相关的源码文件和项目配置。用户可下载face_mobilenet_160_91.paddlepascal_mobilenet_300_66.paddle,加入项目根目录下面的models子目录下面。

VGG模型的识别精度高,但由于模型较大(104.3MB),需要占用较高的内存(~800MB),并且识别速度慢(每帧~1.5秒),因此对设备的计算能力要求较高(iPhone6s以上),默认没有添加到项目中。用户也可自行下载vgg_ssd_net.paddle,添加到项目中,体验其高精度识别效果。

这里,我们使用的是合并的模型(merged model)。如何从配置文件(例如config.py)和训练得到的参数文件(例如params_pass_0.tar.gz)得的合并的模型文件,请参考如何合并模型

准备PaddlePaddle库

用户可按照iOS平台编译指南,拉取Paddle最新的源码,编译适用于iOS平台的PaddlePaddle库。在执行make install之后,PaddlePaddle库将会安装在CMAKE_INSTALL_PREFIX所指定的目录下。该目录包含如下子目录:

  • include,其中包含使用PaddlePaddle所需要引入的头文件,通常代码中加入#include <paddle/capi.h>即可。
  • lib,其中包含了PaddlePaddle对应架构的库文件。iOS平台只生成了静态库,包括libpaddle_capi_layers.alibpaddle_capi_engine.a
  • third_party,PaddlePaddle所依赖的第三方库。

用户也可从wiki页面下载预编译好的版本。

准备好PaddlePaddle库之后,用户需要将PaddlePaddle库目录重命名为paddle-ios,并拷贝到AICamera项目的根目录下。

目录结构

在准备好一切之后,项目的目录结构应如下所示:

$ git clone https://github.com/PaddlePaddle/Mobile.git
$ cd Mobile/Demo/iOS/AICamera
$ tree
.
├── AICamera  # 源码目录
├── PDCamera.xcodeproj
├── README.md
├── README_cn.md
├── assets
├── models  # 模型存放目录
│   ├── face_mobilenet_160_91.paddle
│   ├── pascal_mobilenet_300_66.paddle
│   └── vgg_ssd_net.paddle
└── paddle-ios  # PaddlePaddle库所在目录
    ├── include
    ├── lib
    │   ├── libpaddle_capi_engine.a
    │   ├── libpaddle_capi_layers.a
    │   └── libpaddle_capi_whole.a
    └── third_party

然后,你就可以构建和运行该Demo了。

这个项目展示了如何在iOS App中集成PaddlePaddle,如何调用Paddle C API进行离线推断,以及如何和Swift混合互调。对于开发者,你可以根据自己的需求,在这个项目的基础之上进行二次开发,实现其他深度学习应用。

如何链接PaddlePaddle库

开发者若想在自己的iOS项目中链接PaddlePaddle库,则需要按照如下4个步骤配置项目。在这里,我们假设PaddlePaddle库安装在项目根目录的paddle-ios目录下面。

  • 将头文件目录paddle-ios/include添加到Header Search Paths

  • 如果编译PaddlePaddle库时设置了IOS_USE_VECLIB_FOR_BLAS=ON,则需要将加速框架Accelerate.frameworkveclib.framework添加到你的项目中。
  • 将PaddlePaddle静态库libpaddle_capi_layers.alibpaddle_capi_engine.a,以及所有依赖的第三方库添加到项目中。

  • libpaddle_capi_layers.a设置-force_load属性。