资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

Python示例

示例目录结构
  系统配置文件描述
  模型配置文件描述
Python示例运行
  执行目录
  执行
Python接口


示例目录结构

edgeboard-191:~/workspace/PaddleLiteDemo# ls
C++ README.md  configs  python  res 

C++ : C++语言编写的demo 源码

python : python语言编写的demo 源码

configs : 存放了示例运行需要的配置文件

res: 存放了模型相关文件和图片文件

系统配置文件描述

configs目录中已经默认添加每个 模型对应4种不同 输入源的配置

 configs ✗ tree
.
├── classification
│   ├── Inceptionv2
│   ├── Inceptionv3
│   ├── mobilenetv1
│   └── resnet50
│       ├── image.json
│       ├── multi_channel_camera.json
│       ├── rtspcamera.json
│       └── usbcamera.json
├── detection
│   ├── mobilenet-ssd
│   ├── mobilenet-ssd-640
│   ├── mobilenet-yolov3
│   ├── vgg-ssd
│   └── yolov3
│       ├── image.json
│       ├── multi_channel_camera.json
│       ├── rtspcamera.json
│       └── usb_camera.json
└── segmentation
    └── deeplabv3
        ├── image.json
        ├── multi_channel_camera.json
        ├── rtspcamera.json
        └── usbcamera.json

13 directories, 12 files

json配置文件格式如下:

{
    "model_config": "../../res/modles/detection/yolov3",
    "input": {
        "type": "usb_camera",
        "path": "/dev/video2"
    },
    "debug": {
        "display_enable": true,
        "predict_log_enable": true,
        "predict_time_log_enable": true
    }
}

配置文件参数说明:

model_config : 模型的目录,相对于 PaddleLiteDemo/C++/build 目录,各个示例支持的模型见目录

type: 输入源的类型,可选项目,支持的value有:image、usb_camera、rtsp_camera、multichannel_camera

path: 输入源对应的 设备节点或url 或 图片的名字

type path 备注 支持的设备
image ../../res/models/XXX 使用图片作为输入源 ALL
usb_camera /dev/video0 USB摄像头 FZ3X/5X
usb_camera /dev/video2 USB摄像头 FZ9D
rtsp_camera rtsp://admin:eb123456@192.168.1.167/ RTSP摄像头 FZ5x/FZ9D
multichannel_camera /dev/video1 多路分时复用摄像头 FZ9D

注意: 只有FZ9D 支持 multichannel_camera

display_enable: 显示器显示开关,当没有显示器时可以设置为 false

predict_log_enable : 预测的结果通过命令行打印的开关

predict_time_log_enable: 模型预测单帧耗时的打印开关(不包括图像处理时间)

模型配置文件描述

模型配置文件位于res/model每个模型文件夹下

{
	"network_type":"YOLOV3",

	"model_file_name":"model",
	"params_file_name":"params",

	"labels_file_name":"label_list.txt",

	"format":"RGB",
	"input_width":608,
	"input_height":608,
		
	"mean":[123.675, 116.28, 103.53],
    "scale":[0.0171248, 0.017507, 0.0174292],
	"threshold":0.3
}

参数说明:

模型类型:

  • 非融合模型:

model_file_name : 指定模型文件的名字

params_file_name : 指定模型参数文件的名字

  • 融合模型:

model_dir : 指定 模型与参数的目录

Python示例运行

执行目录

cd  ~/workspace/PaddleLiteDemo/Python/demo

执行

classification.py 分类示例

detection.py 检测示例

以检测为例:

export PYTHONPATH=/home/root/workspace/PaddleLiteDemo/Python/
python3 detection.py ../../configs/detection/yolov3/image.json

Python接口

总体介绍

Python接口是对1.8.0预测库的python封装,方便在python中导入和使用预测库,进而完成模型部署。 正确的升级软核到1.8.0后,对应的python接口库会被安装在/usr/lib/python3.5/site-packages/

注意 python接口库被安装在python3环境下,请使用python3。

组成文件

 configs ? tree
.
|——paddlelite.cpython-35m-aarch64-linux-gnu.so
|——edgeboard
        |——__init__.py
        |——predictor.py
        |——preprocess.py

1 directories, 4 files

各个文件功能简介

  1. paddlelite.cpython-35m-aarch64-linux-gnu.so是对预测库的外部接口的pybind封装
  2. edgeboard/predictor.py是对预测库执行器的封装,包含模型初始化,数据读入,数据预测和结果导出
  3. edgeboard/preprocess.py是对fpga预处理功能的python封装。这里提供了基于fpga的预处理接口

predictor API功能简介

class PaddleLitePredictor(object):
    """ 这个类是对pybind封装的Predictor的进一步封装 """

    def __init__(self):
        self.predictor = None

    def set_model_file(self, path):
        """配置模型文件的路径,一般都是"model"或者"__model__" """
        

    def set_param_file(self, path):
        """配置模型文件的路径,一般都是"params"或者"__params__" """

    def set_model_dir(self, path):
        """配置模型文件的目录"""

    def load(self):
        """根据上面三个模型路径相关的api设置,初始化C++侧的predictor并将模型装载到内存"""

    def get_input(self, index):
        """获取到predictor的第index位置处的输入空tensor,预处理后的结果最终会拷贝到这个tensor中"""

    def set_input(self, data, index):
        """将预处理后的输入数据numpy.array设置到predictor的第index个输入tensor中"""

    def run(self):
        """完成一次模型推理"""

    def get_output(self, index):
        """取出第index位置的输出结果"""

preprocess API功能简介

class ImageTransformer(object):
    """这个类是对fpga预处理功能的封装,包括resize,格式转换和均值方差操作"""

    def __init__(self, image, mean, scale, dst_shape, dst_format, src_format="BGR"):
        """初始化预处理参数"""


    def set_mean_scale(self, mean, scale):
        """
        out = (x / 255 - mean) * scale
        """

    def read_image(self, image):
        """读入原图"""
        
    def set_dst_format(self, dst_format):
        """
        默认原图是BGR, 如果需要转RGB,要在这里设置
        """

    def set_src_format(self, src_format):
        """
        默认是BGR
        """

    def set_shape_config(self, src_shape, dst_shape):
        """
        fpga的预处理只支持到1080p,如果输入尺寸超过这个限制,只能先做cpu resize
        """

    def transforms(self, input_tensor):
        """
        从predictor中拿到输入tensor,将预处理后的结果写入这个tensor
        """
上一篇
C++示例
下一篇
1.5.1软核版本示例