GstInference/Example pipelines with hierarchical metadata/PC: Difference between revisions

From RidgeRun Developer Wiki
No edit summary
 
(14 intermediate revisions by the same user not shown)
Line 122: Line 122:


<div class="container">
<div class="container">
   <form action="/action_page.php">
   <form action="/action_page.php" id="gen_form">
    <div class="row">
      <div class="col-25">
        <label for="platform">Platform</label>
      </div>
      <div class="col-75">
        <select id="platform" name="platform" onchange="dynamic_platform_dropdown(this.options[this.selectedIndex].value)">
          <option value="" disabled selected>Select your platform</option>
          <option value="pc">PC</option>
          <option value="jetson">Jetson</option>
        </select>
      </div>
    </div>
     <div class="row">
     <div class="row">
       <div class="col-25">
       <div class="col-25">
Line 128: Line 140:
       </div>
       </div>
       <div class="col-75">
       <div class="col-75">
         <select id="backend" name="backend" onchange="backend_selection()">
         <select id="backend" name="backend" onchange="backend_selection(this.options[this.selectedIndex].value)">
           <option value="" disabled selected>Select your backend</option>
           <option value="" disabled selected>Select your backend</option>
          <option value="ncsdk">NCSDK</option>
           <option value="tensorflow">TensorFlow</option>
           <option value="tensorflow">TensorFlow</option>
           <option value="tflite">TFLite</option>
           <option value="tflite">TFLite</option>
Line 148: Line 159:
           <option value="inceptionv4">Inceptionv4</option>
           <option value="inceptionv4">Inceptionv4</option>
           <option value="mobilenetv2">MobileNetv2</option>
           <option value="mobilenetv2">MobileNetv2</option>
           <option value="resnet50v1">Resnet50v1</option>
           <option value="facenetv1">FaceNet</option>
           <option value="tinyyolov2">TinyYolov2</option>
           <option value="tinyyolov2">TinyYolov2</option>
          <option value="tinyyolov3">TinyYolov3</option>
          <option value="facenetv1">FaceNet</option>
         </select>
         </select>
       </div>
       </div>
Line 196: Line 205:
           <option value=" multifilesrc">Image file</option>  
           <option value=" multifilesrc">Image file</option>  
           <option value=" filesrc">Video file</option>
           <option value=" filesrc">Video file</option>
           <option value=" v4l2src">Camera stream</option>
           <option value=" v4l2src">Camera stream (v4l2)</option>
         </select>
         </select>
       </div>
       </div>
Line 211: Line 220:
           <option value="" disabled selected>Select your sink</option>
           <option value="" disabled selected>Select your sink</option>
           <option value=" fakesink" >fakesink</option>  
           <option value=" fakesink" >fakesink</option>  
           <option value=" videoconvert ! xvimagesink">xvimagesink</option>
           <option value=" videoconvert ! xvimagesink sync=false async=false qos=false">xvimagesink</option>
         </select>
         </select>
       </div>
       </div>
Line 232: Line 241:
       </div>
       </div>
       <div class="col-25">
       <div class="col-25">
         <input type="text" id="thickness" placeholder="thickness" disabled="true">
         <input type="text" id="thickness" placeholder="Thickness" disabled="true">
       </div>
       </div>
       <div class="col-25">
       <div class="col-25">
         <input type="text" id="fontscale" placeholder="fontscale" disabled="true">
         <input type="text" id="fontscale" placeholder="Fontscale" disabled="true">
       </div>
       </div>
       <div class="col-25">
       <div class="col-25">
Line 256: Line 265:
     </div>
     </div>
     <div class="row">
     <div class="row">
      <input type="reset" class="button" value="Reset"/>
    <button type="button" class="button" onclick="reset_all()">Reset</button>
     <button type="button" class="button" onclick="print()">Generate!</button>
     <button type="button" class="button" onclick="print()">Generate!</button>
     </div>
     </div>
Line 262: Line 271:
</div>
</div>


<!-- ****************************************************** -->
<!-- ********************** Variables and dicts ******************************** -->


<script>
<script>
Line 323: Line 332:
};
};


