From dbed39a9317a822289bbc9c2b1a6f3cc2727f6a4 Mon Sep 17 00:00:00 2001 From: Dmitry Matveev Date: Wed, 24 Oct 2018 07:47:56 +0300 Subject: [PATCH] Merge pull request #12857 from dmatveev:hld * G-API Documentation: first submission This PR introduces a number of new OpenCV documentation chapters for Graph API module. In particular, the following topics are covered: - Introduction & background information; - High-level design overview; - Kernel API; - Pipeline example. All changes are done in Markdown files, no headers, etc modified. Doxygen references for main API classes will be added later. Also, a tutorial will be introduced soon (in the common Tutorials place) * G-API Documentation - fix warnings & trailing whitespaces * G-API Documentation: address review issues * G-API Documentation: export code snippets to compileable files * gapi: move documentation samples --- modules/gapi/CMakeLists.txt | 1 + modules/gapi/doc/00-root.markdown | 109 +++++++++++ modules/gapi/doc/01-background.markdown | 76 ++++++++ modules/gapi/doc/10-hld-overview.md | 159 ++++++++++++++++ modules/gapi/doc/20-kernel-api.markdown | 170 ++++++++++++++++++ modules/gapi/doc/30-implementation.markdown | 27 +++ modules/gapi/doc/dot/kernel_hierarchy.dot | 17 ++ modules/gapi/doc/intro.markdown | 3 - modules/gapi/doc/pics/demo.jpg | Bin 0 -> 65973 bytes modules/gapi/doc/pics/gapi_scheme.png | Bin 0 -> 76918 bytes modules/gapi/doc/pics/kernel_hierarchy.png | Bin 0 -> 8812 bytes .../include/opencv2/gapi/cpu/gcpukernel.hpp | 4 +- modules/gapi/include/opencv2/gapi/gkernel.hpp | 6 +- modules/gapi/samples/api_example.cpp | 34 ++++ modules/gapi/samples/kernel_api_snippets.cpp | 157 ++++++++++++++++ 15 files changed, 755 insertions(+), 8 deletions(-) create mode 100644 modules/gapi/doc/00-root.markdown create mode 100644 modules/gapi/doc/01-background.markdown create mode 100644 modules/gapi/doc/10-hld-overview.md create mode 100644 modules/gapi/doc/20-kernel-api.markdown create mode 100644 modules/gapi/doc/30-implementation.markdown create mode 100644 modules/gapi/doc/dot/kernel_hierarchy.dot delete mode 100644 modules/gapi/doc/intro.markdown create mode 100644 modules/gapi/doc/pics/demo.jpg create mode 100644 modules/gapi/doc/pics/gapi_scheme.png create mode 100644 modules/gapi/doc/pics/kernel_hierarchy.png create mode 100644 modules/gapi/samples/api_example.cpp create mode 100644 modules/gapi/samples/kernel_api_snippets.cpp diff --git a/modules/gapi/CMakeLists.txt b/modules/gapi/CMakeLists.txt index de0ced4b5b..afb4fa1a83 100644 --- a/modules/gapi/CMakeLists.txt +++ b/modules/gapi/CMakeLists.txt @@ -92,3 +92,4 @@ if(TARGET opencv_test_gapi) endif() ocv_add_perf_tests() +ocv_add_samples() diff --git a/modules/gapi/doc/00-root.markdown b/modules/gapi/doc/00-root.markdown new file mode 100644 index 0000000000..0e4984106f --- /dev/null +++ b/modules/gapi/doc/00-root.markdown @@ -0,0 +1,109 @@ +# Graph API {#gapi} + +# Introduction {#gapi_root_intro} + +OpenCV Graph API (or G-API) is a new OpenCV module targeted to make +regular image processing fast and portable. These two goals are +achieved by introducing a new graph-based model of execution. + +G-API is a special module in OpenCV -- in contrast with the majority +of other main modules, this one acts as a framework rather than some +specific CV algorithm. G-API provides means to define CV operations, +construct graphs (in form of expressions) using it, and finally +implement and run the operations for a particular backend. + +# Contents + +G-API documentation is organized into the following chapters: + +- @subpage gapi_purposes + + The motivation behind G-API and its goals. + +- @subpage gapi_hld + + General overview of G-API architecture and its major internal + components. + +- @subpage gapi_kernel_api + + Learn how to introduce new operations in G-API and implement it for + various backends. + +- @subpage gapi_impl + + Low-level implementation details of G-API, for those who want to + contribute. + +- API Reference: functions and classes + + - @subpage gapi_core + + Core G-API operations - arithmetic, boolean, and other matrix + operations; + + - @subpage gapi_imgproc + + Image processing functions: color space conversions, various + filters, etc. + +# API Example {#gapi_example} + +A very basic example of G-API pipeline is shown below: + +@include modules/gapi/samples/api_example.cpp + + + +G-API is a separate OpenCV module so its header files have to be +included explicitly. The first four lines of `main()` create and +initialize OpenCV's standard video capture object, which fetches +video frames from either an attached camera or a specified file. + +G-API pipelie is constructed next. In fact, it is a series of G-API +operation calls on cv::GMat data. The important aspect of G-API is +that this code block is just a declaration of actions, but not the +actions themselves. No processing happens at this point, G-API only +tracks which operations form pipeline and how it is connected. G-API +_Data objects_ (here it is cv::GMat) are used to connect operations +each other. `in` is an _empty_ cv::GMat signalling that it is a +beginning of computation. + +After G-API code is written, it is captured into a call graph with +instantiation of cv::GComputation object. This object takes +input/output data references (in this example, `in` and `out` +cv::GMat objects, respectively) as parameters and reconstructs the +call graph based on all the data flow between `in` and `out`. + +cv::GComputation is a thin object in sense that it just captures which +operations form up a computation. However, it can be used to execute +computations -- in the following processing loop, every captured frame (a +cv::Mat `input_frame`) is passed to cv::GComputation::apply(). + +![Example pipeline running on sample video 'vtest.avi'](pics/demo.jpg) + +cv::GComputation::apply() is a polimorphic method which accepts a +variadic number of arguments. Since this computation is defined on one +input, one output, a special overload of cv::GComputation::apply() is +used to pass input data and get output data. + +Internally, cv::GComputation::apply() compiles the captured graph for +the given input parameters and executes the compiled graph on data +immediately. + +There is a number important concepts can be outlines with this examle: +* Graph declaration and graph execution are distinct steps; +* Graph is built implicitly from a sequence of G-API expressions; +* G-API supports function-like calls -- e.g. cv::gapi::resize(), and + operators, e.g operator|() which is used to compute bitwise OR; +* G-API syntax aims to look pure: every operation call within a graph + yields a new result, thus forming a directed acyclic graph (DAG); +* Graph declaration is not bound to any data -- real data objects + (cv::Mat) come into picture after the graph is already declared. + + + +See Tutorial[TBD] and Porting examples[TBD] to learn more on various +G-API features and concepts. + + diff --git a/modules/gapi/doc/01-background.markdown b/modules/gapi/doc/01-background.markdown new file mode 100644 index 0000000000..65983cd7a3 --- /dev/null +++ b/modules/gapi/doc/01-background.markdown @@ -0,0 +1,76 @@ +# Why Graph API? {#gapi_purposes} + +# Motivation behind G-API {#gapi_intro_why} + +G-API module brings graph-based model of execution to OpenCV. This +chapter briefly describes how this new model can help software +developers in two aspects: optimizing and porting image processing +algorithms. + +## Optimizing with Graph API {#gapi_intro_opt} + +Traditionally OpenCV provided a lot of stand-alone image processing +functions (see modules `core` and `imgproc`). Many of that functions +are well-optimized (e.g. vectorized for specific CPUs, parallel, etc) +but still the out-of-box optimization scope has been limited to a +single function only -- optimizing the whole algorithm built atop of that +functions was a responsibility of a programmer. + +OpenCV 3.0 introduced _Transparent API_ (or _T-API_) which allowed to +offload OpenCV function calls transparently to OpenCL devices and save +on Host/Device data transfers with cv::UMat -- and it was a great step +forward. However, T-API is a dynamic API -- user code still remains +unconstrained and OpenCL kernels are enqueued in arbitrary order, thus +eliminating further pipeline-level optimization potential. + +G-API brings implicit graph model to OpenCV 4.0. Graph model captures +all operations and its data dependencies in a pipeline and so provides +G-API framework with extra information to do pipeline-level +optimizations. + +The cornerstone of graph-based optimizations is _Tiling_. Tiling +allows to break the processing into smaller parts and reorganize +operations to enable data parallelism, improve data locality, and save +memory footprint. Data locality is an especially important aspect of +software optimization due to diffent costs of memory access on modern +computer architectures -- the more data is reused in the first level +cache, the more efficient pipeline is. + +Definitely the aforementioned techinques can be applied manually -- +but it requires extra skills and knowledge of the target platform and +the algorithm implementation changes irrevocably -- becoming more +specific, less flexible, and harder to extend and maintain. + +G-API takes this responsiblity and complexity from user and does the +majority of the work by itself, keeping the algorithm code clean from +device or optimization details. This approach has its own limitations, +though, as graph model is a _constrained_ model and not every +algorithm can be represented as a graph, so the G-API scope is limited +only to regular image processing -- various filters, arithmentic, +binary operations, and well-defined geometrical transformations. + +## Porting with Graph API {#gapi_intro_port} + +The essense of G-API is declaring a sequence of operations to run, and +then executing that sequence. G-API is a constrained API, so it puts a +number of limitations on which operations can form a pipeline and +which data these operations may exchange each other. + +This formalization in fact helps to make an algorithm portable. G-API +clearly separates operation _interfaces_ from its _implementations_. + +One operation (_kernel_) may have multiple implementations even for a +single device (e.g., OpenCV-based "reference" implementation and a +tiled optimized implementation, both running on CPU). Graphs (or +_Computations_ in G-API terms) are built only using operation +interfaces, not implementations -- thus the same graph can be executed +on different devices (and, of course, using different optimization +techniques) with little-to-no changes in the graph itself. + +G-API supports plugins (_Backends_) which aggreate logic and +intelligence on what is the best way to execute on a particular +platform. Once a pipeline is built with G-API, it can be parametrized +to use either of the backends (or a combination of it) and so a graph +can be ported easily to a new platform. + +@sa @ref gapi_hld diff --git a/modules/gapi/doc/10-hld-overview.md b/modules/gapi/doc/10-hld-overview.md new file mode 100644 index 0000000000..1dc5b505d2 --- /dev/null +++ b/modules/gapi/doc/10-hld-overview.md @@ -0,0 +1,159 @@ +# High-level design overview {#gapi_hld} + +# G-API High-level design overview + +[TOC] + +G-API is a heterogeneous framework and provides single API to program +image processing pipelines with a number of supported backends. + +The key design idea is to keep pipeline code itself platform-neutral +while specifying which kernels to use and which devices to utilize +using extra parameters at graph compile (configuration) time. This +requirement has led to the following architecture: + + + +![G-API framework architecture](pics/gapi_scheme.png) + +There are three layers in this architecture: +* **API Layer** -- this is the top layer, which implements G-API + public interface, its building blocks and semantics. + When user constructs a pipeline with G-API, he interacts with this + layer directly, and the entities the user operates on (like cv::GMat + or cv::GComputation) are provided by this layer. +* **Graph Compiler Layer** -- this is the intermediate layer which + unrolls user computation into a graph and then applies a number of + transformations to it (e.g. optimizations). This layer is built atop + of [ADE Framework](@ref gapi_detail_ade). +* **Backends Layer** -- this is the lowest level layer, which lists a + number of _Backends_. In contrast with the above two layers, + backends are highly coupled with low-level platform details, with + every backend standing for every platform. A backend operates on a + processed graph (coming from the graph compiler) and executes this + graph optimally for a specific platform or device. + +# API layer {#gapi_api_layer} + +API layer is what user interacts with when defining and using a +pipeline (a Computation in G-API terms). API layer defines a set of +G-API _dynamic_ objects which can be used as inputs, outputs, and +intermediate data objects within a graph: +* cv::GMat +* cv::GScalar +* cv::GArray (template class) + +API layer specifies a list of Operations which are defined on these +data objects -- so called kernels. See G-API [core](@ref gapi_core) +and [imgproc](@ref gapi_imgproc) namespaces for details on which +operations G-API provides by default. + +G-API is not limited to these operations only -- users can define +their own kernels easily using a special macro G_TYPED_KERNEL(). + +API layer is also responsible for marshalling and storing operation +parameters on pipeline creation. In addition to the aforementioned +G-API dynamic objects, operations may also accept arbitrary +parameters (more on this [below](@ref gapi_detail_params)), so API +layer captures its values and stores internally upon the moment of +execution. + +Finally, cv::GComputation and cv::GCompiled are the remaining +important components of API layer. The former wraps a series of G-API +expressions into an object (graph), and the latter is a product of +graph _compilation_ (see [this chapter](@ref gapi_detail_compiler) for +details). + +# Graph compiler layer {#gapi_compiler} + +Every G-API computation is compiled before it executes. Compilation +process is triggered in two ways: +* _implicitly_, when cv::GComputation::apply() is used. In this case, + graph compilation is then immediately followed by execution. +* _explicitly_, when cv::GComputation::compile() is used. In this case, + a cv::GCompiled object is returned which then can be invoked as a + C++ functor. + +The first way is recommended for cases when input data format is not +known in advance -- e.g. when it comes from an arbitrary input file. +The second way is recommended for deployment (production) scenarios +where input data characteristics are usually predefined. + +Graph compilation process is built atop of ADE Framework. Initially, a +bipartite graph is generated from expressions captured by API layer. +This graph contains nodes of two types: _Data_ and _Operations_. Graph +always starts and ends with a Data node(s), with Operations nodes +in-between. Every Operation node has inputs and outputs, both are Data +nodes. + +After the initial graph is generated, it is actually processed by a +number of graph transformations, called _passes_. ADE Framework acts +as a compiler pass management engine, and passes are written +specifically for G-API. + +There are different passes which check graph validity, refine details +on operations and data, organize nodes into clusters ("Islands") based +on affinity or user-specified regioning[TBD], and more. Backends also +are able to inject backend-specific passes into the compilation +process, see more on this in the [dedicated chapter](@ref gapi_detail_meta). + +Result of graph compilation is a compiled object, represented by class +cv::GCompiled. A new cv::GCompiled object is always created regardless +if there was an explicit or implicit compilation request (see +above). Actual graph execution happens within cv::GCompiled and is +determined by backends which participated in the graph compilation. + +@sa cv::GComputation::apply(), cv::GComputation::compile(), cv::GCompiled + +# Backends layer {#gapi_backends} + +The above diagram lists two backends, _OpenCV_ and _Fluid_. _OpenCV_ +is so-called "reference backend", which implements G-API operations +using plain old OpenCV functions. This backend is useful for +prototyping on a familiar development system. _Fluid_ is a plugin for +cache-efficient execution on CPU -- it implements a different +execution policy and operates with its own, special kernels. Fluid +backend allows to achieve less memory footprint and better memory +locality when running on CPU. + +There may be more backends available, e.g. Halide, OpenCL, etc. -- +G-API provides an uniform internal API to develop backends so any +enthusiast or a company are free to scale G-API on a new platform or +accelerator. In terms of OpenCV infrastructure, every new backend is a +new distinct OpenCV module, which extends G-API when build as a part +of OpenCV. + +# Graph execution {#gapi_compiled} + +The way graph executed is defined by backends selected for +compilation. In fact, every backend builds its own execution script as +the final stage of graph compilation process, when an executable +(compiled) object is being generated. For example, in OpenCV backend, +this script is just a topologically-sorted sequence of OpenCV +functions to call; for Fluid backend, it is a similar thing -- a +topologically sorted list of _Agents_ processing lines of input on +every iteration. + +Graph execution is triggered in two ways: +* via cv::GComputation::apply(), with graph compiled in-place exactly + for the given input data; +* via cv::GCompiled::operator()(), when the graph has been precompiled. + +Both methods are polimorphic and take a variadic number of arguments, +with validity checks performed in runtime. If a number, shapes, and +formats of passed data objects differ from expected, a run-time +exception is thrown. G-API also provides _typed_ wrappers to move +these checks to the compile time -- see cv::GComputationT<>. + +G-API graph execution is declared stateless -- it means that a +compiled functor (cv::GCompiled) acts like a pure C++ function and +provides the same result for the same set of input arguments. + +Both execution methods take \f$N+M\f$ parameters, where \f$N\f$ is a +number of inputs, and \f$M\f$ is a number of outputs on which a +cv::GComputation is defined. Note that while G-API types (cv::GMat, +etc) are used in definition, the execution methods accept OpenCV's +traditional data types (like cv::Mat) which hold actual data -- see +table in [parameter marshalling](@#gapi_detail_params). + +@sa @ref gapi_impl, @ref gapi_kernel_api diff --git a/modules/gapi/doc/20-kernel-api.markdown b/modules/gapi/doc/20-kernel-api.markdown new file mode 100644 index 0000000000..93b852f6aa --- /dev/null +++ b/modules/gapi/doc/20-kernel-api.markdown @@ -0,0 +1,170 @@ +# Kernel API {#gapi_kernel_api} + +[TOC] + +# G-API Kernel API + +The core idea behind G-API is portability -- a pipeline built with +G-API must be portable (or at least able to be portable). It means +that either it works out-of-the box when compiled for new platform, +_or_ G-API provides necessary tools to make it running there, with +little-to-no changes in the algorithm itself. + +This idea can be achieved by separating kernel interface from its +implementation. Once a pipeline is built using kernel interfaces, it +becomes implementation-neutral -- the implementation details +(i.e. which kernels to use) are passed on a separate stage (graph +compilation). + +Kernel-implementation hierarchy may look like: + +![Kernel API/implementation hierarchy example](pics/kernel_hierarchy.png) + +A pipeline itself then can be expressed only in terms of `A`, `B`, and +so on, and choosing which implementation to use in execution becomes +an external parameter. + +# Defining a kernel {#gapi_defining_kernel} + +G-API provides a macro to define a new kernel interface -- +G_TYPED_KERNEL(): + +@snippet modules/gapi/samples/kernel_api_snippets.cpp filter2d_api + +This macro is a shortcut to a new type definition. It takes three +arguments to register a new type, and requires type body to be present +(see [below](@ref gapi_kernel_supp_info)). The macro arguments are: +1. Kernel interface name -- also serves as a name of new type defined + with this macro; +2. Kernel signature -- an `std::function<>`-like signature which defines + API of the kernel; +3. Kernel's unique name -- used to identify kernel when its type + informattion is stripped within the system. + +Kernel declaration may be seen as function declaration -- in both cases +a new entity must be used then according to the way it was defined. + +Kernel signature defines kernel's usage syntax -- which parameters +it takes during graph construction. Implementations can also use this +signature to derive it into backend-specific callback signatures (see +next chapter). + +Kernel may accept values of any type, and G-API _dynamic_ types are +handled in a special way. All other types are opaque to G-API and +passed to kernel in `outMeta()` or in execution callbacks as-is. + +Kernel's return value can _only_ be of G-API dynamic type -- cv::GMat, +cv::GScalar, or cv::GArray. If an operation has more than one output, +it should be wrapped into an `std::tuple<>` (which can contain only +mentioned G-API types). Arbitrary-output-number operations are not +supported. + +Once a kernel is defined, it can be used in pipelines with special, +G-API-supplied method "::on()". This method has the same signature as +defined in kernel, so this code: + +@snippet modules/gapi/samples/kernel_api_snippets.cpp filter2d_on + +is a perfectly legal construction. This example has some verbosity, +though, so usually a kernel declaration comes with a C++ function +wrapper ("factory method") which enables optional parameters, more +compact syntax, Doxygen comments, etc: + +@snippet modules/gapi/samples/kernel_api_snippets.cpp filter2d_wrap + +so now it can be used like: + +@snippet modules/gapi/samples/kernel_api_snippets.cpp filter2d_wrap_call + +# Extra information {#gapi_kernel_supp_info} + +In the current version, kernel declaration body (everything within the +curly braces) must contain a static function `outMeta()`. This function +establishes a functional dependency between operation's input and +output metadata. + +_Metadata_ is an information about data kernel operates on. Since +non-G-API types are opaque to G-API, G-API cares only about `G*` data +descriptors (i.e. dimensions and format of cv::GMat, etc). + +`outMeta()` is also an example of how kernel's signature can be +transformed into a derived callback -- note that in this example, +`outMeta()` signature exactly follows the kernel signature (defined +within the macro) but is different -- where kernel expects cv::GMat, +`outMeta()` takes and returns cv::GMatDesc (a G-API structure metadata +for cv::GMat). + +The point of `outMeta()` is to propagate metadata information within +computation from inputs to outputs and infer metadata of internal +(intermediate, temporary) data objects. This information is required +for further pipeline optimizations, memory allocation, and other +operations done by G-API framework during graph compilation. + + + +# Implementing a kernel {#gapi_kernel_implementing} + +Once a kernel is declared, its interface can be used to implement +versions of this kernel in different backends. This concept is +naturally projected from object-oriented programming +"Interface/Implementation" idiom: an interface can be implemented +multiple times, and different implementations of a kernel should be +substitutable with each other without breaking the algorithm +(pipeline) logic (Liskov Substitution Principle). + +Every backend defines its own way to implement a kernel interface. +This way is regular, though -- whatever plugin is, its kernel +implementation must be "derived" from a kernel interface type. + +Kernel implementation are then organized into _kernel +packages_. Kernel packages are passed to cv::GComputation::compile() +as compile arguments, with some hints to G-API on how to select proper +kernels (see more on this in "Heterogeneity"[TBD]). + +For example, the aforementioned `Filter2D` is implemented in +"reference" CPU (OpenCV) plugin this way (*NOTE* -- this is a +simplified form with improper border handling): + +@snippet modules/gapi/samples/kernel_api_snippets.cpp filter2d_ocv + +Note how CPU (OpenCV) plugin has transformed the original kernel +signature: +- Input cv::GMat has been substituted with cv::Mat, holding actual input + data for the underlying OpenCV function call; +- Output cv::GMat has been transformed into extra output parameter, thus + `GCPUFilter2D::run()` takes one argument more than the original + kernel signature. + +The basic intuition for kernel developer here is _not to care_ where +that cv::Mat objects come from instead of the original cv::GMat -- and +just follow the signature conventions defined by the plugin. G-API +will call this method during execution and supply all the necessary +information (and forward the original opaque data as-is). + +# Compound kernels + +Sometimes kernel is a single thing only on API level. It is convenient +for users, but on a particular implementation side it would be better to +have multiple kernels (a subgraph) doing the thing instead. An example +is goodFeaturesToTrack() -- while in OpenCV backend it may remain a +single kernel, with Fluid it becomes compound -- Fluid can handle Harris +response calculation but can't do sparse non-maxima suppression and +point extraction to an STL vector: + + + +A compound kernel _implementation_ can be defined using a generic +macro GAPI_COMPOUND_KERNEL(): + +@snippet modules/gapi/samples/kernel_api_snippets.cpp compound + + + + +It is important to distinguish a compound kernel from G-API high-order +function, i.e. a C++ function which looks like a kernel but in fact +generates a subgraph. The core difference is that a compound kernel is +an _implementation detail_ and a kernel implementation may be either +compound or not (depending on backend capabilities), while a +high-order function is a "macro" in terms of G-API and so cannot act as +an interface which then needs to be implemented by a backend. diff --git a/modules/gapi/doc/30-implementation.markdown b/modules/gapi/doc/30-implementation.markdown new file mode 100644 index 0000000000..b1ad3bae93 --- /dev/null +++ b/modules/gapi/doc/30-implementation.markdown @@ -0,0 +1,27 @@ +# Implementation details {#gapi_impl} + +[TOC] + +# G-API Implementation details {#gapi_impl_header} + +## Api layer details {#gapi_detail_api} + +### Expression unrolling {#gapi_detail_expr} + +### Parameter marshalling {#gapi_detail_params} + +### Operations representation {#gapi_detail_operations} + +## Graph compiler details {#gapi_detail_compiler} + +### ADE basics {#gapi_detail_ade} + +### Graph model representation {#gapi_detail_gmodel} + +### G-API metadata and passes {#gapi_detail_meta} + +## Backends details {#gapi_detail_backends} + +### Backend scope of work {#gapi_backend_scope} + +### Graph transformation {#gapi_backend_pass} diff --git a/modules/gapi/doc/dot/kernel_hierarchy.dot b/modules/gapi/doc/dot/kernel_hierarchy.dot new file mode 100644 index 0000000000..0eb92bc409 --- /dev/null +++ b/modules/gapi/doc/dot/kernel_hierarchy.dot @@ -0,0 +1,17 @@ +digraph { + rankdir=BT; + node [shape=record]; + + ki_a [label="{ interface\nA}"]; + ki_b [label="{ interface\nB}"]; + + {rank=same; ki_a ki_b}; + + "CPU::A" -> ki_a [dir="forward"]; + "OpenCL::A" -> ki_a [dir="forward"]; + "Halide::A" -> ki_a [dir="forward"]; + + "CPU::B" -> ki_b [dir="forward"]; + "OpenCL::B" -> ki_b [dir="forward"]; + "Halide::B" -> ki_b [dir="forward"]; +} diff --git a/modules/gapi/doc/intro.markdown b/modules/gapi/doc/intro.markdown deleted file mode 100644 index ae06174324..0000000000 --- a/modules/gapi/doc/intro.markdown +++ /dev/null @@ -1,3 +0,0 @@ -# Graph API {#gapi} - -Introduction to G-API (WIP). \ No newline at end of file diff --git a/modules/gapi/doc/pics/demo.jpg b/modules/gapi/doc/pics/demo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..742d135f7a89e051cf505daa0b8ed265965bb821 GIT binary patch literal 65973 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

