diff --git a/python/examples/imagenet/benchmark_batch.py.lprof b/python/examples/imagenet/benchmark_batch.py.lprof deleted file mode 100644 index 7ff4f1411ded79aba3390e606193ec4fedacf06f..0000000000000000000000000000000000000000 Binary files a/python/examples/imagenet/benchmark_batch.py.lprof and /dev/null differ diff --git a/python/examples/imagenet/test_image_reader.py b/python/examples/imagenet/test_image_reader.py new file mode 100644 index 0000000000000000000000000000000000000000..b3e1aac786360838304e03ec284076ea834ae888 --- /dev/null +++ b/python/examples/imagenet/test_image_reader.py @@ -0,0 +1,37 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from paddle_serving_app.reader.image_reader import String2Image, Base64ToImage, Sequential +import base64 + + +def test_String2Image(): + with open("./daisy.jpg") as f: + img_str = f.read() + seq = Sequential([String2Image()]) + img = seq(img_str) + assert (img.shape == (563, 500, 3)) + + +def test_Base64ToImage(): + with open("./daisy.jpg") as f: + img_str = f.read() + seq = Sequential([Base64ToImage()]) + img = seq(base64.b64encode(img_str)) + assert (img.shape == (563, 500, 3)) + + +if __name__ == "__main__": + test_String2Image() + test_Base64ToImage() diff --git a/python/paddle_serving_app/reader/image_reader.py b/python/paddle_serving_app/reader/image_reader.py index cfd50e2514ae796af06d3301fc728bf0f5a88ad0..4f747df1f74800cf692bb22171466bffb7c598b0 100644 --- a/python/paddle_serving_app/reader/image_reader.py +++ b/python/paddle_serving_app/reader/image_reader.py @@ -517,6 +517,19 @@ class BGR2RGB(object): return self.__class__.__name__ + "()" +class String2Image(object): + def __init__(self): + pass + + def __call__(self, img_buffer): + data = np.fromstring(img_buffer, np.uint8) + img = cv2.imdecode(data, cv2.IMREAD_COLOR) + return img + + def __repr__(self): + return self.__class__.__name__ + "()" + + class File2Image(object): def __init__(self): pass @@ -561,7 +574,9 @@ class Base64ToImage(object): pass def __call__(self, img_base64): - img = base64.b64decode(img_base64) + sample = base64.b64decode(img_base64) + data = np.fromstring(sample, np.uint8) + img = cv2.imdecode(data, cv2.IMREAD_COLOR) return img def __repr__(self): diff --git a/tools/serving_build.sh b/tools/serving_build.sh index 498969b9c886a56e298d397808c2da14a38bac85..175f084d3e29ded9005d7a1e7c39da3e001978c8 100644 --- a/tools/serving_build.sh +++ b/tools/serving_build.sh @@ -61,7 +61,7 @@ function build_app() { -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so \ -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \ -DAPP=ON .. - rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail + rerun "make -j10 >/dev/null" 3 # due to some network reasons, compilation may fail pip install -U python/dist/paddle_serving_app* >/dev/null ;; *) @@ -84,7 +84,7 @@ function build_client() { -DPYTHON_LIBRARIES=$PYTHONROOT/lib64/libpython2.7.so \ -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \ -DCLIENT=ON .. - rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail + rerun "make -j10 >/dev/null" 3 # due to some network reasons, compilation may fail pip install -U python/dist/paddle_serving_client* >/dev/null ;; *) @@ -108,7 +108,7 @@ function build_server() { -DPYTHON_LIBRARIES=$PYTHONROOT/lib64/libpython2.7.so \ -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \ -DSERVER=ON .. - rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail + rerun "make -j10 >/dev/null" 3 # due to some network reasons, compilation may fail check_cmd "make install -j2 >/dev/null" pip install -U python/dist/paddle_serving_server* >/dev/null ;; @@ -118,7 +118,7 @@ function build_server() { -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \ -DSERVER=ON \ -DWITH_GPU=ON .. - rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail + rerun "make -j10 >/dev/null" 3 # due to some network reasons, compilation may fail check_cmd "make install -j2 >/dev/null" pip install -U python/dist/paddle_serving_server* >/dev/null ;; @@ -643,13 +643,7 @@ function python_test_yolov4(){ cd yolov4 case $TYPE in CPU) - python -m paddle_serving_app.package --get_model yolov4 - tar -xzvf yolov4.tar.gz - check_cmd "python -m paddle_serving_server.serve --model yolov4_model/ --port 9393 &" - sleep 5 - check_cmd "python test_client.py 000000570688.jpg" - echo "yolov4 CPU RPC inference pass" - kill_server_process + echo "no implement for cpu type" ;; GPU) python -m paddle_serving_app.package --get_model yolov4 @@ -670,6 +664,53 @@ function python_test_yolov4(){ cd .. } +function python_test_resnet50(){ + #pwd:/ Serving/python/examples + local TYPE=$1 + export SERVING_BIN=${SERVING_WORKDIR}/build-server-${TYPE}/core/general-server/serving + cd imagenet + case $TYPE in + CPU) + echo "no implement for cpu type" + ;; + GPU) + sh get_model.sh + check_cmd"python -m paddle_serving_server_gpu.serve --model ResNet50_vd_model --port 9696 --gpu_ids 0" + sleep 5 + check_cmd"python resnet50_rpc_client.py ResNet50_vd_client_config/serving_client_conf.prototxt" + echo "resnet50 GPU RPC inference pass" + kill_server_process + ;; + *) + echo "error type" + exit 1 + ;; + esac + echo "test resnet $TYPE finished as expected" + unset SERVING_BIN + cd .. +} + +function python_app_api_test(){ + #pwd:/ Serving/python/examples + #test image reader + local TYPE=$1 + cd imagenet + case $TYPE in + CPU) + check_cmd "python test_image_reader.py" + ;; + GPU) + echo "no implement for cpu type" + ;; + *) + echo "error type" + exit 1 + ;; + esac + echo "test app api finised as expected" + cd .. +} function python_run_test() { # Using the compiled binary @@ -684,6 +725,7 @@ function python_run_test() { python_test_multi_fetch $TYPE # pwd: /Serving/python/examples python_test_yolov4 $TYPE # pwd: /Serving/python/examples python_test_grpc_impl $TYPE # pwd: /Serving/python/examples + python_test_resnet50 $TYPE # pwd: /Serving/python/examples echo "test python $TYPE part finished as expected." cd ../.. # pwd: /Serving }