Skip to content

DBus Interface #179

Open
Open
@again4you

Description

@again4you

DBus Interface

Pipeline Interface

<?xml version="1.0" encoding="UTF-8" ?>
<node name="/Org/Tizen/MachineLearning/Service">
  <interface name="org.tizen.machinelearning.service.pipeline">
    <!-- Register the pipeline with given description. Return the call result and its id. -->
    <method name="register_pipeline">
      <arg type="s" name="pipeline" direction="in" />
      <arg type="i" name="result" direction="out" />
      <arg type="x" name="id" direction="out" />
    </method>
    <!-- Start the pipeline with given id. -->
    <method name="start_pipeline">
      <arg type="x" name="id" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Stop the pipeline with given id -->
    <method name="stop_pipeline">
      <arg type="x" name="id" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Destroy the pipeline with given id -->
    <method name="destroy_pipeline">
      <arg type="x" name="id" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Get the state of pipeline with given id. -->
    <method name="get_state">
      <arg type="x" name="id" direction="in" />
      <arg type="i" name="result" direction="out" />
      <arg type="i" name="state" direction="out" />
    </method>
    <!-- Get the description of pipeline with given id. -->
    <method name="get_description">
      <arg type="x" name="id" direction="in" />
      <arg type="i" name="result" direction="out" />
      <arg type="s" name="description" direction="out" />
    </method>

    <!-- Sets the pipeline description with a given name. -->
    <method name="Set">
      <arg type="s" name="name" direction="in" />
      <arg type="s" name="description" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Gets the pipeline description with a given name. -->
    <method name="Get">
      <arg type="s" name="name" direction="in" />
      <arg type="s" name="description" direction="out" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Deletes the pipeline description with a given name. -->
    <method name="Delete">
      <arg type="s" name="name" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
  </interface>
</node>

Model Interface

<?xml version="1.0" encoding="UTF-8" ?>
<node name="/Org/Tizen/MachineLearning/Service">
  <interface name="org.tizen.machinelearning.service.model">
    <!-- Set the file path of the designated neural network model -->
    <method name="SetPath">
      <arg type="s" name="name" direction="in" />
      <arg type="s" name="path" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Get the file path of the designated neural network model -->
    <method name="GetPath">
      <arg type="s" name="name" direction="in" />
      <arg type="s" name="path" direction="out" />
      <arg type="i" name="result" direction="out" />
    </method>
    <!-- Delete the file path of the designated neural network model -->
    <method name="Delete">
      <arg type="s" name="name" direction="in" />
      <arg type="i" name="result" direction="out" />
    </method>
  </interface>
</node>

Service API

Server Side

/* M1 Release */
int ml_service_set_pipeline (const char *name, const char *pipeline_desc);
int ml_service_get_pipeline (const char *name, char **pipeline_desc);
int ml_service_delete_pipeline (const char *name);

/* WIP */
int ml_service_pipeline_construct (const char *name, ml_pipeline_state_cb cb, void *user_data, ml_pipeline_h *pipe);
int ml_service_model_add (const char *name, const ml_service_model_description * desc);

int ml_service_server_getstate (ml_service_server_h h, ml_pipeline_state_e *state);
int ml_service_server_getdesc (ml_service_server_h h, char ** desc);
int ml_service_server_start (ml_service_server_h h);
int ml_service_server_stop (ml_service_server_h h);
int ml_service_server_close (ml_service_server_h h);

/**
 * @brief TBU / Query Server AI Service
 * @detail
 *   Rule 1. The pipeline should not have appsink, tensor_sink, appsrc or any other app-thread dependencies.
 *   Rule 2. Add "#INPUT#" and "#OUTPUT#" elements where input/output streams exist.
 *     E.g., " #INPUT# ! ... ! tensor-filter ... ! ... ! #OUTPUT# ".
 *   Rule 3. There should be exactly one pair of #INPUT# and #OUTPUT#.
 *   Rule 4. Supply input/output metadata with input_info & output_info.
 *   This is the simplist method, but restricted to static tensor streams.
 */
int ml_service_server_open_queryserver_static_tensors (ml_service_server_h *h, const char *topic_name, const char * desc, const ml_tensors_info_h input_info, const ml_tensors_info_h output_info);
/**
 * @brief TBU / Query Server AI Service
 * @detail
 *   Rule 1. The pipeline should not have appsink, tensor_sink, appsrc or any other app-thread dependencies.
 *   Rule 2. You may add "#INPUT#" and "#OUTPUT#" elements if you do not know how to use tensor-query-server.
 *     E.g., " #INPUT# ! tensor-filter ... ! ... ! #OUTPUT# ".
 *   Rule 3. There should be exactly one pair of #INPUT# and #OUTPUT#.
 *   Rule 4. Supply input/output metadata with gstcap_in and gstcap_out.
 *   This supports general GStreamer streams and general Tensor streams.
 */
int ml_service_server_open_queryserver_gstcaps (ml_service_server_h *h, const char *topic_name, const char * desc, const char *gstcap_in, const char *gstcap_out);
/**
 * @brief TBU / Query Server AI Service
 * @detail
 *   Rule 1. The pipeline should have a single pair of tensor-query-server-{sink / src}.
 *   Rule 2. The pipeline should not have appsink, tensor_sink, appsrc or any other app-thread dependencies.
 *   Rule 3. There should be exactly one pair of #INPUT# and #OUTPUT# if you use them.
 *   Rule 4. Add capsfilter or capssetter after src and before sink.
 *   This is for seasoned gstreamer/nnstreamer users who have some experiences in pipeline writing.
 */
int ml_service_server_open_queryserver_fulldesc (ml_service_server_h *h, const char *topic_name, const char * desc);


/**
 * @brief TBU / PUB/SUB AI Service
 * @detail
 * use "#OUTPUT#" unless you use fulldesc
 * don't rely on app threads (no appsink, appsrc, tensorsink or so on)
 */
int ml_service_server_open_publisher_static_tensors (ml_service_server_h *h, const char *topic_name, const char * desc, const ml_tensors_data_h out);
int ml_service_server_open_publisher_gstcaps (ml_service_server_h *h, const char *topic_name, const char * desc, const char *gstcap_out);
int ml_service_server_open_publisher_fulldesc (ml_service_server_h *h, const char *topic_name, const char * desc);


/**
 * @brief TBU / Client-side helpers
 * @detail
 *    Please use a pipeline for more efficient usage. This API is for testing or apps that can afford high-latency
 * @param [out] in Input tensors info. Set null if you don't need this info.
 * @param [out] out Output tensors info. Set null if you don't need this info.
 *    Note that we do not know if in/out is possible for remote clients, yet.
 */
int ml_service_client_open_query (ml_service_client_h *h, const char *topic_name, ml_tensors_info_h *in, ml_tensors_info_h *out);
int ml_service_client_open_subscriber (ml_service_client_h *h, const char *topic_name, ml_pipeline_sink_cb func, void *user_data);
int ml_service_client_query (ml_service_client_h h, const ml_tensors_data_h in, ml_tensors_data_h out);
int ml_service_client_close (ml_service_client_h h);

Use case #1

const gchar my_pipeline[] = "videotestsrc is-live=true ! videoconvert ! tensor_converter ! tensor_sink async=false";
gchar *pipeline;
int status;
ml_pipeline_h handle;

status = ml_service_set_pipeline ("my_pipeline", my_pipeline);
status = ml_service_get_pipeline ("my_pipeline", &pipeline);
status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
...

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions