[SUBPLUGIN] Support nnstreamer trainer subplugin
authorhyunil park <hyunil46.park@samsung.com>
Wed, 7 Dec 2022 02:56:21 +0000 (11:56 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Wed, 7 Dec 2022 10:10:31 +0000 (19:10 +0900)
Allow to add trainer subplugin in runtime

- Add NNS_SUBPLUGIN_TRAINER to subpluginType
- Add NNSTREAMER_TRAINERS to meson.build
- Add group name(trainer) to nnstreamer.ini.in
- Add NNSTREAMER_TRAINER to spec

Signed-off-by: hyunil park <hyunil46.park@samsung.com>
debian/rules
gst/nnstreamer/nnstreamer_conf.c
gst/nnstreamer/nnstreamer_conf.h
gst/nnstreamer/nnstreamer_subplugin.c
gst/nnstreamer/nnstreamer_subplugin.h
meson.build
nnstreamer.ini.in
packaging/nnstreamer.spec
packaging/run_unittests_binaries.sh
tools/docker/Dockerfile

index 33c6d3a..fc6ce90 100755 (executable)
@@ -24,6 +24,7 @@ export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
+export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
 export PYTHONIOENCODING=utf-8
 
 ifeq ($(DEB_BUILD_ARCH_CPU), arm)
index f5536df..c2a84b0 100644 (file)
@@ -40,6 +40,7 @@
 #define NNSTREAMER_PREFIX_FILTER       "libnnstreamer_filter_"
 #define NNSTREAMER_PREFIX_CUSTOMFILTERS        ""
 #define NNSTREAMER_PREFIX_CONVERTER    "libnnstreamer_converter_"
+#define NNSTREAMER_PREFIX_TRAINER      "libnnstreamer_trainer_"
 /* Custom filter does not have prefix */
 
 /* Env-var names */
@@ -47,7 +48,8 @@ static const gchar *NNSTREAMER_ENVVAR[NNSCONF_PATH_END] = {
   [NNSCONF_PATH_FILTERS] = "NNSTREAMER_FILTERS",
   [NNSCONF_PATH_DECODERS] = "NNSTREAMER_DECODERS",
   [NNSCONF_PATH_CUSTOM_FILTERS] = "NNSTREAMER_CUSTOMFILTERS",
-  [NNSCONF_PATH_CONVERTERS] = "NNSTREAMER_CONVERTERS"
+  [NNSCONF_PATH_CONVERTERS] = "NNSTREAMER_CONVERTERS",
+  [NNSCONF_PATH_TRAINERS] = "NNSTREAMER_TRAINERS"
 };
 
 static const gchar *NNSTREAMER_PATH[NNSCONF_PATH_END] = {
@@ -55,6 +57,7 @@ static const gchar *NNSTREAMER_PATH[NNSCONF_PATH_END] = {
   [NNSCONF_PATH_DECODERS] = "/usr/lib/nnstreamer/decoders/",
   [NNSCONF_PATH_CUSTOM_FILTERS] = "/usr/lib/nnstreamer/customfilters/",
   [NNSCONF_PATH_CONVERTERS] = "/usr/lib/nnstreamer/converters/",
+  [NNSCONF_PATH_TRAINERS] = "/usr/lib/nnstreamer/trainers/"
 };
 
 static const gchar *subplugin_prefixes[] = {
@@ -63,6 +66,7 @@ static const gchar *subplugin_prefixes[] = {
   [NNSCONF_PATH_CUSTOM_FILTERS] = NNSTREAMER_PREFIX_CUSTOMFILTERS,
   [NNSCONF_PATH_EASY_CUSTOM_FILTERS] = NNSTREAMER_PREFIX_CUSTOMFILTERS, /**< Same as Custom Filters */
   [NNSCONF_PATH_CONVERTERS] = NNSTREAMER_PREFIX_CONVERTER,
+  [NNSCONF_PATH_TRAINERS] = NNSTREAMER_PREFIX_TRAINER,
   [NNSCONF_PATH_END] = NULL
 };
 
@@ -329,6 +333,8 @@ _fill_subplugin_path (confdata * cdata, GKeyFile * key_file, conf_sources src)
       g_key_file_get_string (key_file, "filter", "customfilters", NULL);
   cdata->conf[NNSCONF_PATH_CONVERTERS].path[src] =
       g_key_file_get_string (key_file, "converter", "converters", NULL);
+  cdata->conf[NNSCONF_PATH_TRAINERS].path[src] =
+      g_key_file_get_string (key_file, "trainer", "trainer", NULL);
 }
 
 /** @brief Public function defined in the header */
@@ -689,7 +695,8 @@ void
 nnsconf_subplugin_dump (gchar * str, gulong size)
 {
   static const nnsconf_type_path dump_list_type[] = {
-    NNSCONF_PATH_FILTERS, NNSCONF_PATH_DECODERS, NNSCONF_PATH_CONVERTERS
+    NNSCONF_PATH_FILTERS, NNSCONF_PATH_DECODERS, NNSCONF_PATH_CONVERTERS,
+    NNSCONF_PATH_TRAINERS
   };
   static const char *dump_list_str[] = {
     "Filter", "Decoder", "Conterver"
index 332058d..575d357 100644 (file)
@@ -66,6 +66,7 @@ typedef enum {
   NNSCONF_PATH_CUSTOM_FILTERS,
   NNSCONF_PATH_EASY_CUSTOM_FILTERS,
   NNSCONF_PATH_CONVERTERS,
+  NNSCONF_PATH_TRAINERS,
 
   NNSCONF_PATH_END,
 } nnsconf_type_path;
index a43194a..e7d227b 100644 (file)
@@ -73,6 +73,7 @@ static subpluginSearchLogic searchAlgorithm[] = {
   [NNS_SUBPLUGIN_DECODER] = NNS_SEARCH_FILENAME,
   [NNS_EASY_CUSTOM_FILTER] = NNS_SEARCH_FILENAME,
   [NNS_SUBPLUGIN_CONVERTER] = NNS_SEARCH_GETALL,
+  [NNS_SUBPLUGIN_TRAINER] = NNS_SEARCH_FILENAME,
   [NNS_CUSTOM_CONVERTER] = NNS_SEARCH_NO_OP,
   [NNS_CUSTOM_DECODER] = NNS_SEARCH_NO_OP,
   [NNS_IF_CUSTOM] = NNS_SEARCH_NO_OP,
@@ -233,6 +234,7 @@ register_subplugin (subpluginType type, const char *name, const void *data)
     case NNS_SUBPLUGIN_DECODER:
     case NNS_EASY_CUSTOM_FILTER:
     case NNS_SUBPLUGIN_CONVERTER:
+    case NNS_SUBPLUGIN_TRAINER:
     case NNS_CUSTOM_DECODER:
     case NNS_IF_CUSTOM:
     case NNS_CUSTOM_CONVERTER:
index c070c3b..d62f6bf 100644 (file)
@@ -42,6 +42,7 @@ typedef enum {
   NNS_SUBPLUGIN_DECODER = NNSCONF_PATH_DECODERS,
   NNS_EASY_CUSTOM_FILTER = NNSCONF_PATH_EASY_CUSTOM_FILTERS,
   NNS_SUBPLUGIN_CONVERTER = NNSCONF_PATH_CONVERTERS,
+  NNS_SUBPLUGIN_TRAINER = NNSCONF_PATH_TRAINERS,
   NNS_CUSTOM_CONVERTER,
   NNS_CUSTOM_DECODER,
   NNS_IF_CUSTOM,
index 3669e4b..56cca54 100644 (file)
@@ -699,6 +699,7 @@ if get_option('enable-test')
   path_nns_plugin_filters = join_paths(path_nns_plugin_prefix, 'tensor_filter')
   path_nns_plugin_decoders = join_paths(path_nns_plugin_prefix, 'tensor_decoder')
   path_nns_plugin_converters = join_paths(path_nns_plugin_prefix, 'tensor_converter')
+  path_nns_plugin_trainers = join_paths(path_nns_plugin_prefix, 'tensor_trainer')
 
   testenv = environment()
   testenv.set('GST_PLUGIN_PATH', path_gst_plugin + ':' + path_ext_plugin)
@@ -706,6 +707,7 @@ if get_option('enable-test')
   testenv.set('NNSTREAMER_FILTERS', path_nns_plugin_filters)
   testenv.set('NNSTREAMER_DECODERS', path_nns_plugin_decoders)
   testenv.set('NNSTREAMER_CONVERTERS', path_nns_plugin_converters)
+  testenv.set('NNSTREAMER_TRAINERS', path_nns_plugin_trainers)
   testenv.set('NNSTREAMER_SOURCE_ROOT_PATH', meson.source_root())
   testenv.set('NNSTREAMER_BUILD_ROOT_PATH', meson.build_root())
 
index 41a0a11..ae1d168 100644 (file)
@@ -21,6 +21,9 @@ decoders=@SUBPLUGIN_INSTALL_PREFIX@/decoders/
 [converter]
 converters=@SUBPLUGIN_INSTALL_PREFIX@/converters/
 
+[trainer]
+trainers=@SUBPLUGIN_INSTALL_PREFIX@/trainers/
+
 # Set 1 or True if you want to use GPU with pytorch for computation.
 [pytorch]
 enable_use_gpu=@TORCH_USE_GPU@
index d6f983f..a3ec337 100644 (file)
@@ -860,6 +860,7 @@ export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
+export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
 
 %define test_script $(pwd)/packaging/run_unittests_binaries.sh
 
index 39c7872..e388f46 100755 (executable)
@@ -47,6 +47,7 @@ export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
+export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
 export _PYTHONPATH=${PYTHONPATH}
 
 run_entry() {
index 296076d..49efece 100644 (file)
@@ -53,6 +53,7 @@ ENV GST_PLUGIN_PATH=/home/${USERNAME}/nnstreamer/${BUILDDIR}/gst/nnstreamer \
     NNSTREAMER_FILTERS=/home/${USERNAME}/nnstreamer/${BUILDDIR}/ext/nnstreamer/tensor_filter \
     NNSTREAMER_DECODERS=/home/${USERNAME}/nnstreamer/${BUILDDIR}/ext/nnstreamer/tensor_decoder \
     NNSTREAMER_CONVERTERS=/home/${USERNAME}/nnstreamer/${BUILDDIR}/ext/nnstreamer/tensor_converter \
+    NNSTREAMER_TRAINERS=/home/${USERNAME}/nnstreamer/${BUILDDIR}/ext/nnstreamer/tensor_trainer \
     NNS_USERNAME=${USERNAME} \
     NNS_BUILDDIR=${BUILDDIR}