function backend_selection() {
/**********************************************************************
   // Default values from dictionary for Tensorflow models
* General
  if( document.getElementById("backend").value == "tensorflow") {
***********************************************************************/
    if( document.getElementById("model").value != "") {
function reset_all() {
      document.getElementById("inputlayer").value = input_layers[document.getElementById("model").value];
   document.getElementById("gen_form").reset();
       document.getElementById("outputlayer").value = output_layers[document.getElementById("model").value];
  backend = "";
  src = "";
  model = "";
  model_props = "";
  tee = "";
  filter = "";
  crop = "";
  overlay = "";
  sink = "";
  disable_element("filter_class_id");
}
 
function disable_element(element) {
  document.getElementById(element).disabled=true;
  document.getElementById(element).value=null;
}
 
function enable_element(element) {
  document.getElementById(element).disabled=false;
}
 
function search_option(child_id, label, parent, mode) {
  var done="false";
  var selectobject = document.getElementById(parent);
  for (var i=0; i<selectobject.length; i++) {
      if (selectobject.options[i].value == child_id) {
        if(mode == "remove") {
          selectobject.remove(i);
        }
        done="true";
       }
  }
  if (done =="false") {
    if (mode == "add") {
      var new_option = document.createElement("option");
      new_option.text = label;
      new_option.value = child_id;
      document.getElementById(parent).appendChild(new_option);
     }
     }
    document.getElementById("inputlayer").disabled=false;
    document.getElementById("outputlayer").disabled=false;
   }
   }
   else {
}
     document.getElementById("inputlayer").disabled=true;
 
    document.getElementById("inputlayer").value=null;
/**********************************************************************
    document.getElementById("outputlayer").disabled=true;
* Elements selection
    document.getElementById("outputlayer").value=null;
***********************************************************************/
function dynamic_platform_dropdown(platform) {
  reset_all();
  document.getElementById("platform").value = platform;
    
  if (platform == "pc") {
    search_option("ncsdk","NCSDK","backend","add");
    search_option(" nvarguscamerasrc","nvarguscamerasrc","source","remove");
    search_option(" videoconvert ! 'video/x-raw,format=I420' ! nvvidconv ! nvoverlaysink","nvoverlaysink","sink","remove");
  } else {
     search_option("ncsdk","NCSDK","backend","remove");
    search_option(" nvarguscamerasrc","nvarguscamerasrc","source","add");
    search_option(" videoconvert ! 'video/x-raw,format=I420' ! nvvidconv ! nvoverlaysink","nvoverlaysink","sink","add");
  }
}
 
function backend_selection(backend) {
  var option_rn = document.createElement("option");
 
  switch (backend)
  {
    case "tensorflow" :
      search_option("tinyyolov3","TinyYolov3","model","add");
      search_option("resnet50v1","Resnet50V1","model","add");
      if( document.getElementById("model").value != "") {
        document.getElementById("inputlayer").value = input_layers[document.getElementById("model").value];
        document.getElementById("outputlayer").value = output_layers[document.getElementById("model").value];
      }
      enable_element("inputlayer");
      enable_element("outputlayer");
      break;
    case "tflite" :
      search_option("tinyyolov3","TinyYolov3","model","add");
      search_option("resnet50v1","Resnet50V1","model","add");
      disable_element("inputlayer");
      disable_element("outputlayer");
      break;
    case "ncsdk":
      search_option("tinyyolov3","TinyYolov3","model","remove");
      search_option("resnet50v1","Resnet50V1","model","remove");
      disable_element("inputlayer");
      disable_element("outputlayer");
      break;
   }
   }
}
}
Line 353: Line 439:
   crop = " inferencecrop aspect-ratio=" + document.getElementById("aspect_ratio").value + " ! ";
   crop = " inferencecrop aspect-ratio=" + document.getElementById("aspect_ratio").value + " ! ";
}
}
function model_props_selection() {
  if (model != "") {
    model_props = " name=net model-location=" + document.getElementById("model_location").value + " backend=" + document.getElementById("backend").value + " labels=\"$(cat " +document.getElementById("labels").value + ")\"";
    if (backend == "tensorflow") {
      model_props = model_props + " backend::input-layer=" + document.getElementById("inputlayer").value + " backend::output-layer=" + document.getElementById("outputlayer").value;
    }
  } else {
    model_props = "";
  }
}
// TODO: modify for platform
function tee_selection() {
  if (model != "") {
    switch (platform) {
      case "jetson":
        tee = " tee name=t t. ! nvvidconv !  queue ! net.sink_model t. ! nvvidconv !  video/x-raw,format=RGBA ! queue ! net.sink_bypass net.src_model";
      break;
      case "pc":
        tee = " tee name=t t. ! queue ! videoconvert ! videoscale !  net.sink_model t. ! queue ! videoconvert ! net.sink_bypass  net.src_model !";
      break;
      default:
        tee = "";
      break;
    }
  } else {
    tee = "";
  }
}
function jetson_src_selection() {
  switch(src) {
    case " multifilesrc":
      src = src + " location=" + document.getElementById("source_location").value + " start-index=0 stop-index=0 loop=true ! jpegparse ! nvjpegdec ! 'video/x-raw' ! nvvidconv ! 'video/x-raw(memory:NVMM),format=NV12' ! nvvidconv ! queue !";
    break;
    case " filesrc":
      src = src + " location=" + document.getElementById("source_location").value + " qtdemux name=demux ! h264parse ! omxh264dec ! nvvidconv ! queue !";
    break;
    case " v4l2src":
      src = src + " device=" + document.getElementById("source_location").value + " ! nvvidconv ! queue !";
    break;
    case " nvarguscamerasrc":
      src = src + " sensor-id=0 ! 'video/x-raw(memory:NVMM), format=(string)NV12' ! nvvidconv ! queue !";
    break;
    default:
      src = "";
    break;
  }
}
function pc_src_selection() {
  switch(src) {
    case " multifilesrc":
      src = src + " location=" + document.getElementById("source_location").value + " start-index=0 stop-index=0 loop=true ! jpegparse ! jpegdec ! videoconvert ! videoscale ! queue !";
    break;
    case " filesrc":
      src = src + " location=" + document.getElementById("source_location").value + " ! decodebin ! videoconvert ! videoscale ! queue !";
    break;
    case " v4l2src":
      src = src + " device=" + document.getElementById("source_location").value + " ! videoconvert ! videoscale ! queue !";
    break;
    default:
      src = "";
    break;
  }
}
function src_props_selection() {
  switch(platform) {
    case "pc":
      pc_src_selection();
    break;
    case "jetson":
      jetson_src_selection();
    break;
  }
}
/**********************************************************************
* Optional utilities - enable
***********************************************************************/


