# 水平框版面分析

基于 [Official YOLOv7](https://github.com/WongKinYiu/yolov7) 和 [PaddleYOLO](https://github.com/PaddlePaddle/PaddleYOLO)，用于水平框版面分析。

## 环境

```shell
conda env create -f environment.yml
```

## 服务端

```shell
python run.py --port 8080
```

## 镜像打包

```shell
make all
```

## 项目结构

```text
.
├── core/
│   ├── detectors/              # 布局检测类目录
│   │   ├── base.py             # 布局检测基类
│   │   ├── paddle_yolo/        # 基于 PaddleYOLO 实现的布局检测类
│   │   └── yolov7.py           # 基于 Official YOLOv7 实现的布局检测类
│   └── predictor.py            # 布局检测工厂
├── models/                     # 模型权重目录
├── run.py                      # 启动入口
├── server.py                   # 路由
├── sx_utils/                   # 工具目录
├── templates/                  # 模板目录
└── testing/                    # 单元测试目录
```

## 模型配置

| 模型名称                                                                                                                                         | 模型配置                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
| [Official YOLOv7](https://github.com/WongKinYiu/yolov7)                                                                                          | [./core/detectors/yolov7.py](./core/detectors/yolov7.py)                                 |
| [PaddleYOLO YOLOv7P6-E6](https://github.com/PaddlePaddle/PaddleYOLO/tree/develop/configs/yolov7#p6%E5%A4%A7%E5%B0%BA%E5%BA%A6%E6%A8%A1%E5%9E%8B) | [./core/detectors/paddle_yolo/\_\_init\_\_.py](./core/detectors/paddle_yolo/__init__.py) |

如果更新了模型权重，请同时修改创建镜像时的下载地址，如：

```bash
$ cat Dockerfile
...
# 模型权重下载地址
RUN wget ftp://192.168.199.31/yolov7p6_e6_300e/20240314/yolov7p6_e6_300e_coco.zip
...
```

## 服务实现

版面分析服务的简化流程为：

```text
图片 + 模型名称
    |
    | (根据模型名称，对图片进行相应的布局检测)
    v
布局检测框集
```

其中基于 PaddleYOLO 的布局检测实现中还包含图像预处理，模型预测，后处理等。源码：[PaddleYOLO/deploy/python/infer.py#L62](https://github.com/PaddlePaddle/PaddleYOLO/blob/2d68b6605a828c62b63268b9d512cafb25ddb2ea/deploy/python/infer.py#L62)

注：[PaddleYOLO](https://github.com/PaddlePaddle/PaddleYOLO/tree/develop) 基于 [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)，预测部署的代码实现大部分是一致的。
