瀏覽代碼

support interface

Channingss 5 年之前
父節點
當前提交
0f72bbfef9

+ 17 - 4
deploy/cpp/CMakeLists.txt

@@ -10,7 +10,9 @@ SET(TENSORRT_DIR "" CACHE PATH "Compile demo with TensorRT")
 SET(PADDLE_DIR "" CACHE PATH "Location of libraries")
 SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
 SET(CUDA_LIB "" CACHE PATH "Location of libraries")
-
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/demo)
 include(cmake/yaml-cpp.cmake)
 
 include_directories("${CMAKE_SOURCE_DIR}/")
@@ -213,15 +215,19 @@ if (NOT WIN32)
 endif()
 
 set(DEPS ${DEPS} ${OpenCV_LIBS})
-add_executable(classifier src/classifier.cpp src/transforms.cpp src/paddlex.cpp)
+add_library(paddlex_inference SHARED src/visualize src/transforms.cpp src/paddlex.cpp)
+ADD_DEPENDENCIES(paddlex_inference ext-yaml-cpp)
+target_link_libraries(paddlex_inference ${DEPS})
+
+add_executable(classifier demo/classifier.cpp src/transforms.cpp src/paddlex.cpp)
 ADD_DEPENDENCIES(classifier ext-yaml-cpp)
 target_link_libraries(classifier ${DEPS})
 
-add_executable(detector src/detector.cpp src/transforms.cpp src/paddlex.cpp src/visualize.cpp)
+add_executable(detector demo/detector.cpp src/transforms.cpp src/paddlex.cpp src/visualize.cpp)
 ADD_DEPENDENCIES(detector ext-yaml-cpp)
 target_link_libraries(detector ${DEPS})
 
-add_executable(segmenter src/segmenter.cpp src/transforms.cpp src/paddlex.cpp src/visualize.cpp)
+add_executable(segmenter demo/segmenter.cpp src/transforms.cpp src/paddlex.cpp src/visualize.cpp)
 ADD_DEPENDENCIES(segmenter ext-yaml-cpp)
 target_link_libraries(segmenter ${DEPS})
 
@@ -252,3 +258,10 @@ if (WIN32 AND WITH_MKL)
     )
 
 endif()
+
+file(COPY  "${CMAKE_SOURCE_DIR}/include/paddlex/visualize.h"
+DESTINATION  "${CMAKE_BINARY_DIR}/include/"  )
+file(COPY  "${CMAKE_SOURCE_DIR}/include/paddlex/transforms.h"
+DESTINATION  "${CMAKE_BINARY_DIR}/include/"  )
+file(COPY  "${CMAKE_SOURCE_DIR}/include/paddlex/paddlex.h"
+DESTINATION  "${CMAKE_BINARY_DIR}/include/"  )

+ 1 - 1
deploy/cpp/cmake/yaml-cpp.cmake

@@ -14,7 +14,7 @@ ExternalProject_Add(
         -DYAML_CPP_INSTALL=OFF
         -DYAML_CPP_BUILD_CONTRIB=OFF
         -DMSVC_SHARED_RT=OFF
-        -DBUILD_SHARED_LIBS=OFF
+        -DBUILD_SHARED_LIBS=ON
         -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
         -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
         -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}

+ 2 - 2
deploy/cpp/include/paddlex/visualize.h

