From 287874a444326f44a501fe225ea89fd1a49a94df Mon Sep 17 00:00:00 2001 From: Orest Chura Date: Tue, 17 Dec 2019 11:00:49 +0300 Subject: [PATCH] Merge pull request #15942 from OrestChura:fb_tutorial G-API: Tutorial: Face beautification algorithm implementation * Introduce a tutorial on face beautification algorithm - small typo issue in render_ocv.cpp * Addressing comments rgarnov smirnov-alexey --- .../face_beautification.markdown | 440 +++++++++++++++ .../gapi/face_beautification/pics/example.jpg | Bin 0 -> 176525 bytes doc/tutorials/gapi/table_of_content_gapi.markdown | 11 + modules/gapi/src/api/render_ocv.cpp | 2 +- .../face_beautification}/face_beautification.cpp | 618 ++++++++++++--------- 5 files changed, 822 insertions(+), 249 deletions(-) create mode 100644 doc/tutorials/gapi/face_beautification/face_beautification.markdown create mode 100644 doc/tutorials/gapi/face_beautification/pics/example.jpg rename {modules/gapi/samples => samples/cpp/tutorial_code/gapi/face_beautification}/face_beautification.cpp (61%) diff --git a/doc/tutorials/gapi/face_beautification/face_beautification.markdown b/doc/tutorials/gapi/face_beautification/face_beautification.markdown new file mode 100644 index 0000000..e219cee --- /dev/null +++ b/doc/tutorials/gapi/face_beautification/face_beautification.markdown @@ -0,0 +1,440 @@ +# Implementing a face beautification algorithm with G-API {#tutorial_gapi_face_beautification} + +[TOC] + +# Introduction {#gapi_fb_intro} + +In this tutorial you will learn: +* Basics of a sample face beautification algorithm; +* How to infer different networks inside a pipeline with G-API; +* How to run a G-API pipeline on a video stream. + +## Prerequisites {#gapi_fb_prerec} + +This sample requires: +- PC with GNU/Linux or Microsoft Windows (Apple macOS is supported but + was not tested); +- OpenCV 4.2 or later built with Intel® Distribution of [OpenVINO™ + Toolkit](https://docs.openvinotoolkit.org/) (building with [Intel® + TBB](https://www.threadingbuildingblocks.org/intel-tbb-tutorial) is + a plus); +- The following topologies from OpenVINO™ Toolkit [Open Model + Zoo](https://github.com/opencv/open_model_zoo): + - `face-detection-adas-0001`; + - `facial-landmarks-35-adas-0002`. + +## Face beautification algorithm {#gapi_fb_algorithm} + +We will implement a simple face beautification algorithm using a +combination of modern Deep Learning techniques and traditional +Computer Vision. The general idea behind the algorithm is to make +face skin smoother while preserving face features like eyes or a +mouth contrast. The algorithm identifies parts of the face using a DNN +inference, applies different filters to the parts found, and then +combines it into the final result using basic image arithmetics: + +\dot +strict digraph Pipeline { + node [shape=record fontname=Helvetica fontsize=10 style=filled color="#4c7aa4" fillcolor="#5b9bd5" fontcolor="white"]; + edge [color="#62a8e7"]; + ordering="out"; + splines=ortho; + rankdir=LR; + + input [label="Input"]; + fd [label="Face\ndetector"]; + bgMask [label="Generate\nBG mask"]; + unshMask [label="Unsharp\nmask"]; + bilFil [label="Bilateral\nfilter"]; + shMask [label="Generate\nsharp mask"]; + blMask [label="Generate\nblur mask"]; + mul_1 [label="*" fontsize=24 shape=circle labelloc=b]; + mul_2 [label="*" fontsize=24 shape=circle labelloc=b]; + mul_3 [label="*" fontsize=24 shape=circle labelloc=b]; + + subgraph cluster_0 { + style=dashed + fontsize=10 + ld [label="Landmarks\ndetector"]; + label="for each face" + } + + sum_1 [label="+" fontsize=24 shape=circle]; + out [label="Output"]; + + temp_1 [style=invis shape=point width=0]; + temp_2 [style=invis shape=point width=0]; + temp_3 [style=invis shape=point width=0]; + temp_4 [style=invis shape=point width=0]; + temp_5 [style=invis shape=point width=0]; + temp_6 [style=invis shape=point width=0]; + temp_7 [style=invis shape=point width=0]; + temp_8 [style=invis shape=point width=0]; + temp_9 [style=invis shape=point width=0]; + + input -> temp_1 [arrowhead=none] + temp_1 -> fd -> ld + ld -> temp_4 [arrowhead=none] + temp_4 -> bgMask + bgMask -> mul_1 -> sum_1 -> out + + temp_4 -> temp_5 -> temp_6 [arrowhead=none constraint=none] + ld -> temp_2 -> temp_3 [style=invis constraint=none] + + temp_1 -> {unshMask, bilFil} + fd -> unshMask [style=invis constraint=none] + unshMask -> bilFil [style=invis constraint=none] + + bgMask -> shMask [style=invis constraint=none] + shMask -> blMask [style=invis constraint=none] + mul_1 -> mul_2 [style=invis constraint=none] + temp_5 -> shMask -> mul_2 + temp_6 -> blMask -> mul_3 + + unshMask -> temp_2 -> temp_5 [style=invis] + bilFil -> temp_3 -> temp_6 [style=invis] + + mul_2 -> temp_7 [arrowhead=none] + mul_3 -> temp_8 [arrowhead=none] + + temp_8 -> temp_7 [arrowhead=none constraint=none] + temp_7 -> sum_1 [constraint=none] + + unshMask -> mul_2 [constraint=none] + bilFil -> mul_3 [constraint=none] + temp_1 -> mul_1 [constraint=none] +} +\enddot + +Briefly the algorithm is described as follows: +- Input image \f$I\f$ is passed to unsharp mask and bilateral filters + (\f$U\f$ and \f$L\f$ respectively); +- Input image \f$I\f$ is passed to an SSD-based face detector; +- SSD result (a \f$[1 \times 1 \times 200 \times 7]\f$ blob) is parsed + and converted to an array of faces; +- Every face is passed to a landmarks detector; +- Based on landmarks found for every face, three image masks are + generated: + - A background mask \f$b\f$ -- indicating which areas from the + original image to keep as-is; + - A face part mask \f$p\f$ -- identifying regions to preserve + (sharpen). + - A face skin mask \f$s\f$ -- identifying regions to blur; +- The final result \f$O\f$ is a composition of features above + calculated as \f$O = b*I + p*U + s*L\f$. + +Generating face element masks based on a limited set of features (just +35 per face, including all its parts) is not very trivial and is +described in the sections below. + +# Constructing a G-API pipeline {#gapi_fb_pipeline} + +## Declaring Deep Learning topologies {#gapi_fb_decl_nets} + +This sample is using two DNN detectors. Every network takes one input +and produces one output. In G-API, networks are defined with macro +G_API_NET(): + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp net_decl + +To get more information, see +[Declaring Deep Learning topologies](@ref gapi_ifd_declaring_nets) +described in the "Face Analytics pipeline" tutorial. + +## Describing the processing graph {#gapi_fb_ppline} + +The code below generates a graph for the algorithm above: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp ppl + +The resulting graph is a mixture of G-API's standard operations, +user-defined operations (namespace `custom::`), and DNN inference. +The generic function `cv::gapi::infer<>()` allows to trigger inference +within the pipeline; networks to infer are specified as template +parameters. The sample code is using two versions of `cv::gapi::infer<>()`: +- A frame-oriented one is used to detect faces on the input frame. +- An ROI-list oriented one is used to run landmarks inference on a + list of faces -- this version produces an array of landmarks per + every face. + +More on this in "Face Analytics pipeline" +([Building a GComputation](@ref gapi_ifd_gcomputation) section). + +## Unsharp mask in G-API {#gapi_fb_unsh} + +The unsharp mask \f$U\f$ for image \f$I\f$ is defined as: + +\f[U = I - s * L(M(I)),\f] + +where \f$M()\f$ is a median filter, \f$L()\f$ is the Laplace operator, +and \f$s\f$ is a strength coefficient. While G-API doesn't provide +this function out-of-the-box, it is expressed naturally with the +existing G-API operations: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp unsh + +Note that the code snipped above is a regular C++ function defined +with G-API types. Users can write functions like this to simplify +graph construction; when called, this function just puts the relevant +nodes to the pipeline it is used in. + +# Custom operations {#gapi_fb_proc} + +The face beautification graph is using custom operations +extensively. This chapter focuses on the most interesting kernels, +refer to [G-API Kernel API](@ref gapi_kernel_api) for general +information on defining operations and implementing kernels in G-API. + +## Face detector post-processing {#gapi_fb_face_detect} + +A face detector output is converted to an array of faces with the +following kernel: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp vec_ROI +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp fd_pp + +## Facial landmarks post-processing {#gapi_fb_landm_detect} + +The algorithm infers locations of face elements (like the eyes, the mouth +and the head contour itself) using a generic facial landmarks detector +(details) +from OpenVINO™ Open Model Zoo. However, the detected landmarks as-is are not +enough to generate masks --- this operation requires regions of interest on +the face represented by closed contours, so some interpolation is applied to +get them. This landmarks +processing and interpolation is performed by the following kernel: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp ld_pp_cnts + +The kernel takes two arrays of denormalized landmarks coordinates and +returns an array of elements' closed contours and an array of faces' +closed contours; in other words, outputs are, the first, an array of +contours of image areas to be sharpened and, the second, another one +to be smoothed. + +Here and below `Contour` is a vector of points. + +### Getting an eye contour {#gapi_fb_ld_eye} + +Eye contours are estimated with the following function: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp ld_pp_incl +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp ld_pp_eye + +Briefly, this function restores the bottom side of an eye by a +half-ellipse based on two points in left and right eye +corners. In fact, `cv::ellipse2Poly()` is used to approximate the eye region, and +the function only defines ellipse parameters based on just two points: +- The ellipse center and the \f$X\f$ half-axis calculated by two eye Points; +- The \f$Y\f$ half-axis calculated according to the assumption that an average +eye width is \f$1/3\f$ of its length; +- The start and the end angles which are 0 and 180 (refer to + `cv::ellipse()` documentation); +- The angle delta: how much points to produce in the contour; +- The inclination angle of the axes. + +The use of the `atan2()` instead of just `atan()` in function +`custom::getLineInclinationAngleDegrees()` is essential as it allows to +return a negative value depending on the `x` and the `y` signs so we +can get the right angle even in case of upside-down face arrangement +(if we put the points in the right order, of course). + +### Getting a forehead contour {#gapi_fb_ld_fhd} + +The function approximates the forehead contour: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp ld_pp_fhd + +As we have only jaw points in our detected landmarks, we have to get a +half-ellipse based on three points of a jaw: the leftmost, the +rightmost and the lowest one. The jaw width is assumed to be equal to the +forehead width and the latter is calculated using the left and the +right points. Speaking of the \f$Y\f$ axis, we have no points to get +it directly, and instead assume that the forehead height is about \f$2/3\f$ +of the jaw height, which can be figured out from the face center (the +middle between the left and right points) and the lowest jaw point. + +## Drawing masks {#gapi_fb_masks_drw} + +When we have all the contours needed, we are able to draw masks: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp msk_ppline + +The steps to get the masks are: +* the "sharp" mask calculation: + * fill the contours that should be sharpened; + * blur that to get the "sharp" mask (`mskSharpG`); +* the "bilateral" mask calculation: + * fill all the face contours fully; + * blur that; + * subtract areas which intersect with the "sharp" mask --- and get the + "bilateral" mask (`mskBlurFinal`); +* the background mask calculation: + * add two previous masks + * set all non-zero pixels of the result as 255 (by `cv::gapi::threshold()`) + * revert the output (by `cv::gapi::bitwise_not`) to get the background + mask (`mskNoFaces`). + +# Configuring and running the pipeline {#gapi_fb_comp_args} + +Once the graph is fully expressed, we can finally compile it and run +on real data. G-API graph compilation is the stage where the G-API +framework actually understands which kernels and networks to use. This +configuration happens via G-API compilation arguments. + +## DNN parameters {#gapi_fb_comp_args_net} + +This sample is using OpenVINO™ Toolkit Inference Engine backend for DL +inference, which is configured the following way: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp net_param + +Every `cv::gapi::ie::Params<>` object is related to the network +specified in its template argument. We should pass there the network +type we have defined in `G_API_NET()` in the early beginning of the +tutorial. + +Network parameters are then wrapped in `cv::gapi::NetworkPackage`: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp netw + +More details in "Face Analytics Pipeline" +([Configuring the pipeline](@ref gapi_ifd_configuration) section). + +## Kernel packages {#gapi_fb_comp_args_kernels} + +In this example we use a lot of custom kernels, in addition to that we +use Fluid backend to optimize out memory for G-API's standard kernels +where applicable. The resulting kernel package is formed like this: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp kern_pass_1 + +## Compiling the streaming pipeline {#gapi_fb_compiling} + +G-API optimizes execution for video streams when compiled in the +"Streaming" mode. + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp str_comp + +More on this in "Face Analytics Pipeline" +([Configuring the pipeline](@ref gapi_ifd_configuration) section). + +## Running the streaming pipeline {#gapi_fb_running} + +In order to run the G-API streaming pipeline, all we need is to +specify the input video source, call +`cv::GStreamingCompiled::start()`, and then fetch the pipeline +processing results: + +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp str_src +@snippet cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp str_loop + +Once results are ready and can be pulled from the pipeline we display +it on the screen and handle GUI events. + +See [Running the pipeline](@ref gapi_ifd_running) section +in the "Face Analytics Pipeline" tutorial for more details. + +# Conclusion {#gapi_fb_cncl} + +The tutorial has two goals: to show the use of brand new features of +G-API introduced in OpenCV 4.2, and give a basic understanding on a +sample face beautification algorithm. + +The result of the algorithm application: + +![Face Beautification example](pics/example.jpg) + +On the test machine (Intel® Core™ i7-8700) the G-API-optimized video +pipeline outperforms its serial (non-pipelined) version by a factor of +**2.7** -- meaning that for such a non-trivial graph, the proper +pipelining can bring almost 3x increase in performance. + + diff --git a/doc/tutorials/gapi/face_beautification/pics/example.jpg b/doc/tutorials/gapi/face_beautification/pics/example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99a538f78cdefc707efdde5516b6a62679853318 GIT binary patch literal 176525 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 z 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%0AwaVOwVw2#(=}gQ(pyjTt&1Y?TFp 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


