diff options
Diffstat (limited to 'ml/dlib/tools/python/src/simple_object_detector_py.h')
-rw-r--r-- | ml/dlib/tools/python/src/simple_object_detector_py.h | 290 |
1 files changed, 0 insertions, 290 deletions
diff --git a/ml/dlib/tools/python/src/simple_object_detector_py.h b/ml/dlib/tools/python/src/simple_object_detector_py.h deleted file mode 100644 index 0f950273d..000000000 --- a/ml/dlib/tools/python/src/simple_object_detector_py.h +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (C) 2014 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. -#ifndef DLIB_SIMPLE_OBJECT_DETECTOR_PY_H__ -#define DLIB_SIMPLE_OBJECT_DETECTOR_PY_H__ - -#include "opaque_types.h" -#include <dlib/python.h> -#include <dlib/matrix.h> -#include <dlib/geometry.h> -#include <dlib/image_processing/frontal_face_detector.h> - -namespace py = pybind11; - -namespace dlib -{ - typedef object_detector<scan_fhog_pyramid<pyramid_down<6> > > simple_object_detector; - - inline void split_rect_detections ( - std::vector<rect_detection>& rect_detections, - std::vector<rectangle>& rectangles, - std::vector<double>& detection_confidences, - std::vector<unsigned long>& weight_indices - ) - { - rectangles.clear(); - detection_confidences.clear(); - weight_indices.clear(); - - for (unsigned long i = 0; i < rect_detections.size(); ++i) - { - rectangles.push_back(rect_detections[i].rect); - detection_confidences.push_back(rect_detections[i].detection_confidence); - weight_indices.push_back(rect_detections[i].weight_index); - } - } - - - inline std::vector<dlib::rectangle> run_detector_with_upscale1 ( - dlib::simple_object_detector& detector, - py::object img, - const unsigned int upsampling_amount, - const double adjust_threshold, - std::vector<double>& detection_confidences, - std::vector<unsigned long>& weight_indices - ) - { - pyramid_down<2> pyr; - - std::vector<rectangle> rectangles; - std::vector<rect_detection> rect_detections; - - if (is_gray_python_image(img)) - { - array2d<unsigned char> temp; - if (upsampling_amount == 0) - { - detector(numpy_gray_image(img), rect_detections, adjust_threshold); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - return rectangles; - } - else - { - pyramid_up(numpy_gray_image(img), temp, pyr); - unsigned int levels = upsampling_amount-1; - while (levels > 0) - { - levels--; - pyramid_up(temp); - } - - detector(temp, rect_detections, adjust_threshold); - for (unsigned long i = 0; i < rect_detections.size(); ++i) - rect_detections[i].rect = pyr.rect_down(rect_detections[i].rect, - upsampling_amount); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - - return rectangles; - } - } - else if (is_rgb_python_image(img)) - { - array2d<rgb_pixel> temp; - if (upsampling_amount == 0) - { - detector(numpy_rgb_image(img), rect_detections, adjust_threshold); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - return rectangles; - } - else - { - pyramid_up(numpy_rgb_image(img), temp, pyr); - unsigned int levels = upsampling_amount-1; - while (levels > 0) - { - levels--; - pyramid_up(temp); - } - - detector(temp, rect_detections, adjust_threshold); - for (unsigned long i = 0; i < rect_detections.size(); ++i) - rect_detections[i].rect = pyr.rect_down(rect_detections[i].rect, - upsampling_amount); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - - return rectangles; - } - } - else - { - throw dlib::error("Unsupported image type, must be 8bit gray or RGB image."); - } - } - - inline std::vector<dlib::rectangle> run_detectors_with_upscale1 ( - std::vector<simple_object_detector >& detectors, - py::object img, - const unsigned int upsampling_amount, - const double adjust_threshold, - std::vector<double>& detection_confidences, - std::vector<unsigned long>& weight_indices - ) - { - pyramid_down<2> pyr; - - std::vector<rectangle> rectangles; - std::vector<rect_detection> rect_detections; - - if (is_gray_python_image(img)) - { - array2d<unsigned char> temp; - if (upsampling_amount == 0) - { - evaluate_detectors(detectors, numpy_gray_image(img), rect_detections, adjust_threshold); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - return rectangles; - } - else - { - pyramid_up(numpy_gray_image(img), temp, pyr); - unsigned int levels = upsampling_amount-1; - while (levels > 0) - { - levels--; - pyramid_up(temp); - } - - evaluate_detectors(detectors, temp, rect_detections, adjust_threshold); - for (unsigned long i = 0; i < rect_detections.size(); ++i) - rect_detections[i].rect = pyr.rect_down(rect_detections[i].rect, - upsampling_amount); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - - return rectangles; - } - } - else if (is_rgb_python_image(img)) - { - array2d<rgb_pixel> temp; - if (upsampling_amount == 0) - { - evaluate_detectors(detectors, numpy_rgb_image(img), rect_detections, adjust_threshold); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - return rectangles; - } - else - { - pyramid_up(numpy_rgb_image(img), temp, pyr); - unsigned int levels = upsampling_amount-1; - while (levels > 0) - { - levels--; - pyramid_up(temp); - } - - evaluate_detectors(detectors, temp, rect_detections, adjust_threshold); - for (unsigned long i = 0; i < rect_detections.size(); ++i) - rect_detections[i].rect = pyr.rect_down(rect_detections[i].rect, - upsampling_amount); - split_rect_detections(rect_detections, rectangles, - detection_confidences, weight_indices); - - return rectangles; - } - } - else - { - throw dlib::error("Unsupported image type, must be 8bit gray or RGB image."); - } - } - - inline std::vector<dlib::rectangle> run_detector_with_upscale2 ( - dlib::simple_object_detector& detector, - py::object img, - const unsigned int upsampling_amount - - ) - { - std::vector<double> detection_confidences; - std::vector<unsigned long> weight_indices; - const double adjust_threshold = 0.0; - - return run_detector_with_upscale1(detector, img, upsampling_amount, - adjust_threshold, - detection_confidences, weight_indices); - } - - inline py::tuple run_rect_detector ( - dlib::simple_object_detector& detector, - py::object img, - const unsigned int upsampling_amount, - const double adjust_threshold) - { - py::tuple t; - - std::vector<double> detection_confidences; - std::vector<unsigned long> weight_indices; - std::vector<rectangle> rectangles; - - rectangles = run_detector_with_upscale1(detector, img, upsampling_amount, - adjust_threshold, - detection_confidences, weight_indices); - - return py::make_tuple(rectangles, - vector_to_python_list(detection_confidences), - vector_to_python_list(weight_indices)); - } - - inline py::tuple run_multiple_rect_detectors ( - py::list& detectors, - py::object img, - const unsigned int upsampling_amount, - const double adjust_threshold) - { - py::tuple t; - - std::vector<simple_object_detector > vector_detectors; - const unsigned long num_detectors = len(detectors); - // Now copy the data into dlib based objects. - for (unsigned long i = 0; i < num_detectors; ++i) - { - vector_detectors.push_back(detectors[i].cast<simple_object_detector >()); - } - - std::vector<double> detection_confidences; - std::vector<unsigned long> weight_indices; - std::vector<rectangle> rectangles; - - rectangles = run_detectors_with_upscale1(vector_detectors, img, upsampling_amount, - adjust_threshold, - detection_confidences, weight_indices); - - return py::make_tuple(rectangles, - vector_to_python_list(detection_confidences), - vector_to_python_list(weight_indices)); - } - - - - struct simple_object_detector_py - { - simple_object_detector detector; - unsigned int upsampling_amount; - - simple_object_detector_py() {} - simple_object_detector_py(simple_object_detector& _detector, unsigned int _upsampling_amount) : - detector(_detector), upsampling_amount(_upsampling_amount) {} - - std::vector<dlib::rectangle> run_detector1 (py::object img, - const unsigned int upsampling_amount_) - { - return run_detector_with_upscale2(detector, img, upsampling_amount_); - } - - std::vector<dlib::rectangle> run_detector2 (py::object img) - { - return run_detector_with_upscale2(detector, img, upsampling_amount); - } - - - }; -} - -#endif // DLIB_SIMPLE_OBJECT_DETECTOR_PY_H__ |