0af`4+vUW6$eSFHDg&n>>$ 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 KT$!wC(Ek94r|^~l literal 0 HcmV?d00001 diff --git a/modules/gapi/doc/pics/kernel_hierarchy.png b/modules/gapi/doc/pics/kernel_hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..631f4a10d61e2dcbd57715784fbd249fe2d45503 GIT binary patch literal 8812 zcmai42{e@N+aAeM%Dz;Rr9#M_CCf1OvPC7kVo3JL62>+q%2H%Y)+k%n>}#^b*dk>Q zW68e8F!*l$&-Z=j|3AO)d~fHxqw~(Z@AKTx{ap8TUH2QJtF3nO_?hDf1mdKIy0RVu zaij?TPN6&kXTO9~j_^T#@4A{Y;^6RKO3nKy1cC#hp{#h*GjVam+k|m*AGy+1(B7o{ zF)+>l**h*by(3mySjH(uiW?Kt8egc)uBQsqxQWRo#3}_Q#8OQEzH7^7@$zOUuKk8` z7gt=!>-#af_df@Q76jG{uJ2m@DYL2bFDQtOAMuqtm>tJ;;$~`+yKq&KuEwF6wuhrq zcy?@v1U?Z4DFTNd($Qpa<_JCN^BSWxoA~}%G z$2*y419f>BLzL~+8WP~h%@rt3NBrW&Q{XAI8wQTB(NP}t^74YK;nmgE<>gX`R|WAD zrRn|$a2cKusbqNgpohFva8{s39}cB8_1{P0Z_KTeRP8u&HBUmZcjKdJm7c!7`QzUi z_4V~{B%L07l16kh;widGs>}S1RU^(h+`XIH_Ug)&D}sW8r1$Ur_-MLZyX$CanXb%b zSY-7zT`hvVfDX|ucleWNvf)=zQR!{>Zr!?d?AWo37casu#%g`ftA*p&2@(<#WMpKd zKaU^^ju1%P5G-^XU2kPPJ~uYb&(BkoKGxDYsd6LXvXQ}y`twENc5NJRrhVJFG zAYM?ck3ce)o@f4* zI2N;kp~1d3Ht*L&q}>Hmw zEE%ow_So6@{rdH5G#X7H5JE4jU!YfsKls%^icjJURYQt!q5LaUQ$ng@VGukY~^C-@jk(zBrg`SZr@^ulnND%f!UtpFg)tN_U7mNDl@w|~rQp%99u!~sy)KnoGrOeve+Qh^}!F!SoN&*QXK;PNvpWx{bzwo-uaP~jj z_V1W>B3YB0f$}JhwF6P#3g9v@G^EeiG_&5=*r=qWAT=O-vmvvY`}=l~I30Re%_ zm*sr6g@*zVh+P=-X0HyC4h0Eax4$zFD7G}w^gJmk3F3wm;tqPLWN5K1zqg^!!V-(a zX*Mk$DeF&ZeEWO zxGO_z!H&5z5c&Pbk9I3j0|Nt8Yxb?2LkQTM`yRr;Q^dxCC|HK9dd__L)wK-RoF8*@ zah;uJm2Q`Y6iIfSOY0*S$Ljpx+qk+PxrUaGj^PaCh^OU-y|i;JB?Pq zd-v|qeE(M~(bCByF{uK=cNP~Hz5gu4i`&wx++b9ZmX`kX>C+S*KV0D&yx5KK_k|7F z_u&SFsMxw=u*}I^RaMp6+FDhWe8`2Q9i}Cas=M89?9_9Onq6Mt^)*0Q%Tgs$MCadC zKP%(@Vo|{#4RMOnl;m(w zn&ucnMorBgK;>(jgg0-3gM*QeH+aRwqVnny{*UtV^01LHG0aVNCt=^;&ND(kc#sei z)BNCmy}WFQh5zy6$44K}U(UK&=`>b*E9ds5X}`_y224y$*vLHNGNU_p-eqPMv7AQ~ zOt!u}f3Uw*cZ?IZA_)lztc#YG77e?6qLj-70AWo{%>Xs+ou@_hh?=!F{`~5-Yg>eu ze~-!t3PkyNzQZGQk=MVy*+$L#GC6cjW) zXR&i{f1&?g+js3N4>l4?iB`O*3J0yHm)EMN>=gPb4g0xMr#^)BlWef9k*<-Jb=N=L z-CABADsx)He`QpOkB_HAX=-Z9%E`%Gy(&K1Zy?(Xi4Dk8zku|ZZ}UtJu$zxBqc_J(-j{T?m{@rIw(UaqkWL2WH{pFV9Cq1&%r zyH>)2@ZU!r#*lj0IEAV=Q;Yx7B@r<(J13{*{Yxr0Zr{Fr2mz2{S4Q1@e0-RnPdQ5yd@H?xMu^`cJt(?A`cyLm2ElW|VAwwHK$EyBG}>UMVXWn-9})!V0havBZPoM>ep_={~}0}dw1UaU~uwW*UY-FkB^mTyu{$*S|3AlSHz1K zeX2^wo$B`7Bf8G45{O>w)3%==QJxU}iS?JtpQW4!eA?gNuiN|cCQZU7E-udJU~h|o zN4rloosN!f46~cJW+{zO;5n<^b+yRfby3Dp778b^%ojCjOq7HWyo804@tQ{h_ zjt=DRg4mS)6GoL)&uU;UKyYmH|L0z?o{C&AmDSXi$Lf&M(uOYmoj`Ef+UA02sURk?haQ*@tirNL?9DV7urQ%q;Nl0DqqeD(=5IXO8@Vl0=9lquuo zeJlSA?!hX)?oxG^Uhr5R&8x{gt)ilWjm*-2&sW!)`|h39muGb6&Yc6u8Kg$|??$pm zvP)5-1DMe^Hg6IVn!kLJ#Srg!?MLzG=;`S}^x+Q0MMX*Om}hCcKn)kKYrg%XOYG`PPiHQML zYv024esMmU)S0;L!ph3Z&d#2 zOATLv3bMBLFze>r%#6pxmt&=kB;90q3MNiu0nD2F*ptsJ<~}{&zu&q*@8#`X%trmg z%hS`O(#>{hxI(Co_|VAcOp?}-#;3$?p;j7uMZ=WS;#y9?-AAjv)@QnqzB?sBL8L=; zzbUAwo|95gpOy7=1`PsnxmOss_zWRVL%3@Z$$lrGNP+YMy~fR(eZcj$mdCn=O>yqZ zkGVNH$3Z^;hJp~t$jGn{CQZ?3rFnqDbc;lj%~ksDmMU=YUb;kBs#>OJU>KlQGbe0s zN5{r`dwG#jP%IBuL@hca#7PN?=OfwOj-dmL0A7wBA&F?I@*zBQb`~BQpOy6X-c3tO zJIN{m1y;C=yO52}-zbt@oRXkuqsx3^7>bDvE{=|oabxUY-vbJ&eXu2E98bj|1f`{M znVSQaUMoF+eKMMil=Jm9sN}^Dr`n>Uqlbr0i03|7KY8-RwC3^mwl+Qv z4h|$T83wjPK~T(zWG^|1R;;@sE{;o-UjNk)q!xa5pz=}9gol zV{kDWqkToB87{d ztjC^nYbSbwsPgys|Mlya!%%4<8?}N#D~$j|U)J64m7 z$(VaGTnIeHM+HnbM>JW@jq0#>)zxR6&W{JCq@=XR3JnbnQ5_9TOgsw-n*Nk{nAK+j zihgB9kEu>fPdB?uaY#PIw*o=^VeYr*b0D1Z1>G8{Bq#C%4O)=~W*$Dd zPB1QWyv)nn+R*_Ver~z$pwnI1LK*fsH9=8}m#Xsfkoty-l@&hYdaRL=k&myh&fBX^ z?ot+vk?b2}YmNS?0^3L+4@4sI!Gj0NTsN$&E)0z;us4UX8WR z(n9GeF~vNRotzxqaPZ6F!cObAZ=yUrHb4lCOYP&uY&si*X<(Em7}kR1QJ7PRXfo{K z*PIAzQ-GQk52r%w>ikqx$cD!K6%{ev9<4Ncfkpo67hZk%@L_ZQ#~~QY$PD%MMK3Li+mpKrdXlaG|8M zw1|yvRuWI46i7_rN*6r*R%7Gj>bKrrkfT7kq#n)nWoPrjTzsDpEj%OHZ{Dp&lZ>j~ ztGDh-GBq<3e0>cvPWvx^PVtLmKXGbJY57H=04(&20N~dU#_7(tyKC)2?=v#S2QKK+ ztp$lFU}njZ7ZGlGsi~aY+|xi5AnhBXTAp@%{yb41Kng|QxZ)w&(9lp@J3Kx8JTT?= zoXAr&_~7>~^YD#3|V0KooI@b@l{@e>nzCMMPQd(wXX{0ZA2Je(S0%gljPh=^q8O~_8?l^F;zH-SH>jQf*E_>B~2%m{?qt1LNSzn`x=Ag_(B;ayY|mJjJ<)GITrh<`^1F zOpy=6Q=rsg;^61pH2JB%rnI$3JV?B3ku=ixNO$nAqvQU!>q2Blk8bEOK;l@T(OF~6 zTe}XOiP9$W(<)pqRrhVqGaiRO=Gv<&DmvmsEJ0k)Np_$U2D>y4yyJ>*ex(7941#*D z3_ylkYYLtRG)_w^ER>2>12bEjytQ&Qy}DY~w5hS^U+&mRM=kv~q7oqQ5(c9cIO-ML zQU~^iJs-!V@t$<-P`|3hDjvs9$>~%}$h4OHuw1!3^VH|BB;BC;58?U$aQJ^#tN-|; zJ$(a%*x1;u@nH7savyNfZcmaRmW2I@!u3V|nZIG+D=RC&Iy(}s@N;oZZ2mAGt9&#M z0`nLri=YYR$&(qpZC}1vP2=K)YBu!1otpce^Vk0XBJKl1=Tc}IFCWxAD1tbNu4E+A zrt@rQTBg<;_l?;eOw;+OuSbtG0QDgM^T;jh<3~q;c-NWEFmQE3L!q+KKW{Q}DBNne z>ix%FQ}cw_S^nF(<({i)R~=mZIG~QikGx3x096j~j}GNHQu)cc1g~emGo3jb`HHs(Sxa?#5D;+@Sl|~w}BLSeQG6QEYTYLpcT(4feT3B4X z6gsg^7#|-`O-+Ro4QEtpWTvfy-yVrr0WrlRJ;j`$XgqSA|7%CbqUd|IdxcU`Ql5|; zP|U$!6W40DDgqC0U|`^~VG-64a6$%4OG86rT~u1?4lYc8e?O=vajmk_QhHQwULIOB zel6yJxUPe0h0?YABK3KG?M^5y=%wThyUR><`Q&A;e-;MrHa>-V6-JoQ%Muq8a|KG* z)YLQ=+;jdG`TXi+3zimS`sN$fp9;WW;rK9C89G$qy(P$LHQSx487zENMkbh=ExT>0 zWua!WIZPiH^8C5?a?Mty(7?BE_w4L)Ui!XhSi)%M3^$(Dpu>IclHU~&BjCSA0lP-2 ztExWb%V9u0balODSmdFa#NKz7%*d4xaN9w1lOOqEtY&2Q-58o=eJeCC&jC!2*oe*~ zIaU^y_rq}ye-O7PBe0RJt*z&fXmv2yp55fTwKz}g0td*{!~~>W)rFU%zsm*gKX?F` zaGZu_S@h6$qo$^YQah*it;wIluAW?i_NpM&?0cUvm&xX=a^#0m(`+YwriG=Mk_U3Q zw~RdyaP)cb4}hJ51$-O*h%J`vX~N%u&Y(&13A`^};k0Ugaas;@ zhKXsjgsHu)jgnKSb~|m(VQ&U`;NtFn+obikXjTCbdC5`F^CBWWpkH_YEM_~Iw{#{W zbtu6b(TgR31A>i&ebOU-nLecdqv`zg^lf8fRwgFk^fQZ#zW7!;>#vY$kTMs!xp#JU zo?@|w%OI}BF5_+wg&6Eja28C;ol{{0fMA(wj}18!^!-V|No**FFcmvHI}5N#M#X%T zoZPI+J#SYOl(vwN6L43kW0un;B_*)y1k7uRHCv=Y;WW^W3=*E`Ay(((ZW z5L5&UX?;k_dGi9#3+#u~JIbB>_0Io*1dOm+fC1gU$&7n*wF7EB=>A~S%EX`PKVnj4^ zNE>@}?`c?z!%)!M_vHqV?dsOVa8!}a#A z1A7A4fatcZgS!KR$kdGgteFrOM~jL(l1xiaN4Glt#%UDfNOiT(XY4VUgX`91esi-l z-nRb!7_Sdm=0V?Ol+I8xWxRU_q*TuPkF4iPN?u-A#Xz3SR43AF?EEtV;;u4Zm-R+BO- zH+Mm_E;m<`@3s8mtGQ=%=P5a%0S3Y{KRa8mmRW`J^+?^8<8m z{9AKE?EQn?FT;W!2m5?bX@88>pgrC)PZK0oxt!5!6n8+Jd4WF~k?O6GX>q&8+& z8#2+ukd~c&d2+JYbw+#IMFS0`Q`&QdW8JAT-{VsC%4e#3h2`1V*SxGDrz|W|))ECT z#;v{kAAi-1@02k?yYk2g8GGx1jQs@_iV}B#%*a>nuq6o z1ad#Ff?b(A3T~r#w&xJhT)KTLRF< ziTBov>s1SlbrSYdC@CxJ%|6Mj-xz*M1Vs>h4d{h#kLgH8Cim|v%x;e!2~kE-78Vuh z?bnLN+jplZVk2R^*5R*TGjZafoCnjeyE{8`V54JV_E%fjHC2!g`gpBHrWHBB@lMF} z+a3oVZDV7zwOBS*T2caIw1!HCjRZ$_OVnqlD7lw!OIS@$8H^jwFHKD(4U=Hytf0DJdkBKLg=< z>oIzxnjyWUOwRR zEZ78e3~g-6JeJL-Zh^@TdWiDSngS-cxMw_DE0AJa35*N)Bv|ACY;fe)?LRg(eYM`C;)^+LfD&E6@-PJykHP;IM27zal1f9t)`udAJZo0^s3jXlmYcqjQZI>Ubk5 zD@3&muM038z6-#_GJem}QYTqnt9N5*qzYQDAiR~idcZ7%78Vy57j)nHa}65>;$OeM zrLUiU#|0PwC|5o~!6Z?1C?I!L)o#pX<0GV`2H=Y9Y}jVq9GqPFTWa=BU+ULa#$akE z=w$r-4!XN_0~CZY#BK0rMRb-nHMYRS(T1%yxJMw9t|Tku}p z2wX~57UqNhlKa0dO3`Vhnd|P0JM(JEH_%-7C`br+fgrKbB;npiP$s+}6djZd>p7uI z4J&yUV<-r-zCaI#6T+Dcy3ne1<~BzMEp2Tp;Q0`RVm3;IGc{Zw@BGJx+CNH^|9xHI z|J5~{D^#H%uPP&gn4nmk8BSQ;c+(uB%oU)JlBIQ*qq2Je6MpX8DYrp?TVW(Es_1Vs z@ye$wL0_)x=oo08I44{F@nd+V?VpLBOW>1tA0E0_$}H{oGF<>|MMOlP?$0@8XJu*Z zg`GO3wK#KP^7nWhaY~4aMX;o>@P?}lczNIKF)6&)_7+dQTH2L<@|Fo^b*j7!&i~w! aIiLwDSFB1d75MwAgocW?@<)_K;C}(relBAG literal 0 HcmV?d00001 diff --git a/modules/gapi/include/opencv2/gapi/cpu/gcpukernel.hpp b/modules/gapi/include/opencv2/gapi/cpu/gcpukernel.hpp index daaca263db..02e06122b2 100644 --- a/modules/gapi/include/opencv2/gapi/cpu/gcpukernel.hpp +++ b/modules/gapi/include/opencv2/gapi/cpu/gcpukernel.hpp @@ -8,10 +8,10 @@ #ifndef OPENCV_GAPI_GCPUKERNEL_HPP #define OPENCV_GAPI_GCPUKERNEL_HPP -#include #include -#include #include +#include +#include #include #include diff --git a/modules/gapi/include/opencv2/gapi/gkernel.hpp b/modules/gapi/include/opencv2/gapi/gkernel.hpp index 36030f5c02..74caeca764 100644 --- a/modules/gapi/include/opencv2/gapi/gkernel.hpp +++ b/modules/gapi/include/opencv2/gapi/gkernel.hpp @@ -10,11 +10,11 @@ #include #include -#include // map (for GKernelPackage) -#include // lookup order #include // string -#include // tuple #include // false_type, true_type +#include // map (for GKernelPackage) +#include // tuple +#include // lookup order #include // CompileArgTag #include // Seq diff --git a/modules/gapi/samples/api_example.cpp b/modules/gapi/samples/api_example.cpp new file mode 100644 index 0000000000..a731000f44 --- /dev/null +++ b/modules/gapi/samples/api_example.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + cv::VideoCapture cap; + if (argc > 1) cap.open(argv[1]); + else cap.open(0); + CV_Assert(cap.isOpened()); + + cv::GMat in; + cv::GMat vga = cv::gapi::resize(in, cv::Size(), 0.5, 0.5); + cv::GMat gray = cv::gapi::BGR2Gray(vga); + cv::GMat blurred = cv::gapi::blur(gray, cv::Size(5,5)); + cv::GMat edges = cv::gapi::Canny(blurred, 32, 128, 3); + cv::GMat b,g,r; + std::tie(b,g,r) = cv::gapi::split3(vga); + cv::GMat out = cv::gapi::merge3(b, g | edges, r); + cv::GComputation ac(in, out); + + cv::Mat input_frame; + cv::Mat output_frame; + CV_Assert(cap.read(input_frame)); + do + { + ac.apply(input_frame, output_frame); + cv::imshow("output", output_frame); + } while (cap.read(input_frame) && cv::waitKey(30) < 0); + + return 0; +} diff --git a/modules/gapi/samples/kernel_api_snippets.cpp b/modules/gapi/samples/kernel_api_snippets.cpp new file mode 100644 index 0000000000..a30161d274 --- /dev/null +++ b/modules/gapi/samples/kernel_api_snippets.cpp @@ -0,0 +1,157 @@ +// [filter2d_api] +#include + +G_TYPED_KERNEL(GFilter2D, + , + "org.opencv.imgproc.filters.filter2D") +{ + static cv::GMatDesc // outMeta's return value type + outMeta(cv::GMatDesc in , // descriptor of input GMat + int ddepth , // depth parameter + cv::Mat /* coeffs */, // (unused) + cv::Point /* anchor */, // (unused) + double /* scale */, // (unused) + int /* border */, // (unused) + cv::Scalar /* bvalue */ ) // (unused) + { + return in.withDepth(ddepth); + } +}; +// [filter2d_api] + +cv::GMat filter2D(cv::GMat , + int , + cv::Mat , + cv::Point , + double , + int , + cv::Scalar); + +// [filter2d_wrap] +cv::GMat filter2D(cv::GMat in, + int ddepth, + cv::Mat k, + cv::Point anchor = cv::Point(-1,-1), + double scale = 0., + int border = cv::BORDER_DEFAULT, + cv::Scalar bval = cv::Scalar(0)) +{ + return GFilter2D::on(in, ddepth, k, anchor, scale, border, bval); +} +// [filter2d_wrap] + +// [compound] +#include // GAPI_COMPOUND_KERNEL() + +using PointArray2f = cv::GArray; + +G_TYPED_KERNEL(HarrisCorners, + , + "org.opencv.imgproc.harris_corner") +{ + static cv::GArrayDesc outMeta(const cv::GMatDesc &, + int, + double, + double, + int, + double) + { + // No special metadata for arrays in G-API (yet) + return cv::empty_array_desc(); + } +}; + +// Define Fluid-backend-local kernels which form GoodFeatures +G_TYPED_KERNEL(HarrisResponse, + , + "org.opencv.fluid.harris_response") +{ + static cv::GMatDesc outMeta(const cv::GMatDesc &in, + double, + int, + double) + { + return in.withType(CV_32F, 1); + } +}; + +G_TYPED_KERNEL(ArrayNMS, + , + "org.opencv.cpu.nms_array") +{ + static cv::GArrayDesc outMeta(const cv::GMatDesc &, + int, + double) + { + return cv::empty_array_desc(); + } +}; + +GAPI_COMPOUND_KERNEL(GFluidHarrisCorners, HarrisCorners) +{ + static PointArray2f + expand(cv::GMat in, + int maxCorners, + double quality, + double minDist, + int blockSize, + double k) + { + cv::GMat response = HarrisResponse::on(in, quality, blockSize, k); + return ArrayNMS::on(response, maxCorners, minDist); + } +}; + +// Then implement HarrisResponse as Fluid kernel and NMSresponse +// as a generic (OpenCV) kernel +// [compound] + +// [filter2d_ocv] +#include // GAPI_OCV_KERNEL() +#include // cv::filter2D() + +GAPI_OCV_KERNEL(GCPUFilter2D, GFilter2D) +{ + static void + run(const cv::Mat &in, // in - derived from GMat + const int ddepth, // opaque (passed as-is) + const cv::Mat &k, // opaque (passed as-is) + const cv::Point &anchor, // opaque (passed as-is) + const double delta, // opaque (passed as-is) + const int border, // opaque (passed as-is) + const cv::Scalar &, // opaque (passed as-is) + cv::Mat &out) // out - derived from GMat (retval) + { + cv::filter2D(in, out, ddepth, k, anchor, delta, border); + } +}; +// [filter2d_ocv] + +int main(int, char *[]) +{ + std::cout << "This sample is non-complete. It is used as code snippents in documentation." << std::endl; + +cv::Mat conv_kernel_mat; + +{ +// [filter2d_on] +cv::GMat in; +cv::GMat out = GFilter2D::on(/* GMat */ in, + /* int */ -1, + /* Mat */ conv_kernel_mat, + /* Point */ cv::Point(-1,-1), + /* double */ 0., + /* int */ cv::BORDER_DEFAULT, + /* Scalar */ cv::Scalar(0)); +// [filter2d_on] +} + +{ +// [filter2d_wrap_call] +cv::GMat in; +cv::GMat out = filter2D(in, -1, conv_kernel_mat); +// [filter2d_wrap_call] +} + +return 0; +}