diff --git a/modules/image/keypoint_detection/pp-tinypose/README.md b/modules/image/keypoint_detection/pp-tinypose/README.md index c817a4c48361ed5c2bfa394385d8f174bd753188..14d6ba352846553ed762a73ea6758766047bfcd8 100644 --- a/modules/image/keypoint_detection/pp-tinypose/README.md +++ b/modules/image/keypoint_detection/pp-tinypose/README.md @@ -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 ``` diff --git a/modules/image/keypoint_detection/pp-tinypose/infer.py b/modules/image/keypoint_detection/pp-tinypose/infer.py index 0c93e93b5ede83bba67acfd929bbf05cda895281..bf0a27c94fb68793b8918890e2d8f015deb467b5 100644 --- a/modules/image/keypoint_detection/pp-tinypose/infer.py +++ b/modules/image/keypoint_detection/pp-tinypose/infer.py @@ -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 diff --git a/modules/image/keypoint_detection/pp-tinypose/keypoint_infer.py b/modules/image/keypoint_detection/pp-tinypose/keypoint_infer.py index c5ac4d81de81f42f6eb02d57aafe1cc585d6afa0..8f872696caaccb18e1c48add519f335376831fe5 100644 --- a/modules/image/keypoint_detection/pp-tinypose/keypoint_infer.py +++ b/modules/image/keypoint_detection/pp-tinypose/keypoint_infer.py @@ -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'} diff --git a/modules/image/keypoint_detection/pp-tinypose/module.py b/modules/image/keypoint_detection/pp-tinypose/module.py index 15a79ab3d884383aad9a3abc8a4d7f255014155b..a80b4d1e7563c3c747606d6d30df4e377c7d5333 100644 --- a/modules/image/keypoint_detection/pp-tinypose/module.py +++ b/modules/image/keypoint_detection/pp-tinypose/module.py @@ -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 diff --git a/modules/image/keypoint_detection/pp-tinypose/test.py b/modules/image/keypoint_detection/pp-tinypose/test.py index 3d37a328e2d310b26a8a6079f4293d242fd08721..59f7cba8cf4a2fbeca50cdb9c559c4b7338f6fb7 100644 --- a/modules/image/keypoint_detection/pp-tinypose/test.py +++ b/modules/image/keypoint_detection/pp-tinypose/test.py @@ -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() \ No newline at end of file + unittest.main() diff --git a/modules/image/keypoint_detection/pp-tinypose/visualize.py b/modules/image/keypoint_detection/pp-tinypose/visualize.py index 27dfcaa6ddc6f75832e488ef3b4edcceea909ae8..c8a9cf333d6d413c5375febf12896b44a7af9421 100644 --- a/modules/image/keypoint_detection/pp-tinypose/visualize.py +++ b/modules/image/keypoint_detection/pp-tinypose/visualize.py @@ -13,8 +13,8 @@ # limitations under the License. from __future__ import division -import os import math +import os import cv2 import numpy as np