Zu 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

Xw$8bS$cg*eXR1en2aIo>npoN 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 Kac#-sfB)I~Y`)?E literal 0 HcmV?d00001 diff --git a/doc/tutorials/gapi/table_of_content_gapi.markdown b/doc/tutorials/gapi/table_of_content_gapi.markdown index 96e395c..f9d7b03 100644 --- a/doc/tutorials/gapi/table_of_content_gapi.markdown +++ b/doc/tutorials/gapi/table_of_content_gapi.markdown @@ -29,3 +29,14 @@ how G-API module can be used for that. is ported on G-API, covering the basic intuition behind this transition process, and examining benefits which a graph model brings there. + +- @subpage tutorial_gapi_face_beautification + + *Languages:* C++ + + *Compatibility:* \> OpenCV 4.2 + + *Author:* Orest Chura + + In this tutorial we build a complex hybrid Computer Vision/Deep + Learning video processing pipeline with G-API. diff --git a/modules/gapi/src/api/render_ocv.cpp b/modules/gapi/src/api/render_ocv.cpp index d87581e..4aa2388 100644 --- a/modules/gapi/src/api/render_ocv.cpp +++ b/modules/gapi/src/api/render_ocv.cpp @@ -197,7 +197,7 @@ void drawPrimitivesOCV(cv::Mat& in, const auto& ftp = cv::util::get(p); const auto color = converter.cvtColor(ftp.color); - GAPI_Assert(ftpr && "I must pass cv::gapi::wip::draw::freetype_font" + GAPI_Assert(ftpr && "You must pass cv::gapi::wip::draw::freetype_font" " to the graph compile arguments"); int baseline = 0; auto size = ftpr->getTextSize(ftp.text, ftp.fh, &baseline); diff --git a/modules/gapi/samples/face_beautification.cpp b/samples/cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp similarity index 61% rename from modules/gapi/samples/face_beautification.cpp rename to samples/cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp index 9966997..e42de86 100644 --- a/modules/gapi/samples/face_beautification.cpp +++ b/samples/cpp/tutorial_code/gapi/face_beautification/face_beautification.cpp @@ -4,6 +4,9 @@ // // Copyright (C) 2018-2019 Intel Corporation +#include "opencv2/opencv_modules.hpp" +#if defined(HAVE_OPENCV_GAPI) + #include #include #include @@ -11,16 +14,31 @@ #include #include #include -#include "opencv2/gapi/streaming/cap.hpp" +#include -#include -#include -#include +#include // windows namespace config { constexpr char kWinFaceBeautification[] = "FaceBeautificator"; constexpr char kWinInput[] = "Input"; +constexpr char kParserAbout[] = + "Use this script to run the face beautification algorithm with G-API."; +constexpr char kParserOptions[] = +"{ help h || print the help message. }" + +"{ facepath f || a path to a Face detection model file (.xml).}" +"{ facedevice |GPU| the face detection computation device.}" + +"{ landmpath l || a path to a Landmarks detection model file (.xml).}" +"{ landmdevice |CPU| the landmarks detection computation device.}" + +"{ input i || a path to an input. Skip to capture from a camera.}" +"{ boxes b |false| set true to draw face Boxes in the \"Input\" window.}" +"{ landmarks m |false| set true to draw landMarks in the \"Input\" window.}" +"{ streaming s |true| set false to disable stream pipelining.}" +"{ performance p |false| set true to disable output displaying.}"; + const cv::Scalar kClrWhite (255, 255, 255); const cv::Scalar kClrGreen ( 0, 255, 0); const cv::Scalar kClrYellow( 0, 255, 255); @@ -36,13 +54,13 @@ constexpr int kUnshSigma = 3; constexpr float kUnshStrength = 0.7f; constexpr int kAngDelta = 1; constexpr bool kClosedLine = true; - -const size_t kNumPointsInHalfEllipse = 180 / config::kAngDelta + 1; } // namespace config namespace { +//! [vec_ROI] using VectorROI = std::vector; +//! [vec_ROI] using GArrayROI = cv::GArray; using Contour = std::vector; using Landmarks = std::vector; @@ -54,10 +72,35 @@ template inline int toIntRounded(const Tp x) return static_cast(std::lround(x)); } +//! [toDbl] template inline double toDouble(const Tp x) { return static_cast(x); } +//! [toDbl] + +struct Avg { + struct Elapsed { + explicit Elapsed(double ms) : ss(ms / 1000.), + mm(toIntRounded(ss / 60)) {} + const double ss; + const int mm; + }; + + using MS = std::chrono::duration>; + using TS = std::chrono::time_point; + TS started; + + void start() { started = now(); } + TS now() const { return std::chrono::high_resolution_clock::now(); } + double tick() const { return std::chrono::duration_cast(now() - started).count(); } + Elapsed elapsed() const { return Elapsed{tick()}; } + double fps(std::size_t n) const { return static_cast(n) / (tick() / 1000.); } + }; +std::ostream& operator<<(std::ostream &os, const Avg::Elapsed &e) { + os << e.mm << ':' << (e.ss - 60*e.mm); + return os; +} std::string getWeightsPath(const std::string &mdlXMLPath) // mdlXMLPath = // "The/Full/Path.xml" @@ -77,31 +120,28 @@ namespace custom { using TplPtsFaceElements_Jaw = std::tuple, cv::GArray>; -using TplFaces_FaceElements = std::tuple, - cv::GArray>; // Wrapper-functions inline int getLineInclinationAngleDegrees(const cv::Point &ptLeft, const cv::Point &ptRight); inline Contour getForeheadEllipse(const cv::Point &ptJawLeft, const cv::Point &ptJawRight, - const cv::Point &ptJawMiddle, - const size_t capacity); + const cv::Point &ptJawMiddle); inline Contour getEyeEllipse(const cv::Point &ptLeft, - const cv::Point &ptRight, - const size_t capacity); + const cv::Point &ptRight); inline Contour getPatchedEllipse(const cv::Point &ptLeft, const cv::Point &ptRight, const cv::Point &ptUp, const cv::Point &ptDown); // Networks +//! [net_decl] G_API_NET(FaceDetector, , "face_detector"); G_API_NET(LandmDetector, , "landm_detector"); +//! [net_decl] // Function kernels -G_TYPED_KERNEL(GBilatFilter, - , +G_TYPED_KERNEL(GBilatFilter, , "custom.faceb12n.bilateralFilter") { static cv::GMatDesc outMeta(cv::GMatDesc in, int,double,double) @@ -110,8 +150,7 @@ G_TYPED_KERNEL(GBilatFilter, } }; -G_TYPED_KERNEL(GLaplacian, - , +G_TYPED_KERNEL(GLaplacian, , "custom.faceb12n.Laplacian") { static cv::GMatDesc outMeta(cv::GMatDesc in, int) @@ -120,8 +159,7 @@ G_TYPED_KERNEL(GLaplacian, } }; -G_TYPED_KERNEL(GFillPolyGContours, - )>, +G_TYPED_KERNEL(GFillPolyGContours, )>, "custom.faceb12n.fillPolyGContours") { static cv::GMatDesc outMeta(cv::GMatDesc in, cv::GArrayDesc) @@ -130,8 +168,8 @@ G_TYPED_KERNEL(GFillPolyGContours, } }; -G_TYPED_KERNEL(GPolyLines, - ,bool,cv::Scalar)>, +G_TYPED_KERNEL(GPolyLines, ,bool, + cv::Scalar)>, "custom.faceb12n.polyLines") { static cv::GMatDesc outMeta(cv::GMatDesc in, cv::GArrayDesc,bool,cv::Scalar) @@ -140,8 +178,7 @@ G_TYPED_KERNEL(GPolyLines, } }; -G_TYPED_KERNEL(GRectangle, - , +G_TYPED_KERNEL(GRectangle, , "custom.faceb12n.rectangle") { static cv::GMatDesc outMeta(cv::GMatDesc in, cv::GArrayDesc,cv::Scalar) @@ -150,8 +187,7 @@ G_TYPED_KERNEL(GRectangle, } }; -G_TYPED_KERNEL(GFacePostProc, - , +G_TYPED_KERNEL(GFacePostProc, , "custom.faceb12n.faceDetectPostProc") { static cv::GArrayDesc outMeta(const cv::GMatDesc&,const cv::GMatDesc&,float) @@ -160,8 +196,8 @@ G_TYPED_KERNEL(GFacePostProc, } }; -G_TYPED_KERNEL_M(GLandmPostProc, - ,GArrayROI)>, +G_TYPED_KERNEL_M(GLandmPostProc, , + GArrayROI)>, "custom.faceb12n.landmDetectPostProc") { static std::tuple outMeta( @@ -171,17 +207,17 @@ G_TYPED_KERNEL_M(GLandmPostProc, } }; -G_TYPED_KERNEL_M(GGetContours, - , - cv::GArray)>, +//! [kern_m_decl] +using TplFaces_FaceElements = std::tuple, cv::GArray>; +G_TYPED_KERNEL_M(GGetContours, , cv::GArray)>, "custom.faceb12n.getContours") { - static std::tuple outMeta( - const cv::GArrayDesc&,const cv::GArrayDesc&) + static std::tuple outMeta(const cv::GArrayDesc&,const cv::GArrayDesc&) { return std::make_tuple(cv::empty_array_desc(), cv::empty_array_desc()); } }; +//! [kern_m_decl] // OCV_Kernels @@ -262,11 +298,12 @@ GAPI_OCV_KERNEL(GCPURectangle, custom::GRectangle) // A face detector outputs a blob with the shape: [1, 1, N, 7], where N is // the number of detected bounding boxes. Structure of an output for every // detected face is the following: -// [image_id, label, conf, x_min, y_min, x_max, y_max]; all the seven elements +// [image_id, label, conf, x_min, y_min, x_max, y_max], all the seven elements // are floating point. For more details please visit: -// https://github.com/opencv/open_model_zoo/blob/master/intel_models/face-detection-adas-0001 +// https://github.com/opencv/open_model_zoo/blob/master/intel_models/face-detection-adas-0001 // This kernel is the face detection output blob parsing that returns a vector // of detected faces' rects: +//! [fd_pp] GAPI_OCV_KERNEL(GCPUFacePostProc, GFacePostProc) { static void run(const cv::Mat &inDetectResult, @@ -289,12 +326,17 @@ GAPI_OCV_KERNEL(GCPUFacePostProc, GFacePostProc) break; } const float faceConfidence = data[i * kObjectSize + 2]; + // We can cut detections by the `conf` field + // to avoid mistakes of the detector. if (faceConfidence > faceConfThreshold) { const float left = data[i * kObjectSize + 3]; const float top = data[i * kObjectSize + 4]; const float right = data[i * kObjectSize + 5]; const float bottom = data[i * kObjectSize + 6]; + // These are normalized coordinates and are between 0 and 1; + // to get the real pixel coordinates we should multiply it by + // the image sizes respectively to the directions: cv::Point tl(toIntRounded(left * imgCols), toIntRounded(top * imgRows)); cv::Point br(toIntRounded(right * imgCols), @@ -304,10 +346,18 @@ GAPI_OCV_KERNEL(GCPUFacePostProc, GFacePostProc) } } }; +//! [fd_pp] // This kernel is the facial landmarks detection output Mat parsing for every // detected face; returns a tuple containing a vector of vectors of // face elements' Points and a vector of vectors of jaw's Points: +// There are 35 landmarks given by the default detector for each face +// in a frame; the first 18 of them are face elements (eyes, eyebrows, +// a nose, a mouth) and the last 17 - a jaw contour. The detector gives +// floating point values for landmarks' normed coordinates relatively +// to an input ROI (not the original frame). +// For more details please visit: +// https://github.com/opencv/open_model_zoo/blob/master/intel_models/facial-landmarks-35-adas-0002 GAPI_OCV_KERNEL(GCPULandmPostProc, GLandmPostProc) { static void run(const std::vector &vctDetectResults, @@ -315,13 +365,6 @@ GAPI_OCV_KERNEL(GCPULandmPostProc, GLandmPostProc) std::vector &vctPtsFaceElems, std::vector &vctCntJaw) { - // There are 35 landmarks given by the default detector for each face - // in a frame; the first 18 of them are face elements (eyes, eyebrows, - // a nose, a mouth) and the last 17 - a jaw contour. The detector gives - // floating point values for landmarks' normed coordinates relatively - // to an input ROI (not the original frame). - // For more details please visit: - // https://github.com/opencv/open_model_zoo/blob/master/intel_models/facial-landmarks-35-adas-0002 static constexpr int kNumFaceElems = 18; static constexpr int kNumTotal = 35; const size_t numFaces = vctRects.size(); @@ -342,10 +385,8 @@ GAPI_OCV_KERNEL(GCPULandmPostProc, GLandmPostProc) ptsFaceElems.clear(); for (int j = 0; j < kNumFaceElems * 2; j += 2) { - cv::Point pt = - cv::Point(toIntRounded(data[j] * vctRects[i].width), - toIntRounded(data[j+1] * vctRects[i].height)) - + vctRects[i].tl(); + cv::Point pt = cv::Point(toIntRounded(data[j] * vctRects[i].width), + toIntRounded(data[j+1] * vctRects[i].height)) + vctRects[i].tl(); ptsFaceElems.push_back(pt); } vctPtsFaceElems.push_back(ptsFaceElems); @@ -354,10 +395,8 @@ GAPI_OCV_KERNEL(GCPULandmPostProc, GLandmPostProc) cntJaw.clear(); for(int j = kNumFaceElems * 2; j < kNumTotal * 2; j += 2) { - cv::Point pt = - cv::Point(toIntRounded(data[j] * vctRects[i].width), - toIntRounded(data[j+1] * vctRects[i].height)) - + vctRects[i].tl(); + cv::Point pt = cv::Point(toIntRounded(data[j] * vctRects[i].width), + toIntRounded(data[j+1] * vctRects[i].height)) + vctRects[i].tl(); cntJaw.push_back(pt); } vctCntJaw.push_back(cntJaw); @@ -368,23 +407,24 @@ GAPI_OCV_KERNEL(GCPULandmPostProc, GLandmPostProc) // This kernel is the facial landmarks detection post-processing for every face // detected before; output is a tuple of vectors of detected face contours and // facial elements contours: +//! [ld_pp_cnts] +//! [kern_m_impl] GAPI_OCV_KERNEL(GCPUGetContours, GGetContours) { - static void run(const std::vector &vctPtsFaceElems, - const std::vector &vctCntJaw, + static void run(const std::vector &vctPtsFaceElems, // 18 landmarks of the facial elements + const std::vector &vctCntJaw, // 17 landmarks of a jaw std::vector &vctElemsContours, std::vector &vctFaceContours) { +//! [kern_m_impl] size_t numFaces = vctCntJaw.size(); CV_Assert(numFaces == vctPtsFaceElems.size()); CV_Assert(vctElemsContours.size() == 0ul); CV_Assert(vctFaceContours.size() == 0ul); // vctFaceElemsContours will store all the face elements' contours found - // on an input image, namely 4 elements (two eyes, nose, mouth) - // for every detected face + // in an input image, namely 4 elements (two eyes, nose, mouth) for every detected face: vctElemsContours.reserve(numFaces * 4); - // vctFaceElemsContours will store all the faces' contours found on - // an input image + // vctFaceElemsContours will store all the faces' contours found in an input image: vctFaceContours.reserve(numFaces); Contour cntFace, cntLeftEye, cntRightEye, cntNose, cntMouth; @@ -393,63 +433,47 @@ GAPI_OCV_KERNEL(GCPUGetContours, GGetContours) for (size_t i = 0ul; i < numFaces; i++) { // The face elements contours + // A left eye: - // Approximating the lower eye contour by half-ellipse - // (using eye points) and storing in cntLeftEye: - cntLeftEye = getEyeEllipse(vctPtsFaceElems[i][1], - vctPtsFaceElems[i][0], - config::kNumPointsInHalfEllipse + 3); + // Approximating the lower eye contour by half-ellipse (using eye points) and storing in cntLeftEye: + cntLeftEye = getEyeEllipse(vctPtsFaceElems[i][1], vctPtsFaceElems[i][0]); // Pushing the left eyebrow clock-wise: - cntLeftEye.insert(cntLeftEye.cend(), {vctPtsFaceElems[i][12], - vctPtsFaceElems[i][13], + cntLeftEye.insert(cntLeftEye.cend(), {vctPtsFaceElems[i][12], vctPtsFaceElems[i][13], vctPtsFaceElems[i][14]}); + // A right eye: - // Approximating the lower eye contour by half-ellipse - // (using eye points) and storing in vctRightEye: - cntRightEye = getEyeEllipse(vctPtsFaceElems[i][2], - vctPtsFaceElems[i][3], - config::kNumPointsInHalfEllipse + 3); + // Approximating the lower eye contour by half-ellipse (using eye points) and storing in vctRightEye: + cntRightEye = getEyeEllipse(vctPtsFaceElems[i][2], vctPtsFaceElems[i][3]); // Pushing the right eyebrow clock-wise: - cntRightEye.insert(cntRightEye.cend(), {vctPtsFaceElems[i][15], - vctPtsFaceElems[i][16], + cntRightEye.insert(cntRightEye.cend(), {vctPtsFaceElems[i][15], vctPtsFaceElems[i][16], vctPtsFaceElems[i][17]}); + // A nose: // Storing the nose points clock-wise cntNose.clear(); - cntNose.insert(cntNose.cend(), {vctPtsFaceElems[i][4], - vctPtsFaceElems[i][7], - vctPtsFaceElems[i][5], - vctPtsFaceElems[i][6]}); + cntNose.insert(cntNose.cend(), {vctPtsFaceElems[i][4], vctPtsFaceElems[i][7], + vctPtsFaceElems[i][5], vctPtsFaceElems[i][6]}); + // A mouth: - // Approximating the mouth contour by two half-ellipses - // (using mouth points) and storing in vctMouth: - cntMouth = getPatchedEllipse(vctPtsFaceElems[i][8], - vctPtsFaceElems[i][9], - vctPtsFaceElems[i][10], - vctPtsFaceElems[i][11]); + // Approximating the mouth contour by two half-ellipses (using mouth points) and storing in vctMouth: + cntMouth = getPatchedEllipse(vctPtsFaceElems[i][8], vctPtsFaceElems[i][9], + vctPtsFaceElems[i][10], vctPtsFaceElems[i][11]); + // Storing all the elements in a vector: - vctElemsContours.insert(vctElemsContours.cend(), {cntLeftEye, - cntRightEye, - cntNose, - cntMouth}); + vctElemsContours.insert(vctElemsContours.cend(), {cntLeftEye, cntRightEye, cntNose, cntMouth}); // The face contour: - // Approximating the forehead contour by half-ellipse - // (using jaw points) and storing in vctFace: - cntFace = getForeheadEllipse(vctCntJaw[i][0], vctCntJaw[i][16], - vctCntJaw[i][8], - config::kNumPointsInHalfEllipse + - vctCntJaw[i].size()); - // The ellipse is drawn clock-wise, but jaw contour points goes - // vice versa, so it's necessary to push cntJaw from the end - // to the begin using a reverse iterator: - std::copy(vctCntJaw[i].crbegin(), vctCntJaw[i].crend(), - std::back_inserter(cntFace)); + // Approximating the forehead contour by half-ellipse (using jaw points) and storing in vctFace: + cntFace = getForeheadEllipse(vctCntJaw[i][0], vctCntJaw[i][16], vctCntJaw[i][8]); + // The ellipse is drawn clock-wise, but jaw contour points goes vice versa, so it's necessary to push + // cntJaw from the end to the begin using a reverse iterator: + std::copy(vctCntJaw[i].crbegin(), vctCntJaw[i].crend(), std::back_inserter(cntFace)); // Storing the face contour in another vector: vctFaceContours.push_back(cntFace); } } }; +//! [ld_pp_cnts] // GAPI subgraph functions inline cv::GMat unsharpMask(const cv::GMat &src, @@ -463,27 +487,26 @@ inline cv::GMat mask3C(const cv::GMat &src, // Functions implementation: // Returns an angle (in degrees) between a line given by two Points and // the horison. Note that the result depends on the arguments order: -inline int custom::getLineInclinationAngleDegrees(const cv::Point &ptLeft, - const cv::Point &ptRight) +//! [ld_pp_incl] +inline int custom::getLineInclinationAngleDegrees(const cv::Point &ptLeft, const cv::Point &ptRight) { const cv::Point residual = ptRight - ptLeft; if (residual.y == 0 && residual.x == 0) return 0; else - return toIntRounded(atan2(toDouble(residual.y), toDouble(residual.x)) - * 180.0 / M_PI); + return toIntRounded(atan2(toDouble(residual.y), toDouble(residual.x)) * 180.0 / CV_PI); } +//! [ld_pp_incl] // Approximates a forehead by half-ellipse using jaw points and some geometry // and then returns points of the contour; "capacity" is used to reserve enough // memory as there will be other points inserted. +//! [ld_pp_fhd] inline Contour custom::getForeheadEllipse(const cv::Point &ptJawLeft, const cv::Point &ptJawRight, - const cv::Point &ptJawLower, - const size_t capacity = 0) + const cv::Point &ptJawLower) { Contour cntForehead; - cntForehead.reserve(std::max(capacity, config::kNumPointsInHalfEllipse)); // The point amid the top two points of a jaw: const cv::Point ptFaceCenter((ptJawLeft + ptJawRight) / 2); // This will be the center of the ellipse. @@ -505,21 +528,18 @@ inline Contour custom::getForeheadEllipse(const cv::Point &ptJawLeft, // We need the upper part of an ellipse: static constexpr int kAngForeheadStart = 180; static constexpr int kAngForeheadEnd = 360; - cv::ellipse2Poly(ptFaceCenter, cv::Size(axisX, axisY), angFace, - kAngForeheadStart, kAngForeheadEnd, config::kAngDelta, - cntForehead); + cv::ellipse2Poly(ptFaceCenter, cv::Size(axisX, axisY), angFace, kAngForeheadStart, kAngForeheadEnd, + config::kAngDelta, cntForehead); return cntForehead; } +//! [ld_pp_fhd] // Approximates the lower eye contour by half-ellipse using eye points and some -// geometry and then returns points of the contour; "capacity" is used -// to reserve enough memory as there will be other points inserted. -inline Contour custom::getEyeEllipse(const cv::Point &ptLeft, - const cv::Point &ptRight, - const size_t capacity = 0) +// geometry and then returns points of the contour. +//! [ld_pp_eye] +inline Contour custom::getEyeEllipse(const cv::Point &ptLeft, const cv::Point &ptRight) { Contour cntEyeBottom; - cntEyeBottom.reserve(std::max(capacity, config::kNumPointsInHalfEllipse)); const cv::Point ptEyeCenter((ptRight + ptLeft) / 2); const int angle = getLineInclinationAngleDegrees(ptLeft, ptRight); const int axisX = toIntRounded(cv::norm(ptRight - ptLeft) / 2.0); @@ -529,10 +549,11 @@ inline Contour custom::getEyeEllipse(const cv::Point &ptLeft, // We need the lower part of an ellipse: static constexpr int kAngEyeStart = 0; static constexpr int kAngEyeEnd = 180; - cv::ellipse2Poly(ptEyeCenter, cv::Size(axisX, axisY), angle, kAngEyeStart, - kAngEyeEnd, config::kAngDelta, cntEyeBottom); + cv::ellipse2Poly(ptEyeCenter, cv::Size(axisX, axisY), angle, kAngEyeStart, kAngEyeEnd, config::kAngDelta, + cntEyeBottom); return cntEyeBottom; } +//! [ld_pp_eye] //This function approximates an object (a mouth) by two half-ellipses using // 4 points of the axes' ends and then returns points of the contour: @@ -552,8 +573,7 @@ inline Contour custom::getPatchedEllipse(const cv::Point &ptLeft, // We need the upper part of an ellipse: static constexpr int angTopStart = 180; static constexpr int angTopEnd = 360; - cv::ellipse2Poly(ptMouthCenter, cv::Size(axisX, axisYTop), angMouth, - angTopStart, angTopEnd, config::kAngDelta, cntMouthTop); + cv::ellipse2Poly(ptMouthCenter, cv::Size(axisX, axisYTop), angMouth, angTopStart, angTopEnd, config::kAngDelta, cntMouthTop); // The bottom half-ellipse: Contour cntMouth; @@ -561,16 +581,14 @@ inline Contour custom::getPatchedEllipse(const cv::Point &ptLeft, // We need the lower part of an ellipse: static constexpr int angBotStart = 0; static constexpr int angBotEnd = 180; - cv::ellipse2Poly(ptMouthCenter, cv::Size(axisX, axisYBot), angMouth, - angBotStart, angBotEnd, config::kAngDelta, cntMouth); + cv::ellipse2Poly(ptMouthCenter, cv::Size(axisX, axisYBot), angMouth, angBotStart, angBotEnd, config::kAngDelta, cntMouth); // Pushing the upper part to vctOut - cntMouth.reserve(cntMouth.size() + cntMouthTop.size()); - std::copy(cntMouthTop.cbegin(), cntMouthTop.cend(), - std::back_inserter(cntMouth)); + std::copy(cntMouthTop.cbegin(), cntMouthTop.cend(), std::back_inserter(cntMouth)); return cntMouth; } +//! [unsh] inline cv::GMat custom::unsharpMask(const cv::GMat &src, const int sigma, const float strength) @@ -579,6 +597,7 @@ inline cv::GMat custom::unsharpMask(const cv::GMat &src, cv::GMat laplacian = custom::GLaplacian::on(blurred, CV_8U); return (src - (laplacian * strength)); } +//! [unsh] inline cv::GMat custom::mask3C(const cv::GMat &src, const cv::GMat &mask) @@ -593,30 +612,17 @@ inline cv::GMat custom::mask3C(const cv::GMat &src, int main(int argc, char** argv) { - cv::CommandLineParser parser(argc, argv, -"{ help h || print the help message. }" - -"{ facepath f || a path to a Face detection model file (.xml).}" -"{ facedevice |GPU| the face detection computation device.}" - -"{ landmpath l || a path to a Landmarks detection model file (.xml).}" -"{ landmdevice |CPU| the landmarks detection computation device.}" + cv::namedWindow(config::kWinFaceBeautification, cv::WINDOW_NORMAL); + cv::namedWindow(config::kWinInput, cv::WINDOW_NORMAL); -"{ input i || a path to an input. Skip to capture from a camera.}" -"{ boxes b |false| set true to draw face Boxes in the \"Input\" window.}" -"{ landmarks m |false| set true to draw landMarks in the \"Input\" window.}" - ); - parser.about("Use this script to run the face beautification" - " algorithm on G-API."); + cv::CommandLineParser parser(argc, argv, config::kParserOptions); + parser.about(config::kParserAbout); if (argc == 1 || parser.has("help")) { parser.printMessage(); return 0; } - cv::namedWindow(config::kWinFaceBeautification, cv::WINDOW_NORMAL); - cv::namedWindow(config::kWinInput, cv::WINDOW_NORMAL); - // Parsing input arguments const std::string faceXmlPath = parser.get("facepath"); const std::string faceBinPath = getWeightsPath(faceXmlPath); @@ -626,59 +632,47 @@ int main(int argc, char** argv) const std::string landmBinPath = getWeightsPath(landmXmlPath); const std::string landmDevice = parser.get("landmdevice"); - // The flags for drawing/not drawing face boxes or/and landmarks in the - // \"Input\" window: - const bool flgBoxes = parser.get("boxes"); - const bool flgLandmarks = parser.get("landmarks"); - // To provide this opportunity, it is necessary to check the flags when - // compiling a graph - // Declaring a graph - // Streaming-API version of a pipeline expression with a lambda-based + // The version of a pipeline expression with a lambda-based // constructor is used to keep all temporary objects in a dedicated scope. +//! [ppl] cv::GComputation pipeline([=]() { - cv::GMat gimgIn; - // Infering +//! [net_usg_fd] + cv::GMat gimgIn; // input + cv::GMat faceOut = cv::gapi::infer(gimgIn); - GArrayROI garRects = custom::GFacePostProc::on(faceOut, gimgIn, - config::kConfThresh); - cv::GArray garElems; - cv::GArray garJaws; - cv::GArray landmOut = cv::gapi::infer( - garRects, gimgIn); - std::tie(garElems, garJaws) = custom::GLandmPostProc::on(landmOut, - garRects); - cv::GArray garElsConts; - cv::GArray garFaceConts; - std::tie(garElsConts, garFaceConts) = custom::GGetContours::on(garElems, - garJaws); - // Masks drawing - // All masks are created as CV_8UC1 - cv::GMat mskSharp = custom::GFillPolyGContours::on(gimgIn, - garElsConts); - cv::GMat mskSharpG = cv::gapi::gaussianBlur(mskSharp, - config::kGKernelSize, - config::kGSigma); - cv::GMat mskBlur = custom::GFillPolyGContours::on(gimgIn, - garFaceConts); - cv::GMat mskBlurG = cv::gapi::gaussianBlur(mskBlur, - config::kGKernelSize, - config::kGSigma); - // The first argument in mask() is Blur as we want to subtract from - // BlurG the next step: - cv::GMat mskBlurFinal = mskBlurG - cv::gapi::mask(mskBlurG, - mskSharpG); - cv::GMat mskFacesGaussed = mskBlurFinal + mskSharpG; - cv::GMat mskFacesWhite = cv::gapi::threshold(mskFacesGaussed, 0, 255, - cv::THRESH_BINARY); - cv::GMat mskNoFaces = cv::gapi::bitwise_not(mskFacesWhite); - cv::GMat gimgBilat = custom::GBilatFilter::on(gimgIn, - config::kBSize, - config::kBSigmaCol, - config::kBSigmaSp); - cv::GMat gimgSharp = custom::unsharpMask(gimgIn, - config::kUnshSigma, +//! [net_usg_fd] + GArrayROI garRects = custom::GFacePostProc::on(faceOut, gimgIn, config::kConfThresh); // post-proc + +//! [net_usg_ld] + cv::GArray landmOut = cv::gapi::infer(garRects, gimgIn); +//! [net_usg_ld] + cv::GArray garElems; // | + cv::GArray garJaws; // |output arrays + std::tie(garElems, garJaws) = custom::GLandmPostProc::on(landmOut, garRects); // post-proc + cv::GArray garElsConts; // face elements + cv::GArray garFaceConts; // whole faces + std::tie(garElsConts, garFaceConts) = custom::GGetContours::on(garElems, garJaws); // interpolation + +//! [msk_ppline] + cv::GMat mskSharp = custom::GFillPolyGContours::on(gimgIn, garElsConts); // | + cv::GMat mskSharpG = cv::gapi::gaussianBlur(mskSharp, config::kGKernelSize, // | + config::kGSigma); // | + cv::GMat mskBlur = custom::GFillPolyGContours::on(gimgIn, garFaceConts); // | + cv::GMat mskBlurG = cv::gapi::gaussianBlur(mskBlur, config::kGKernelSize, // | + config::kGSigma); // |draw masks + // The first argument in mask() is Blur as we want to subtract from // | + // BlurG the next step: // | + cv::GMat mskBlurFinal = mskBlurG - cv::gapi::mask(mskBlurG, mskSharpG); // | + cv::GMat mskFacesGaussed = mskBlurFinal + mskSharpG; // | + cv::GMat mskFacesWhite = cv::gapi::threshold(mskFacesGaussed, 0, 255, cv::THRESH_BINARY); // | + cv::GMat mskNoFaces = cv::gapi::bitwise_not(mskFacesWhite); // | +//! [msk_ppline] + + cv::GMat gimgBilat = custom::GBilatFilter::on(gimgIn, config::kBSize, + config::kBSigmaCol, config::kBSigmaSp); + cv::GMat gimgSharp = custom::unsharpMask(gimgIn, config::kUnshSigma, config::kUnshStrength); // Applying the masks // Custom function mask3C() should be used instead of just gapi::mask() @@ -686,54 +680,34 @@ int main(int argc, char** argv) cv::GMat gimgBilatMasked = custom::mask3C(gimgBilat, mskBlurFinal); cv::GMat gimgSharpMasked = custom::mask3C(gimgSharp, mskSharpG); cv::GMat gimgInMasked = custom::mask3C(gimgIn, mskNoFaces); - cv::GMat gimgBeautif = gimgBilatMasked + gimgSharpMasked + - gimgInMasked; - // Drawing face boxes and landmarks if necessary: - cv::GMat gimgTemp; - if (flgLandmarks == true) - { - cv::GMat gimgTemp2 = custom::GPolyLines::on(gimgIn, garFaceConts, - config::kClosedLine, - config::kClrYellow); - gimgTemp = custom::GPolyLines::on(gimgTemp2, garElsConts, - config::kClosedLine, - config::kClrYellow); - } - else - { - gimgTemp = gimgIn; - } - cv::GMat gimgShow; - if (flgBoxes == true) - { - gimgShow = custom::GRectangle::on(gimgTemp, garRects, - config::kClrGreen); - } - else - { - // This action is necessary because an output node must be a result of - // some operations applied to an input node, so it handles the case - // when it should be nothing to draw - gimgShow = cv::gapi::copy(gimgTemp); - } - return cv::GComputation(cv::GIn(gimgIn), - cv::GOut(gimgBeautif, gimgShow)); + cv::GMat gimgBeautif = gimgBilatMasked + gimgSharpMasked + gimgInMasked; + return cv::GComputation(cv::GIn(gimgIn), cv::GOut(gimgBeautif, + cv::gapi::copy(gimgIn), + garFaceConts, + garElsConts, + garRects)); }); +//! [ppl] // Declaring IE params for networks +//! [net_param] auto faceParams = cv::gapi::ie::Params { - faceXmlPath, - faceBinPath, - faceDevice + /*std::string*/ faceXmlPath, + /*std::string*/ faceBinPath, + /*std::string*/ faceDevice }; auto landmParams = cv::gapi::ie::Params { - landmXmlPath, - landmBinPath, - landmDevice + /*std::string*/ landmXmlPath, + /*std::string*/ landmBinPath, + /*std::string*/ landmDevice }; +//! [net_param] +//! [netw] auto networks = cv::gapi::networks(faceParams, landmParams); +//! [netw] // Declaring custom and fluid kernels have been used: +//! [kern_pass_1] auto customKernels = cv::gapi::kernels(); auto kernels = cv::gapi::combine(cv::gapi::core::fluid::kernels(), customKernels); +//! [kern_pass_1] + + Avg avg; + size_t frames = 0; + + // The flags for drawing/not drawing face boxes or/and landmarks in the + // \"Input\" window: + const bool flgBoxes = parser.get("boxes"); + const bool flgLandmarks = parser.get("landmarks"); + // The flag to involve stream pipelining: + const bool flgStreaming = parser.get("streaming"); + // The flag to display the output images or not: + const bool flgPerformance = parser.get("performance"); // Now we are ready to compile the pipeline to a stream with specified // kernels, networks and image format expected to process - auto stream = pipeline.compileStreaming(cv::GMatDesc{CV_8U,3, - cv::Size(1280,720)}, - cv::compile_args(kernels, - networks)); - // Setting the source for the stream: - if (parser.has("input")) + if (flgStreaming == true) { - stream.setSource(cv::gapi::wip::make_src - (parser.get("input"))); - } - else - { - stream.setSource(cv::gapi::wip::make_src - (0)); +//! [str_comp] + cv::GStreamingCompiled stream = pipeline.compileStreaming(cv::compile_args(kernels, networks)); +//! [str_comp] + // Setting the source for the stream: +//! [str_src] + if (parser.has("input")) + { + stream.setSource(cv::gapi::wip::make_src(parser.get("input"))); + } +//! [str_src] + else + { + stream.setSource(cv::gapi::wip::make_src(0)); + } + // Declaring output variables + // Streaming: + cv::Mat imgShow; + cv::Mat imgBeautif; + std::vector vctFaceConts, vctElsConts; + VectorROI vctRects; + if (flgPerformance == true) + { + auto out_vector = cv::gout(imgBeautif, imgShow, vctFaceConts, + vctElsConts, vctRects); + stream.start(); + avg.start(); + while (stream.running()) + { + stream.pull(std::move(out_vector)); + frames++; + } + } + else // flgPerformance == false + { +//! [str_loop] + auto out_vector = cv::gout(imgBeautif, imgShow, vctFaceConts, + vctElsConts, vctRects); + stream.start(); + avg.start(); + while (stream.running()) + { + if (!stream.try_pull(std::move(out_vector))) + { + // Use a try_pull() to obtain data. + // If there's no data, let UI refresh (and handle keypress) + if (cv::waitKey(1) >= 0) break; + else continue; + } + frames++; + // Drawing face boxes and landmarks if necessary: + if (flgLandmarks == true) + { + cv::polylines(imgShow, vctFaceConts, config::kClosedLine, + config::kClrYellow); + cv::polylines(imgShow, vctElsConts, config::kClosedLine, + config::kClrYellow); + } + if (flgBoxes == true) + for (auto rect : vctRects) + cv::rectangle(imgShow, rect, config::kClrGreen); + cv::imshow(config::kWinInput, imgShow); + cv::imshow(config::kWinFaceBeautification, imgBeautif); + } +//! [str_loop] + } + std::cout << "Processed " << frames << " frames in " << avg.elapsed() + << " (" << avg.fps(frames) << " FPS)" << std::endl; } - // Declaring output variables - cv::Mat imgShow; - cv::Mat imgBeautif; - // Streaming: - stream.start(); - while (stream.running()) + else // serial mode: { - auto out_vector = cv::gout(imgBeautif, imgShow); - if (!stream.try_pull(std::move(out_vector))) +//! [bef_cap] +#include + cv::GCompiled cc; + cv::VideoCapture cap; + if (parser.has("input")) + { + cap.open(parser.get("input")); + } +//! [bef_cap] + else if (!cap.open(0)) + { + std::cout << "No input available" << std::endl; + return 1; + } + if (flgPerformance == true) { - // Use a try_pull() to obtain data. - // If there's no data, let UI refresh (and handle keypress) - if (cv::waitKey(1) >= 0) break; - else continue; + while (true) + { + cv::Mat img; + cv::Mat imgShow; + cv::Mat imgBeautif; + std::vector vctFaceConts, vctElsConts; + VectorROI vctRects; + cap >> img; + if (img.empty()) + { + break; + } + frames++; + if (!cc) + { + cc = pipeline.compile(cv::descr_of(img), cv::compile_args(kernels, networks)); + avg.start(); + } + cc(cv::gin(img), cv::gout(imgBeautif, imgShow, vctFaceConts, + vctElsConts, vctRects)); + } } - cv::imshow(config::kWinInput, imgShow); - cv::imshow(config::kWinFaceBeautification, imgBeautif); + else // flgPerformance == false + { +//! [bef_loop] + while (cv::waitKey(1) < 0) + { + cv::Mat img; + cv::Mat imgShow; + cv::Mat imgBeautif; + std::vector vctFaceConts, vctElsConts; + VectorROI vctRects; + cap >> img; + if (img.empty()) + { + cv::waitKey(); + break; + } + frames++; +//! [apply] + pipeline.apply(cv::gin(img), cv::gout(imgBeautif, imgShow, + vctFaceConts, + vctElsConts, vctRects), + cv::compile_args(kernels, networks)); +//! [apply] + if (frames == 1) + { + // Start timer only after 1st frame processed -- compilation + // happens on-the-fly here + avg.start(); + } + // Drawing face boxes and landmarks if necessary: + if (flgLandmarks == true) + { + cv::polylines(imgShow, vctFaceConts, config::kClosedLine, + config::kClrYellow); + cv::polylines(imgShow, vctElsConts, config::kClosedLine, + config::kClrYellow); + } + if (flgBoxes == true) + for (auto rect : vctRects) + cv::rectangle(imgShow, rect, config::kClrGreen); + cv::imshow(config::kWinInput, imgShow); + cv::imshow(config::kWinFaceBeautification, imgBeautif); + } + } +//! [bef_loop] + std::cout << "Processed " << frames << " frames in " << avg.elapsed() + << " (" << avg.fps(frames) << " FPS)" << std::endl; } return 0; } +#else +#include +int main() +{ + std::cerr << "This tutorial code requires G-API module " + "with Inference Engine backend to run" + << std::endl; + return 1; +} +#endif // HAVE_OPECV_GAPI -- 2.7.4