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

update pp-tinypose (#2188)

上级 497e3cea
......@@ -125,6 +125,9 @@
r = requests.post(url=url, headers=headers, data=json.dumps(data))
```
- ### Gradio APP 支持
从 PaddleHub 2.3.1 开始支持使用链接 http://127.0.0.1:8866/gradio/pp-tinypose 在浏览器中访问 pp-tinypose 的 Gradio APP。
## 五、更新历史
* 1.0.0
......@@ -135,6 +138,10 @@
修复使用 ndarray 输入时无法保存可视化图片的问题
* 1.2.0
添加 Gradio APP 支持
- ```shell
$ hub install pp-tinypose==1.1.0
$ hub install pp-tinypose==1.2.0
```
......@@ -23,6 +23,9 @@ import yaml
from paddle.inference import Config
from paddle.inference import create_predictor
from .keypoint_preprocess import EvalAffine
from .keypoint_preprocess import expand_crop
from .keypoint_preprocess import TopDownEvalAffine
from .preprocess import decode_image
from .preprocess import LetterBoxResize
from .preprocess import NormalizeImage
......@@ -32,9 +35,6 @@ from .preprocess import Permute
from .preprocess import preprocess
from .preprocess import Resize
from .preprocess import WarpAffine
from .keypoint_preprocess import EvalAffine
from .keypoint_preprocess import expand_crop
from .keypoint_preprocess import TopDownEvalAffine
from .visualize import visualize_box
# Global dictionary
......
......@@ -18,10 +18,10 @@ import cv2
import numpy as np
import yaml
from .keypoint_preprocess import expand_crop
from .infer import Detector
from .keypoint_postprocess import HRNetPostProcess
from .keypoint_preprocess import expand_crop
from .visualize import visualize_pose
from .infer import Detector
# Global dictionary
KEYPOINT_SUPPORT_MODELS = {'HigherHRNet': 'keypoint_bottomup', 'HRNet': 'keypoint_topdown'}
......
......@@ -26,7 +26,6 @@ from .keypoint_infer import KeyPointDetector
from .preprocess import base64_to_cv2
from .preprocess import decode_image
from .visualize import visualize_pose
from paddlehub.module.module import moduleinfo
from paddlehub.module.module import runnable
from paddlehub.module.module import serving
......@@ -38,7 +37,7 @@ from paddlehub.module.module import serving
author="paddlepaddle",
author_email="",
summary="PP-TinyPose is a real-time keypoint detection model optimized by PaddleDetecion for mobile devices.",
version="1.1.0")
version="1.2.0")
class PP_TinyPose:
"""
PP-TinyPose Model.
......@@ -136,3 +135,21 @@ class PP_TinyPose:
Add the command input options.
"""
self.arg_input_group.add_argument('--input_path', type=str, help="path to image.")
def create_gradio_app(self):
import gradio as gr
import tempfile
import os
from PIL import Image
def inference(image, use_gpu=False):
with tempfile.TemporaryDirectory() as temp_dir:
self.predict(img=image, use_gpu=use_gpu, visualization=True, save_path=temp_dir)
return Image.open(os.path.join(temp_dir, os.listdir(temp_dir)[0]))
interface = gr.Interface(
inference,
[gr.inputs.Image(type="filepath"), gr.Checkbox(label='use_gpu')],
gr.outputs.Image(type="ndarray"),
title='pp-tinypose')
return interface
......@@ -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'
......@@ -28,42 +29,26 @@ class TestHubModule(unittest.TestCase):
shutil.rmtree('pp_tinypose_output')
def test_predict1(self):
results = self.module.predict(
img='tests/test.jpg',
visualization=False
)
results = self.module.predict(img='tests/test.jpg', visualization=False)
kps = results[0][1]
self.assertIsInstance(kps, list)
def test_predict2(self):
results = self.module.predict(
img=cv2.imread('tests/test.jpg'),
visualization=False
)
results = self.module.predict(img=cv2.imread('tests/test.jpg'), visualization=False)
kps = results[0][1]
self.assertIsInstance(kps, list)
def test_predict3(self):
results = self.module.predict(
img=cv2.imread('tests/test.jpg'),
visualization=True
)
results = self.module.predict(img=cv2.imread('tests/test.jpg'), visualization=True)
kps = results[0][1]
self.assertIsInstance(kps, list)
def test_predict4(self):
self.assertRaises(
FileNotFoundError,
self.module.predict,
img='no.jpg'
)
self.assertRaises(FileNotFoundError, self.module.predict, img='no.jpg')
def test_predict5(self):
self.assertRaises(
cv2.error,
self.module.predict,
img=['test.jpg']
)
self.assertRaises(TypeError, self.module.predict, img=['test.jpg'])
if __name__ == "__main__":
unittest.main()
......@@ -13,8 +13,8 @@
# limitations under the License.
from __future__ import division
import os
import math
import os
import cv2
import numpy as np
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册