function enable_overlay() {     
function enable_overlay() {     
   var checkbox = document.getElementById('en_inference_overlay');
   var checkbox = document.getElementById('en_inference_overlay');
   if(checkbox.checked == true) {
   if(checkbox.checked == true) {
     document.getElementById("thickness").disabled=false;
     enable_element("thickness");
     document.getElementById("style").disabled=false;
     enable_element("fontscale");
     document.getElementById("fontscale").disabled=false;
     enable_element("style");
     overlay = " inferenceoverlay";
     overlay = " fakesink net.src_bypass ! queue ! inferenceoverlay !";
   } else {
   } else {
     document.getElementById("thickness").disabled=true;
     disable_element("thickness");
     document.getElementById("style").disabled=true;
     disable_element("fontscale");
    document.getElementById("fontscale").disabled=true;
     disable_element("style");
    document.getElementById("thickness").value = null;
     document.getElementById("style").value = null;
    document.getElementById("fontscale").value = null;
     overlay = "";
     overlay = "";
   }
   }
Line 375: Line 542:
   var checkbox = document.getElementById('en_inferencefilter');
   var checkbox = document.getElementById('en_inferencefilter');
   if(checkbox.checked == true) {
   if(checkbox.checked == true) {
     document.getElementById("filter_class_id").disabled=false;
     enable_element("filter_class_id");
     filter = " inferencefilter";
     filter = " inferencefilter";
   } else {
   } else {
     document.getElementById("filter_class_id").disabled=true;
     disable_element("filter_class_id");
     filter = "";
     filter = "";
    document.getElementById("filter_class_id").value = null;
   }
   }
}
}
Line 387: Line 553:
   var checkbox = document.getElementById('en_inferencecrop');
   var checkbox = document.getElementById('en_inferencecrop');
   if(checkbox.checked == true) {
   if(checkbox.checked == true) {
     document.getElementById("aspect_ratio").disabled=false;
     enable_element("aspect_ratio");
     crop = " inferencecrop";
     crop = " inferencecrop";
   } else {
   } else {
     document.getElementById("aspect_ratio").disabled=true;
     disable_element("aspect_ratio");
     crop = "";
     crop = "";
    document.getElementById("aspect_ratio").value = null;
   }
   }
}
}
/**********************************************************************
* print final pipeline
***********************************************************************/


