G-API Serialization routines * Serialization backend in tests, initial version * S11N/00: A Great Rename - "Serialization" is too long and too error-prone to type, so now it is renamed to "s11n" everywhere; - Same applies to "SRLZ"; - Tests also renamed to start with 'S11N.*' (easier to run); - Also updated copyright years in new files to 2020. * S11N/01: Some basic interface segregation - Moved some details (low-level functions) out of serialization.hpp; - Introduced I::IStream and I::OStream interfaces; - Implemented those via the existing [De]SerializationStream classes; - Moved all operators to use interfaces instead of classes; - Moved the htonl/ntohl handling out of operators (to the classes). The implementation didn't change much, it is a subject to the further refactoring * S11N/02: Basic operator reorg, basic tests, vector support - Reorganized operators on atomic types to follow >>/<< model (put them closer in the code for the respective types); - Introduce more operators for basic (scalar) types; - Drop all vector s11n overloads -- replace with a generic (template-based) one; - Introduced a new test suite where low-level s11n functionality is tested (for the basic types). * S11N/03: Operators reorganization - Sorted the Opaque types enum by complexity; - Reorganized the existing operators for basic types, also ordered by complexity; - Organized operators in three groups (Basics, OpenCV, G-API); - Added a generic serialization for variant<>; - Reimplemented some of the existing operators (for OpenCV and G-API data structures); - Introduced new operators for cv::gimpl data types. These operators (and so, the data structures) are not yet used in the graph dump/reconstruction routine, it will be done as a next step. * S11N/04: The Great Clean-up - Drop the duplicates of GModel data structures from the serialization, serialize the GModel data structures themselve instead (hand-written code replaced with operators). - Also removed usuned code for printing, etc. * S11N/05: Internal API Clean-up - Minimize the serialization API to just Streams and Operators; - Refactor and fix the graph serialization (deconstruction and reconstruction) routines, fix data addressing problems there; - Move the serialization.[ch]pp files to the core G-API library * S11N/06: Top-level API introduction - !!!This is likely the most invasive commit in the series!!! - Introduced a top-level API to serialize and deserialize a GComputation - Extended the compiler to support both forms of a GComputation: an expession based and a deserialized one. This has led to changes in the cv::GComputation::Priv and in its dependent components (even the transformation tests); - Had to extend the kernel API (GKernel) with extra information on operations (mainly `outMeta`) which was only available for expression based graphs. Now the `outMeta` can be taken from kernels too (and for the deserialized graphs it is the only way); - Revisited the internal serialization API, had to expose previously hidden entities (like `GSerialized`); - Extended the serialized graph info with new details (object counter, protocol). Added unordered_map generic serialization for that; - Reworked the very first pipeline test to be "proper"; GREEN now, the rest is to be reworked in the next iteration. * S11N/07: Tests reworked - Moved the sample pipeline tests w/serialization to test the public API (`cv::gapi::serialize`, then followed by `cv::gapi::deserialize<>`). All GREEN. - As a consequence, dropped the "Serialization" test backend as no longer necessary. * S11N/08: Final touches - Exposed the C++ native data types at Streams level; - Switched the ByteMemoryIn/OutStreams to store data in `char` internally (2x less memory for sample pipelines); - Fixed and refactored Mat dumping to the stream; - Renamed S11N pipeline tests to their new meaning. * linux build fix * fix RcDesc and int uint warnings * more Linux build fix * white space and virtual android error fix (attempt) * more warnings to be fixed * android warnings fix attempt * one more attempt for android build fix * android warnings one more fix * return back override * avoid size_t * static deserialize * and how do you like this, elon? anonymous namespace to fix android warning. * static inline * trying to fix standalone build * mat dims fix * fix mat r/w for standalone Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
68 lines
2.2 KiB
C++
68 lines
2.2 KiB
C++
// This file is part of OpenCV project.
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
// of this distribution and at http://opencv.org/license.html.
|
|
//
|
|
// Copyright (C) 2018 Intel Corporation
|
|
|
|
|
|
#ifndef OPENCV_GAPI_GCOMPILER_HPP
|
|
#define OPENCV_GAPI_GCOMPILER_HPP
|
|
|
|
|
|
#include <opencv2/gapi/gcommon.hpp>
|
|
#include <opencv2/gapi/gkernel.hpp>
|
|
#include <opencv2/gapi/infer.hpp>
|
|
#include <opencv2/gapi/gcomputation.hpp>
|
|
|
|
#include <ade/execution_engine/execution_engine.hpp>
|
|
|
|
namespace cv { namespace gimpl {
|
|
|
|
// FIXME: exported for internal tests only!
|
|
class GAPI_EXPORTS GCompiler
|
|
{
|
|
const GComputation& m_c;
|
|
const GMetaArgs m_metas;
|
|
GCompileArgs m_args;
|
|
ade::ExecutionEngine m_e;
|
|
|
|
cv::gapi::GKernelPackage m_all_kernels;
|
|
cv::gapi::GNetPackage m_all_networks;
|
|
|
|
// Patters built from transformations
|
|
std::vector<std::unique_ptr<ade::Graph>> m_all_patterns;
|
|
|
|
|
|
void validateInputMeta();
|
|
void validateOutProtoArgs();
|
|
|
|
public:
|
|
// Metas may be empty in case when graph compiling for streaming
|
|
// In this case graph get metas from first frame
|
|
explicit GCompiler(const GComputation &c,
|
|
GMetaArgs &&metas,
|
|
GCompileArgs &&args);
|
|
|
|
// The method which does everything...
|
|
GCompiled compile();
|
|
|
|
// This too.
|
|
GStreamingCompiled compileStreaming();
|
|
|
|
// But those are actually composed of this:
|
|
using GPtr = std::unique_ptr<ade::Graph>;
|
|
GPtr generateGraph(); // Unroll GComputation into a GModel
|
|
void runPasses(ade::Graph &g); // Apply all G-API passes on a GModel
|
|
void compileIslands(ade::Graph &g); // Instantiate GIslandExecutables in GIslandModel
|
|
static void compileIslands(ade::Graph &g, const cv::GCompileArgs &args);
|
|
GCompiled produceCompiled(GPtr &&pg); // Produce GCompiled from processed GModel
|
|
GStreamingCompiled produceStreamingCompiled(GPtr &&pg); // Produce GStreamingCompiled from processed GMbodel
|
|
static void runMetaPasses(ade::Graph &g, const cv::GMetaArgs &metas);
|
|
|
|
static GPtr makeGraph(const cv::GComputation::Priv &);
|
|
};
|
|
|
|
}}
|
|
|
|
#endif // OPENCV_GAPI_GCOMPILER_HPP
|