Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update pyramidbox_lite_mobile_mask #2179

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,11 @@
# 打印预测结果
print(r.json()["results"])
```

- ### gradio app 支持

从 PaddleHub 2.3.1 开始支持使用链接 http://127.0.0.1:8866/gradio/pyramidbox_lite_mobile_mask 在浏览器中访问 pyramidbox_lite_mobile_mask 的 Gradio APP。

## 五、Paddle Lite部署
- ### 通过python执行以下代码,保存模型
- ```python
Expand Down Expand Up @@ -209,6 +214,10 @@

修复无法导出模型的问题

* 1.5.0

添加 Gradio APP 的支持

- ```shell
$ hub install pyramidbox_lite_mobile_mask==1.4.0
$ hub install pyramidbox_lite_mobile_mask==1.5.0
```
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@
# print prediction results
print(r.json()["results"])
```

- ### Gradio APP support
Starting with PaddleHub 2.3.1, the Gradio APP for pyramidbox_lite_mobile_mask is supported to be accessed in the browser using the link http://127.0.0.1:8866/gradio/pyramidbox_lite_mobile_mask.

## V.Paddle Lite Deployment
- ### Save model demo
- ```python
Expand Down Expand Up @@ -185,6 +189,10 @@

Fix a bug of save_inference_model

* 1.5.0

Add Gradio APP support.

- ```shell
$ hub install pyramidbox_lite_mobile_mask==1.4.0
$ hub install pyramidbox_lite_mobile_mask==1.5.0
```
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# coding=utf-8
import os
import math
import os
import time
from collections import OrderedDict

Expand Down Expand Up @@ -144,12 +144,11 @@ def reader(face_detector, shrink, confs_threshold, images, paths, use_gpu, use_m
scale_res = list()
detect_faces = list()
for scale in multi_scales:
_detect_res = face_detector.face_detection(
images=[element['org_im']],
use_gpu=use_gpu,
visualization=False,
shrink=scale,
confs_threshold=confs_threshold)
_detect_res = face_detector.face_detection(images=[element['org_im']],
use_gpu=use_gpu,
visualization=False,
shrink=scale,
confs_threshold=confs_threshold)

_s = list()
for _face in _detect_res[0]['data']:
Expand All @@ -167,12 +166,11 @@ def reader(face_detector, shrink, confs_threshold, images, paths, use_gpu, use_m
face = {'left': data[0], 'top': data[1], 'right': data[2], 'bottom': data[3], 'confidence': data[4]}
detect_faces.append(face)
else:
_detect_res = face_detector.face_detection(
images=[element['org_im']],
use_gpu=use_gpu,
visualization=False,
shrink=shrink,
confs_threshold=confs_threshold)
_detect_res = face_detector.face_detection(images=[element['org_im']],
use_gpu=use_gpu,
visualization=False,
shrink=shrink,
confs_threshold=confs_threshold)
detect_faces = _detect_res[0]['data']

element['preprocessed'] = list()
Expand Down
37 changes: 31 additions & 6 deletions modules/image/face_detection/pyramidbox_lite_mobile_mask/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@
import os

import numpy as np
import paddle
from paddle.inference import Config
from paddle.inference import create_predictor

import paddlehub as hub
from .data_feed import reader
from .processor import base64_to_cv2
from .processor import postprocess

import paddlehub as hub
from paddlehub.module.module import moduleinfo
from paddlehub.module.module import runnable
from paddlehub.module.module import serving
Expand All @@ -27,8 +26,9 @@
author_email="",
summary=
"Pyramidbox-Lite-Mobile-Mask is a high-performance face detection model used to detect whether people wear masks.",
version="1.4.0")
version="1.5.0")
class PyramidBoxLiteMobileMask:

def __init__(self, face_detector_module=None):
"""
Args:
Expand All @@ -46,8 +46,8 @@ def _set_config(self):
"""
predictor config setting
"""
model = self.default_pretrained_model_path+'.pdmodel'
params = self.default_pretrained_model_path+'.pdiparams'
model = self.default_pretrained_model_path + '.pdmodel'
params = self.default_pretrained_model_path + '.pdiparams'
cpu_config = Config(model, params)
cpu_config.disable_glog_info()
cpu_config.disable_gpu()
Expand Down Expand Up @@ -244,3 +244,28 @@ def add_module_input_arg(self):
type=ast.literal_eval,
default=0.6,
help="confidence threshold.")

def create_gradio_app(self):
import gradio as gr
import tempfile
import os
from PIL import Image

def inference(image, shrink, confs_threshold):
with tempfile.TemporaryDirectory() as temp_dir:
self.face_detection(paths=[image],
use_gpu=False,
visualization=True,
output_dir=temp_dir,
shrink=shrink,
confs_threshold=confs_threshold)
return Image.open(os.path.join(temp_dir, os.listdir(temp_dir)[0]))

interface = gr.Interface(inference, [
gr.inputs.Image(type="filepath"),
gr.Slider(0.0, 1.0, 0.5, step=0.01),
gr.Slider(0.0, 1.0, 0.6, step=0.01)
],
gr.outputs.Image(type="ndarray"),
title='pyramidbox_lite_mobile_mask')
return interface
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
from __future__ import division
from __future__ import print_function

import base64
import os
import time

import base64
import cv2
import numpy as np
from PIL import Image, ImageDraw
from PIL import Image
from PIL import ImageDraw

__all__ = ['base64_to_cv2', 'postprocess']

Expand Down Expand Up @@ -86,9 +87,9 @@ def draw_bounding_box_on_image(save_im_path, output_data):
box_fill = (255)
text_fill = (0)

draw.rectangle(
xy=(bbox['left'], bbox['top'] - (textsize_height + 5), bbox['left'] + textsize_width + 10, bbox['top'] - 3),
fill=box_fill)
draw.rectangle(xy=(bbox['left'], bbox['top'] - (textsize_height + 5), bbox['left'] + textsize_width + 10,
bbox['top'] - 3),
fill=box_fill)
draw.text(xy=(bbox['left'], bbox['top'] - 15), text=text, fill=text_fill)
image.save(save_im_path)

Expand Down
47 changes: 12 additions & 35 deletions modules/image/face_detection/pyramidbox_lite_mobile_mask/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@

import cv2
import requests
import paddlehub as hub

import paddlehub as hub

os.environ['CUDA_VISIBLE_DEVICES'] = '0'


class TestHubModule(unittest.TestCase):

@classmethod
def setUpClass(cls) -> None:
img_url = 'https://ai-studio-static-online.cdn.bcebos.com/7799a8ccc5f6471b9d56fb6eff94f82a08b70ca2c7594d3f99877e366c0a2619'
Expand All @@ -29,11 +30,7 @@ def tearDownClass(cls) -> None:
shutil.rmtree('detection_result')

def test_face_detection1(self):
results = self.module.face_detection(
paths=['tests/test.jpg'],
use_gpu=False,
visualization=False
)
results = self.module.face_detection(paths=['tests/test.jpg'], use_gpu=False, visualization=False)
bbox = results[0]['data'][0]

label = bbox['label']
Expand All @@ -42,7 +39,7 @@ def test_face_detection1(self):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']

self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
Expand All @@ -51,11 +48,7 @@ def test_face_detection1(self):
self.assertTrue(0 < bottom < 2000)

def test_face_detection2(self):
results = self.module.face_detection(
images=[cv2.imread('tests/test.jpg')],
use_gpu=False,
visualization=False
)
results = self.module.face_detection(images=[cv2.imread('tests/test.jpg')], use_gpu=False, visualization=False)
bbox = results[0]['data'][0]

label = bbox['label']
Expand All @@ -64,7 +57,7 @@ def test_face_detection2(self):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']

self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
Expand All @@ -73,11 +66,7 @@ def test_face_detection2(self):
self.assertTrue(0 < bottom < 2000)

def test_face_detection3(self):
results = self.module.face_detection(
images=[cv2.imread('tests/test.jpg')],
use_gpu=False,
visualization=True
)
results = self.module.face_detection(images=[cv2.imread('tests/test.jpg')], use_gpu=False, visualization=True)
bbox = results[0]['data'][0]

label = bbox['label']
Expand All @@ -86,7 +75,7 @@ def test_face_detection3(self):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']

self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
Expand All @@ -95,11 +84,7 @@ def test_face_detection3(self):
self.assertTrue(0 < bottom < 2000)

def test_face_detection4(self):
results = self.module.face_detection(
images=[cv2.imread('tests/test.jpg')],
use_gpu=True,
visualization=False
)
results = self.module.face_detection(images=[cv2.imread('tests/test.jpg')], use_gpu=True, visualization=False)
bbox = results[0]['data'][0]

label = bbox['label']
Expand All @@ -108,7 +93,7 @@ def test_face_detection4(self):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']

self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
Expand All @@ -117,18 +102,10 @@ def test_face_detection4(self):
self.assertTrue(0 < bottom < 2000)

def test_face_detection5(self):
self.assertRaises(
AssertionError,
self.module.face_detection,
paths=['no.jpg']
)
self.assertRaises(AssertionError, self.module.face_detection, paths=['no.jpg'])

def test_face_detection6(self):
self.assertRaises(
AttributeError,
self.module.face_detection,
images=['test.jpg']
)
self.assertRaises(AttributeError, self.module.face_detection, images=['test.jpg'])

def test_save_inference_model(self):
self.module.save_inference_model('./inference/model')
Expand Down