function print() {
function print() {
  platform = document.getElementById("platform").value;
  backend = document.getElementById("backend").value;
   model = document.getElementById("model").value;
   model = document.getElementById("model").value;
   src = document.getElementById("source").value;
   src = document.getElementById("source").value;
Line 402: Line 573:
    
    
   if(model != "") {
   if(model != "") {
     model_props = " name=net model-location=" + document.getElementById("model_location").value +" backend=" + document.getElementById("backend").value + " backend::input-layer=" + document.getElementById("inputlayer").value  + " labels=\"$(cat " +document.getElementById("labels").value + ")\" backend::output-layer=" + document.getElementById("outputlayer").value;
     model_props_selection();
    tee = " tee name=t t. ! queue ! videoconvert ! videoscale ! net.sink_model t. ! queue ! videoconvert ! net.sink_bypass  net.src_model !";
  }
 
  if(src != "") {
  tee_selection();
  src_props_selection();   
   }
   }


  switch(src) {
    case " multifilesrc":
      src = src + " location=" + document.getElementById("source_location").value + " start-index=0 stop-index=0 loop=true ! jpegparse ! jpegdec ! videoconvert ! videoscale ! queue !";
      break;
    case " filesrc":
      src = src + " location=" + document.getElementById("source_location").value + " ! decodebin ! videoconvert ! videoscale ! queue !";
      break;
    case " v4l2src":
      src = src + " device=" + document.getElementById("source_location").value + " ! videoconvert ! videoscale ! queue !";
      break;
    default:
      src = "";
  }


   if(overlay != "") {
   if(overlay != "") {
     overlay = " inferenceoverlay";
     overlay = " fakesink net.src_bypass ! queue ! inferenceoverlay !";
     var thickness= document.getElementById("thickness").value;
     var thickness= document.getElementById("thickness").value;
     var fontscale=document.getElementById("fontscale").value;
     var fontscale=document.getElementById("fontscale").value;
Line 436: Line 598:
     }
     }
     overlay = overlay + " !";
     overlay = overlay + " !";
   }
   }  
   
   
   if(filter != "") {
   if(filter != "") {
Line 445: Line 607:
       filter = filter + " !";
       filter = filter + " !";
     }
     }
   }
   }  
      
      
   if(crop != "") {
   if(crop != "") {
Line 454: Line 616:
       crop = crop + " !";
       crop = crop + " !";
     }
     }
   }
   }  
 
   document.getElementById("new_pipeline").value = "gst-launch-1.0 " + model + model_props + src + tee + filter + crop + overlay + sink;  
   document.getElementById("new_pipeline").value = "gst-launch-1.0 " + model + model_props + src + tee + filter + crop + overlay + sink;  
}
}
Line 464: Line 625:
</body>
</body>
</html>
</html>


= Advanced pipelines =
= Advanced pipelines =

Latest revision as of 16:32, 13 March 2020




Previous: Example pipelines Index Next: Example pipelines/NANO




Sample pipelines

The following section contains a tool for generating simple GStreamer pipelines with one model of a selected architecture using our hierarchical inference metadata. If you are using and older version, you chan check the legacy pipelines section. Please make sure to check the documentation to understand the property usage for each element.

The required elements are:

  • Backend
  • Model
  • Model location
  • Labels
  • Source
  • Sink

The optional elements include:

  • inferencefilter
  • inferencrop
  • inferenceoverlay
Detection with new metadata

Pipeline generator

The following tool will provide simple pipelines according to the selected elements.

Optional utilites

The following elements are optional yet very useful. Check the documentation for more details on their properties.


Advanced pipelines

Previous: Example pipelines Index Next: Example pipelines/NANO