@@ -46,13 +46,13 @@ namespace PaddleX {
 // Generate visualization colormap for each class
 std::vector<int> GenerateColorMap(int num_class);
 
-cv::Mat VisualizeDet(const cv::Mat& img,
+cv::Mat Visualize(const cv::Mat& img,
                      const DetResult& results,
                      const std::map<int, std::string>& labels,
                      const std::vector<int>& colormap,
                      float threshold = 0.5);
 
-cv::Mat VisualizeSeg(const cv::Mat& img,
+cv::Mat Visualize(const cv::Mat& img,
                      const SegResult& result,
                      const std::map<int, std::string>& labels,
                      const std::vector<int>& colormap);

+ 0 - 74
deploy/cpp/src/classifier.cpp

@@ -1,74 +0,0 @@
-//   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.
-
-#include <glog/logging.h>
-
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "include/paddlex/paddlex.h"
-
-DEFINE_string(model_dir, "", "Path of inference model");
-DEFINE_bool(use_gpu, false, "Infering with GPU or CPU");
-DEFINE_bool(use_trt, false, "Infering with TensorRT");
-DEFINE_int32(gpu_id, 0, "GPU card id");
-DEFINE_string(image, "", "Path of test image file");
-DEFINE_string(image_list, "", "Path of test image list file");
-
-int main(int argc, char** argv) {
-  // Parsing command-line
-  google::ParseCommandLineFlags(&argc, &argv, true);
-
-  if (FLAGS_model_dir == "") {
-    std::cerr << "--model_dir need to be defined" << std::endl;
-    return -1;
-  }
-  if (FLAGS_image == "" & FLAGS_image_list == "") {
-    std::cerr << "--image or --image_list need to be defined" << std::endl;
-    return -1;
-  }
-
-  // 加载模型
-  PaddleX::Model model;
-  model.Init(FLAGS_model_dir, FLAGS_use_gpu, FLAGS_use_trt, FLAGS_gpu_id);
-
-  // 进行预测
-  if (FLAGS_image_list != "") {
-    std::ifstream inf(FLAGS_image_list);
-    if (!inf) {
-      std::cerr << "Fail to open file " << FLAGS_image_list << std::endl;
-      return -1;
-    }
-    std::string image_path;
-    while (getline(inf, image_path)) {
-      PaddleX::ClsResult result;
-      cv::Mat im = cv::imread(image_path, 1);
-      model.predict(im, &result);
-      std::cout << "Predict label: " << result.category
-                << ", label_id:" << result.category_id
-                << ", score: " << result.score << std::endl;
-    }
-  } else {
-    PaddleX::ClsResult result;
-    cv::Mat im = cv::imread(FLAGS_image, 1);
-    model.predict(im, &result);
-    std::cout << "Predict label: " << result.category
-              << ", label_id:" << result.category_id
-              << ", score: " << result.score << std::endl;
-  }
-
-  return 0;
-}

+ 0 - 109
deploy/cpp/src/detector.cpp

@@ -1,109 +0,0 @@
-//   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.
-
-#include <glog/logging.h>
-
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "include/paddlex/paddlex.h"
-#include "include/paddlex/visualize.h"
-
-DEFINE_string(model_dir, "", "Path of inference model");
-DEFINE_bool(use_gpu, false, "Infering with GPU or CPU");
-DEFINE_bool(use_trt, false, "Infering with TensorRT");
-DEFINE_int32(gpu_id, 0, "GPU card id");
-DEFINE_string(image, "", "Path of test image file");
-DEFINE_string(image_list, "", "Path of test image list file");
-DEFINE_string(save_dir, "output", "Path to save visualized image");
-
-int main(int argc, char** argv) {
-  // 解析命令行参数
-  google::ParseCommandLineFlags(&argc, &argv, true);
-
-  if (FLAGS_model_dir == "") {
-    std::cerr << "--model_dir need to be defined" << std::endl;
-    return -1;
-  }
-  if (FLAGS_image == "" & FLAGS_image_list == "") {
-    std::cerr << "--image or --image_list need to be defined" << std::endl;
-    return -1;
-  }
-
-  // 加载模型
-  PaddleX::Model model;
-  model.Init(FLAGS_model_dir, FLAGS_use_gpu, FLAGS_use_trt, FLAGS_gpu_id);
-
-  auto colormap = PaddleX::GenerateColorMap(model.labels.size());
-  std::string save_dir = "output";
-  // 进行预测
-  if (FLAGS_image_list != "") {
-    std::ifstream inf(FLAGS_image_list);
-    if (!inf) {
-      std::cerr << "Fail to open file " << FLAGS_image_list << std::endl;
-      return -1;
-    }
-    std::string image_path;
-    while (getline(inf, image_path)) {
-      PaddleX::DetResult result;
-      cv::Mat im = cv::imread(image_path, 1);
-      model.predict(im, &result);
-      for (int i = 0; i < result.boxes.size(); ++i) {
-        std::cout << "image file: " << image_path
-                  << ", predict label: " << result.boxes[i].category
-                  << ", label_id:" << result.boxes[i].category_id
-                  << ", score: " << result.boxes[i].score << ", box:("
-                  << result.boxes[i].coordinate[0] << ", "
-                  << result.boxes[i].coordinate[1] << ", "
-                  << result.boxes[i].coordinate[2] << ", "
-                  << result.boxes[i].coordinate[3] << ")" << std::endl;
-      }
-
-      // 可视化
-      cv::Mat vis_img =
-          PaddleX::VisualizeDet(im, result, model.labels, colormap, 0.5);
-      std::string save_path =
-          PaddleX::generate_save_path(FLAGS_save_dir, image_path);
-      cv::imwrite(save_path, vis_img);
-      result.clear();
-      std::cout << "Visualized output saved as " << save_path << std::endl;
-    }
-  } else {
-    PaddleX::DetResult result;
-    cv::Mat im = cv::imread(FLAGS_image, 1);
-    model.predict(im, &result);
-    for (int i = 0; i < result.boxes.size(); ++i) {
-      std::cout << ", predict label: " << result.boxes[i].category
-                << ", label_id:" << result.boxes[i].category_id
-                << ", score: " << result.boxes[i].score << ", box:("
-                << result.boxes[i].coordinate[0] << ", "
-                << result.boxes[i].coordinate[1] << ", "
-                << result.boxes[i].coordinate[2] << ", "
-                << result.boxes[i].coordinate[3] << ")" << std::endl;
-    }
-
-    // 可视化
-    cv::Mat vis_img =
-        PaddleX::VisualizeDet(im, result, model.labels, colormap, 0.5);
-    std::string save_path =
-        PaddleX::generate_save_path(FLAGS_save_dir, FLAGS_image);
-    cv::imwrite(save_path, vis_img);
-    result.clear();
-    std::cout << "Visualized output saved as " << save_path << std::endl;
-  }
-
-  return 0;
-}

+ 0 - 86
deploy/cpp/src/segmenter.cpp

@@ -1,86 +0,0 @@
-//   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.
-
-#include <glog/logging.h>
-
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "include/paddlex/paddlex.h"
-#include "include/paddlex/visualize.h"
-
-DEFINE_string(model_dir, "", "Path of inference model");
-DEFINE_bool(use_gpu, false, "Infering with GPU or CPU");
-DEFINE_bool(use_trt, false, "Infering with TensorRT");
-DEFINE_int32(gpu_id, 0, "GPU card id");
-DEFINE_string(image, "", "Path of test image file");
-DEFINE_string(image_list, "", "Path of test image list file");
-DEFINE_string(save_dir, "output", "Path to save visualized image");
-
-int main(int argc, char** argv) {
-  // 解析命令行参数
-  google::ParseCommandLineFlags(&argc, &argv, true);
-
-  if (FLAGS_model_dir == "") {
-    std::cerr << "--model_dir need to be defined" << std::endl;
-    return -1;
-  }
-  if (FLAGS_image == "" & FLAGS_image_list == "") {
-    std::cerr << "--image or --image_list need to be defined" << std::endl;
-    return -1;
-  }
-
-  // 加载模型
-  PaddleX::Model model;
-  model.Init(FLAGS_model_dir, FLAGS_use_gpu, FLAGS_use_trt, FLAGS_gpu_id);
-
-  auto colormap = PaddleX::GenerateColorMap(model.labels.size());
-  // 进行预测
-  if (FLAGS_image_list != "") {
-    std::ifstream inf(FLAGS_image_list);
-    if (!inf) {
-      std::cerr << "Fail to open file " << FLAGS_image_list << std::endl;
-      return -1;
-    }
-    std::string image_path;
-    while (getline(inf, image_path)) {
-      PaddleX::SegResult result;
-      cv::Mat im = cv::imread(image_path, 1);
-      model.predict(im, &result);
-      // 可视化
-      cv::Mat vis_img =
-          PaddleX::VisualizeSeg(im, result, model.labels, colormap);
-      std::string save_path =
-          PaddleX::generate_save_path(FLAGS_save_dir, image_path);
-      cv::imwrite(save_path, vis_img);
-      result.clear();
-      std::cout << "Visualized output saved as " << save_path << std::endl;
-    }
-  } else {
-    PaddleX::SegResult result;
-    cv::Mat im = cv::imread(FLAGS_image, 1);
-    model.predict(im, &result);
-    // 可视化
-    cv::Mat vis_img = PaddleX::VisualizeSeg(im, result, model.labels, colormap);
-    std::string save_path =
-        PaddleX::generate_save_path(FLAGS_save_dir, FLAGS_image);
-    cv::imwrite(save_path, vis_img);
-    result.clear();
-    std::cout << "Visualized output saved as " << save_path << std::endl;
-  }
-
-  return 0;
-}

+ 2 - 2
deploy/cpp/src/visualize.cpp

@@ -31,7 +31,7 @@ std::vector<int> GenerateColorMap(int num_class) {
   return colormap;
 }
 
-cv::Mat VisualizeDet(const cv::Mat& img,
+cv::Mat Visualize(const cv::Mat& img,
                      const DetResult& result,
                      const std::map<int, std::string>& labels,
                      const std::vector<int>& colormap,
@@ -105,7 +105,7 @@ cv::Mat VisualizeDet(const cv::Mat& img,
   return vis_img;
 }
 
-cv::Mat VisualizeSeg(const cv::Mat& img,
+cv::Mat Visualize(const cv::Mat& img,
                      const SegResult& result,
                      const std::map<int, std::string>& labels,
                      const std::vector<int>& colormap) {