未验证 提交 c28c889a 编写于 作者: jm_12138's avatar jm_12138 提交者: GitHub

update pyramidbox_lite_mobile_mask (#2179)

上级 283be69c
......@@ -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
......@@ -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
```
......@@ -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
......@@ -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
```
# coding=utf-8
import os
import math
import os
import time
from collections import OrderedDict
......@@ -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']:
......@@ -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()
......
......@@ -7,14 +7,13 @@ import ast
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
......@@ -27,8 +26,9 @@ from paddlehub.module.module import serving
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:
......@@ -46,8 +46,8 @@ class PyramidBoxLiteMobileMask:
"""
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()
......@@ -244,3 +244,28 @@ class PyramidBoxLiteMobileMask:
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
......@@ -3,13 +3,14 @@ from __future__ import absolute_import
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']
......@@ -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)
......
......@@ -4,13 +4,14 @@ import unittest
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'
......@@ -29,11 +30,7 @@ class TestHubModule(unittest.TestCase):
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']
......@@ -42,7 +39,7 @@ class TestHubModule(unittest.TestCase):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']
self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
......@@ -51,11 +48,7 @@ class TestHubModule(unittest.TestCase):
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']
......@@ -64,7 +57,7 @@ class TestHubModule(unittest.TestCase):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']
self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
......@@ -73,11 +66,7 @@ class TestHubModule(unittest.TestCase):
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']
......@@ -86,7 +75,7 @@ class TestHubModule(unittest.TestCase):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']
self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
......@@ -95,11 +84,7 @@ class TestHubModule(unittest.TestCase):
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']
......@@ -108,7 +93,7 @@ class TestHubModule(unittest.TestCase):
right = bbox['right']
top = bbox['top']
bottom = bbox['bottom']
self.assertEqual(label, 'NO MASK')
self.assertTrue(confidence > 0.5)
self.assertTrue(1000 < left < 4000)
......@@ -117,18 +102,10 @@ class TestHubModule(unittest.TestCase):
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')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册