From 52888d5ae1604a4bd802b6746d052d83bdedcb32 Mon Sep 17 00:00:00 2001
From: toshan-luktuke
Date: Fri, 26 Aug 2022 21:20:50 +0530
Subject: [PATCH] Change location of files
---
blockDocs/Blocks/Blur.html | 16 +
blockDocs/search.js | 46 ---
{Blocks => docs/Blocks}/Blur.py | 6 +
{Blocks => docs/Blocks}/Camera.py | 6 +
{Blocks => docs/Blocks}/ColorFilter.py | 6 +
{Blocks => docs/Blocks}/ContourDetector.py | 6 +
{Blocks => docs/Blocks}/Cropper.py | 6 +
{Blocks => docs/Blocks}/Dilation.py | 6 +
{Blocks => docs/Blocks}/EdgeDetector.py | 6 +
{Blocks => docs/Blocks}/Erosion.py | 6 +
{Blocks => docs/Blocks}/FaceDetector.py | 6 +
{Blocks => docs/Blocks}/IMU.py | 8 +-
{Blocks => docs/Blocks}/ImageRead.py | 6 +
{Blocks => docs/Blocks}/MotorDriver.py | 6 +
{Blocks => docs/Blocks}/ObjectDetector.py | 6 +
{Blocks => docs/Blocks}/Odometer.py | 6 +
{Blocks => docs/Blocks}/PID.py | 6 +
{Blocks => docs/Blocks}/ROSCamera.py | 6 +
{Blocks => docs/Blocks}/Screen.py | 6 +
{Blocks => docs/Blocks}/Teleoperator.py | 6 +
{Blocks => docs/Blocks}/Threshold.py | 6 +
{Blocks => docs/Blocks}/VideoStreamer.py | 6 +
{Blocks => docs/Blocks}/__init__.py | 0
{Blocks => docs/Blocks}/module.html.jinja2 | 2 +-
{Blocks => docs/Blocks}/utils/__init__.py | 0
.../Blocks}/utils/models/__init__.py | 0
.../haarcascade_frontalface_default.xml | 0
.../utils/models/yolov3/yolov3-tiny.cfg | 0
.../utils/models/yolov3/yolov3-tiny.weights | Bin
.../Blocks}/utils/models/yolov3/yolov3.txt | 0
docs/_pages/documentation.md | 3 +
{blockDocs => docs/blockDocs}/Blocks.html | 90 ++--
docs/blockDocs/Blocks/Blur.html | 390 ++++++++++++++++++
.../blockDocs}/Blocks/Camera.html | 102 +++--
.../blockDocs}/Blocks/ColorFilter.html | 98 +++--
.../blockDocs}/Blocks/ContourDetector.html | 150 ++++---
.../blockDocs}/Blocks/Cropper.html | 94 +++--
.../blockDocs}/Blocks/Dilation.html | 102 +++--
.../blockDocs}/Blocks/EdgeDetector.html | 98 +++--
.../blockDocs}/Blocks/Erosion.html | 102 +++--
.../blockDocs}/Blocks/FaceDetector.html | 148 ++++---
{blockDocs => docs/blockDocs}/Blocks/IMU.html | 96 +++--
.../blockDocs}/Blocks/ImageRead.html | 72 ++--
.../blockDocs}/Blocks/MotorDriver.html | 128 +++---
.../blockDocs}/Blocks/Odometer.html | 78 ++--
{blockDocs => docs/blockDocs}/Blocks/PID.html | 152 ++++---
.../blockDocs}/Blocks/ROSCamera.html | 86 ++--
.../blockDocs}/Blocks/Screen.html | 78 ++--
.../blockDocs}/Blocks/Teleoperator.html | 130 +++---
.../blockDocs}/Blocks/Threshold.html | 102 +++--
.../blockDocs}/Blocks/VideoStreamer.html | 90 ++--
.../blockDocs}/Blocks/utils.html | 0
.../blockDocs}/Blocks/utils/models.html | 0
docs/blockDocs/assets/blur-usage.png | Bin 0 -> 80689 bytes
docs/blockDocs/assets/bulr-usage.png | Bin 0 -> 18897 bytes
docs/blockDocs/assets/lenna-blur.png | Bin 0 -> 71425 bytes
docs/blockDocs/assets/lenna.png | Bin 0 -> 102441 bytes
{blockDocs => docs/blockDocs}/index.html | 0
docs/blockDocs/search.js | 46 +++
.../blocks/basic/code/code-widget.tsx | 2 +-
60 files changed, 1733 insertions(+), 890 deletions(-)
delete mode 100644 blockDocs/search.js
rename {Blocks => docs/Blocks}/Blur.py (94%)
rename {Blocks => docs/Blocks}/Camera.py (92%)
rename {Blocks => docs/Blocks}/ColorFilter.py (93%)
rename {Blocks => docs/Blocks}/ContourDetector.py (94%)
rename {Blocks => docs/Blocks}/Cropper.py (92%)
rename {Blocks => docs/Blocks}/Dilation.py (93%)
rename {Blocks => docs/Blocks}/EdgeDetector.py (90%)
rename {Blocks => docs/Blocks}/Erosion.py (92%)
rename {Blocks => docs/Blocks}/FaceDetector.py (90%)
rename {Blocks => docs/Blocks}/IMU.py (90%)
rename {Blocks => docs/Blocks}/ImageRead.py (89%)
rename {Blocks => docs/Blocks}/MotorDriver.py (93%)
rename {Blocks => docs/Blocks}/ObjectDetector.py (96%)
rename {Blocks => docs/Blocks}/Odometer.py (92%)
rename {Blocks => docs/Blocks}/PID.py (91%)
rename {Blocks => docs/Blocks}/ROSCamera.py (93%)
rename {Blocks => docs/Blocks}/Screen.py (88%)
rename {Blocks => docs/Blocks}/Teleoperator.py (88%)
rename {Blocks => docs/Blocks}/Threshold.py (91%)
rename {Blocks => docs/Blocks}/VideoStreamer.py (91%)
rename {Blocks => docs/Blocks}/__init__.py (100%)
rename {Blocks => docs/Blocks}/module.html.jinja2 (99%)
rename {Blocks => docs/Blocks}/utils/__init__.py (100%)
rename {Blocks => docs/Blocks}/utils/models/__init__.py (100%)
rename {Blocks => docs/Blocks}/utils/models/haar_cascade/haarcascade_frontalface_default.xml (100%)
rename {Blocks => docs/Blocks}/utils/models/yolov3/yolov3-tiny.cfg (100%)
rename {Blocks => docs/Blocks}/utils/models/yolov3/yolov3-tiny.weights (100%)
rename {Blocks => docs/Blocks}/utils/models/yolov3/yolov3.txt (100%)
rename {blockDocs => docs/blockDocs}/Blocks.html (89%)
create mode 100644 docs/blockDocs/Blocks/Blur.html
rename {blockDocs => docs/blockDocs}/Blocks/Camera.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/ColorFilter.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/ContourDetector.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/Cropper.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/Dilation.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/EdgeDetector.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/Erosion.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/FaceDetector.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/IMU.html (96%)
rename {blockDocs => docs/blockDocs}/Blocks/ImageRead.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/MotorDriver.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/Odometer.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/PID.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/ROSCamera.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/Screen.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/Teleoperator.html (94%)
rename {blockDocs => docs/blockDocs}/Blocks/Threshold.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/VideoStreamer.html (95%)
rename {blockDocs => docs/blockDocs}/Blocks/utils.html (100%)
rename {blockDocs => docs/blockDocs}/Blocks/utils/models.html (100%)
create mode 100644 docs/blockDocs/assets/blur-usage.png
create mode 100644 docs/blockDocs/assets/bulr-usage.png
create mode 100644 docs/blockDocs/assets/lenna-blur.png
create mode 100644 docs/blockDocs/assets/lenna.png
rename {blockDocs => docs/blockDocs}/index.html (100%)
create mode 100644 docs/blockDocs/search.js
diff --git a/blockDocs/Blocks/Blur.html b/blockDocs/Blocks/Blur.html
index 55d399f7..826a3c56 100644
--- a/blockDocs/Blocks/Blur.html
+++ b/blockDocs/Blocks/Blur.html
@@ -168,6 +168,22 @@ Block Description
Outputs the blurred image through the share_image()
function
+
+
+
Example Usage
+
+
Output
+
+
+ Normal
+ After Median Blur
+
+
+
+
+
+
+
diff --git a/blockDocs/search.js b/blockDocs/search.js
deleted file mode 100644
index 356dbad1..00000000
--- a/blockDocs/search.js
+++ /dev/null
@@ -1,46 +0,0 @@
-window.pdocSearch = (function(){
-/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o\n\n
\n\nVisual Circuit \n\n \n \n \n \n
\n\nVisual Circuit is an open source tool to develop robotic applications. It aims to make developing applications for ROS and Gazebo simple and user friendly by its intuitive block-based interface. Users have the ablity to drag and drop blocks to develop their logic. Users are also able to build completely custom blocks as well as edit code in the existing blocks, this makes Visual Circuit a robust and powerful tool to develop even complicated applications.
\n\nFor more information visit our site VisualCircuit
\n\nSetup \n\nFront-end \n\nFor more specific instructions check the frontend readme
\n\n\nClone the repository https://github.com/JdeRobot/VisualCircuit.git \nChange directory to frontend
\nRun npm install
\nRun npm start
\nOpen http://localhost:3000/ in browser. \n \n\nBack-end \n\nFor more specific instructions check the backend readme
\n\n\nClone the repository https://github.com/JdeRobot/VisualCircuit.git \nChange directory to backend
\nCreate a Python3 virtual environment using venv. \nFor eg. python -m venv .venv
\nAfter activating the virtual environment, install the dependencies by running\npip install -r requirements.txt
\nAdd .env
file to the backend
folder. And add the variables as defined in .env.template \nCreate the static files to serve during execution by python manage.py collectstatic
\nStart the server by running python manage.py runserver 8000
\n \n\n\n\nContributing \n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated . For more info on how to design a block, refer to this link
\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!
\n\n\nFork the Project \nCreate your Feature Branch (git checkout -b feature/AmazingFeature
) \nCommit your Changes (git commit -m 'Add some AmazingFeature'
) \nPush to the Branch (git push origin feature/AmazingFeature
) \nOpen a Pull Request \n \n\n\n
\n"}, "Blocks.Blur": {"fullname": "Blocks.Blur", "modulename": "Blocks.Blur", "type": "module", "doc": "
\n"}, "Blocks.Blur.main": {"fullname": "Blocks.Blur.main", "modulename": "Blocks.Blur", "qualname": "main", "type": "function", "doc": "Blurs an Object \n\nThe object to be blurred is read through the inputs.\nWe have multiple available blurs including Gaussian, Averaging and Median Blur. \nWe can change these blurs by changing the name given in the parameter block
\n\nwhile
loop is the part of the program that is executed continuously.\nIt is enabled by default but can be disabled by passing in 0 through the enable wire.
\n\nOutputs the blurred image through the share_image()
function
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Camera": {"fullname": "Blocks.Camera", "modulename": "Blocks.Camera", "type": "module", "doc": "
\n"}, "Blocks.Camera.main": {"fullname": "Blocks.Camera.main", "modulename": "Blocks.Camera", "qualname": "main", "type": "function", "doc": "Opens your Camera using OpenCV \n\nThe Camera block opens your webcam using OpenCV and begins capturing the video feed.\nThis video feed is then propagated forward through the share_image()
function
\n\nwhile
loop is the part of the program that is executed continuously.\nIt is enabled by default but can be disabled by passing in 0 through the enable wire.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.ColorFilter": {"fullname": "Blocks.ColorFilter", "modulename": "Blocks.ColorFilter", "type": "module", "doc": "
\n"}, "Blocks.ColorFilter.main": {"fullname": "Blocks.ColorFilter.main", "modulename": "Blocks.ColorFilter", "qualname": "main", "type": "function", "doc": "Filters Colour according to given parameters \n\nThe image to be filtered is read through the inputs.\nWe can give a Filter between any HSV range by changing the range of the parameters LowerRGB and UpperRGB.
\n\nwhile
loop is the part of the program that is executed continuously.\nIt is enabled by default but can be disabled by passing in 0 through the enable wire .
\n\nHere the image is tranformed from BGR
to HSV
and then the filter is applied through the cv2.inRange()
\nfunction. Finally the filtered image is overlayed on the orignal by the means of the\ncv2.bitwise_and()
function. This filtered image is then shared through the share_image()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.ContourDetector": {"fullname": "Blocks.ContourDetector", "modulename": "Blocks.ContourDetector", "type": "module", "doc": "
\n"}, "Blocks.ContourDetector.main": {"fullname": "Blocks.ContourDetector.main", "modulename": "Blocks.ContourDetector", "qualname": "main", "type": "function", "doc": "Detects Contours in an Image \n\nThe image in which contours are to be detected is read through the inputs.\nFirst the image is converted from BGR
to Grayscale
, the thresholding values are 60, 255
.\nThe function used is cv2.threshold()
.\nOnce it is thersholded, the contours are detected in the image using cv2.findContours()
\n\nThe program then detects the biggest contour present in the image and finds the co-ordinates of its center\nusing the cv2.moments()
function.
\n\nThis co-ords of the center alongwith the contour characteristics are part of the output array.\nTHis array is shared through share_array()
\n\nwhile
loop is the part of the program that is executed continuously.\nIt is enabled by default but can be disabled by passing in 0 through the enable wire.
\n\nFurther reading
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Cropper": {"fullname": "Blocks.Cropper", "modulename": "Blocks.Cropper", "type": "module", "doc": "
\n"}, "Blocks.Cropper.main": {"fullname": "Blocks.Cropper.main", "modulename": "Blocks.Cropper", "qualname": "main", "type": "function", "doc": "Crops an Image \n\nThe image which is to be cropped is read through the inputs using the inputs.read_image()
function.\nThe parameters ask for x , y , w , h
\n\nx: x co-ordinate of where the crop should start\n\ny: y co-ordinate of where the crop should start\n\nw: width of the crop\n\nh: height of the crop\n\n
\n\nImage is cropped by simple list slicing.
\n\nwhile
loop is the part of the program that is executed continuously.\nIt is enabled by default but can be disabled by passing in 0 through the enable wire.\nOutput is shared via share_image()
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Dilation": {"fullname": "Blocks.Dilation", "modulename": "Blocks.Dilation", "type": "module", "doc": "
\n"}, "Blocks.Dilation.main": {"fullname": "Blocks.Dilation.main", "modulename": "Blocks.Dilation", "qualname": "main", "type": "function", "doc": "Dilates an Image \n\nYou can specify the kernel dimensions and number of iterations in the parameters.
\n\nWe first convert the colour of the image from BGR
to GRAY
then we apply dilation on it \nusing the cv2.dilate()
function.
\n\nFinaly we convert from GRAY
back to BGR
and output the image through the share_image()
function.
\n\nFurther reading
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.EdgeDetector": {"fullname": "Blocks.EdgeDetector", "modulename": "Blocks.EdgeDetector", "type": "module", "doc": "
\n"}, "Blocks.EdgeDetector.main": {"fullname": "Blocks.EdgeDetector.main", "modulename": "Blocks.EdgeDetector", "qualname": "main", "type": "function", "doc": "Detects Edges in an Image \n\nIt takes in two parameters Lower
and Upper
. These parameters are used as the limits in Canny Edge \nDetection. First we convert the input BGR
image to GRAY
. Next we apply Canny Edge Detection via the \ncv2.Canny()
function. The resulting image is then converted back to BGR
.
\n\nThis image is then shared to the wire via the share_image()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Erosion": {"fullname": "Blocks.Erosion", "modulename": "Blocks.Erosion", "type": "module", "doc": "
\n"}, "Blocks.Erosion.main": {"fullname": "Blocks.Erosion.main", "modulename": "Blocks.Erosion", "qualname": "main", "type": "function", "doc": "Erodes an Image \n\nYou can specify the kernel dimensions and number of iterations in the parameters.
\n\nWe first convert the colour of the image from BGR
to GRAY
then we apply erosion on it \nusing the cv2.erode()
function.
\n\nFinaly we convert from GRAY
back to BGR
and output the image through the share_image()
function.
\n\nFurther reading
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.FaceDetector": {"fullname": "Blocks.FaceDetector", "modulename": "Blocks.FaceDetector", "type": "module", "doc": "
\n"}, "Blocks.FaceDetector.main": {"fullname": "Blocks.FaceDetector.main", "modulename": "Blocks.FaceDetector", "qualname": "main", "type": "function", "doc": "Detects Faces in the Image \n\nThis block applies a Harr Cascade based model on the input image. \nIt takes as an input the parameter BoxOrImage
. This parameter has two possible values:\nBoxOrImage: image / box
\n\nIf image
is given: The output is the image passed in with a bounding box around the area where \na face is detected. Image is shared through the share_image()
function.
\n\nElse if box
is given, the output is the co-ordinates of the bounding box in the form of an array. It \nis chared through the share_array()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.IMU": {"fullname": "Blocks.IMU", "modulename": "Blocks.IMU", "type": "module", "doc": "
\n"}, "Blocks.IMU.callback": {"fullname": "Blocks.IMU.callback", "modulename": "Blocks.IMU", "qualname": "callback", "type": "function", "doc": "The callback function is required by the Subscriber to the ROSTopic. This callback function reads the orientation list from the IMU\nIt then converts the quaternion angles to euler ones. This gives us the roll, pitch and yaw of the body.\nWe convert these radian values to degrees to get the orientation of the body.
\n\nAside from these values the IMU also gives us the angular velocity of the body.
\n\nAll of these values are stored in the global data variable of the block.
\n", "signature": "(msg)", "funcdef": "def"}, "Blocks.IMU.main": {"fullname": "Blocks.IMU.main", "modulename": "Blocks.IMU", "qualname": "main", "type": "function", "doc": "Reads IMU sensor data \n\nThis is a specialized block used to read IMU sensor data.
\n\nIt reads the ROSTopic name from the ROSTopic
parameter. Default is mavros/imu/data
.
\n\nThis data is sent to the callback function which converts the orientation list obtained into roll, pitch and yaw for the\nrobot that the IMU is present on. Alongwith orientation, it also gives the angular velocity of the robot.\nThis data is shared in the form of an array using the share_array()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.ImageRead": {"fullname": "Blocks.ImageRead", "modulename": "Blocks.ImageRead", "type": "module", "doc": "
\n"}, "Blocks.ImageRead.main": {"fullname": "Blocks.ImageRead.main", "modulename": "Blocks.ImageRead", "qualname": "main", "type": "function", "doc": "Reads an Image from a Specified Path \n\nThis box reads an image from a given file path. The path to be specified is written in the parameter\nImagePath
.
\n\nIt is read through the cv2.imread()
function and shared through the share_image()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.MotorDriver": {"fullname": "Blocks.MotorDriver", "modulename": "Blocks.MotorDriver", "type": "module", "doc": "
\n"}, "Blocks.MotorDriver.callback": {"fullname": "Blocks.MotorDriver.callback", "modulename": "Blocks.MotorDriver", "qualname": "callback", "type": "function", "doc": "
\n", "signature": "(inp)", "funcdef": "def"}, "Blocks.MotorDriver.main": {"fullname": "Blocks.MotorDriver.main", "modulename": "Blocks.MotorDriver", "qualname": "main", "type": "function", "doc": "Publishes Twist Command to drive Motors \n\nIt publishes to the ROSTopic name from the ROSTopic
parameter. Default is /robot/cmd_vel
.
\n\nIt reads an array as an input by the read_array()
function.
\n\nThis is assumed to be of the format [ linear_velocity, angular_velocity ]
.
\n\nThis data is then converted into a Twist() message with the linear.x = linear_velocity
and angular.z = angular_velocity
\n\nThe data is then published continuously
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Odometer": {"fullname": "Blocks.Odometer", "modulename": "Blocks.Odometer", "type": "module", "doc": "
\n"}, "Blocks.Odometer.callback": {"fullname": "Blocks.Odometer.callback", "modulename": "Blocks.Odometer", "qualname": "callback", "type": "function", "doc": "
\n", "signature": "(msg)", "funcdef": "def"}, "Blocks.Odometer.main": {"fullname": "Blocks.Odometer.main", "modulename": "Blocks.Odometer", "qualname": "main", "type": "function", "doc": "Reads Data from An Odometer \n\nIt reads the ROSTopic name from the ROSTopic
parameter.\nIt then initializes a Subscriber to subscribe to that ROSTopic, once the data is obtained through the callback\nfunction, it is formatted into an array with the format: [ x, y, yaw ]
\n\nThis data is then shared to the wire using the share_array()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.PID": {"fullname": "Blocks.PID", "modulename": "Blocks.PID", "type": "module", "doc": "
\n"}, "Blocks.PID.main": {"fullname": "Blocks.PID.main", "modulename": "Blocks.PID", "qualname": "main", "type": "function", "doc": "Applies PID for a Given Error Value \n\nThe error is read as an input from the inputs wire
.
\n\nThe Kp, Ki, and Kd parameters are read from the parameters of the same name.\nOnce there it applies the PID technique to the error variable in order to minimize it.
\n\nThe resulting values are shared through the share_array()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.ROSCamera": {"fullname": "Blocks.ROSCamera", "modulename": "Blocks.ROSCamera", "type": "module", "doc": "
\n"}, "Blocks.ROSCamera.callback": {"fullname": "Blocks.ROSCamera.callback", "modulename": "Blocks.ROSCamera", "qualname": "callback", "type": "function", "doc": "
\n", "signature": "(msg)", "funcdef": "def"}, "Blocks.ROSCamera.main": {"fullname": "Blocks.ROSCamera.main", "modulename": "Blocks.ROSCamera", "qualname": "main", "type": "function", "doc": "Gets Image from a ROSCamera \n\nThe camera topic is read from the ROSTopic
parameter, by default it is /robot/camera
\n\nThe image message is converted to OpenCV compatible format via the imgmsg_to_cv2()
function.
\n\nThis is then shared ahead using the share_image()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Screen": {"fullname": "Blocks.Screen", "modulename": "Blocks.Screen", "type": "module", "doc": "
\n"}, "Blocks.Screen.main": {"fullname": "Blocks.Screen.main", "modulename": "Blocks.Screen", "qualname": "main", "type": "function", "doc": "Displays the given Image \n\nTakes an image as an input and displays it on the user's screen.\nThe cv2.imshow()
function is used in order to display the image.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Teleoperator": {"fullname": "Blocks.Teleoperator", "modulename": "Blocks.Teleoperator", "type": "module", "doc": "
\n"}, "Blocks.Teleoperator.main": {"fullname": "Blocks.Teleoperator.main", "modulename": "Blocks.Teleoperator", "qualname": "main", "type": "function", "doc": "Used to Imitate the Movements of the Operator \n\nIt takes in an array as input, depending on the array variables, it will output another array\ncontaining the velocity it deems appropriate.\nThe linear_velocity can be given via the Linear
parameter.
\n\nThe output data is a list of the format: [ linear_velocity, angular_velocity ]
\n\nThis is then shared to the output wire using the share_array()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.Threshold": {"fullname": "Blocks.Threshold", "modulename": "Blocks.Threshold", "type": "module", "doc": "
\n"}, "Blocks.Threshold.main": {"fullname": "Blocks.Threshold.main", "modulename": "Blocks.Threshold", "qualname": "main", "type": "function", "doc": "Thresholds an Image \n\nTHis block reads the parameters LowerThreshold
and UpperThreshold
.
\n\nBased on these values it converts the input image form BGR
into GRAY
and applies the cv2.threshold()
function on it.
\n\nThe image is then converted back into BGR
and shared to the output wire using the\nshare_image()
function.
\n\nFurther reading
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.VideoStreamer": {"fullname": "Blocks.VideoStreamer", "modulename": "Blocks.VideoStreamer", "type": "module", "doc": "
\n"}, "Blocks.VideoStreamer.main": {"fullname": "Blocks.VideoStreamer.main", "modulename": "Blocks.VideoStreamer", "qualname": "main", "type": "function", "doc": "Streams Video from File \n\nThe filepath of your video is given in the PathToFile
parameter.\nNote: that this file path is relative to the modules
folder of the final built application.
\n\nCapturing begins using the cv2.VideoCapture()
function. \nThe video is then read frame by frame and each frame is shared to the output wire using the\nshare_image()
function.
\n", "signature": "(inputs, outputs, parameters, synchronise)", "funcdef": "def"}, "Blocks.utils": {"fullname": "Blocks.utils", "modulename": "Blocks.utils", "type": "module", "doc": "
\n"}, "Blocks.utils.models": {"fullname": "Blocks.utils.models", "modulename": "Blocks.utils.models", "type": "module", "doc": "
\n"}}, "docInfo": {"Blocks": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 484}, "Blocks.Blur": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Blur.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 90}, "Blocks.Camera": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Camera.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 72}, "Blocks.ColorFilter": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.ColorFilter.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 139}, "Blocks.ContourDetector": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.ContourDetector.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 168}, "Blocks.Cropper": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Cropper.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 131}, "Blocks.Dilation": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Dilation.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 87}, "Blocks.EdgeDetector": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.EdgeDetector.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 90}, "Blocks.Erosion": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Erosion.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 87}, "Blocks.FaceDetector": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.FaceDetector.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 119}, "Blocks.IMU": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.IMU.callback": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 3, "bases": 0, "doc": 93}, "Blocks.IMU.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 99}, "Blocks.ImageRead": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.ImageRead.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 59}, "Blocks.MotorDriver": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.MotorDriver.callback": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 3, "bases": 0, "doc": 3}, "Blocks.MotorDriver.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 100}, "Blocks.Odometer": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Odometer.callback": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 3, "bases": 0, "doc": 3}, "Blocks.Odometer.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 74}, "Blocks.PID": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.PID.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 75}, "Blocks.ROSCamera": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.ROSCamera.callback": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 3, "bases": 0, "doc": 3}, "Blocks.ROSCamera.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 64}, "Blocks.Screen": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Screen.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 38}, "Blocks.Teleoperator": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Teleoperator.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 86}, "Blocks.Threshold": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.Threshold.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 84}, "Blocks.VideoStreamer": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.VideoStreamer.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 6, "bases": 0, "doc": 80}, "Blocks.utils": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "Blocks.utils.models": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}}, "length": 45, "save": true}, "index": {"qualname": {"root": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.MotorDriver.callback": {"tf": 1}, "Blocks.Odometer.callback": {"tf": 1}, "Blocks.ROSCamera.callback": {"tf": 1}}, "df": 4}}}}}}}}}}, "fullname": {"root": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}, "Blocks.Blur": {"tf": 1}, "Blocks.Blur.main": {"tf": 1}, "Blocks.Camera": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver": {"tf": 1}, "Blocks.MotorDriver.callback": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer": {"tf": 1}, "Blocks.Odometer.callback": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera": {"tf": 1}, "Blocks.ROSCamera.callback": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}, "Blocks.utils": {"tf": 1}, "Blocks.utils.models": {"tf": 1}}, "df": 45}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Blur": {"tf": 1}, "Blocks.Blur.main": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.MotorDriver": {"tf": 1}, "Blocks.MotorDriver.callback": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}}, "df": 3}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.utils.models": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.Camera": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.MotorDriver.callback": {"tf": 1}, "Blocks.Odometer.callback": {"tf": 1}, "Blocks.ROSCamera.callback": {"tf": 1}}, "df": 4}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ColorFilter": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}}, "df": 2}}}}}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ContourDetector": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Cropper": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 2}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Dilation": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}}, "df": 2}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.EdgeDetector": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}}, "df": 2}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Erosion": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.FaceDetector": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {"Blocks.IMU": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 3}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ImageRead": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}}, "df": 2}}}}}}}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Odometer": {"tf": 1}, "Blocks.Odometer.callback": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 3}}}}}}}}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.PID": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.ROSCamera": {"tf": 1}, "Blocks.ROSCamera.callback": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 3}}}}}}}}}, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Screen": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Teleoperator": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 2}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Threshold": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 2}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.VideoStreamer": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.utils": {"tf": 1}, "Blocks.utils.models": {"tf": 1}}, "df": 2}}}}}}}, "annotation": {"root": {"docs": {}, "df": 0}}, "default_value": {"root": {"docs": {}, "df": 0}}, "signature": {"root": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.callback": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.callback": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.callback": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1.4142135623730951}, "Blocks.Screen.main": {"tf": 1.4142135623730951}, "Blocks.Teleoperator.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 23, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "p": {"docs": {"Blocks.MotorDriver.callback": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}}}}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 19}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.Odometer.callback": {"tf": 1}, "Blocks.ROSCamera.callback": {"tf": 1}}, "df": 3}}}}}, "bases": {"root": {"docs": {}, "df": 0}}, "doc": {"root": {"0": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}, "2": {"5": {"5": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "6": {"0": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "8": {"0": {"0": {"0": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"Blocks": {"tf": 12.806248474865697}, "Blocks.Blur": {"tf": 1.7320508075688772}, "Blocks.Blur.main": {"tf": 3.7416573867739413}, "Blocks.Camera": {"tf": 1.7320508075688772}, "Blocks.Camera.main": {"tf": 3.4641016151377544}, "Blocks.ColorFilter": {"tf": 1.7320508075688772}, "Blocks.ColorFilter.main": {"tf": 5.0990195135927845}, "Blocks.ContourDetector": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 6}, "Blocks.Cropper": {"tf": 1.7320508075688772}, "Blocks.Cropper.main": {"tf": 5.477225575051661}, "Blocks.Dilation": {"tf": 1.7320508075688772}, "Blocks.Dilation.main": {"tf": 5.385164807134504}, "Blocks.EdgeDetector": {"tf": 1.7320508075688772}, "Blocks.EdgeDetector.main": {"tf": 4.898979485566356}, "Blocks.Erosion": {"tf": 1.7320508075688772}, "Blocks.Erosion.main": {"tf": 5.385164807134504}, "Blocks.FaceDetector": {"tf": 1.7320508075688772}, "Blocks.FaceDetector.main": {"tf": 5}, "Blocks.IMU": {"tf": 1.7320508075688772}, "Blocks.IMU.callback": {"tf": 3}, "Blocks.IMU.main": {"tf": 4.242640687119285}, "Blocks.ImageRead": {"tf": 1.7320508075688772}, "Blocks.ImageRead.main": {"tf": 4}, "Blocks.MotorDriver": {"tf": 1.7320508075688772}, "Blocks.MotorDriver.callback": {"tf": 1.7320508075688772}, "Blocks.MotorDriver.main": {"tf": 5.477225575051661}, "Blocks.Odometer": {"tf": 1.7320508075688772}, "Blocks.Odometer.callback": {"tf": 1.7320508075688772}, "Blocks.Odometer.main": {"tf": 4}, "Blocks.PID": {"tf": 1.7320508075688772}, "Blocks.PID.main": {"tf": 4}, "Blocks.ROSCamera": {"tf": 1.7320508075688772}, "Blocks.ROSCamera.callback": {"tf": 1.7320508075688772}, "Blocks.ROSCamera.main": {"tf": 4.47213595499958}, "Blocks.Screen": {"tf": 1.7320508075688772}, "Blocks.Screen.main": {"tf": 2.8284271247461903}, "Blocks.Teleoperator": {"tf": 1.7320508075688772}, "Blocks.Teleoperator.main": {"tf": 4.358898943540674}, "Blocks.Threshold": {"tf": 1.7320508075688772}, "Blocks.Threshold.main": {"tf": 5.5677643628300215}, "Blocks.VideoStreamer": {"tf": 1.7320508075688772}, "Blocks.VideoStreamer.main": {"tf": 4.47213595499958}, "Blocks.utils": {"tf": 1.7320508075688772}, "Blocks.utils.models": {"tf": 1.7320508075688772}}, "df": 45, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1.7320508075688772}}, "df": 2, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {"Blocks.Cropper.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}, "l": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 2}, "Blocks.Teleoperator.main": {"tf": 2}}, "df": 4}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 2, "s": {"docs": {"Blocks": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1.7320508075688772}, "Blocks.PID.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 5}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "o": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 3, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}}}}, "/": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 3}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}}, "df": 6}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.7320508075688772}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 5}}, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 3}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.Blur.main": {"tf": 1}}, "df": 2, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 2.23606797749979}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"Blocks.Cropper.main": {"tf": 2}}, "df": 1, "s": {"docs": {"Blocks.Cropper.main": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}, "Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 9, "n": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1.7320508075688772}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Camera.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 2}}}}}}}, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 3}}}}}}}, "v": {"2": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1.7320508075688772}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 10}, "docs": {}, "df": 0}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}, "Blocks.Blur.main": {"tf": 2}, "Blocks.Camera.main": {"tf": 2}, "Blocks.ColorFilter.main": {"tf": 2.8284271247461903}, "Blocks.ContourDetector.main": {"tf": 2.8284271247461903}, "Blocks.Cropper.main": {"tf": 2.6457513110645907}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 2.6457513110645907}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 2.23606797749979}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 2}, "Blocks.Odometer.main": {"tf": 1.7320508075688772}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 2}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 2}}, "df": 19, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"Blocks": {"tf": 1}, "Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.7320508075688772}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1.7320508075688772}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}}, "df": 20, "s": {"docs": {"Blocks": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}}}}}}}, "n": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 2.23606797749979}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1.7320508075688772}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.7320508075688772}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 17, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {"Blocks.IMU.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}}, "df": 4}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 7, "s": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1}}, "df": 5}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Odometer.main": {"tf": 1}}, "df": 1}}}}}}}}}}, "f": {"docs": {"Blocks": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}}, "df": 2}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 2.23606797749979}, "Blocks.ContourDetector.main": {"tf": 2.23606797749979}, "Blocks.Cropper.main": {"tf": 2.23606797749979}, "Blocks.Dilation.main": {"tf": 2}, "Blocks.EdgeDetector.main": {"tf": 2.23606797749979}, "Blocks.Erosion.main": {"tf": 2}, "Blocks.FaceDetector.main": {"tf": 2.6457513110645907}, "Blocks.ImageRead.main": {"tf": 1.7320508075688772}, "Blocks.ROSCamera.main": {"tf": 1.7320508075688772}, "Blocks.Screen.main": {"tf": 1.7320508075688772}, "Blocks.Threshold.main": {"tf": 2}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 14, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.ImageRead.main": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {"Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.7320508075688772}}, "df": 2}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ImageRead.main": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"Blocks.Screen.main": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {"Blocks": {"tf": 2.6457513110645907}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.7320508075688772}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 10, "n": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.Blur.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1.4142135623730951}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 16, "d": {"docs": {"Blocks": {"tf": 2.6457513110645907}, "Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1.7320508075688772}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 16}, "y": {"docs": {"Blocks": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}}, "df": 2}, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1.7320508075688772}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 4}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}, "s": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}}, "df": 3}}}, "y": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 3}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 2}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.PID.main": {"tf": 1.4142135623730951}}, "df": 5, "a": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.7320508075688772}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 2}}, "df": 7}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 3}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}, "s": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 7, "k": {"docs": {"Blocks.Cropper.main": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 2.23606797749979}}, "df": 1, "s": {"docs": {"Blocks.Camera.main": {"tf": 1.4142135623730951}}, "df": 1}, "c": {"docs": {}, "df": 0, "v": {"docs": {"Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.Teleoperator.main": {"tf": 1.7320508075688772}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 8, "s": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {"Blocks": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}}, "df": 9, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 3}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}}, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 2}}}}}}, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}}, "df": 2}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.IMU.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 2}}}}}}}, "f": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 2}, "Blocks.Cropper.main": {"tf": 2.23606797749979}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 2.23606797749979}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 14}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Odometer.main": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {"Blocks.Screen.main": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 2}, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.IMU.main": {"tf": 1.4142135623730951}}, "df": 1}}}, "t": {"docs": {"Blocks.IMU.main": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ImageRead.main": {"tf": 1.4142135623730951}}, "df": 1}}}, "y": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.IMU.main": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 2}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "y": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Odometer.main": {"tf": 1}}, "df": 1, "r": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 2}}}}}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "#": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 17, "d": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 13}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Cropper.main": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Screen.main": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "o": {"docs": {"Blocks": {"tf": 3.872983346207417}, "Blocks.Blur.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1.7320508075688772}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 2}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1.7320508075688772}, "Blocks.Odometer.main": {"tf": 1.7320508075688772}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1.4142135623730951}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 19, "o": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 4.242640687119285}, "Blocks.Blur.main": {"tf": 3}, "Blocks.Camera.main": {"tf": 2.449489742783178}, "Blocks.ColorFilter.main": {"tf": 3.872983346207417}, "Blocks.ContourDetector.main": {"tf": 4.242640687119285}, "Blocks.Cropper.main": {"tf": 3.3166247903554}, "Blocks.Dilation.main": {"tf": 2.6457513110645907}, "Blocks.EdgeDetector.main": {"tf": 2.449489742783178}, "Blocks.Erosion.main": {"tf": 2.6457513110645907}, "Blocks.FaceDetector.main": {"tf": 3.4641016151377544}, "Blocks.IMU.callback": {"tf": 3.872983346207417}, "Blocks.IMU.main": {"tf": 3.1622776601683795}, "Blocks.ImageRead.main": {"tf": 2}, "Blocks.MotorDriver.main": {"tf": 2.449489742783178}, "Blocks.Odometer.main": {"tf": 2.6457513110645907}, "Blocks.PID.main": {"tf": 3}, "Blocks.ROSCamera.main": {"tf": 2.23606797749979}, "Blocks.Screen.main": {"tf": 2}, "Blocks.Teleoperator.main": {"tf": 3.1622776601683795}, "Blocks.Threshold.main": {"tf": 2.449489742783178}, "Blocks.VideoStreamer.main": {"tf": 2.8284271247461903}}, "df": 21, "i": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1.7320508075688772}, "Blocks.Threshold.main": {"tf": 1}}, "df": 4}}, "n": {"docs": {"Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 13}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.7320508075688772}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 15}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}, "Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 9}, "n": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.Blur.main": {"tf": 1.7320508075688772}, "Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ColorFilter.main": {"tf": 2}, "Blocks.ContourDetector.main": {"tf": 1.7320508075688772}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 11}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"Blocks.Threshold.main": {"tf": 1}}, "df": 1}}}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 4}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.MotorDriver.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 8}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.Screen.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.Screen.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Dilation.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.Dilation.main": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Dilation.main": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 2}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.7320508075688772}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 5}}}}, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.IMU.main": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1.4142135623730951}, "Blocks.Odometer.main": {"tf": 1.7320508075688772}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 5}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 10, "m": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 4}}}, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}}, "df": 6}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.4142135623730951}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 2}}, "df": 1, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"Blocks.IMU.main": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 2}}, "df": 1}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 2.449489742783178}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 4, "k": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Camera.main": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 3, "a": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 4, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Odometer.main": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "m": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.ROSCamera.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 12}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1.7320508075688772}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}, "y": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 4}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Camera.main": {"tf": 1.4142135623730951}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.7320508075688772}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1.4142135623730951}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1.4142135623730951}, "Blocks.PID.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1.4142135623730951}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 20}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 4}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 2.23606797749979}}, "df": 1}, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}}, "df": 2, "n": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 8}, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}}, "df": 4, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.ROSCamera.main": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.IMU.callback": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}}, "df": 2, "s": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "d": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Screen.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 5}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}, "Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1.4142135623730951}}, "df": 12}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Threshold.main": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "b": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "y": {"docs": {"Blocks": {"tf": 2}, "Blocks.Blur.main": {"tf": 1.7320508075688772}, "Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.ColorFilter.main": {"tf": 2}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1.7320508075688772}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 10}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 7, "s": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Blur.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.Blur.main": {"tf": 1.7320508075688772}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 3}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {"Blocks": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "t": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}, "t": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "e": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 8, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.Camera.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.4142135623730951}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1.4142135623730951}}, "df": 6}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "x": {"docs": {"Blocks.FaceDetector.main": {"tf": 2}, "Blocks.ImageRead.main": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.FaceDetector.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.FaceDetector.main": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "y": {"docs": {"Blocks.IMU.callback": {"tf": 1.7320508075688772}}, "df": 1}}}}, "h": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 1, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.Blur.main": {"tf": 1}}, "df": 2}}, "r": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}, "s": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "w": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, ":": {"3": {"0": {"0": {"0": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.4142135623730951}}, "df": 1}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.Cropper.main": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {"Blocks.ColorFilter.main": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Threshold.main": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"Blocks": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.MotorDriver.main": {"tf": 1.7320508075688772}, "Blocks.Teleoperator.main": {"tf": 1.7320508075688772}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.Cropper.main": {"tf": 1}, "Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {"Blocks.Blur.main": {"tf": 1.4142135623730951}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1.7320508075688772}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1.7320508075688772}, "Blocks.IMU.callback": {"tf": 1}}, "df": 6, "l": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"Blocks.Camera.main": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Cropper.main": {"tf": 1.4142135623730951}, "Blocks.FaceDetector.main": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 4}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.Threshold.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 11}}, "d": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.Cropper.main": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.Teleoperator.main": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.ImageRead.main": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}}, "df": 1}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}, "v": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5, "d": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}}}}}, "g": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Erosion.main": {"tf": 1}}, "df": 1, "s": {"docs": {"Blocks.Erosion.main": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.Erosion.main": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.PID.main": {"tf": 1.7320508075688772}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"3": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "docs": {"Blocks": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {"Blocks": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 2}}}, "d": {"docs": {"Blocks.PID.main": {"tf": 1.4142135623730951}}, "df": 1}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"Blocks": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "s": {"docs": {}, "df": 0, "h": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"Blocks.MotorDriver.main": {"tf": 1.4142135623730951}}, "df": 1}, "d": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.Camera.main": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.ContourDetector.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.FaceDetector.main": {"tf": 1.4142135623730951}, "Blocks.IMU.main": {"tf": 1}, "Blocks.ImageRead.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.ROSCamera.main": {"tf": 1}, "Blocks.Teleoperator.main": {"tf": 1}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 9, "s": {"docs": {"Blocks.ColorFilter.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.EdgeDetector.main": {"tf": 1.4142135623730951}, "Blocks.Erosion.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1.4142135623730951}, "Blocks.Threshold.main": {"tf": 1}}, "df": 7}}}}}}}, "t": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1.4142135623730951}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.Camera.main": {"tf": 1}, "Blocks.ColorFilter.main": {"tf": 1}, "Blocks.ContourDetector.main": {"tf": 1}, "Blocks.Cropper.main": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"Blocks.FaceDetector.main": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"Blocks.ImageRead.main": {"tf": 1.7320508075688772}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 2, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}}}}}}}, "n": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "m": {"docs": {"Blocks": {"tf": 1.4142135623730951}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.Blur.main": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}, "Blocks.PID.main": {"tf": 1}}, "df": 5}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"Blocks.EdgeDetector.main": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"Blocks.VideoStreamer.main": {"tf": 1}}, "df": 1}}}}, "y": {"docs": {"Blocks.Cropper.main": {"tf": 1.7320508075688772}, "Blocks.Odometer.main": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {"Blocks": {"tf": 1.7320508075688772}, "Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 3, "r": {"docs": {"Blocks": {"tf": 1.4142135623730951}, "Blocks.Camera.main": {"tf": 1.4142135623730951}, "Blocks.VideoStreamer.main": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"Blocks.IMU.callback": {"tf": 1}, "Blocks.IMU.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 3}}}, "x": {"docs": {"Blocks.Cropper.main": {"tf": 1.7320508075688772}, "Blocks.MotorDriver.main": {"tf": 1}, "Blocks.Odometer.main": {"tf": 1}}, "df": 3}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"Blocks.Dilation.main": {"tf": 1}, "Blocks.Erosion.main": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}, "i": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}, "d": {"docs": {"Blocks.PID.main": {"tf": 1}}, "df": 1}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"Blocks.IMU.callback": {"tf": 1}}, "df": 1}}}}}}}}}}, "z": {"docs": {"Blocks.MotorDriver.main": {"tf": 1}}, "df": 1}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
-
- // mirrored in build-search-index.js (part 1)
- // Also split on html tags. this is a cheap heuristic, but good enough.
- elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/);
-
- let searchIndex;
- if (docs._isPrebuiltIndex) {
- console.info("using precompiled search index");
- searchIndex = elasticlunr.Index.load(docs);
- } else {
- console.time("building search index");
- // mirrored in build-search-index.js (part 2)
- searchIndex = elasticlunr(function () {
- this.pipeline.remove(elasticlunr.stemmer);
- this.pipeline.remove(elasticlunr.stopWordFilter);
- this.addField("qualname");
- this.addField("fullname");
- this.addField("annotation");
- this.addField("default_value");
- this.addField("signature");
- this.addField("bases");
- this.addField("doc");
- this.setRef("fullname");
- });
- for (let doc of docs) {
- searchIndex.addDoc(doc);
- }
- console.timeEnd("building search index");
- }
-
- return (term) => searchIndex.search(term, {
- fields: {
- qualname: {boost: 4},
- fullname: {boost: 2},
- annotation: {boost: 2},
- default_value: {boost: 2},
- signature: {boost: 2},
- bases: {boost: 2},
- doc: {boost: 1},
- },
- expand: true
- });
-})();
\ No newline at end of file
diff --git a/Blocks/Blur.py b/docs/Blocks/Blur.py
similarity index 94%
rename from Blocks/Blur.py
rename to docs/Blocks/Blur.py
index 43070b9c..14c577b7 100644
--- a/Blocks/Blur.py
+++ b/docs/Blocks/Blur.py
@@ -12,6 +12,12 @@ def main(inputs, outputs, parameters, synchronise):
It is enabled by default but can be disabled by passing in 0 through the enable wire.
Outputs the blurred image through the `share_image()` function
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: BlurType
"""
# Blur Type
blur_type : str = parameters.read_string("BlurType")
diff --git a/Blocks/Camera.py b/docs/Blocks/Camera.py
similarity index 92%
rename from Blocks/Camera.py
rename to docs/Blocks/Camera.py
index 0e0c713b..e4237f2f 100644
--- a/Blocks/Camera.py
+++ b/docs/Blocks/Camera.py
@@ -9,6 +9,12 @@ def main(inputs, outputs, parameters, synchronise):
`while` loop is the part of the program that is executed continuously.
It is enabled by default but can be disabled by passing in 0 through the enable wire.
+
+ **Inputs**: None
+
+ **Outputs**: BGR Image
+
+ **Parameters**: None
'''
cap = cv2.VideoCapture(0)
auto_enable = False
diff --git a/Blocks/ColorFilter.py b/docs/Blocks/ColorFilter.py
similarity index 93%
rename from Blocks/ColorFilter.py
rename to docs/Blocks/ColorFilter.py
index 05a2846e..8ce81f92 100644
--- a/Blocks/ColorFilter.py
+++ b/docs/Blocks/ColorFilter.py
@@ -13,6 +13,12 @@ def main(inputs, outputs, parameters, synchronise):
Here the image is tranformed from `BGR` to `HSV` and then the filter is applied through the `cv2.inRange()`
function. Finally the filtered image is overlayed on the orignal by the means of the
`cv2.bitwise_and()` function. This filtered image is then shared through the `share_image()` function.
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: LowerHSV, UpperHSV
'''
lower_rgb = np.array([int(x.strip()) for x in parameters.read_string('LowerRGB').split(',')])
upper_rgb = np.array([int(x.strip()) for x in parameters.read_string('UpperRGB').split(',')])
diff --git a/Blocks/ContourDetector.py b/docs/Blocks/ContourDetector.py
similarity index 94%
rename from Blocks/ContourDetector.py
rename to docs/Blocks/ContourDetector.py
index f8fb1d14..27f446ff 100644
--- a/Blocks/ContourDetector.py
+++ b/docs/Blocks/ContourDetector.py
@@ -19,6 +19,12 @@ def main(inputs, outputs, parameters, synchronise):
It is enabled by default but can be disabled by passing in 0 through the enable wire.
[Further reading](https://docs.opencv.org/4.x/d4/d73/tutorial_py_contours_begin.html)
+
+ **Inputs**: BGR Image
+
+ **Outputs**: Array [x, y, width, height, angle of rotation], BGR Image
+
+ **Parameters**: None
'''
auto_enable = False
try:
diff --git a/Blocks/Cropper.py b/docs/Blocks/Cropper.py
similarity index 92%
rename from Blocks/Cropper.py
rename to docs/Blocks/Cropper.py
index 00eed4b7..dc73ed5e 100644
--- a/Blocks/Cropper.py
+++ b/docs/Blocks/Cropper.py
@@ -16,6 +16,12 @@ def main(inputs, outputs, parameters, synchronise):
`while` loop is the part of the program that is executed continuously.
It is enabled by default but can be disabled by passing in 0 through the enable wire.
Output is shared via `share_image()`
+
+ **Inputs**: BGR Image
+
+ **Outputs**: Resized BGR Image
+
+ **Parameters**: x, y, width, height
'''
x, y, w, h = np.array([int(x.strip()) for x in parameters.read_string("xywh").split(",")])
diff --git a/Blocks/Dilation.py b/docs/Blocks/Dilation.py
similarity index 93%
rename from Blocks/Dilation.py
rename to docs/Blocks/Dilation.py
index 1522d5e1..59057951 100644
--- a/Blocks/Dilation.py
+++ b/docs/Blocks/Dilation.py
@@ -11,6 +11,12 @@ def main(inputs, outputs, parameters, synchronise):
Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
[Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html)
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: Kernel, Iterations
'''
kernel = np.array([int(x.strip()) for x in parameters.read_string("Kernel").split(",")])
kernel = np.ones(kernel, np.uint8)
diff --git a/Blocks/EdgeDetector.py b/docs/Blocks/EdgeDetector.py
similarity index 90%
rename from Blocks/EdgeDetector.py
rename to docs/Blocks/EdgeDetector.py
index f20744dc..1844d03f 100644
--- a/Blocks/EdgeDetector.py
+++ b/docs/Blocks/EdgeDetector.py
@@ -9,6 +9,12 @@ def main(inputs, outputs, parameters, synchronise):
`cv2.Canny()` function. The resulting image is then converted back to `BGR`.
This image is then shared to the wire via the `share_image()` function.
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: Lower, Upper (Threshold values)
'''
lower = int(parameters.read_string("Lower"))
upper = int(parameters.read_string("Upper"))
diff --git a/Blocks/Erosion.py b/docs/Blocks/Erosion.py
similarity index 92%
rename from Blocks/Erosion.py
rename to docs/Blocks/Erosion.py
index 97e19d88..3d6196b7 100644
--- a/Blocks/Erosion.py
+++ b/docs/Blocks/Erosion.py
@@ -11,6 +11,12 @@ def main(inputs, outputs, parameters, synchronise):
Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
[Further reading]([Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html))
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: Kernel, Iterations
'''
kernel = np.array([int(x.strip()) for x in parameters.read_string("Kernel").split(",")])
kernel = np.ones(kernel, np.uint8)
diff --git a/Blocks/FaceDetector.py b/docs/Blocks/FaceDetector.py
similarity index 90%
rename from Blocks/FaceDetector.py
rename to docs/Blocks/FaceDetector.py
index 2fac7fab..9e1242b6 100644
--- a/Blocks/FaceDetector.py
+++ b/docs/Blocks/FaceDetector.py
@@ -11,6 +11,12 @@ def main(inputs, outputs, parameters, synchronise):
a face is detected. Image is shared through the `share_image()` function.\n
Else if `box` is given, the output is the co-ordinates of the bounding box in the form of an array. It
is chared through the `share_array()` function.
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image with Bounding Boxes
+
+ **Parameters**: BoxOrImage ('box' for Bounding Boxes, 'image' for Image with Detections)
'''
choice = parameters.read_string("BoxOrImage")
diff --git a/Blocks/IMU.py b/docs/Blocks/IMU.py
similarity index 90%
rename from Blocks/IMU.py
rename to docs/Blocks/IMU.py
index 3bd36e3c..de9ffd43 100644
--- a/Blocks/IMU.py
+++ b/docs/Blocks/IMU.py
@@ -13,7 +13,7 @@ def callback(msg):
We convert these radian values to degrees to get the orientation of the body.
Aside from these values the IMU also gives us the angular velocity of the body.\n
- All of these values are stored in the global data variable of the block.
+ All of these values are stored in the global `data` variable of the block.
'''
global data
# Get the orientation list from the IMU sensor
@@ -40,6 +40,12 @@ def main(inputs, outputs, parameters, synchronise):
This data is sent to the callback function which converts the orientation list obtained into roll, pitch and yaw for the
robot that the IMU is present on. Alongwith orientation, it also gives the angular velocity of the robot.
This data is shared in the form of an array using the `share_array()` function.
+
+ **Inputs**: None
+
+ **Outputs**: Array [Roll, Pitch , Yaw, Angular Velocity in X, Angular Velocity in Y, Angular Velocity in Z]
+
+ **Parameters**: ROSTopic
'''
global data
auto_enable = False
diff --git a/Blocks/ImageRead.py b/docs/Blocks/ImageRead.py
similarity index 89%
rename from Blocks/ImageRead.py
rename to docs/Blocks/ImageRead.py
index 9573bb36..a7878219 100644
--- a/Blocks/ImageRead.py
+++ b/docs/Blocks/ImageRead.py
@@ -7,6 +7,12 @@ def main(inputs, outputs, parameters, synchronise):
This box reads an image from a given file path. The path to be specified is written in the parameter
`ImagePath`.\n
It is read through the `cv2.imread()` function and shared through the `share_image()` function.
+
+ **Inputs**: None
+
+ **Outputs**: BGR Image
+
+ **Parameters**: ImagePath
'''
path = parameters.read_string("ImagePath")
image = cv2.imread(path)
diff --git a/Blocks/MotorDriver.py b/docs/Blocks/MotorDriver.py
similarity index 93%
rename from Blocks/MotorDriver.py
rename to docs/Blocks/MotorDriver.py
index 4ec766e8..0b2890e2 100644
--- a/Blocks/MotorDriver.py
+++ b/docs/Blocks/MotorDriver.py
@@ -18,6 +18,12 @@ def main(inputs, outputs, parameters, synchronise):
This data is then converted into a Twist() message with the `linear.x = linear_velocity` and `angular.z = angular_velocity`
The data is then published continuously
+
+ **Inputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
+
+ **Outputs**: None
+
+ **Parameters**: ROSTopic
'''
rospy.init_node("motordriverVC", anonymous=True)
diff --git a/Blocks/ObjectDetector.py b/docs/Blocks/ObjectDetector.py
similarity index 96%
rename from Blocks/ObjectDetector.py
rename to docs/Blocks/ObjectDetector.py
index cd8f70eb..38cccbc7 100644
--- a/Blocks/ObjectDetector.py
+++ b/docs/Blocks/ObjectDetector.py
@@ -54,6 +54,12 @@ def main(inputs, outputs, parameters, synchronise):
tag to it, a bounding box is also drawn over it.
This image is then shared to the output wire using the `share_image()` function.
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image with Bounding Boxes
+
+ **Parameters**: None
'''
auto_enable = True
try:
diff --git a/Blocks/Odometer.py b/docs/Blocks/Odometer.py
similarity index 92%
rename from Blocks/Odometer.py
rename to docs/Blocks/Odometer.py
index 8dd3622b..df6fb181 100644
--- a/Blocks/Odometer.py
+++ b/docs/Blocks/Odometer.py
@@ -17,6 +17,12 @@ def main(inputs, outputs, parameters, synchronise):
It then initializes a Subscriber to subscribe to that ROSTopic, once the data is obtained through the callback
function, it is formatted into an array with the format: `[ x, y, yaw ]`\n
This data is then shared to the wire using the `share_array()` function.
+
+ **Inputs**: None
+
+ **Outputs**: Array [X, Y, Yaw]
+
+ **Parameters**: ROSTopic
'''
rospy.init_node("odometerVC", anonymous=True)
rostopic_name = parameters.read_string("ROSTopic")
diff --git a/Blocks/PID.py b/docs/Blocks/PID.py
similarity index 91%
rename from Blocks/PID.py
rename to docs/Blocks/PID.py
index 50190ee6..10b2a80c 100644
--- a/Blocks/PID.py
+++ b/docs/Blocks/PID.py
@@ -10,6 +10,12 @@ def main(inputs, outputs, parameters, synchronise):
Once there it applies the PID technique to the error variable in order to minimize it.
The resulting values are shared through the `share_array()` function.
+
+ **Inputs**: Error
+
+ **Outputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
+
+ **Parameters**: Kp, Ki, Kd
'''
auto_enable = True
try:
diff --git a/Blocks/ROSCamera.py b/docs/Blocks/ROSCamera.py
similarity index 93%
rename from Blocks/ROSCamera.py
rename to docs/Blocks/ROSCamera.py
index 2475e07b..666dc7f0 100644
--- a/Blocks/ROSCamera.py
+++ b/docs/Blocks/ROSCamera.py
@@ -18,6 +18,12 @@ def main(inputs, outputs, parameters, synchronise):
The image message is converted to OpenCV compatible format via the `imgmsg_to_cv2()` function.
This is then shared ahead using the `share_image()` function.
+
+ **Inputs**: None
+
+ **Outputs**: BGR Image
+
+ **Parameters**: ROSTopic
'''
auto_enable = False
try:
diff --git a/Blocks/Screen.py b/docs/Blocks/Screen.py
similarity index 88%
rename from Blocks/Screen.py
rename to docs/Blocks/Screen.py
index f434e1a9..19183b88 100644
--- a/Blocks/Screen.py
+++ b/docs/Blocks/Screen.py
@@ -6,6 +6,12 @@ def main(inputs, outputs, parameters, synchronise):
Takes an image as an input and displays it on the user's screen.
The `cv2.imshow()` function is used in order to display the image.
+
+ **Inputs**: BGR Image
+
+ **Outputs**: None
+
+ **Parameters**: None
'''
auto_enable = False
try:
diff --git a/Blocks/Teleoperator.py b/docs/Blocks/Teleoperator.py
similarity index 88%
rename from Blocks/Teleoperator.py
rename to docs/Blocks/Teleoperator.py
index 8dc4dd80..11dcdaeb 100644
--- a/Blocks/Teleoperator.py
+++ b/docs/Blocks/Teleoperator.py
@@ -9,6 +9,12 @@ def main(inputs, outputs, parameters, synchronise):
The output data is a list of the format: `[ linear_velocity, angular_velocity ]`\n
This is then shared to the output wire using the `share_array()` function.
+
+ **Inputs**: Bounding Box (x, y, width, height)
+
+ **Outputs**: `cmd_vel` (linear velocity, angular velocity)
+
+ **Parameters**: Linear(Linear Velocity)
'''
auto_enable = True
try:
diff --git a/Blocks/Threshold.py b/docs/Blocks/Threshold.py
similarity index 91%
rename from Blocks/Threshold.py
rename to docs/Blocks/Threshold.py
index 72dc27ed..e7029b5e 100644
--- a/Blocks/Threshold.py
+++ b/docs/Blocks/Threshold.py
@@ -11,6 +11,12 @@ def main(inputs, outputs, parameters, synchronise):
`share_image()` function.
[Further reading](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html)
+
+ **Inputs**: BGR Image
+
+ **Outputs**: BGR Image
+
+ **Parameters**: LowerThreshold, UpperThreshold
'''
lower = parameters.read_number("LowerThreshold")
upper = parameters.read_number("UpperThreshold")
diff --git a/Blocks/VideoStreamer.py b/docs/Blocks/VideoStreamer.py
similarity index 91%
rename from Blocks/VideoStreamer.py
rename to docs/Blocks/VideoStreamer.py
index 969274fa..e5da5f31 100644
--- a/Blocks/VideoStreamer.py
+++ b/docs/Blocks/VideoStreamer.py
@@ -10,6 +10,12 @@ def main(inputs, outputs, parameters, synchronise):
Capturing begins using the `cv2.VideoCapture()` function.
The video is then read frame by frame and each frame is shared to the output wire using the
`share_image()` function.
+
+ **Inputs**: None
+
+ **Outputs**: BGR Image
+
+ **Parameters**: PathToFile
'''
filepath = parameters.read_string("PathToFile")
auto_enable = False
diff --git a/Blocks/__init__.py b/docs/Blocks/__init__.py
similarity index 100%
rename from Blocks/__init__.py
rename to docs/Blocks/__init__.py
diff --git a/Blocks/module.html.jinja2 b/docs/Blocks/module.html.jinja2
similarity index 99%
rename from Blocks/module.html.jinja2
rename to docs/Blocks/module.html.jinja2
index 7651c0d5..365f0f98 100644
--- a/Blocks/module.html.jinja2
+++ b/docs/Blocks/module.html.jinja2
@@ -25,7 +25,7 @@
}
%}
-{% set parent = 'docCode' %}
+{% set parent = 'Blocks' %}
{% block body %}
{% set currentblock = module.modulename.split(".")[-1].replace("%20", "") %}
diff --git a/Blocks/utils/__init__.py b/docs/Blocks/utils/__init__.py
similarity index 100%
rename from Blocks/utils/__init__.py
rename to docs/Blocks/utils/__init__.py
diff --git a/Blocks/utils/models/__init__.py b/docs/Blocks/utils/models/__init__.py
similarity index 100%
rename from Blocks/utils/models/__init__.py
rename to docs/Blocks/utils/models/__init__.py
diff --git a/Blocks/utils/models/haar_cascade/haarcascade_frontalface_default.xml b/docs/Blocks/utils/models/haar_cascade/haarcascade_frontalface_default.xml
similarity index 100%
rename from Blocks/utils/models/haar_cascade/haarcascade_frontalface_default.xml
rename to docs/Blocks/utils/models/haar_cascade/haarcascade_frontalface_default.xml
diff --git a/Blocks/utils/models/yolov3/yolov3-tiny.cfg b/docs/Blocks/utils/models/yolov3/yolov3-tiny.cfg
similarity index 100%
rename from Blocks/utils/models/yolov3/yolov3-tiny.cfg
rename to docs/Blocks/utils/models/yolov3/yolov3-tiny.cfg
diff --git a/Blocks/utils/models/yolov3/yolov3-tiny.weights b/docs/Blocks/utils/models/yolov3/yolov3-tiny.weights
similarity index 100%
rename from Blocks/utils/models/yolov3/yolov3-tiny.weights
rename to docs/Blocks/utils/models/yolov3/yolov3-tiny.weights
diff --git a/Blocks/utils/models/yolov3/yolov3.txt b/docs/Blocks/utils/models/yolov3/yolov3.txt
similarity index 100%
rename from Blocks/utils/models/yolov3/yolov3.txt
rename to docs/Blocks/utils/models/yolov3/yolov3.txt
diff --git a/docs/_pages/documentation.md b/docs/_pages/documentation.md
index d6ec1ad2..27ff9e77 100644
--- a/docs/_pages/documentation.md
+++ b/docs/_pages/documentation.md
@@ -13,6 +13,9 @@ sidebar:
## Project
+### New Documentation
+To access the new documentation, visit this link. [Visual Circuit 3.x Block Documentation](/blockDocs/index.html)
+
### Definition
Version: 1.0.
diff --git a/blockDocs/Blocks.html b/docs/blockDocs/Blocks.html
similarity index 89%
rename from blockDocs/Blocks.html
rename to docs/blockDocs/Blocks.html
index 5271d91e..3c48ebd4 100644
--- a/blockDocs/Blocks.html
+++ b/docs/blockDocs/Blocks.html
@@ -25,10 +25,12 @@
Contents
@@ -71,71 +73,59 @@ Submodules
Blocks
-
+
Jekyll Local Installation
-
+
Prerequisites
-
Visual Circuit
+
Installing Ruby on Ubuntu
-
-
-
-
-
+
First of all, we need to install all the dependencies typing:
-
Visual Circuit is an open source tool to develop robotic applications. It aims to make developing applications for ROS and Gazebo simple and user friendly by its intuitive block-based interface. Users have the ablity to drag and drop blocks to develop their logic. Users are also able to build completely custom blocks as well as edit code in the existing blocks, this makes Visual Circuit a robust and powerful tool to develop even complicated applications.
+
sudo apt-get install ruby-full build-essential zlib1g-dev
+
-
For more information visit our site VisualCircuit
+
After that, we need to set up a gem installation directory for your user account. The following commands will add environment variables to your ~/.bashrc
file to configure the gem installation path. Run them now:
-
Setup
+
echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
+echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
+echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
+source ~/.bashrc
+
-
Front-end
+
Finally, we install Jekyll:
-
For more specific instructions check the frontend readme
+
gem install jekyll bundler
+
-
-Clone the repository https://github.com/JdeRobot/VisualCircuit.git
-Change directory to frontend
-Run npm install
-Run npm start
-Open http://localhost:3000/ in browser.
-
+
Notice that we don't use the root
user :-)
-
Back-end
+
Installing Ruby and Jekyll on Mac OS X
-
For more specific instructions check the backend readme
+
Follow the Jekyll page installation guide .
-
-Clone the repository https://github.com/JdeRobot/VisualCircuit.git
-Change directory to backend
-Create a Python3 virtual environment using venv.
-For eg. python -m venv .venv
-After activating the virtual environment, install the dependencies by running
-pip install -r requirements.txt
-Add .env
file to the backend
folder. And add the variables as defined in .env.template
-Create the static files to serve during execution by python manage.py collectstatic
-Start the server by running python manage.py runserver 8000
-
+
Running Jekyll Serve
-
+
By default, the Jekyll server is launched with the following command (which is the one indicated on your website).
-
Contributing
+
bundle exec jekyll serve
+
-
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated . For more info on how to design a block, refer to this link
+
If in the process of building the server there is a dependency problem, for example, there is a missing library to install, it is necessary to delete the Gemfile.lock
file so that it is rebuilt with the installed dependency. This list of dependencies is found in the Gemfile
file (in Python it would be equivalent to the requirements.txt
file) and the version of each of the installed gems (packages) is specified. Having a list of dependencies is important for future updates as well as knowing the libraries needed to run the server. Once the Gemfile.lock
file is deleted, the command shown above is launched again and the dependency errors should end.
-
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
-Don't forget to give the project a star! Thanks again!
+
Notes for exercise cards.
-
-Fork the Project
-Create your Feature Branch (git checkout -b feature/AmazingFeature
)
-Commit your Changes (git commit -m 'Add some AmazingFeature'
)
-Push to the Branch (git push origin feature/AmazingFeature
)
-Open a Pull Request
-
+
+Teaser Images size: multiple of 600x400px
+
+
+
FAQ
+
+
+Error building Jekyll server:
+
-
-
+
jekyll build --incremental --verbose
+
diff --git a/docs/blockDocs/Blocks/Blur.html b/docs/blockDocs/Blocks/Blur.html
new file mode 100644
index 00000000..7978bd08
--- /dev/null
+++ b/docs/blockDocs/Blocks/Blur.html
@@ -0,0 +1,390 @@
+
+
+
+
+
+
+
Blocks.Blur API documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+ 1 import cv2
+ 2 import numpy as np
+ 3
+ 4 def main ( inputs , outputs , parameters , synchronise ):
+ 5 """
+ 6 ## Blurs an Object\n
+ 7 The object to be blurred is read through the inputs.
+ 8 We have multiple available blurs including Gaussian, Averaging and Median Blur.
+ 9 We can change these blurs by changing the name given in the parameter block
+10
+11 `while` loop is the part of the program that is executed continuously.
+12 It is enabled by default but can be disabled by passing in 0 through the enable wire.
+13
+14 Outputs the blurred image through the `share_image()` function
+15
+16 **Inputs**: BGR Image
+17
+18 **Outputs**: BGR Image
+19
+20 **Parameters**: BlurType
+21 """
+22 # Blur Type
+23 blur_type : str = parameters . read_string ( "BlurType" )
+24 """Type of blur, reads from a parameter"""
+25 # Kernel Size
+26 kernel = tuple ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( ',' )])
+27 auto_enable = False
+28 try :
+29 enable = inputs . read_number ( "Enable" )
+30 except Exception :
+31 auto_enable = True
+32
+33 while ( auto_enable or inputs . read_number ( 'Enable' )):
+34 frame = inputs . read_image ( "Img" )
+35 if frame is None :
+36 continue
+37
+38 if blur_type == 'Gaussian' :
+39 blurred_img = cv2 . GaussianBlur ( frame , kernel , 0 )
+40
+41 elif blur_type == 'Averaging' :
+42 blurred_img = cv2 . blur ( frame , kernel )
+43
+44 elif blur_type == 'Median' :
+45 blurred_img = cv2 . medianBlur ( frame , kernel [ 0 ])
+46
+47 outputs . share_image ( 'Out' , blurred_img )
+48 synchronise ()
+
+
+
+
+
+
+
+
+ def
+ main (inputs , outputs , parameters , synchronise )
+
+ View Source
+
+
+
+ 5 def main ( inputs , outputs , parameters , synchronise ):
+ 6 """
+ 7 ## Blurs an Object\n
+ 8 The object to be blurred is read through the inputs.
+ 9 We have multiple available blurs including Gaussian, Averaging and Median Blur.
+10 We can change these blurs by changing the name given in the parameter block
+11
+12 `while` loop is the part of the program that is executed continuously.
+13 It is enabled by default but can be disabled by passing in 0 through the enable wire.
+14
+15 Outputs the blurred image through the `share_image()` function
+16
+17 **Inputs**: BGR Image
+18
+19 **Outputs**: BGR Image
+20
+21 **Parameters**: BlurType
+22 """
+23 # Blur Type
+24 blur_type : str = parameters . read_string ( "BlurType" )
+25 """Type of blur, reads from a parameter"""
+26 # Kernel Size
+27 kernel = tuple ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( ',' )])
+28 auto_enable = False
+29 try :
+30 enable = inputs . read_number ( "Enable" )
+31 except Exception :
+32 auto_enable = True
+33
+34 while ( auto_enable or inputs . read_number ( 'Enable' )):
+35 frame = inputs . read_image ( "Img" )
+36 if frame is None :
+37 continue
+38
+39 if blur_type == 'Gaussian' :
+40 blurred_img = cv2 . GaussianBlur ( frame , kernel , 0 )
+41
+42 elif blur_type == 'Averaging' :
+43 blurred_img = cv2 . blur ( frame , kernel )
+44
+45 elif blur_type == 'Median' :
+46 blurred_img = cv2 . medianBlur ( frame , kernel [ 0 ])
+47
+48 outputs . share_image ( 'Out' , blurred_img )
+49 synchronise ()
+
+
+
+ Block Description
+ Blurs an Object
+
+
The object to be blurred is read through the inputs.
+We have multiple available blurs including Gaussian, Averaging and Median Blur.
+We can change these blurs by changing the name given in the parameter block
+
+
while
loop is the part of the program that is executed continuously.
+It is enabled by default but can be disabled by passing in 0 through the enable wire.
+
+
Outputs the blurred image through the share_image()
function
+
+
Inputs : BGR Image
+
+
Outputs : BGR Image
+
+
Parameters : BlurType
+
+
+
+
Example Usage
+
+
Output
+
+
+ Normal
+ After Median Blur
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blockDocs/Blocks/Camera.html b/docs/blockDocs/Blocks/Camera.html
similarity index 94%
rename from blockDocs/Blocks/Camera.html
rename to docs/blockDocs/Blocks/Camera.html
index 282aec34..b3644ced 100644
--- a/blockDocs/Blocks/Camera.html
+++ b/docs/blockDocs/Blocks/Camera.html
@@ -68,27 +68,33 @@
9
10 `while` loop is the part of the program that is executed continuously.
11 It is enabled by default but can be disabled by passing in 0 through the enable wire.
-12 '''
-13 cap = cv2 . VideoCapture ( 0 )
-14 auto_enable = False
-15 try :
-16 enable = inputs . read_number ( 'Enable' )
-17 except Exception :
-18 auto_enable = True
-19 try :
-20 while cap . isOpened () and ( auto_enable or inputs . read_number ( 'Enable' )):
-21 ret , frame = cap . read ()
-22 if not ret :
-23 continue
-24
-25 outputs . share_image ( "Img" , frame )
-26 synchronise ()
-27 except Exception as e :
-28 print ( 'Error:' , e )
-29 pass
-30 finally :
-31 print ( "Exiting" )
-32 cap . release ()
+12
+13 **Inputs**: None
+14
+15 **Outputs**: BGR Image
+16
+17 **Parameters**: None
+18 '''
+19 cap = cv2 . VideoCapture ( 0 )
+20 auto_enable = False
+21 try :
+22 enable = inputs . read_number ( 'Enable' )
+23 except Exception :
+24 auto_enable = True
+25 try :
+26 while cap . isOpened () and ( auto_enable or inputs . read_number ( 'Enable' )):
+27 ret , frame = cap . read ()
+28 if not ret :
+29 continue
+30
+31 outputs . share_image ( "Img" , frame )
+32 synchronise ()
+33 except Exception as e :
+34 print ( 'Error:' , e )
+35 pass
+36 finally :
+37 print ( "Exiting" )
+38 cap . release ()
@@ -112,27 +118,33 @@
10
11 `while` loop is the part of the program that is executed continuously.
12 It is enabled by default but can be disabled by passing in 0 through the enable wire.
-13 '''
-14 cap = cv2 . VideoCapture ( 0 )
-15 auto_enable = False
-16 try :
-17 enable = inputs . read_number ( 'Enable' )
-18 except Exception :
-19 auto_enable = True
-20 try :
-21 while cap . isOpened () and ( auto_enable or inputs . read_number ( 'Enable' )):
-22 ret , frame = cap . read ()
-23 if not ret :
-24 continue
-25
-26 outputs . share_image ( "Img" , frame )
-27 synchronise ()
-28 except Exception as e :
-29 print ( 'Error:' , e )
-30 pass
-31 finally :
-32 print ( "Exiting" )
-33 cap . release ()
+13
+14 **Inputs**: None
+15
+16 **Outputs**: BGR Image
+17
+18 **Parameters**: None
+19 '''
+20 cap = cv2 . VideoCapture ( 0 )
+21 auto_enable = False
+22 try :
+23 enable = inputs . read_number ( 'Enable' )
+24 except Exception :
+25 auto_enable = True
+26 try :
+27 while cap . isOpened () and ( auto_enable or inputs . read_number ( 'Enable' )):
+28 ret , frame = cap . read ()
+29 if not ret :
+30 continue
+31
+32 outputs . share_image ( "Img" , frame )
+33 synchronise ()
+34 except Exception as e :
+35 print ( 'Error:' , e )
+36 pass
+37 finally :
+38 print ( "Exiting" )
+39 cap . release ()
@@ -144,6 +156,12 @@ Block Description
while
loop is the part of the program that is executed continuously.
It is enabled by default but can be disabled by passing in 0 through the enable wire.
+
+Inputs : None
+
+Outputs : BGR Image
+
+Parameters : None
diff --git a/blockDocs/Blocks/ColorFilter.html b/docs/blockDocs/Blocks/ColorFilter.html
similarity index 95%
rename from blockDocs/Blocks/ColorFilter.html
rename to docs/blockDocs/Blocks/ColorFilter.html
index 81b59fe4..49c2ca67 100644
--- a/blockDocs/Blocks/ColorFilter.html
+++ b/docs/blockDocs/Blocks/ColorFilter.html
@@ -72,27 +72,33 @@
13 Here the image is tranformed from `BGR` to `HSV` and then the filter is applied through the `cv2.inRange()`
14 function. Finally the filtered image is overlayed on the orignal by the means of the
15 `cv2.bitwise_and()` function. This filtered image is then shared through the `share_image()` function.
-16 '''
-17 lower_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'LowerRGB' ) . split ( ',' )])
-18 upper_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'UpperRGB' ) . split ( ',' )])
-19
-20 auto_enable = False
-21 try :
-22 enable = inputs . read_number ( 'Enable' )
-23 except Exception :
-24 auto_enable = True
+16
+17 **Inputs**: BGR Image
+18
+19 **Outputs**: BGR Image
+20
+21 **Parameters**: LowerHSV, UpperHSV
+22 '''
+23 lower_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'LowerRGB' ) . split ( ',' )])
+24 upper_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'UpperRGB' ) . split ( ',' )])
25
-26 while ( auto_enable or inputs . read_number ( 'Enable' )):
-27 frame = inputs . read_image ( 'Img' )
-28 if frame is None :
-29 continue
-30
-31 hsv = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2HSV )
-32 mask = cv2 . inRange ( hsv , lower_rgb , upper_rgb )
-33 filtered = cv2 . bitwise_and ( frame , frame , mask = mask )
-34
-35 outputs . share_image ( 'Out' , filtered )
-36 synchronise ()
+26 auto_enable = False
+27 try :
+28 enable = inputs . read_number ( 'Enable' )
+29 except Exception :
+30 auto_enable = True
+31
+32 while ( auto_enable or inputs . read_number ( 'Enable' )):
+33 frame = inputs . read_image ( 'Img' )
+34 if frame is None :
+35 continue
+36
+37 hsv = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2HSV )
+38 mask = cv2 . inRange ( hsv , lower_rgb , upper_rgb )
+39 filtered = cv2 . bitwise_and ( frame , frame , mask = mask )
+40
+41 outputs . share_image ( 'Out' , filtered )
+42 synchronise ()
@@ -120,27 +126,33 @@
14 Here the image is tranformed from `BGR` to `HSV` and then the filter is applied through the `cv2.inRange()`
15 function. Finally the filtered image is overlayed on the orignal by the means of the
16 `cv2.bitwise_and()` function. This filtered image is then shared through the `share_image()` function.
-17 '''
-18 lower_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'LowerRGB' ) . split ( ',' )])
-19 upper_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'UpperRGB' ) . split ( ',' )])
-20
-21 auto_enable = False
-22 try :
-23 enable = inputs . read_number ( 'Enable' )
-24 except Exception :
-25 auto_enable = True
+17
+18 **Inputs**: BGR Image
+19
+20 **Outputs**: BGR Image
+21
+22 **Parameters**: LowerHSV, UpperHSV
+23 '''
+24 lower_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'LowerRGB' ) . split ( ',' )])
+25 upper_rgb = np . array ([ int ( x . strip ()) for x in parameters . read_string ( 'UpperRGB' ) . split ( ',' )])
26
-27 while ( auto_enable or inputs . read_number ( 'Enable' )):
-28 frame = inputs . read_image ( 'Img' )
-29 if frame is None :
-30 continue
-31
-32 hsv = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2HSV )
-33 mask = cv2 . inRange ( hsv , lower_rgb , upper_rgb )
-34 filtered = cv2 . bitwise_and ( frame , frame , mask = mask )
-35
-36 outputs . share_image ( 'Out' , filtered )
-37 synchronise ()
+27 auto_enable = False
+28 try :
+29 enable = inputs . read_number ( 'Enable' )
+30 except Exception :
+31 auto_enable = True
+32
+33 while ( auto_enable or inputs . read_number ( 'Enable' )):
+34 frame = inputs . read_image ( 'Img' )
+35 if frame is None :
+36 continue
+37
+38 hsv = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2HSV )
+39 mask = cv2 . inRange ( hsv , lower_rgb , upper_rgb )
+40 filtered = cv2 . bitwise_and ( frame , frame , mask = mask )
+41
+42 outputs . share_image ( 'Out' , filtered )
+43 synchronise ()
@@ -156,6 +168,12 @@ Block Description
Here the image is tranformed from BGR
to HSV
and then the filter is applied through the cv2.inRange()
function. Finally the filtered image is overlayed on the orignal by the means of the
cv2.bitwise_and()
function. This filtered image is then shared through the share_image()
function.
+
+Inputs : BGR Image
+
+Outputs : BGR Image
+
+Parameters : LowerHSV, UpperHSV
diff --git a/blockDocs/Blocks/ContourDetector.html b/docs/blockDocs/Blocks/ContourDetector.html
similarity index 94%
rename from blockDocs/Blocks/ContourDetector.html
rename to docs/blockDocs/Blocks/ContourDetector.html
index f785a6b3..ffabcfdd 100644
--- a/blockDocs/Blocks/ContourDetector.html
+++ b/docs/blockDocs/Blocks/ContourDetector.html
@@ -78,40 +78,46 @@
19 It is enabled by default but can be disabled by passing in 0 through the enable wire.
20
21 [Further reading](https://docs.opencv.org/4.x/d4/d73/tutorial_py_contours_begin.html)
-22 '''
-23 auto_enable = False
-24 try :
-25 enable = inputs . read_number ( "Enable" )
-26 except Exception :
-27 auto_enable = True
-28
-29 while ( auto_enable or inputs . read_number ( 'Enable' )):
-30 img = inputs . read_image ( "Img" )
-31 if img is None :
-32 continue
-33
-34 img_gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )
-35 ret , thresh = cv2 . threshold ( img_gray , 60 , 255 , cv2 . THRESH_BINARY )
-36 contours , hierarchy = cv2 . findContours ( thresh , 1 , 2 )
-37
-38 # Find the biggest contour (if detected)
-39 if len ( contours ) > 0 :
-40 cont = max ( contours , key = cv2 . contourArea )
-41 rect = cv2 . minAreaRect ( cont ) # Get the minimum area bounding rectangle for the contour
-42 # ( center (x,y), (width, height), angle of rotation )
+22
+23 **Inputs**: BGR Image
+24
+25 **Outputs**: Array [x, y, width, height, angle of rotation], BGR Image
+26
+27 **Parameters**: None
+28 '''
+29 auto_enable = False
+30 try :
+31 enable = inputs . read_number ( "Enable" )
+32 except Exception :
+33 auto_enable = True
+34
+35 while ( auto_enable or inputs . read_number ( 'Enable' )):
+36 img = inputs . read_image ( "Img" )
+37 if img is None :
+38 continue
+39
+40 img_gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )
+41 ret , thresh = cv2 . threshold ( img_gray , 60 , 255 , cv2 . THRESH_BINARY )
+42 contours , hierarchy = cv2 . findContours ( thresh , 1 , 2 )
43
-44 # Get the moments of the image
-45 M = cv2 . moments ( cont )
-46 if M [ 'm00' ] != 0 :
-47 # Get the coords of the center of the moments
-48 cx = int ( M [ 'm10' ] / M [ 'm00' ])
-49 cy = int ( M [ 'm01' ] / M [ 'm00' ])
-50
-51 data = [ cx , cy , rect [ 1 ][ 0 ], rect [ 1 ][ 1 ], rect [ 2 ]]
-52 # Send the data to the wire in the form of an array
-53 outputs . share_array ( 'Out' , data )
-54
-55 synchronise ()
+44 # Find the biggest contour (if detected)
+45 if len ( contours ) > 0 :
+46 cont = max ( contours , key = cv2 . contourArea )
+47 rect = cv2 . minAreaRect ( cont ) # Get the minimum area bounding rectangle for the contour
+48 # ( center (x,y), (width, height), angle of rotation )
+49
+50 # Get the moments of the image
+51 M = cv2 . moments ( cont )
+52 if M [ 'm00' ] != 0 :
+53 # Get the coords of the center of the moments
+54 cx = int ( M [ 'm10' ] / M [ 'm00' ])
+55 cy = int ( M [ 'm01' ] / M [ 'm00' ])
+56
+57 data = [ cx , cy , rect [ 1 ][ 0 ], rect [ 1 ][ 1 ], rect [ 2 ]]
+58 # Send the data to the wire in the form of an array
+59 outputs . share_array ( 'Out' , data )
+60
+61 synchronise ()
@@ -145,40 +151,46 @@
20 It is enabled by default but can be disabled by passing in 0 through the enable wire.
21
22 [Further reading](https://docs.opencv.org/4.x/d4/d73/tutorial_py_contours_begin.html)
-23 '''
-24 auto_enable = False
-25 try :
-26 enable = inputs . read_number ( "Enable" )
-27 except Exception :
-28 auto_enable = True
-29
-30 while ( auto_enable or inputs . read_number ( 'Enable' )):
-31 img = inputs . read_image ( "Img" )
-32 if img is None :
-33 continue
-34
-35 img_gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )
-36 ret , thresh = cv2 . threshold ( img_gray , 60 , 255 , cv2 . THRESH_BINARY )
-37 contours , hierarchy = cv2 . findContours ( thresh , 1 , 2 )
-38
-39 # Find the biggest contour (if detected)
-40 if len ( contours ) > 0 :
-41 cont = max ( contours , key = cv2 . contourArea )
-42 rect = cv2 . minAreaRect ( cont ) # Get the minimum area bounding rectangle for the contour
-43 # ( center (x,y), (width, height), angle of rotation )
+23
+24 **Inputs**: BGR Image
+25
+26 **Outputs**: Array [x, y, width, height, angle of rotation], BGR Image
+27
+28 **Parameters**: None
+29 '''
+30 auto_enable = False
+31 try :
+32 enable = inputs . read_number ( "Enable" )
+33 except Exception :
+34 auto_enable = True
+35
+36 while ( auto_enable or inputs . read_number ( 'Enable' )):
+37 img = inputs . read_image ( "Img" )
+38 if img is None :
+39 continue
+40
+41 img_gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )
+42 ret , thresh = cv2 . threshold ( img_gray , 60 , 255 , cv2 . THRESH_BINARY )
+43 contours , hierarchy = cv2 . findContours ( thresh , 1 , 2 )
44
-45 # Get the moments of the image
-46 M = cv2 . moments ( cont )
-47 if M [ 'm00' ] != 0 :
-48 # Get the coords of the center of the moments
-49 cx = int ( M [ 'm10' ] / M [ 'm00' ])
-50 cy = int ( M [ 'm01' ] / M [ 'm00' ])
-51
-52 data = [ cx , cy , rect [ 1 ][ 0 ], rect [ 1 ][ 1 ], rect [ 2 ]]
-53 # Send the data to the wire in the form of an array
-54 outputs . share_array ( 'Out' , data )
-55
-56 synchronise ()
+45 # Find the biggest contour (if detected)
+46 if len ( contours ) > 0 :
+47 cont = max ( contours , key = cv2 . contourArea )
+48 rect = cv2 . minAreaRect ( cont ) # Get the minimum area bounding rectangle for the contour
+49 # ( center (x,y), (width, height), angle of rotation )
+50
+51 # Get the moments of the image
+52 M = cv2 . moments ( cont )
+53 if M [ 'm00' ] != 0 :
+54 # Get the coords of the center of the moments
+55 cx = int ( M [ 'm10' ] / M [ 'm00' ])
+56 cy = int ( M [ 'm01' ] / M [ 'm00' ])
+57
+58 data = [ cx , cy , rect [ 1 ][ 0 ], rect [ 1 ][ 1 ], rect [ 2 ]]
+59 # Send the data to the wire in the form of an array
+60 outputs . share_array ( 'Out' , data )
+61
+62 synchronise ()
@@ -200,6 +212,12 @@ Block Description
It is enabled by default but can be disabled by passing in 0 through the enable wire.
Further reading
+
+Inputs : BGR Image
+
+Outputs : Array [x, y, width, height, angle of rotation], BGR Image
+
+Parameters : None
diff --git a/blockDocs/Blocks/Cropper.html b/docs/blockDocs/Blocks/Cropper.html
similarity index 95%
rename from blockDocs/Blocks/Cropper.html
rename to docs/blockDocs/Blocks/Cropper.html
index 14542092..dea8061d 100644
--- a/blockDocs/Blocks/Cropper.html
+++ b/docs/blockDocs/Blocks/Cropper.html
@@ -75,25 +75,31 @@
16 `while` loop is the part of the program that is executed continuously.
17 It is enabled by default but can be disabled by passing in 0 through the enable wire.
18 Output is shared via `share_image()`
-19 '''
-20 x , y , w , h = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "xywh" ) . split ( "," )])
-21
-22 auto_enable = False
-23 try :
-24 enable = inputs . read_number ( "Enable" )
-25 except Exception :
-26 auto_enable = True
-27
-28 while ( auto_enable or inputs . read_number ( 'Enable' )):
-29 frame = inputs . read_image ( "Img" )
-30 if frame is None :
-31 continue
-32
-33
-34 cropped_img = frame [ y : y + h , x : x + w , :]
-35 outputs . share_image ( 'Out' , cropped_img )
-36
-37 synchronise ()
+19
+20 **Inputs**: BGR Image
+21
+22 **Outputs**: Resized BGR Image
+23
+24 **Parameters**: x, y, width, height
+25 '''
+26 x , y , w , h = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "xywh" ) . split ( "," )])
+27
+28 auto_enable = False
+29 try :
+30 enable = inputs . read_number ( "Enable" )
+31 except Exception :
+32 auto_enable = True
+33
+34 while ( auto_enable or inputs . read_number ( 'Enable' )):
+35 frame = inputs . read_image ( "Img" )
+36 if frame is None :
+37 continue
+38
+39
+40 cropped_img = frame [ y : y + h , x : x + w , :]
+41 outputs . share_image ( 'Out' , cropped_img )
+42
+43 synchronise ()
@@ -124,25 +130,31 @@
17 `while` loop is the part of the program that is executed continuously.
18 It is enabled by default but can be disabled by passing in 0 through the enable wire.
19 Output is shared via `share_image()`
-20 '''
-21 x , y , w , h = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "xywh" ) . split ( "," )])
-22
-23 auto_enable = False
-24 try :
-25 enable = inputs . read_number ( "Enable" )
-26 except Exception :
-27 auto_enable = True
-28
-29 while ( auto_enable or inputs . read_number ( 'Enable' )):
-30 frame = inputs . read_image ( "Img" )
-31 if frame is None :
-32 continue
-33
-34
-35 cropped_img = frame [ y : y + h , x : x + w , :]
-36 outputs . share_image ( 'Out' , cropped_img )
-37
-38 synchronise ()
+20
+21 **Inputs**: BGR Image
+22
+23 **Outputs**: Resized BGR Image
+24
+25 **Parameters**: x, y, width, height
+26 '''
+27 x , y , w , h = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "xywh" ) . split ( "," )])
+28
+29 auto_enable = False
+30 try :
+31 enable = inputs . read_number ( "Enable" )
+32 except Exception :
+33 auto_enable = True
+34
+35 while ( auto_enable or inputs . read_number ( 'Enable' )):
+36 frame = inputs . read_image ( "Img" )
+37 if frame is None :
+38 continue
+39
+40
+41 cropped_img = frame [ y : y + h , x : x + w , :]
+42 outputs . share_image ( 'Out' , cropped_img )
+43
+44 synchronise ()
@@ -167,6 +179,12 @@ Block Description
while
loop is the part of the program that is executed continuously.
It is enabled by default but can be disabled by passing in 0 through the enable wire.
Output is shared via share_image()
+
+Inputs : BGR Image
+
+Outputs : Resized BGR Image
+
+Parameters : x, y, width, height
diff --git a/blockDocs/Blocks/Dilation.html b/docs/blockDocs/Blocks/Dilation.html
similarity index 95%
rename from blockDocs/Blocks/Dilation.html
rename to docs/blockDocs/Blocks/Dilation.html
index 1950a8a0..d62cf383 100644
--- a/blockDocs/Blocks/Dilation.html
+++ b/docs/blockDocs/Blocks/Dilation.html
@@ -70,28 +70,34 @@
11 Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
12
13 [Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html)
-14 '''
-15 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
-16 kernel = np . ones ( kernel , np . uint8 )
-17 iters = int ( parameters . read_string ( "Iterations" ))
-18 auto_enable = False
-19 try :
-20 enable = inputs . read_number ( "Enable" )
-21 except Exception :
-22 auto_enable = True
-23
-24 while ( auto_enable or inputs . read_number ( 'Enable' )):
-25 frame = inputs . read_image ( "Img" )
-26 if frame is None :
-27 continue
-28
-29 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-30 dilated = cv2 . dilate ( frame , kernel , iterations = iters )
-31 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
-32
-33 outputs . share_image ( 'Out' , dilated )
+14
+15 **Inputs**: BGR Image
+16
+17 **Outputs**: BGR Image
+18
+19 **Parameters**: Kernel, Iterations
+20 '''
+21 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
+22 kernel = np . ones ( kernel , np . uint8 )
+23 iters = int ( parameters . read_string ( "Iterations" ))
+24 auto_enable = False
+25 try :
+26 enable = inputs . read_number ( "Enable" )
+27 except Exception :
+28 auto_enable = True
+29
+30 while ( auto_enable or inputs . read_number ( 'Enable' )):
+31 frame = inputs . read_image ( "Img" )
+32 if frame is None :
+33 continue
34
-35 synchronise ()
+35 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+36 dilated = cv2 . dilate ( frame , kernel , iterations = iters )
+37 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
+38
+39 outputs . share_image ( 'Out' , dilated )
+40
+41 synchronise ()
@@ -117,28 +123,34 @@
12 Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
13
14 [Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html)
-15 '''
-16 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
-17 kernel = np . ones ( kernel , np . uint8 )
-18 iters = int ( parameters . read_string ( "Iterations" ))
-19 auto_enable = False
-20 try :
-21 enable = inputs . read_number ( "Enable" )
-22 except Exception :
-23 auto_enable = True
-24
-25 while ( auto_enable or inputs . read_number ( 'Enable' )):
-26 frame = inputs . read_image ( "Img" )
-27 if frame is None :
-28 continue
-29
-30 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-31 dilated = cv2 . dilate ( frame , kernel , iterations = iters )
-32 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
-33
-34 outputs . share_image ( 'Out' , dilated )
+15
+16 **Inputs**: BGR Image
+17
+18 **Outputs**: BGR Image
+19
+20 **Parameters**: Kernel, Iterations
+21 '''
+22 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
+23 kernel = np . ones ( kernel , np . uint8 )
+24 iters = int ( parameters . read_string ( "Iterations" ))
+25 auto_enable = False
+26 try :
+27 enable = inputs . read_number ( "Enable" )
+28 except Exception :
+29 auto_enable = True
+30
+31 while ( auto_enable or inputs . read_number ( 'Enable' )):
+32 frame = inputs . read_image ( "Img" )
+33 if frame is None :
+34 continue
35
-36 synchronise ()
+36 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+37 dilated = cv2 . dilate ( frame , kernel , iterations = iters )
+38 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
+39
+40 outputs . share_image ( 'Out' , dilated )
+41
+42 synchronise ()
@@ -153,6 +165,12 @@ Block Description
Finaly we convert from GRAY
back to BGR
and output the image through the share_image()
function.
Further reading
+
+Inputs : BGR Image
+
+Outputs : BGR Image
+
+Parameters : Kernel, Iterations
diff --git a/blockDocs/Blocks/EdgeDetector.html b/docs/blockDocs/Blocks/EdgeDetector.html
similarity index 95%
rename from blockDocs/Blocks/EdgeDetector.html
rename to docs/blockDocs/Blocks/EdgeDetector.html
index b395725d..22a3d00d 100644
--- a/blockDocs/Blocks/EdgeDetector.html
+++ b/docs/blockDocs/Blocks/EdgeDetector.html
@@ -68,28 +68,34 @@
9 `cv2.Canny()` function. The resulting image is then converted back to `BGR`.
10
11 This image is then shared to the wire via the `share_image()` function.
-12 '''
-13 lower = int ( parameters . read_string ( "Lower" ))
-14 upper = int ( parameters . read_string ( "Upper" ))
-15
-16 auto_enable = False
-17 try :
-18 enable = inputs . read_number ( "Enable" )
-19 except Exception :
-20 auto_enable = True
+12
+13 **Inputs**: BGR Image
+14
+15 **Outputs**: BGR Image
+16
+17 **Parameters**: Lower, Upper (Threshold values)
+18 '''
+19 lower = int ( parameters . read_string ( "Lower" ))
+20 upper = int ( parameters . read_string ( "Upper" ))
21
-22 while ( auto_enable or inputs . read_number ( 'Enable' )):
-23 frame = inputs . read_image ( "Img" )
-24 if frame is None :
-25 continue
-26
-27 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-28 edge_img = cv2 . Canny ( frame , lower , upper )
-29 edge_img = cv2 . cvtColor ( edge_img , cv2 . COLOR_GRAY2BGR )
-30
-31 outputs . share_image ( 'Out' , edge_img )
+22 auto_enable = False
+23 try :
+24 enable = inputs . read_number ( "Enable" )
+25 except Exception :
+26 auto_enable = True
+27
+28 while ( auto_enable or inputs . read_number ( 'Enable' )):
+29 frame = inputs . read_image ( "Img" )
+30 if frame is None :
+31 continue
32
-33 synchronise ()
+33 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+34 edge_img = cv2 . Canny ( frame , lower , upper )
+35 edge_img = cv2 . cvtColor ( edge_img , cv2 . COLOR_GRAY2BGR )
+36
+37 outputs . share_image ( 'Out' , edge_img )
+38
+39 synchronise ()
@@ -113,28 +119,34 @@
10 `cv2.Canny()` function. The resulting image is then converted back to `BGR`.
11
12 This image is then shared to the wire via the `share_image()` function.
-13 '''
-14 lower = int ( parameters . read_string ( "Lower" ))
-15 upper = int ( parameters . read_string ( "Upper" ))
-16
-17 auto_enable = False
-18 try :
-19 enable = inputs . read_number ( "Enable" )
-20 except Exception :
-21 auto_enable = True
+13
+14 **Inputs**: BGR Image
+15
+16 **Outputs**: BGR Image
+17
+18 **Parameters**: Lower, Upper (Threshold values)
+19 '''
+20 lower = int ( parameters . read_string ( "Lower" ))
+21 upper = int ( parameters . read_string ( "Upper" ))
22
-23 while ( auto_enable or inputs . read_number ( 'Enable' )):
-24 frame = inputs . read_image ( "Img" )
-25 if frame is None :
-26 continue
-27
-28 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-29 edge_img = cv2 . Canny ( frame , lower , upper )
-30 edge_img = cv2 . cvtColor ( edge_img , cv2 . COLOR_GRAY2BGR )
-31
-32 outputs . share_image ( 'Out' , edge_img )
+23 auto_enable = False
+24 try :
+25 enable = inputs . read_number ( "Enable" )
+26 except Exception :
+27 auto_enable = True
+28
+29 while ( auto_enable or inputs . read_number ( 'Enable' )):
+30 frame = inputs . read_image ( "Img" )
+31 if frame is None :
+32 continue
33
-34 synchronise ()
+34 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+35 edge_img = cv2 . Canny ( frame , lower , upper )
+36 edge_img = cv2 . cvtColor ( edge_img , cv2 . COLOR_GRAY2BGR )
+37
+38 outputs . share_image ( 'Out' , edge_img )
+39
+40 synchronise ()
@@ -146,6 +158,12 @@ Block Description
cv2.Canny()
function. The resulting image is then converted back to BGR
.
This image is then shared to the wire via the share_image()
function.
+
+Inputs : BGR Image
+
+Outputs : BGR Image
+
+Parameters : Lower, Upper (Threshold values)
diff --git a/blockDocs/Blocks/Erosion.html b/docs/blockDocs/Blocks/Erosion.html
similarity index 95%
rename from blockDocs/Blocks/Erosion.html
rename to docs/blockDocs/Blocks/Erosion.html
index 57b97d19..45e27ba5 100644
--- a/blockDocs/Blocks/Erosion.html
+++ b/docs/blockDocs/Blocks/Erosion.html
@@ -70,28 +70,34 @@
11 Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
12
13 [Further reading]([Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html))
-14 '''
-15 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
-16 kernel = np . ones ( kernel , np . uint8 )
-17 iters = int ( parameters . read_string ( "Iterations" ))
-18 auto_enable = False
-19 try :
-20 enable = inputs . read_number ( "Enable" )
-21 except Exception :
-22 auto_enable = True
-23
-24 while ( auto_enable or inputs . read_number ( 'Enable' )):
-25 frame = inputs . read_image ( "Img" )
-26 if frame is None :
-27 continue
-28
-29 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-30 dilated = cv2 . erode ( frame , kernel , iterations = iters )
-31 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
-32
-33 outputs . share_image ( 'Out' , dilated )
+14
+15 **Inputs**: BGR Image
+16
+17 **Outputs**: BGR Image
+18
+19 **Parameters**: Kernel, Iterations
+20 '''
+21 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
+22 kernel = np . ones ( kernel , np . uint8 )
+23 iters = int ( parameters . read_string ( "Iterations" ))
+24 auto_enable = False
+25 try :
+26 enable = inputs . read_number ( "Enable" )
+27 except Exception :
+28 auto_enable = True
+29
+30 while ( auto_enable or inputs . read_number ( 'Enable' )):
+31 frame = inputs . read_image ( "Img" )
+32 if frame is None :
+33 continue
34
-35 synchronise ()
+35 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+36 dilated = cv2 . erode ( frame , kernel , iterations = iters )
+37 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
+38
+39 outputs . share_image ( 'Out' , dilated )
+40
+41 synchronise ()
@@ -117,28 +123,34 @@
12 Finaly we convert from `GRAY` back to `BGR` and output the image through the `share_image()` function.
13
14 [Further reading]([Further reading](https://docs.opencv.org/4.x/d9/d61/tutorial_py_morphological_ops.html))
-15 '''
-16 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
-17 kernel = np . ones ( kernel , np . uint8 )
-18 iters = int ( parameters . read_string ( "Iterations" ))
-19 auto_enable = False
-20 try :
-21 enable = inputs . read_number ( "Enable" )
-22 except Exception :
-23 auto_enable = True
-24
-25 while ( auto_enable or inputs . read_number ( 'Enable' )):
-26 frame = inputs . read_image ( "Img" )
-27 if frame is None :
-28 continue
-29
-30 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-31 dilated = cv2 . erode ( frame , kernel , iterations = iters )
-32 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
-33
-34 outputs . share_image ( 'Out' , dilated )
+15
+16 **Inputs**: BGR Image
+17
+18 **Outputs**: BGR Image
+19
+20 **Parameters**: Kernel, Iterations
+21 '''
+22 kernel = np . array ([ int ( x . strip ()) for x in parameters . read_string ( "Kernel" ) . split ( "," )])
+23 kernel = np . ones ( kernel , np . uint8 )
+24 iters = int ( parameters . read_string ( "Iterations" ))
+25 auto_enable = False
+26 try :
+27 enable = inputs . read_number ( "Enable" )
+28 except Exception :
+29 auto_enable = True
+30
+31 while ( auto_enable or inputs . read_number ( 'Enable' )):
+32 frame = inputs . read_image ( "Img" )
+33 if frame is None :
+34 continue
35
-36 synchronise ()
+36 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+37 dilated = cv2 . erode ( frame , kernel , iterations = iters )
+38 dilated = cv2 . cvtColor ( dilated , cv2 . COLOR_GRAY2BGR )
+39
+40 outputs . share_image ( 'Out' , dilated )
+41
+42 synchronise ()
@@ -153,6 +165,12 @@ Block Description
Finaly we convert from GRAY
back to BGR
and output the image through the share_image()
function.
Further reading
+
+Inputs : BGR Image
+
+Outputs : BGR Image
+
+Parameters : Kernel, Iterations
diff --git a/blockDocs/Blocks/FaceDetector.html b/docs/blockDocs/Blocks/FaceDetector.html
similarity index 94%
rename from blockDocs/Blocks/FaceDetector.html
rename to docs/blockDocs/Blocks/FaceDetector.html
index a69ebbb0..98001f47 100644
--- a/blockDocs/Blocks/FaceDetector.html
+++ b/docs/blockDocs/Blocks/FaceDetector.html
@@ -70,40 +70,46 @@
11 a face is detected. Image is shared through the `share_image()` function.\n
12 Else if `box` is given, the output is the co-ordinates of the bounding box in the form of an array. It
13 is chared through the `share_array()` function.
-14 '''
-15 choice = parameters . read_string ( "BoxOrImage" )
-16
-17 auto_enable = False
-18 try :
-19 enable = inputs . read_number ( "Enable" )
-20 except Exception :
-21 auto_enable = True
-22
-23 classifier = cv2 . CascadeClassifier ( 'utils/models/haar_cascade/haarcascade_frontalface_default.xml' )
-24
-25 while ( auto_enable or inputs . read_number ( 'Enable' )):
-26 img = inputs . read_image ( "Img" )
-27 if img is None :
-28 continue
-29 bboxes = classifier . detectMultiScale ( img )
-30
-31 if choice == 'image' :
-32 for box in bboxes :
-33 x , y , x1 , y1 = box
-34 x1 , y1 = x + x1 , y + y1
-35 cv2 . rectangle ( img , ( x , y ), ( x1 , y1 ), ( 0 , 255 , 0 ), 2 )
-36 outputs . share_image ( 'Out' , img )
-37 else :
-38 to_write = [ 320 , 240 , 0 , 0 ]
-39 for box in bboxes :
-40 to_write = [ box [ 0 ], box [ 1 ], box [ 2 ], box [ 3 ]]
-41 break
-42 outputs . share_array ( "Out" , to_write )
-43
-44 synchronise ()
-45
-46
-47
+14
+15 **Inputs**: BGR Image
+16
+17 **Outputs**: BGR Image with Bounding Boxes
+18
+19 **Parameters**: BoxOrImage ('box' for Bounding Boxes, 'image' for Image with Detections)
+20 '''
+21 choice = parameters . read_string ( "BoxOrImage" )
+22
+23 auto_enable = False
+24 try :
+25 enable = inputs . read_number ( "Enable" )
+26 except Exception :
+27 auto_enable = True
+28
+29 classifier = cv2 . CascadeClassifier ( 'utils/models/haar_cascade/haarcascade_frontalface_default.xml' )
+30
+31 while ( auto_enable or inputs . read_number ( 'Enable' )):
+32 img = inputs . read_image ( "Img" )
+33 if img is None :
+34 continue
+35 bboxes = classifier . detectMultiScale ( img )
+36
+37 if choice == 'image' :
+38 for box in bboxes :
+39 x , y , x1 , y1 = box
+40 x1 , y1 = x + x1 , y + y1
+41 cv2 . rectangle ( img , ( x , y ), ( x1 , y1 ), ( 0 , 255 , 0 ), 2 )
+42 outputs . share_image ( 'Out' , img )
+43 else :
+44 to_write = [ 320 , 240 , 0 , 0 ]
+45 for box in bboxes :
+46 to_write = [ box [ 0 ], box [ 1 ], box [ 2 ], box [ 3 ]]
+47 break
+48 outputs . share_array ( "Out" , to_write )
+49
+50 synchronise ()
+51
+52
+53
@@ -129,37 +135,43 @@
12 a face is detected. Image is shared through the `share_image()` function.\n
13 Else if `box` is given, the output is the co-ordinates of the bounding box in the form of an array. It
14 is chared through the `share_array()` function.
-15 '''
-16 choice = parameters . read_string ( "BoxOrImage" )
-17
-18 auto_enable = False
-19 try :
-20 enable = inputs . read_number ( "Enable" )
-21 except Exception :
-22 auto_enable = True
-23
-24 classifier = cv2 . CascadeClassifier ( 'utils/models/haar_cascade/haarcascade_frontalface_default.xml' )
-25
-26 while ( auto_enable or inputs . read_number ( 'Enable' )):
-27 img = inputs . read_image ( "Img" )
-28 if img is None :
-29 continue
-30 bboxes = classifier . detectMultiScale ( img )
-31
-32 if choice == 'image' :
-33 for box in bboxes :
-34 x , y , x1 , y1 = box
-35 x1 , y1 = x + x1 , y + y1
-36 cv2 . rectangle ( img , ( x , y ), ( x1 , y1 ), ( 0 , 255 , 0 ), 2 )
-37 outputs . share_image ( 'Out' , img )
-38 else :
-39 to_write = [ 320 , 240 , 0 , 0 ]
-40 for box in bboxes :
-41 to_write = [ box [ 0 ], box [ 1 ], box [ 2 ], box [ 3 ]]
-42 break
-43 outputs . share_array ( "Out" , to_write )
-44
-45 synchronise ()
+15
+16 **Inputs**: BGR Image
+17
+18 **Outputs**: BGR Image with Bounding Boxes
+19
+20 **Parameters**: BoxOrImage ('box' for Bounding Boxes, 'image' for Image with Detections)
+21 '''
+22 choice = parameters . read_string ( "BoxOrImage" )
+23
+24 auto_enable = False
+25 try :
+26 enable = inputs . read_number ( "Enable" )
+27 except Exception :
+28 auto_enable = True
+29
+30 classifier = cv2 . CascadeClassifier ( 'utils/models/haar_cascade/haarcascade_frontalface_default.xml' )
+31
+32 while ( auto_enable or inputs . read_number ( 'Enable' )):
+33 img = inputs . read_image ( "Img" )
+34 if img is None :
+35 continue
+36 bboxes = classifier . detectMultiScale ( img )
+37
+38 if choice == 'image' :
+39 for box in bboxes :
+40 x , y , x1 , y1 = box
+41 x1 , y1 = x + x1 , y + y1
+42 cv2 . rectangle ( img , ( x , y ), ( x1 , y1 ), ( 0 , 255 , 0 ), 2 )
+43 outputs . share_image ( 'Out' , img )
+44 else :
+45 to_write = [ 320 , 240 , 0 , 0 ]
+46 for box in bboxes :
+47 to_write = [ box [ 0 ], box [ 1 ], box [ 2 ], box [ 3 ]]
+48 break
+49 outputs . share_array ( "Out" , to_write )
+50
+51 synchronise ()
@@ -175,6 +187,12 @@ Block Description
Else if box
is given, the output is the co-ordinates of the bounding box in the form of an array. It
is chared through the share_array()
function.
+
+Inputs : BGR Image
+
+Outputs : BGR Image with Bounding Boxes
+
+Parameters : BoxOrImage ('box' for Bounding Boxes, 'image' for Image with Detections)
diff --git a/blockDocs/Blocks/IMU.html b/docs/blockDocs/Blocks/IMU.html
similarity index 96%
rename from blockDocs/Blocks/IMU.html
rename to docs/blockDocs/Blocks/IMU.html
index f9c5c635..b29c90be 100644
--- a/blockDocs/Blocks/IMU.html
+++ b/docs/blockDocs/Blocks/IMU.html
@@ -75,7 +75,7 @@
13 We convert these radian values to degrees to get the orientation of the body.
14
15 Aside from these values the IMU also gives us the angular velocity of the body.\n
-16 All of these values are stored in the global data variable of the block.
+16 All of these values are stored in the global `data` variable of the block.
17 '''
18 global data
19 # Get the orientation list from the IMU sensor
@@ -102,24 +102,30 @@
40 This data is sent to the callback function which converts the orientation list obtained into roll, pitch and yaw for the
41 robot that the IMU is present on. Alongwith orientation, it also gives the angular velocity of the robot.
42 This data is shared in the form of an array using the `share_array()` function.
-43 '''
-44 global data
-45 auto_enable = False
-46 try :
-47 enable = inputs . read_number ( 'Enable' )
-48 except Exception :
-49 auto_enable = True
-50
-51 rospy . init_node ( 'imu_vc' )
-52 rostopic_name = parameters . read_string ( "ROSTopic" )
-53 rospy . Subscriber ( rostopic_name , Imu , callback )
-54
-55 while (( auto_enable or inputs . read_number ( 'Enable' )) and not rospy . is_shutdown ()):
-56 if not data :
-57 continue
-58
-59 outputs . share_array ( "Out" , data )
-60 synchronise ()
+43
+44 **Inputs**: None
+45
+46 **Outputs**: Array [Roll, Pitch , Yaw, Angular Velocity in X, Angular Velocity in Y, Angular Velocity in Z]
+47
+48 **Parameters**: ROSTopic
+49 '''
+50 global data
+51 auto_enable = False
+52 try :
+53 enable = inputs . read_number ( 'Enable' )
+54 except Exception :
+55 auto_enable = True
+56
+57 rospy . init_node ( 'imu_vc' )
+58 rostopic_name = parameters . read_string ( "ROSTopic" )
+59 rospy . Subscriber ( rostopic_name , Imu , callback )
+60
+61 while (( auto_enable or inputs . read_number ( 'Enable' )) and not rospy . is_shutdown ()):
+62 if not data :
+63 continue
+64
+65 outputs . share_array ( "Out" , data )
+66 synchronise ()
@@ -142,7 +148,7 @@
14 We convert these radian values to degrees to get the orientation of the body.
15
16 Aside from these values the IMU also gives us the angular velocity of the body.\n
-17 All of these values are stored in the global data variable of the block.
+17 All of these values are stored in the global `data` variable of the block.
18 '''
19 global data
20 # Get the orientation list from the IMU sensor
@@ -168,7 +174,7 @@
Aside from these values the IMU also gives us the angular velocity of the body.
-All of these values are stored in the global data variable of the block.
+All of these values are stored in the global data
variable of the block.
@@ -194,24 +200,30 @@
41 This data is sent to the callback function which converts the orientation list obtained into roll, pitch and yaw for the
42 robot that the IMU is present on. Alongwith orientation, it also gives the angular velocity of the robot.
43 This data is shared in the form of an array using the `share_array()` function.
-44 '''
-45 global data
-46 auto_enable = False
-47 try :
-48 enable = inputs . read_number ( 'Enable' )
-49 except Exception :
-50 auto_enable = True
-51
-52 rospy . init_node ( 'imu_vc' )
-53 rostopic_name = parameters . read_string ( "ROSTopic" )
-54 rospy . Subscriber ( rostopic_name , Imu , callback )
-55
-56 while (( auto_enable or inputs . read_number ( 'Enable' )) and not rospy . is_shutdown ()):
-57 if not data :
-58 continue
-59
-60 outputs . share_array ( "Out" , data )
-61 synchronise ()
+44
+45 **Inputs**: None
+46
+47 **Outputs**: Array [Roll, Pitch , Yaw, Angular Velocity in X, Angular Velocity in Y, Angular Velocity in Z]
+48
+49 **Parameters**: ROSTopic
+50 '''
+51 global data
+52 auto_enable = False
+53 try :
+54 enable = inputs . read_number ( 'Enable' )
+55 except Exception :
+56 auto_enable = True
+57
+58 rospy . init_node ( 'imu_vc' )
+59 rostopic_name = parameters . read_string ( "ROSTopic" )
+60 rospy . Subscriber ( rostopic_name , Imu , callback )
+61
+62 while (( auto_enable or inputs . read_number ( 'Enable' )) and not rospy . is_shutdown ()):
+63 if not data :
+64 continue
+65
+66 outputs . share_array ( "Out" , data )
+67 synchronise ()
@@ -225,6 +237,12 @@ Block Description
This data is sent to the callback function which converts the orientation list obtained into roll, pitch and yaw for the
robot that the IMU is present on. Alongwith orientation, it also gives the angular velocity of the robot.
This data is shared in the form of an array using the share_array()
function.
+
+Inputs : None
+
+Outputs : Array [Roll, Pitch , Yaw, Angular Velocity in X, Angular Velocity in Y, Angular Velocity in Z]
+
+Parameters : ROSTopic
diff --git a/blockDocs/Blocks/ImageRead.html b/docs/blockDocs/Blocks/ImageRead.html
similarity index 95%
rename from blockDocs/Blocks/ImageRead.html
rename to docs/blockDocs/Blocks/ImageRead.html
index 9b186724..99b47c66 100644
--- a/blockDocs/Blocks/ImageRead.html
+++ b/docs/blockDocs/Blocks/ImageRead.html
@@ -66,21 +66,27 @@
7 This box reads an image from a given file path. The path to be specified is written in the parameter
8 `ImagePath`.\n
9 It is read through the `cv2.imread()` function and shared through the `share_image()` function.
-10 '''
-11 path = parameters . read_string ( "ImagePath" )
-12 image = cv2 . imread ( path )
-13 auto_enable = False
-14 try :
-15 enable = inputs . read_number ( "Enable" )
-16 except Exception :
-17 auto_enable = True
-18
-19 while ( auto_enable or inputs . read_number ( 'Enable' )):
-20 outputs . share_image ( 'Out' , image )
-21 synchronise ()
-22
-23
-24
+10
+11 **Inputs**: None
+12
+13 **Outputs**: BGR Image
+14
+15 **Parameters**: ImagePath
+16 '''
+17 path = parameters . read_string ( "ImagePath" )
+18 image = cv2 . imread ( path )
+19 auto_enable = False
+20 try :
+21 enable = inputs . read_number ( "Enable" )
+22 except Exception :
+23 auto_enable = True
+24
+25 while ( auto_enable or inputs . read_number ( 'Enable' )):
+26 outputs . share_image ( 'Out' , image )
+27 synchronise ()
+28
+29
+30
@@ -102,18 +108,24 @@
8 This box reads an image from a given file path. The path to be specified is written in the parameter
9 `ImagePath`.\n
10 It is read through the `cv2.imread()` function and shared through the `share_image()` function.
-11 '''
-12 path = parameters . read_string ( "ImagePath" )
-13 image = cv2 . imread ( path )
-14 auto_enable = False
-15 try :
-16 enable = inputs . read_number ( "Enable" )
-17 except Exception :
-18 auto_enable = True
-19
-20 while ( auto_enable or inputs . read_number ( 'Enable' )):
-21 outputs . share_image ( 'Out' , image )
-22 synchronise ()
+11
+12 **Inputs**: None
+13
+14 **Outputs**: BGR Image
+15
+16 **Parameters**: ImagePath
+17 '''
+18 path = parameters . read_string ( "ImagePath" )
+19 image = cv2 . imread ( path )
+20 auto_enable = False
+21 try :
+22 enable = inputs . read_number ( "Enable" )
+23 except Exception :
+24 auto_enable = True
+25
+26 while ( auto_enable or inputs . read_number ( 'Enable' )):
+27 outputs . share_image ( 'Out' , image )
+28 synchronise ()
@@ -124,6 +136,12 @@ Block Description
ImagePath
.
It is read through the cv2.imread()
function and shared through the share_image()
function.
+
+Inputs : None
+
+Outputs : BGR Image
+
+Parameters : ImagePath
diff --git a/blockDocs/Blocks/MotorDriver.html b/docs/blockDocs/Blocks/MotorDriver.html
similarity index 94%
rename from blockDocs/Blocks/MotorDriver.html
rename to docs/blockDocs/Blocks/MotorDriver.html
index f18fbf47..edceedeb 100644
--- a/blockDocs/Blocks/MotorDriver.html
+++ b/docs/blockDocs/Blocks/MotorDriver.html
@@ -80,36 +80,42 @@
18 This data is then converted into a Twist() message with the `linear.x = linear_velocity` and `angular.z = angular_velocity`
19
20 The data is then published continuously
-21 '''
-22 rospy . init_node ( "motordriverVC" , anonymous = True )
+21
+22 **Inputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
23
-24 rostopic_name = parameters . read_string ( "ROSTopic" )
-25 # Create a Publisher that publishes to the given ROSTopic
-26 publisher = rospy . Publisher ( rostopic_name , Twist , queue_size = 10 )
-27
-28 auto_enable = True
-29 try :
-30 enable = inputs . read_number ( "Enable" )
-31 except Exception :
-32 auto_enable = True
-33
-34 # Create a Twist message
-35 data = Twist ()
-36
-37 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-38 msg = inputs . read_array ( "Inp" )
-39
-40 if msg is None :
-41 continue
+24 **Outputs**: None
+25
+26 **Parameters**: ROSTopic
+27 '''
+28 rospy . init_node ( "motordriverVC" , anonymous = True )
+29
+30 rostopic_name = parameters . read_string ( "ROSTopic" )
+31 # Create a Publisher that publishes to the given ROSTopic
+32 publisher = rospy . Publisher ( rostopic_name , Twist , queue_size = 10 )
+33
+34 auto_enable = True
+35 try :
+36 enable = inputs . read_number ( "Enable" )
+37 except Exception :
+38 auto_enable = True
+39
+40 # Create a Twist message
+41 data = Twist ()
42
-43 linear_velocity = float ( msg [ 0 ])
-44 angular_velocity = float ( msg [ 1 ])
+43 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+44 msg = inputs . read_array ( "Inp" )
45
-46 data . linear . x = linear_velocity
-47 data . angular . z = angular_velocity
-48 publisher . publish ( data )
-49
-50 synchronise ()
+46 if msg is None :
+47 continue
+48
+49 linear_velocity = float ( msg [ 0 ])
+50 angular_velocity = float ( msg [ 1 ])
+51
+52 data . linear . x = linear_velocity
+53 data . angular . z = angular_velocity
+54 publisher . publish ( data )
+55
+56 synchronise ()
@@ -153,36 +159,42 @@
19 This data is then converted into a Twist() message with the `linear.x = linear_velocity` and `angular.z = angular_velocity`
20
21 The data is then published continuously
-22 '''
-23 rospy . init_node ( "motordriverVC" , anonymous = True )
+22
+23 **Inputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
24
-25 rostopic_name = parameters . read_string ( "ROSTopic" )
-26 # Create a Publisher that publishes to the given ROSTopic
-27 publisher = rospy . Publisher ( rostopic_name , Twist , queue_size = 10 )
-28
-29 auto_enable = True
-30 try :
-31 enable = inputs . read_number ( "Enable" )
-32 except Exception :
-33 auto_enable = True
-34
-35 # Create a Twist message
-36 data = Twist ()
-37
-38 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-39 msg = inputs . read_array ( "Inp" )
-40
-41 if msg is None :
-42 continue
+25 **Outputs**: None
+26
+27 **Parameters**: ROSTopic
+28 '''
+29 rospy . init_node ( "motordriverVC" , anonymous = True )
+30
+31 rostopic_name = parameters . read_string ( "ROSTopic" )
+32 # Create a Publisher that publishes to the given ROSTopic
+33 publisher = rospy . Publisher ( rostopic_name , Twist , queue_size = 10 )
+34
+35 auto_enable = True
+36 try :
+37 enable = inputs . read_number ( "Enable" )
+38 except Exception :
+39 auto_enable = True
+40
+41 # Create a Twist message
+42 data = Twist ()
43
-44 linear_velocity = float ( msg [ 0 ])
-45 angular_velocity = float ( msg [ 1 ])
+44 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+45 msg = inputs . read_array ( "Inp" )
46
-47 data . linear . x = linear_velocity
-48 data . angular . z = angular_velocity
-49 publisher . publish ( data )
-50
-51 synchronise ()
+47 if msg is None :
+48 continue
+49
+50 linear_velocity = float ( msg [ 0 ])
+51 angular_velocity = float ( msg [ 1 ])
+52
+53 data . linear . x = linear_velocity
+54 data . angular . z = angular_velocity
+55 publisher . publish ( data )
+56
+57 synchronise ()
@@ -197,7 +209,13 @@ Block Description
This data is then converted into a Twist() message with the linear.x = linear_velocity
and angular.z = angular_velocity
-The data is then published continuously
+The data is then published continuously
+
+Inputs : cmd_vel
(Linear Velocity, Angular Velocity)
+
+Outputs : None
+
+Parameters : ROSTopic
diff --git a/blockDocs/Blocks/Odometer.html b/docs/blockDocs/Blocks/Odometer.html
similarity index 95%
rename from blockDocs/Blocks/Odometer.html
rename to docs/blockDocs/Blocks/Odometer.html
index 8548d447..41c8416e 100644
--- a/blockDocs/Blocks/Odometer.html
+++ b/docs/blockDocs/Blocks/Odometer.html
@@ -79,23 +79,29 @@
17 It then initializes a Subscriber to subscribe to that ROSTopic, once the data is obtained through the callback
18 function, it is formatted into an array with the format: `[ x, y, yaw ]`\n
19 This data is then shared to the wire using the `share_array()` function.
-20 '''
-21 rospy . init_node ( "odometerVC" , anonymous = True )
-22 rostopic_name = parameters . read_string ( "ROSTopic" )
-23 odometer_subscriber = rospy . Subscriber ( rostopic_name , Pose , callback )
+20
+21 **Inputs**: None
+22
+23 **Outputs**: Array [X, Y, Yaw]
24
-25 auto_enable = False
-26 try :
-27 enable = inputs . read_number ( "Enable" )
-28 except Exception :
-29 auto_enable = True
+25 **Parameters**: ROSTopic
+26 '''
+27 rospy . init_node ( "odometerVC" , anonymous = True )
+28 rostopic_name = parameters . read_string ( "ROSTopic" )
+29 odometer_subscriber = rospy . Subscriber ( rostopic_name , Pose , callback )
30
-31 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-32 data = [ x , y , yaw ]
-33
-34 outputs . share_array ( "Out" , data )
-35
-36 synchronise ()
+31 auto_enable = False
+32 try :
+33 enable = inputs . read_number ( "Enable" )
+34 except Exception :
+35 auto_enable = True
+36
+37 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+38 data = [ x , y , yaw ]
+39
+40 outputs . share_array ( "Out" , data )
+41
+42 synchronise ()
@@ -140,23 +146,29 @@
18 It then initializes a Subscriber to subscribe to that ROSTopic, once the data is obtained through the callback
19 function, it is formatted into an array with the format: `[ x, y, yaw ]`\n
20 This data is then shared to the wire using the `share_array()` function.
-21 '''
-22 rospy . init_node ( "odometerVC" , anonymous = True )
-23 rostopic_name = parameters . read_string ( "ROSTopic" )
-24 odometer_subscriber = rospy . Subscriber ( rostopic_name , Pose , callback )
+21
+22 **Inputs**: None
+23
+24 **Outputs**: Array [X, Y, Yaw]
25
-26 auto_enable = False
-27 try :
-28 enable = inputs . read_number ( "Enable" )
-29 except Exception :
-30 auto_enable = True
+26 **Parameters**: ROSTopic
+27 '''
+28 rospy . init_node ( "odometerVC" , anonymous = True )
+29 rostopic_name = parameters . read_string ( "ROSTopic" )
+30 odometer_subscriber = rospy . Subscriber ( rostopic_name , Pose , callback )
31
-32 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-33 data = [ x , y , yaw ]
-34
-35 outputs . share_array ( "Out" , data )
-36
-37 synchronise ()
+32 auto_enable = False
+33 try :
+34 enable = inputs . read_number ( "Enable" )
+35 except Exception :
+36 auto_enable = True
+37
+38 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+39 data = [ x , y , yaw ]
+40
+41 outputs . share_array ( "Out" , data )
+42
+43 synchronise ()
@@ -168,6 +180,12 @@ Block Description
function, it is formatted into an array with the format: [ x, y, yaw ]
This data is then shared to the wire using the share_array()
function.
+
+Inputs : None
+
+Outputs : Array [X, Y, Yaw]
+
+Parameters : ROSTopic
diff --git a/blockDocs/Blocks/PID.html b/docs/blockDocs/Blocks/PID.html
similarity index 94%
rename from blockDocs/Blocks/PID.html
rename to docs/blockDocs/Blocks/PID.html
index 210f6cd0..35e91e9b 100644
--- a/blockDocs/Blocks/PID.html
+++ b/docs/blockDocs/Blocks/PID.html
@@ -69,40 +69,46 @@
10 Once there it applies the PID technique to the error variable in order to minimize it.
11
12 The resulting values are shared through the `share_array()` function.
-13 '''
-14 auto_enable = True
-15 try :
-16 enable = inputs . read_number ( "Enable" )
-17 except Exception :
-18 auto_enable = True
-19
-20 kp = parameters . read_number ( "Kp" )
-21 ki = parameters . read_number ( "Ki" )
-22 kd = parameters . read_number ( "Kd" )
-23
-24 previousError , I = 0 , 0
-25 # Problem this should be inside the while loop
-26 msg = inputs . read_number ( "Inp" )
-27
-28 while ( auto_enable or inputs . read_number ( 'Enable' )):
-29 if msg is None :
-30 continue
-31
-32 error = float ( msg )
-33 sleep ( 0.01 )
-34
-35 P = error
-36 I = I + error
-37 D = error - previousError
-38 PIDvalue = ( kp * P ) + ( ki * I ) + ( kd * D )
-39 previousError = error
+13
+14 **Inputs**: Error
+15
+16 **Outputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
+17
+18 **Parameters**: Kp, Ki, Kd
+19 '''
+20 auto_enable = True
+21 try :
+22 enable = inputs . read_number ( "Enable" )
+23 except Exception :
+24 auto_enable = True
+25
+26 kp = parameters . read_number ( "Kp" )
+27 ki = parameters . read_number ( "Ki" )
+28 kd = parameters . read_number ( "Kd" )
+29
+30 previousError , I = 0 , 0
+31 # Problem this should be inside the while loop
+32 msg = inputs . read_number ( "Inp" )
+33
+34 while ( auto_enable or inputs . read_number ( 'Enable' )):
+35 if msg is None :
+36 continue
+37
+38 error = float ( msg )
+39 sleep ( 0.01 )
40
-41 linear_velocity = 5.0
-42 angular_velocity = - PIDvalue
-43
-44 data = [ linear_velocity , angular_velocity ]
-45 outputs . share_array ( "Out" , data )
-46 synchronise ()
+41 P = error
+42 I = I + error
+43 D = error - previousError
+44 PIDvalue = ( kp * P ) + ( ki * I ) + ( kd * D )
+45 previousError = error
+46
+47 linear_velocity = 5.0
+48 angular_velocity = - PIDvalue
+49
+50 data = [ linear_velocity , angular_velocity ]
+51 outputs . share_array ( "Out" , data )
+52 synchronise ()
@@ -126,40 +132,46 @@
11 Once there it applies the PID technique to the error variable in order to minimize it.
12
13 The resulting values are shared through the `share_array()` function.
-14 '''
-15 auto_enable = True
-16 try :
-17 enable = inputs . read_number ( "Enable" )
-18 except Exception :
-19 auto_enable = True
-20
-21 kp = parameters . read_number ( "Kp" )
-22 ki = parameters . read_number ( "Ki" )
-23 kd = parameters . read_number ( "Kd" )
-24
-25 previousError , I = 0 , 0
-26 # Problem this should be inside the while loop
-27 msg = inputs . read_number ( "Inp" )
-28
-29 while ( auto_enable or inputs . read_number ( 'Enable' )):
-30 if msg is None :
-31 continue
-32
-33 error = float ( msg )
-34 sleep ( 0.01 )
-35
-36 P = error
-37 I = I + error
-38 D = error - previousError
-39 PIDvalue = ( kp * P ) + ( ki * I ) + ( kd * D )
-40 previousError = error
+14
+15 **Inputs**: Error
+16
+17 **Outputs**: `cmd_vel` (Linear Velocity, Angular Velocity)
+18
+19 **Parameters**: Kp, Ki, Kd
+20 '''
+21 auto_enable = True
+22 try :
+23 enable = inputs . read_number ( "Enable" )
+24 except Exception :
+25 auto_enable = True
+26
+27 kp = parameters . read_number ( "Kp" )
+28 ki = parameters . read_number ( "Ki" )
+29 kd = parameters . read_number ( "Kd" )
+30
+31 previousError , I = 0 , 0
+32 # Problem this should be inside the while loop
+33 msg = inputs . read_number ( "Inp" )
+34
+35 while ( auto_enable or inputs . read_number ( 'Enable' )):
+36 if msg is None :
+37 continue
+38
+39 error = float ( msg )
+40 sleep ( 0.01 )
41
-42 linear_velocity = 5.0
-43 angular_velocity = - PIDvalue
-44
-45 data = [ linear_velocity , angular_velocity ]
-46 outputs . share_array ( "Out" , data )
-47 synchronise ()
+42 P = error
+43 I = I + error
+44 D = error - previousError
+45 PIDvalue = ( kp * P ) + ( ki * I ) + ( kd * D )
+46 previousError = error
+47
+48 linear_velocity = 5.0
+49 angular_velocity = - PIDvalue
+50
+51 data = [ linear_velocity , angular_velocity ]
+52 outputs . share_array ( "Out" , data )
+53 synchronise ()
@@ -171,7 +183,13 @@ Block Description
The Kp, Ki, and Kd parameters are read from the parameters of the same name.
Once there it applies the PID technique to the error variable in order to minimize it.
-The resulting values are shared through the share_array()
function.
+The resulting values are shared through the share_array()
function.
+
+Inputs : Error
+
+Outputs : cmd_vel
(Linear Velocity, Angular Velocity)
+
+Parameters : Kp, Ki, Kd
diff --git a/blockDocs/Blocks/ROSCamera.html b/docs/blockDocs/Blocks/ROSCamera.html
similarity index 95%
rename from blockDocs/Blocks/ROSCamera.html
rename to docs/blockDocs/Blocks/ROSCamera.html
index af92fcef..3b89bf6d 100644
--- a/blockDocs/Blocks/ROSCamera.html
+++ b/docs/blockDocs/Blocks/ROSCamera.html
@@ -80,23 +80,29 @@
18 The image message is converted to OpenCV compatible format via the `imgmsg_to_cv2()` function.
19
20 This is then shared ahead using the `share_image()` function.
-21 '''
-22 auto_enable = False
-23 try :
-24 enable = inputs . read_number ( "Enable" )
-25 except Exception :
-26 auto_enable = True
-27
-28 rospy . init_node ( "camera_ros" , anonymous = True )
-29 subscriber_name = parameters . read_string ( "ROSTopic" )
-30 camera_subscriber = rospy . Subscriber ( subscriber_name , Image , callback )
-31
-32 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-33 if img is None :
-34 continue
-35
-36 outputs . share_image ( "Out" , img )
-37 synchronise ()
+21
+22 **Inputs**: None
+23
+24 **Outputs**: BGR Image
+25
+26 **Parameters**: ROSTopic
+27 '''
+28 auto_enable = False
+29 try :
+30 enable = inputs . read_number ( "Enable" )
+31 except Exception :
+32 auto_enable = True
+33
+34 rospy . init_node ( "camera_ros" , anonymous = True )
+35 subscriber_name = parameters . read_string ( "ROSTopic" )
+36 camera_subscriber = rospy . Subscriber ( subscriber_name , Image , callback )
+37
+38 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+39 if img is None :
+40 continue
+41
+42 outputs . share_image ( "Out" , img )
+43 synchronise ()
@@ -140,23 +146,29 @@
19 The image message is converted to OpenCV compatible format via the `imgmsg_to_cv2()` function.
20
21 This is then shared ahead using the `share_image()` function.
-22 '''
-23 auto_enable = False
-24 try :
-25 enable = inputs . read_number ( "Enable" )
-26 except Exception :
-27 auto_enable = True
-28
-29 rospy . init_node ( "camera_ros" , anonymous = True )
-30 subscriber_name = parameters . read_string ( "ROSTopic" )
-31 camera_subscriber = rospy . Subscriber ( subscriber_name , Image , callback )
-32
-33 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
-34 if img is None :
-35 continue
-36
-37 outputs . share_image ( "Out" , img )
-38 synchronise ()
+22
+23 **Inputs**: None
+24
+25 **Outputs**: BGR Image
+26
+27 **Parameters**: ROSTopic
+28 '''
+29 auto_enable = False
+30 try :
+31 enable = inputs . read_number ( "Enable" )
+32 except Exception :
+33 auto_enable = True
+34
+35 rospy . init_node ( "camera_ros" , anonymous = True )
+36 subscriber_name = parameters . read_string ( "ROSTopic" )
+37 camera_subscriber = rospy . Subscriber ( subscriber_name , Image , callback )
+38
+39 while ( auto_enable or inputs . read_number ( 'Enable' ) and not rospy . is_shutdown ()):
+40 if img is None :
+41 continue
+42
+43 outputs . share_image ( "Out" , img )
+44 synchronise ()
@@ -168,6 +180,12 @@ Block Description
The image message is converted to OpenCV compatible format via the imgmsg_to_cv2()
function.
This is then shared ahead using the share_image()
function.
+
+Inputs : None
+
+Outputs : BGR Image
+
+Parameters : ROSTopic
diff --git a/blockDocs/Blocks/Screen.html b/docs/blockDocs/Blocks/Screen.html
similarity index 95%
rename from blockDocs/Blocks/Screen.html
rename to docs/blockDocs/Blocks/Screen.html
index 4c954559..69e4946d 100644
--- a/blockDocs/Blocks/Screen.html
+++ b/docs/blockDocs/Blocks/Screen.html
@@ -65,21 +65,27 @@
6
7 Takes an image as an input and displays it on the user's screen.
8 The `cv2.imshow()` function is used in order to display the image.
- 9 '''
-10 auto_enable = False
-11 try :
-12 enable = inputs . read_number ( 'Enable' )
-13 except Exception :
-14 auto_enable = True
-15 while ( auto_enable or inputs . read_number ( 'Enable' )):
-16 img = inputs . read_image ( "Img" )
-17 if img is None :
-18 continue
-19
-20 cv2 . imshow ( "frame" , img )
-21 cv2 . waitKey ( 10 )
-22
-23 synchronise ()
+ 9
+10 **Inputs**: BGR Image
+11
+12 **Outputs**: None
+13
+14 **Parameters**: None
+15 '''
+16 auto_enable = False
+17 try :
+18 enable = inputs . read_number ( 'Enable' )
+19 except Exception :
+20 auto_enable = True
+21 while ( auto_enable or inputs . read_number ( 'Enable' )):
+22 img = inputs . read_image ( "Img" )
+23 if img is None :
+24 continue
+25
+26 cv2 . imshow ( "frame" , img )
+27 cv2 . waitKey ( 10 )
+28
+29 synchronise ()
@@ -101,21 +107,27 @@
7
8 Takes an image as an input and displays it on the user's screen.
9 The `cv2.imshow()` function is used in order to display the image.
-10 '''
-11 auto_enable = False
-12 try :
-13 enable = inputs . read_number ( 'Enable' )
-14 except Exception :
-15 auto_enable = True
-16 while ( auto_enable or inputs . read_number ( 'Enable' )):
-17 img = inputs . read_image ( "Img" )
-18 if img is None :
-19 continue
-20
-21 cv2 . imshow ( "frame" , img )
-22 cv2 . waitKey ( 10 )
-23
-24 synchronise ()
+10
+11 **Inputs**: BGR Image
+12
+13 **Outputs**: None
+14
+15 **Parameters**: None
+16 '''
+17 auto_enable = False
+18 try :
+19 enable = inputs . read_number ( 'Enable' )
+20 except Exception :
+21 auto_enable = True
+22 while ( auto_enable or inputs . read_number ( 'Enable' )):
+23 img = inputs . read_image ( "Img" )
+24 if img is None :
+25 continue
+26
+27 cv2 . imshow ( "frame" , img )
+28 cv2 . waitKey ( 10 )
+29
+30 synchronise ()
@@ -124,6 +136,12 @@ Block Description
Takes an image as an input and displays it on the user's screen.
The cv2.imshow()
function is used in order to display the image.
+
+Inputs : BGR Image
+
+Outputs : None
+
+Parameters : None
diff --git a/blockDocs/Blocks/Teleoperator.html b/docs/blockDocs/Blocks/Teleoperator.html
similarity index 94%
rename from blockDocs/Blocks/Teleoperator.html
rename to docs/blockDocs/Blocks/Teleoperator.html
index c09db452..c483935d 100644
--- a/blockDocs/Blocks/Teleoperator.html
+++ b/docs/blockDocs/Blocks/Teleoperator.html
@@ -68,34 +68,40 @@
9
10 The output data is a list of the format: `[ linear_velocity, angular_velocity ]`\n
11 This is then shared to the output wire using the `share_array()` function.
-12 '''
-13 auto_enable = True
-14 try :
-15 enable = inputs . read_number ( "Enable" )
-16 except Exception :
-17 auto_enable = True
-18
-19 linear_velocity = parameters . read_number ( "Linear" )
-20
-21 while ( auto_enable or inputs . read_number ( 'Enable' )):
-22 msg = inputs . read_array ( "Inp" )
-23
-24 # (x, y, width, height)
-25 x , y = float ( msg [ 0 ]), float ( msg [ 1 ])
-26 x1 , y1 = x + float ( msg [ 2 ]), y + float ( msg [ 3 ])
-27
-28 # Teleoperator Control Logic
-29 cx = ( x + x1 ) / 2.0
-30
-31 if cx < 320 :
-32 angular_velocity = - 0.5
-33 else :
-34 angular_velocity = 0.5
-35
-36 data = [ linear_velocity , angular_velocity ]
-37 outputs . share_array ( "Out" , data )
-38
-39 synchronise ()
+12
+13 **Inputs**: Bounding Box (x, y, width, height)
+14
+15 **Outputs**: `cmd_vel` (linear velocity, angular velocity)
+16
+17 **Parameters**: Linear(Linear Velocity)
+18 '''
+19 auto_enable = True
+20 try :
+21 enable = inputs . read_number ( "Enable" )
+22 except Exception :
+23 auto_enable = True
+24
+25 linear_velocity = parameters . read_number ( "Linear" )
+26
+27 while ( auto_enable or inputs . read_number ( 'Enable' )):
+28 msg = inputs . read_array ( "Inp" )
+29
+30 # (x, y, width, height)
+31 x , y = float ( msg [ 0 ]), float ( msg [ 1 ])
+32 x1 , y1 = x + float ( msg [ 2 ]), y + float ( msg [ 3 ])
+33
+34 # Teleoperator Control Logic
+35 cx = ( x + x1 ) / 2.0
+36
+37 if cx < 320 :
+38 angular_velocity = - 0.5
+39 else :
+40 angular_velocity = 0.5
+41
+42 data = [ linear_velocity , angular_velocity ]
+43 outputs . share_array ( "Out" , data )
+44
+45 synchronise ()
@@ -120,34 +126,40 @@
10
11 The output data is a list of the format: `[ linear_velocity, angular_velocity ]`\n
12 This is then shared to the output wire using the `share_array()` function.
-13 '''
-14 auto_enable = True
-15 try :
-16 enable = inputs . read_number ( "Enable" )
-17 except Exception :
-18 auto_enable = True
-19
-20 linear_velocity = parameters . read_number ( "Linear" )
-21
-22 while ( auto_enable or inputs . read_number ( 'Enable' )):
-23 msg = inputs . read_array ( "Inp" )
-24
-25 # (x, y, width, height)
-26 x , y = float ( msg [ 0 ]), float ( msg [ 1 ])
-27 x1 , y1 = x + float ( msg [ 2 ]), y + float ( msg [ 3 ])
-28
-29 # Teleoperator Control Logic
-30 cx = ( x + x1 ) / 2.0
-31
-32 if cx < 320 :
-33 angular_velocity = - 0.5
-34 else :
-35 angular_velocity = 0.5
-36
-37 data = [ linear_velocity , angular_velocity ]
-38 outputs . share_array ( "Out" , data )
-39
-40 synchronise ()
+13
+14 **Inputs**: Bounding Box (x, y, width, height)
+15
+16 **Outputs**: `cmd_vel` (linear velocity, angular velocity)
+17
+18 **Parameters**: Linear(Linear Velocity)
+19 '''
+20 auto_enable = True
+21 try :
+22 enable = inputs . read_number ( "Enable" )
+23 except Exception :
+24 auto_enable = True
+25
+26 linear_velocity = parameters . read_number ( "Linear" )
+27
+28 while ( auto_enable or inputs . read_number ( 'Enable' )):
+29 msg = inputs . read_array ( "Inp" )
+30
+31 # (x, y, width, height)
+32 x , y = float ( msg [ 0 ]), float ( msg [ 1 ])
+33 x1 , y1 = x + float ( msg [ 2 ]), y + float ( msg [ 3 ])
+34
+35 # Teleoperator Control Logic
+36 cx = ( x + x1 ) / 2.0
+37
+38 if cx < 320 :
+39 angular_velocity = - 0.5
+40 else :
+41 angular_velocity = 0.5
+42
+43 data = [ linear_velocity , angular_velocity ]
+44 outputs . share_array ( "Out" , data )
+45
+46 synchronise ()
@@ -161,6 +173,12 @@ Block Description
The output data is a list of the format: [ linear_velocity, angular_velocity ]
This is then shared to the output wire using the share_array()
function.
+
+Inputs : Bounding Box (x, y, width, height)
+
+Outputs : cmd_vel
(linear velocity, angular velocity)
+
+Parameters : Linear(Linear Velocity)
diff --git a/blockDocs/Blocks/Threshold.html b/docs/blockDocs/Blocks/Threshold.html
similarity index 95%
rename from blockDocs/Blocks/Threshold.html
rename to docs/blockDocs/Blocks/Threshold.html
index cffa5061..b019978a 100644
--- a/blockDocs/Blocks/Threshold.html
+++ b/docs/blockDocs/Blocks/Threshold.html
@@ -70,28 +70,34 @@
11 `share_image()` function.
12
13 [Further reading](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html)
-14 '''
-15 lower = parameters . read_number ( "LowerThreshold" )
-16 upper = parameters . read_number ( "UpperThreshold" )
-17
-18 auto_enable = False
-19 try :
-20 enable = inputs . read_number ( "Enable" )
-21 except Exception :
-22 auto_enable = True
-23
-24 while ( auto_enable or inputs . read_number ( 'Enable' )):
-25 frame = inputs . read_image ( "Img" )
-26 if frame is None :
-27 continue
-28
-29 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-30 ( T , thresh ) = cv2 . threshold ( frame , lower , upper , cv2 . THRESH_BINARY )
-31 output = cv2 . cvtColor ( thresh , cv2 . COLOR_GRAY2BGR )
-32
-33 outputs . share_image ( 'Out' , output )
+14
+15 **Inputs**: BGR Image
+16
+17 **Outputs**: BGR Image
+18
+19 **Parameters**: LowerThreshold, UpperThreshold
+20 '''
+21 lower = parameters . read_number ( "LowerThreshold" )
+22 upper = parameters . read_number ( "UpperThreshold" )
+23
+24 auto_enable = False
+25 try :
+26 enable = inputs . read_number ( "Enable" )
+27 except Exception :
+28 auto_enable = True
+29
+30 while ( auto_enable or inputs . read_number ( 'Enable' )):
+31 frame = inputs . read_image ( "Img" )
+32 if frame is None :
+33 continue
34
-35 synchronise ()
+35 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+36 ( T , thresh ) = cv2 . threshold ( frame , lower , upper , cv2 . THRESH_BINARY )
+37 output = cv2 . cvtColor ( thresh , cv2 . COLOR_GRAY2BGR )
+38
+39 outputs . share_image ( 'Out' , output )
+40
+41 synchronise ()
@@ -117,28 +123,34 @@
12 `share_image()` function.
13
14 [Further reading](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html)
-15 '''
-16 lower = parameters . read_number ( "LowerThreshold" )
-17 upper = parameters . read_number ( "UpperThreshold" )
-18
-19 auto_enable = False
-20 try :
-21 enable = inputs . read_number ( "Enable" )
-22 except Exception :
-23 auto_enable = True
-24
-25 while ( auto_enable or inputs . read_number ( 'Enable' )):
-26 frame = inputs . read_image ( "Img" )
-27 if frame is None :
-28 continue
-29
-30 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
-31 ( T , thresh ) = cv2 . threshold ( frame , lower , upper , cv2 . THRESH_BINARY )
-32 output = cv2 . cvtColor ( thresh , cv2 . COLOR_GRAY2BGR )
-33
-34 outputs . share_image ( 'Out' , output )
+15
+16 **Inputs**: BGR Image
+17
+18 **Outputs**: BGR Image
+19
+20 **Parameters**: LowerThreshold, UpperThreshold
+21 '''
+22 lower = parameters . read_number ( "LowerThreshold" )
+23 upper = parameters . read_number ( "UpperThreshold" )
+24
+25 auto_enable = False
+26 try :
+27 enable = inputs . read_number ( "Enable" )
+28 except Exception :
+29 auto_enable = True
+30
+31 while ( auto_enable or inputs . read_number ( 'Enable' )):
+32 frame = inputs . read_image ( "Img" )
+33 if frame is None :
+34 continue
35
-36 synchronise ()
+36 frame = cv2 . cvtColor ( frame , cv2 . COLOR_BGR2GRAY )
+37 ( T , thresh ) = cv2 . threshold ( frame , lower , upper , cv2 . THRESH_BINARY )
+38 output = cv2 . cvtColor ( thresh , cv2 . COLOR_GRAY2BGR )
+39
+40 outputs . share_image ( 'Out' , output )
+41
+42 synchronise ()
@@ -153,6 +165,12 @@ Block Description
share_image()
function.
Further reading
+
+Inputs : BGR Image
+
+Outputs : BGR Image
+
+Parameters : LowerThreshold, UpperThreshold
diff --git a/blockDocs/Blocks/VideoStreamer.html b/docs/blockDocs/Blocks/VideoStreamer.html
similarity index 95%
rename from blockDocs/Blocks/VideoStreamer.html
rename to docs/blockDocs/Blocks/VideoStreamer.html
index ff48bf25..49d7791c 100644
--- a/blockDocs/Blocks/VideoStreamer.html
+++ b/docs/blockDocs/Blocks/VideoStreamer.html
@@ -69,24 +69,30 @@
10 Capturing begins using the `cv2.VideoCapture()` function.
11 The video is then read frame by frame and each frame is shared to the output wire using the
12 `share_image()` function.
-13 '''
-14 filepath = parameters . read_string ( "PathToFile" )
-15 auto_enable = False
-16 try :
-17 enable = inputs . read_number ( "Enable" )
-18 except Exception :
-19 auto_enable = True
-20
-21 cap = cv2 . VideoCapture ( filepath )
-22
-23 while ( auto_enable or inputs . read_number ( 'Enable' ) and cap . isOpened ()):
-24 ret , frame = cap . read ()
-25 if ret :
-26 outputs . share_image ( 'Out' , frame )
-27 else :
-28 cap . set ( cv2 . CAP_PROP_POS_FRAMES , 0 )
-29
-30 synchronise ()
+13
+14 **Inputs**: None
+15
+16 **Outputs**: BGR Image
+17
+18 **Parameters**: PathToFile
+19 '''
+20 filepath = parameters . read_string ( "PathToFile" )
+21 auto_enable = False
+22 try :
+23 enable = inputs . read_number ( "Enable" )
+24 except Exception :
+25 auto_enable = True
+26
+27 cap = cv2 . VideoCapture ( filepath )
+28
+29 while ( auto_enable or inputs . read_number ( 'Enable' ) and cap . isOpened ()):
+30 ret , frame = cap . read ()
+31 if ret :
+32 outputs . share_image ( 'Out' , frame )
+33 else :
+34 cap . set ( cv2 . CAP_PROP_POS_FRAMES , 0 )
+35
+36 synchronise ()
@@ -111,24 +117,30 @@
11 Capturing begins using the `cv2.VideoCapture()` function.
12 The video is then read frame by frame and each frame is shared to the output wire using the
13 `share_image()` function.
-14 '''
-15 filepath = parameters . read_string ( "PathToFile" )
-16 auto_enable = False
-17 try :
-18 enable = inputs . read_number ( "Enable" )
-19 except Exception :
-20 auto_enable = True
-21
-22 cap = cv2 . VideoCapture ( filepath )
-23
-24 while ( auto_enable or inputs . read_number ( 'Enable' ) and cap . isOpened ()):
-25 ret , frame = cap . read ()
-26 if ret :
-27 outputs . share_image ( 'Out' , frame )
-28 else :
-29 cap . set ( cv2 . CAP_PROP_POS_FRAMES , 0 )
-30
-31 synchronise ()
+14
+15 **Inputs**: None
+16
+17 **Outputs**: BGR Image
+18
+19 **Parameters**: PathToFile
+20 '''
+21 filepath = parameters . read_string ( "PathToFile" )
+22 auto_enable = False
+23 try :
+24 enable = inputs . read_number ( "Enable" )
+25 except Exception :
+26 auto_enable = True
+27
+28 cap = cv2 . VideoCapture ( filepath )
+29
+30 while ( auto_enable or inputs . read_number ( 'Enable' ) and cap . isOpened ()):
+31 ret , frame = cap . read ()
+32 if ret :
+33 outputs . share_image ( 'Out' , frame )
+34 else :
+35 cap . set ( cv2 . CAP_PROP_POS_FRAMES , 0 )
+36
+37 synchronise ()
@@ -141,6 +153,12 @@ Block Description
Capturing begins using the cv2.VideoCapture()
function.
The video is then read frame by frame and each frame is shared to the output wire using the
share_image()
function.
+
+Inputs : None
+
+Outputs : BGR Image
+
+Parameters : PathToFile
diff --git a/blockDocs/Blocks/utils.html b/docs/blockDocs/Blocks/utils.html
similarity index 100%
rename from blockDocs/Blocks/utils.html
rename to docs/blockDocs/Blocks/utils.html
diff --git a/blockDocs/Blocks/utils/models.html b/docs/blockDocs/Blocks/utils/models.html
similarity index 100%
rename from blockDocs/Blocks/utils/models.html
rename to docs/blockDocs/Blocks/utils/models.html
diff --git a/docs/blockDocs/assets/blur-usage.png b/docs/blockDocs/assets/blur-usage.png
new file mode 100644
index 0000000000000000000000000000000000000000..c72cde151b7cee8b5e4451c4b814844244e2d14b
GIT binary patch
literal 80689
zcmb?@Ra6~avn?dJ6WlGhyF;)9C%C%@cXto&F2NJr-GZ}`5Zv9}9d2{~Pjc>gIpd7m
z5A3Gdt9z|lC9`H#6ZTp56CxZg92giFqJ+4p0vH%H3m6y#CJYpCMc4Tm9Qc565SCDa
z0S-?Xqfp>?97i!VM@1VGM;Cp2V=z-|8!Kaa2Sa;fV`~R98^@Ek9Rgrr#9$JlLQ1X~
zhf6M=O3KeKXESZA@jAQgs4|`|uf%VJ-=haX2s6U6*Ir7S96voV4}K_?5P!QON96Xt$>F#y8)q2h_#tbI
zIX6w`ivt|q1DmFp=x84kSj0Yqi0Hou!<*5#l`QH`r61I!ruKY|mu)_?aBO1#eqpoq
zE#%CUC3
ztXT5}IMzSzmhYKC8Ir=mG21ItsQnmvE{)2a2o42B{!{vGB_cw1gN%ORKlcm`P52~l
zF_()nQD0T{U9|zcj?`iU4n_%#gmlMffg|YnO%x%oaNoDLVw%w*sYU5^)TI9&_8ekm
z#$GiHR+hPG9Au=qDo!)xq*y53OfWDAxk3Sb5Rj1ZN$nFizE*nJ?Kjvq=S(QJY{Uzm^{P
z=vF1_{wW;p6kkCrTSy2M8+KBAdEf-|ru14d=g;{Xufel~|ArC?pA8d-5ysgea6bwCxg(*WlU$=;xkB|9W`n_f%@^24$H<2jVK_Fqv=8Co
z`V7;GA~60OkIJ2Sfy9E?$$>x$zvMVJ`)Q&TpD$PD<0nP(5klds0&Woh*;whQ62h+9mTT?WjKSwrXJMFyR<
z?1IiZHpZZtEB%-kOKNo1q3qF@eZ2!SJB$G6>q4)$s*nWCq1QJZUA1GnYf&mua6Bf|
z+-a=0buTPOOCC*p`CsJd?HQ`7l9^oxhyevHJN|RGX%?>uG$pU(F-%6X23JV}B-x!$
zV}$6`@A(1I?l_Iwj||XRBQETnf@_!%848zhS?0)_F^oG^!y?o57^dS7!x21{H?OqJjw~=OM+s}gT+RJH$SHiaFM%6Yu6yEC3{JK6h
z83av!Y_0jI`muz$2Q7Nx4f{h5lWTFi;y?X!&9N;%l*^dyJls7HHCKE6%zHF+)1R99
zQ|r!YCvx3NY6NtYg|>Ubh?uPxX~Cq^d7dIRppbET8tp2W+%G3~_{nOtgbESc*_n}#
zcDgZ{C*i19Ijx*gF*o&fO_)+4!6CR?wZ_>31n6&0LG8_S3(EsU8s3;oaUl(bG4IsV
zy@X7&woMDjs~s1#Yujsi`SUtfCo+pDQa@&nURo0Qy7aRo9iFb&6`oEKsl4-cz1RyF
z!zGW|o)PSW_t}*dF$Kp-kC%Adf;slpV6!3s`K|<2S)AEBZ{lyXsAdzFeeWF|xl`86
z^+2?V#_qM;5l}#$^Ytr{MW@FNidQ+lYgJgfM{W$hK3aEux;iWJ@|-O0zcpTR-yV4?
z|4NJYuhGP&6?3)nX{NXtgu2yN*3=HQeKcu^cq;v_9G%mr<4sf(hS7o-*H|M!*uu4R
z-kXH@^Sn{O1WSI6+q1o#ywF&2)%H|z2?{W_ek}Rqth@IrJW|P)TP|gqzw=Dl6rGRr
zjX2CdH(0pLL#kOmJb!Xl2MfZVua6bk@-k5FBW}HTYCSDFo)paJdGL9n)Fmg{xYd%P
ztV^5hs#)PIm>iu0^~p@h7s)(7(_5BCDM}Tja^CRr)Y|mN%SCaK5971%GrwT}yByT-
z8kA#|d=n8Mhmpxr1XFlcTArRj`|{YmT6)~Ao$3~Ss)l~6HPF?FdVL;AkO>#WbRS!$
zZ>0VL{s7W;UVc57bojx-@lO^{c-7~3>dEeqkb$oJrrhyj_v_^O?$T*DhaWHElSA0{
ze-)V0foI9k-IFX~*#}>*F|G{jZP)O_(0Ru>&9jZab_?F^^!Co)oWjHKt47kr1+
z`+U&6b7yjlp4GnJ!%mO5zsQtivn^|&q?+ub>H2f&@hJ1=*0RshWb8R(Oz@spZfQBT
z+1QJmV5I4;-NIa)hxPdycS0&K1&lE2nEOLL;%d&wlMSoKsH?Y+`FQwhMB&X7ncH2q
z&Bb1_Vk)~S%>-rJXdA&-3#Z?!Lz=DziybMCQ*7;b_h)uxy
zY&K5Q(fe#x`;H%@z0>SAbj~VL)p1BD5*$97JUx1zzY1^H_tqc;ugf#rqarRE
zJ}{j}cjenW(&+w~Z-|Z^Te~|S-hRU`qWJNw$Fzm&Xg@Iub7^mCxF`OcUY9&MPuo&Y
zs=R&cOZo8fa5d3(HRFVoI6sy-j!tL3eg~!7Q<(MS==|sq`ARjXpzplQzTwtRrk%`h
zmMZwU`z2F4hA%f3J647^7z|6)7#o1F3;@HE3{1sR2*ts}J9ud|5Hny`CHvPQVWpjy
zGO8~L8OYeK4-YeB^0K-PZK`?p$VMLd1(Uj%%&pAV|kIkTapej@fWTl~;4Uj-LxrtJkAP){6ZQokf3Z
z1WL-S{FS3KbKC>9S>xOlZInTh$-3{9<8bhy8neBRwW2IPhfnSn;9f$
z@qY`QAdn_Jn}31$B383?{vqkp}*3jC`
zx-Old<2h`^dG_gT>Ri(yt$?O;l%U}EGaZj3`sbUohgpuriwEeEmW+usb`J_5E@hsb
z?ey_=I~Znh8++K>!*MR#DjFwI{2?W#ptvngK*5?F_kIE~Duv@H{69h}>}M(_iWyUJ
zfx!9p7H0Go)<%z1y{ray0V|62h6((^bk*7uFKhm+F^U2liZ?pQPWjS%MM#ohc@AH@
zDik9%b8n&q+Dc&gCls9?&I8xpkRsYs`UgE#r%Bv
zJi?9S?3uS2&LhKVdh0#WpGf(){Kme&(?e>vdiOjMK;DF0pbc?qBk
z#8AlXiRKgSdZ(+J64KJ8IIJu+THt|3?zYg=g*i+yhbeRTR&EKth73qOC*KBtV+I}}
zcH7aR+8A+ir9sTP@=+9SxK?5wUd3!VX5NYRR;#l5?2+6*ZqwZNc?|_;FQv$}@7-Z?J|&w8TD~w8WM$Scn%-
zfXNBCC85C)q!_2{s>STUD~bFRrZMu~w4;d3#oJiNUT7dHUyV^>;GnDsQ(rWxFAPdG
zb>GmeB8?qXq+tFssW_a@+wryJ-M{Yp&WXoOX1J$Ev@g;FlIw!~>6{5vGZE`c%tsjC
zXN@K|iOP~rRB+coZ(g5+5$XM9=vlU<5)mG*rb>oV&k#)CF9_WgA1qLfP?(?a8X_cN
zJp%HPWyj<9(Y=hAZ#^{C@1Z7nKO*_~tW~sf9UCSc)kvP<%NoU}XZ4YQ
z^7RjrCV$MnN6Wi)%OLNiJ90=0pBW@EIhzUAPf%mM5RP%9t7(?{10jD`Sa7kVp25xD
zIoL!&^IY579hYMTum}PnOYzT9<#J-QZj;13fi}*3h1qebUu(8+?B9R~glgASNxxmt
z55Ni2$Ix2^O&Z|hlRueJfgMHRZ>P}uX8ax=fZ)@_WO1oU=26v_nz^sia7_GA**G;$+Nra@>aPj$gANS2H`sU{6&;TAMi%etZe4(X4>mJCRi;Wh>
z^S;d{&knj+<8aKgi!23(2)Ff%xs0Bn0FLtOr^a%zJ)MBxRa}ib#5$zr%ekXCS#svt
z7kf8XuKcrHw%nkbj%cNh=eOnHlEEpxU%Q9bng3O8QiY3Jv*n=|d1YBF1I&^LrW#L)
z1jH3~vxuD?e5f5OeK{?@V~V+1aGh)CIT>4L;==wO%?jS~L&RBZwx|Je9@2E>y(?P{
z%uHk=J+YPrXkf56BI4sODdNP|LIT7SR2h6Ir2%Ox^mhh8~l@APlljU0$2m8zQ
zK?FL`R_;!Dd+KRN?)*BI(*6N&MhTzQby~3l1EI3rB0Tsf3LmBGYsg*r9;lwuAhR8%
z13H_XU>Gj~CDQXs-bpanqIeu+YAK&w`t%fdjTXiG>@v-9nJxcNzjH^Es!Qj*X_)}l
z{Oa&t5f>coA37eJc4$drQuP&y6_hA~^PwHoD|k@9Gbi^VHH0R2der%u^rnK8X+~o5
zt2H{?VG!jB47mD%Id)RNHUYS1o*!-ZtdsB<7^pS7m4r)AfSH+!~I
zM4#60+l(|BzUVr`Mxl-R7)`->4<3m>b~9cmNR#5-?5weigqm+t*~y-iXXd+kpt9aF
zf83PY446wF;4b)_?p3q0ej@Wi^uk%pDAzs_wxBp&V{Su1$Qsd{TuX7Sz{yHP)D@C0
zdG&@s@Z1klI%PIeHAHuW^`zcl>fGsYs1~MtAt7cH*=_4!Nv*(rv}k88MfCR?_+^VR
zn@?Gr{|L7bo3(NEWv@@wX|c-IpBW=J(bPE0wbpT)%dEP{ut9HhG|mOx#r7yAYt195
zJCSyv7QDOq?z@iHveejC{F%>AX1eu;#Q~ufwUDd73_c`Yv0`NgNYfZ);TA^M%A%`2
z02N`W2`Ac|slm<>M|haD$s(0oFw)}KY^Y1jK`mDOYuj6UZbzyN!kOitQ~C^tt$Bw_
z)d|td89lXSViVj)WOUw!2vOZPwjL)@S{DnWtD|HGr$QX>3vV_1=N~$@rgkzGUB;Xo
zkG;@Tp@j5xkWxRnRC`aUAYsraniq_$WuNH$BnolN{S?wHo#Ir8bq*tO!rz@I@fMq{
z5*jwyDc@8JrI0r~qOC=Zn>BXo6X^U62CY$lG9$D7%E%&rBeLrC?idCGaw@cQjdkW;
z`kngFj;BVGMC;9O(G27z@gf0E6jNgdJrGd^3(Tua`!_25fL$2-s6c$K_(r8e^65xyvVK@{MA
zIxN-xYUvu$ebDxe`@g*F13xkqossV-*M?4d4h~u{$)I&JF(JIAde*91UpJ7DmHmFY
z@h5k2#Zy6y78R2E%^JCltukXdr9~5t{w*Wtc(ZLydA3mydG)VIvRR6;z4!D~30g%bN?!zM{#Y<6
z>5l!f5QVQc8)&E!kuSLGIEKkN+uTwtQs-tMP?GGwTbg10yVQnPX@_0ykiPfdLu
z?gF#a{rnAISaft?^>!gpSo)8LaQgtqis295>IF(1E7^Dz>ld5fP=@OYDD)
z08SJ1R9wLS-KN(wO2wEzw}h0GJ<9*j8Ka_pw?qF^uR}w{BR5Kq--wEW!ND(~qoc20
zx&LVSM@-gGsoLK$#dIOf0AZ8LY9VW6n;m-dn|K#KwF%UAI_8Y-&d<9GkwDYHBv
zEHoh#nD=)T4YYrVK5s-v0%_6w!~Zt@y#GIB;6B3#(M?ZaqP8bq-Hj*h`e2^7YoDYa
zPsvzVSxXw2{@(Yd9H*ms$c5mZo}PUMv3vz~tNFm2WuFkrZ0wP~$n+mA_=4R`l~xb6
z(RG${{MZlS&w^k*2rB|B?
zAj%j0<<0JHVmE+g4nQ9CfUyFsUqS*RSOh+||HCm}U%E|%DFF0o>Vg{^)q)XQLW*~b
zS)(KtGW#?)UL@v^YbDG67PctOXv$9Z*0M(kIFsG_rwFgLf_-}N{CDiuiz$UN=_r_(
zI!gr!wgzB(_D!};T9YNJA@$5<-!(bkH7p>05Eh2k&~k^xP$jFqetnn?!t?8Sa6VbFKfq|~p?ROLc5016I~V?&uc5w1yWeejz>MvCqClV*4FGQe`ibz9P;Dxbn55)7d!M|Il3
zM9+wLdkYlm1Cv|e@bmL)%wRY_haVUmEU2tR0a?Um>vqb~sv5eL{h(fC0!u&CY>shp
zP^GKDVqJ+0^P8zWo8>6fU+wIy?fTgV2iNJy1@rs`QeT(iO&Q7rN^YcnNcu@7g=wM%GCldk_aII5&wJ;|KETmh=)fJ}D
z{2e~Nw2)tVetw;rl2D8}SiQ`3nf5?S8T53lG=9C`LhaynGb{)GBs@%E=ed0&6A>Pa
z3zXh=Qx!sb>w-HN%C(rmcoj{@CK~zs9>e5~{E|2oRbh4kWz1J$yI<`Km1)$?RU02b
z;ur-72L8^MKy$x>+YTX0noeP2<>SlXT*m(-EX)TCV>SQ1srYlS-Rpq~*aQThO`&%@
z+7b)(R*!x~13|fsnV&Q?c=A38j?{ji7~}DtpWFk;{UdA;h~ZfWkChGq8v>!p_8O^OW)k;pK%c6S)6zv`_t_ovH3%yIF#?E@1w(N)SH
zVL>!^$qnW_yUT5Oc1P9v%&fniZqxqJ
z^JiiN-VIc|z};o7Atu9PRuFv0&iA6M)$(sHDt1An7#o1QjE$@I!z(9JD|`aPO*&C1
zV>*49%Exgohe2qRBxaW~SM!PJH7Jxtg)bRbF^hiunB?v$D*7IHj?v9A+jNC)2xu?Y
z7$mi~RK)pB{~O(-wSL$c=aVzB)qJh~OZ$`MN`0isNV>yO-OM{&+@Uz4qy!7g&!165
zP6#CdeVVN{rfq7PtF>B4>Jovv=)K&tTu`a&X#8s%9yMNFy9p=rts%tmPvE%Ninh
zzRC^cP=I&AcAbb+R!SA$5|^gawU`|qmM)Y_A2lTVq+~0$!*x?1|`*+PXr$=G_ZQjJJNxEZo#eI
zbi5D%k%7d`izNh^h~Z+^dZ}5VM1|h_Rv(r&i4l6WC_4_Da`Y4Ey*%Ehp_8D@hp{!YV45<}DMh
zXT8Zz6U|yoUt8Esj5FPj&OQ57*cR%aW;TJzV63i3`#h34Y!8#LvnSSDE!ZzP%~V-0
z@vLubP*YLq4aSjM&Q^jKO}GtJ{qTP{$8^l|S0iImAF^Br6F7Wrm8epVzmm*9eK
zDo@30ee=cohYR(@!iuk7*Am|LI!k7ZYG{Ml+r{JtVyde1H$UTzjg6;LuH@yEzB6C;
zVj5sBR2gEGsF2H-s8|7x$`7>lBZ=o{cQ+2trK~RRoI_xWOghKf6Ea0{W~tUM1qBWi
zJP-Azo0Iu6cxq}qn#x=UJobI+Wp@Y9Fl67*(4hzQR=ZV1&$BHh1&&g~rTgr=+l}a5
zB}Z(Yzk30u%MQ%@`+9m#D}16&r}h)`ttIsb<4)YJ=Uy%Zy&sMmYV^7q9v?wpIBezy
zkOk=sE*0gH_PkDxT%LRP*(EIJTm6WVZm${JY4=4DaoJY4I@$-m_861*1qTIXu{iJk
zYDwWYr5L2{h{-sIuh|*SfARGu?}LDVsPyW`eCbaZqX7ThprieK+AnB(b8_6rM(}(_
z8Jq&v)YP=OwPPo&3J12nz7BRv%{)#-hl$y&-e!UbLqeF6Xh&5`>x_rUkip$ASQc{L^95;nT5%8`%w>*`ZS}l}U!@hweNcS^0
zFo-##-yAPS(t3y9cQoiQo0To`R+XtP!*9|VQhp4hCmBbx$!f{c8Pn*UUP}8EHDV{5
zSAX14daPR&Kp%biIXnymA{0Wx(R_*cF>Vf4)`Qv&jsolQ+n=H|67Cv2+Re@kH_ug7
zRi$b=?KqiRiK(fB>0)cfRYMsV_dRH2cN3w4aj|xx+z##JOiVG$Z5|hc`7dXeiareE
z?+Q#SvRYrBAu?nsrIP53Z_2eN%T$s3VO?m|>&5KPp^&^gu%r7yz6bXgyLr(lI5>kf
zV+rND&E_e?_uF{*vXrklAun1$*ing%>|?}bwE6FR=82A!k9i*v0jk<)?Wb6+%}UlM
zBCo)bisSB>u7-yhmG+xu{Rp>b_2~+^?SPw?0DbIQ^93juzm^_1enQ3<*C(Rqlbgdi
z_}e!VzkYod78ZtqLn7s*>=*3YbA0y>SF&sXraU4VzUWOyT;Gsb;@w!!{i4|ggx39Su}bd
z9%kPCKqTGSxw-^FsQ_4q^7INHBd4VehdpW49mEJz
zDo;p2zXz}w0Lov44+@kQN#6r-doh6V^U-|oS-;?uAK;E17Gih@2Dl(P3zBt)uykd&
zdXxLkpVo;6xKf1l^oT1uo`0M$-gLQCnvA4P5IXGdD5l=uDZSim^uL5du8eFXX<9Ql
z#c+Gx=HUx?LY&rFJh^WtFLIqiJ>SoCRN1U}gXy@gx#6;Z83;Gjy>3`!M+oS6+~W53
z89Q-%JnMJeE9d~XeY%>_U*Kq1ai#>!-;}Sy*v)Mx(?xDBtJ#iBNT>@yy-6_4;A!j@
zeK}nLk1LdAT7&cPI_Z_CFy|NcXYOs}^`@rAZ^=y;lAJBiEbk5v4;A<6trz4|Yh3?=
zr{0kQKz6w7bwgk>a-X)=O~g;0&zB6OWfan`>41QAJomOFe<6fUD03bxQze07xP(JzYvt5^kx*rGL*+Ax0PM1BO%L
zRVFP9#DoO^j&K|Ozn{QSP&)|9c6VB6k_$_}J)OnuDrEdo^KF+Iue-XEOyozo?P@~@
z!2rCWl*`DC(O5JNC<2F-wvqI8bJ5bRk>eGjZ_LW
zp_lyiu_JsAbe~bs^Z-Qb$#&Mk$6*gKqwB-}@^JF9JJmvYbueQ(lt68Yz$~|E%T=u1
zf~l@PSNdp9{)&r$Kkfi{&G-j1Cuj2A1s0R%ZFjBZT%6a#wIUF`?{y}U33#1fv)JdV
zdaH~5k_u+CQ$6eUEleHnyOY`a5x|)-BLpm1n*K^de`0D#fpc(DoS;TmtK
zIN`|y0JLMuv!PPrI&C5pR8W1;Og*eKS5&1#i93e;q+b0zf8`ZPeSuY@m
zMW2^8>Fj67cnTQ?hhldg;LG`ig>TyDQaD%aX_=XsEyd?Lw@1>$HB@IIGANYjbZ#aN
z&e{ZwaWo(A94$hiAnxnkel&VD{Rb)!RCK-Os&4(CbqH?YPTC)k{?4zO$ACDF&3TLg
z;GWaT-69ZQykdSK7xOSa|Gga;&}@)#SbB(yYVZbqv!%)kZ-U9LW$86tO1Ewf(`j=@
z1ws}e8X%qGJv%!CmW|N83Md{?lJS~-Gmw(H2u*3LvPN&MTWR4XTRG$~MHAemUVg{u
z)peoJ$JGO$K6tVzB=
zdc?vDnV3)jjD_B>9L-nuq(Gwu%+mq`0oRchxJq>;fK@xOv}P+@67+5*d&@eMkl*9<
z*yAK7HnyvzBFbKIN3x{aK$xT~Sei-I6a}<8$!J
zYdZUC?Z|w$V9|ol5U+Q4(Wb1SOIMblHJ|!HK9a_6cww@V_H#}>H83b-!2B+$;>9f=HKyW$U!pNj?bkckQ@mNgLIiD=c0M^CjxQk*jUHT2!GRNIt
ze*XS%R4Q~v#`8YeHE98G&p)#ZpT{wOXy55bAkay|Ygm|(<8(ReN;-589Wh+xq$1Vg(@eD!MRgAyY}hk^ajhfdNT|w9x5%@Ri=E)Ha57S
z-D|6Zlpkv>=c1pF_}#C$Du^$P0QcKnZ?!((o3!hKjDm|Re6c+Ogwjx-Oc}7~{_Yu8
zlk=;HR4pfEm*tmLZNPns`NX8Ar-y^Ke(pK0p1I0#o0>O$H4*2@=ogvc_qcxNp#C06
z6s|g=z>>A>!(LGkzcXEYMg~6MX8b4idN#P1Nr-uPaC0*X$Gqs1OW4OmVn6_!*=#oseC
z$M%1W(tCb{+_79j#livs`D;u{imQB?a!htM@`o~w*k`MWBA>xZ{hQMwRG-&W4^T5~
zUjXhfTh8)t?(DFdUgLwc>(-_mmRef3U8xA9vqaWe%w*XkRcyge_y+`xsmloofyc(i
z?%=!de2T)~YB|BQ2k3&+hn1J8m**QFUmJ?;_`ECtjRsOH7G~Jd4;zELjQ|YccsM)0
zLgcg3{^WRQ_N!d`K`|@c9M`e+5w5zLWv(drf0ZB<+yRzURE*ttJ%lLJ;jpy{-qm`TRaER#Y@tsD2-4^q77g}kBmkbiq8)s2VG6s;G4oC{X
z&j2$Vo0#Y{1o3s~U8OT`)DiS)y_s*UYAA@!jp>S4$7(JhdIPGGj4__Tt=~2ki6?l9
zY#66=Kqef=X)qCB`TEZ1QE+_?7X;o+TUT7V%Uv$4AZ-R!84lH*Tp0GT81@arl@Amt
z1V}e>bq}YZ82F!zhR9KP4V|tbGhZIJq+AXb70lc0F1es)+mfSEw5o2o$b~8eh7fuN
z7Jx7>_BQ1j*MieWZ{ZD<9MQ97p94!v=?L9VV`<8(?aLV9Y(GU3ihcM%98W2y|I~c-
z_^@Jg5hBPp)UYyYa)vAgg8-8wm%SVq9CUs;@iMj|%nO8omz&|5*0a6?>C9`Ki=8o3
zId>i)BW1Jx9k{aOg{&)`-336WyMDY1X29`XA1{UIV{6&Dg(x1VXG?oNCO$qK`J6X&
zJZA!#3=4lY)-y{I62bgMGFG4Mk_}X))dC05^eESIeIza;vo*rGd>;K|yAHi+v{UJH
zphCAm%E6HYWT4ewroPxaczJDf+}lIFg}U5nyIIj6J>&*r-+Zlkw^hTE#6k-8{Z$L*
zLjB!M#|i}}Wr%Dh&v?5C^zRAh_~c|caWk0l@$taGz)G(NX9Z3|o9;H?0UTEIqUjt~
z*zPxbJs?Ob+O3+7$8J>
zGEVicvJs8WOnG~HDjHh!3Jeiok)fzQZ}c8-eeP|F83`xqEU*fx2NK}LMaN5rek?b%
zehnDPPqZjjq>QVqWU{YzU?SM2?#iDzxU#8f#RLM1k@0p+t-VYlL`v_lzwl2J3cJHI
zKeb@I5UbTb1J`|Ff#r@^&HcK~>R&uY9`J64HyZ6+jX`zl&`oSyaoIIU>uiX&DS;!>
zKTChs@po~$G4Qu}YOg6M(pF&D6+oxj+6ASullRbZtYzNpCB$^@jz~(AF21~i
z14`afZN(m185M~KcjYdPj)Mw1K2Jo80PCV%31*#2A>Cbaf=@jn$VfYD
zYsly6E04i|+|KPUfS`*al}ty@$l32x`toqW`nVOue0ew*(1Bx;nk@%}>bEwnsQ`Wb
zO6^OChnk)&x3yl3LM(fGyqTNpA4|+i`gkJHhGVPk)2hSxaC5RFNc0%eu#&Y(baB++
zfWx{C3D}PJF|Ionz~)hq8^0wXAvs*}@dcs}ppzfHbqK*8u8;DBx}n%2zf!QVp+^_R
z0Hk3O{X=Z_OnFzeywqS>H^SgmEosUUB$n-pSI_xd%*LE0X>AkrA3bwrjJqhYuPZr
zffQib(}537@G*3A6CEH7cYhavxMwENznkN-TZ_87x~5Wa2Ze-86x)$qA1$edC1$Dv
zMIiX?mk$-oOU0TEnB3glYDqRD(%np8y1VMF^n9clWFf5Tt*)sZHQI^H#I_^O!tIjp
zPwENPKC#$oKh|qnjkLK(e@Y66$Yqsbi@)C
zb#?XkR1GM?K@-gkMl5YiI7Ec90u!+w)$q%Q$?ZMN#1u@)b&wN2{yN~`qoylj)@
z#XH{_PgSxF8@gOB3fc4ew3gAnSR2Jl*~f)H!BKv
z1AwefqdEIxv)V)2JZ_TQJNhE=CTh*m0CbTznMpz$V4kLBXABL{G-1YWgCI~hU7C{q
z9Hx+vP)cC{P?N23pBkH*SsOkjkC|(5BstkGSJPqqn1vUjuZMU0M)EW$fkUl666YNZ
zQhW}hD$2ESuFYqR(f4J8KiCE!R@|*WMH7|`DXJ8wX}z3&BHTRw=7Nez2=&4Jo)FN4
zurTwtADmS@;V>D_*uL3e-mV6){;tPOreR;twV`qO
z@Ap{729#o`r^;+r1Q1&H`dAviKHVSK&{!e%{N}1kv}|*C3X|IvFVk2<$Go4ffP#Xu
zyZt4vQg)vj5g}4^sHhEB-kOl%2kV+P1swt#M0l9%JH;ep%iU$Mw&)h~D^&ubd|9RJ
zYFbp8&`5F%4jH)!co0yfNCOChH!*2xl3(^sfO3FN4O2lM_X=^%>_9A8u+s^HE=kpmg9f*svjY<8LIiMr%qxT24cBjc2b-E}(Zt
zp^OHoPW}D3?|ZL(0|}ApOOSt6QU3bKkp6G)1^rWh{EN=(lm8zzRfyNwb7f3v`~Q7^
z@q!5_Ce+yK*OrVa8YZU7Ke{x(J2nHw8U^RqZVHViEpP}3C}kI%e|k9*DTtY1l4*0A
zK`5wAt7Z%>p-L^QIeHmL(2$Uju5DSb{S|*5`NCZIvTxqL#V`Pt7ysHcfvQyw_9Xmw
z?fUhe-e2fx|GD?;$^WD)=R~$%CQ?_QU#M>
zeLbwF)6_zV2B2BZ)eRb#^Gm4lT>i;i_r9`)grvq15%TR#>_v?L_g?LS7h^?`ehQ^k
z16cRVj%~HG9V~`sjuPIJ<*xG$(t#OAw))D1)rqxX@u!6Z74b7Ws>xDRv_Q
zG#KH+`ID@}`3Y<924X-?gmBvM?5ET6R+=Aw5lCNt0I!Z&b*?d0Qa6WwMZ~6zq7HkBKI6Q
z*BI`|A`$Y1>SOn4O$V=N%@9=>GrOJdNM~PTd}c9<{i^twHb0vZEU}+eSGp{KRWY;u
z)nw+~3>`SA`f+0n-E1gGMlhY!p2F*4|AzPb-1XvQ%wwStwi}^k&FzXe)GTJuUB735
zR@W*_V0`y*ZUth6jQ0fbZ<{aTB|b;R`$fbGQVEn*PoyJi=^V61Ft(7Dq41Qk`)y<@4d!+H8d_k>t
z7g~i*j_>8Ij_>{TQMceSc7GPX$6SkPg^!1tE4Cc}6$HRRZ{IN+mXx)J2brfWUM~0n
zZ73`U>2ny)!+18WSwDXYZx5$xlJxTt09`k9;U6RM&MSP{gmkQ0Dq%^eH=eO#;t78w9%t^@l$W?h)7O!7&Sdiy
zplyNBZBri!f4KM@e&ls?TG9^Vq!`w|g&dm#LD=(V=_hN{0Z_buTYk{r@qEVtjclT%
zAEZpy;SILw_Vrko9*LQM5-Gw+bP)xtU0QdLF@(dAC!kVt@lwN4B-#8!R*3(-ABMuj
zlFNz&fS6qG_e@8*3VD3$w`PiLblb93A)i{d7il)qf?qAp7+?}=OVZ8VnEw&=a^`L&|T$MF~ojU(_#0@nU~pUz5Xs4U;|Q#bx&BsO49QHlQN6(s;i>InNaw$uZqz^tTUfGn$
zhr^kvysS4_9@{{bI8`9h>EQXBRPu69Z*S_9Ufj~oOS$>n56Env<#a_#xt%l;#Ux{N
z>apk3D|W6~nlL#>Q9mf?5NziRb%{)Sna@<{1J#eRd@NFlG`+WHd3R3xY-e5BAkSj2
zi);*#t-XD|#mtzvq%;eNyGCkzx?
z=vZw#^#C&YVYHkKC)cnQhnkGt{ARD-$a%Phgwt3K;PkNtz1a-=Ju|ID3NteayaY~q
zkC!}FP$}mOe68o80ih7*vJuED&
zdS2JkkRK7q5rUXYz~6%8CAYFx?BV0BI)T09F)ICbj`~F*I)fJ11j|W{%?p-W_QvkQ
zIms@odm!H!L63{fw2`SSS%agR-v?q87zqE%0d+HVNUC@7w^E8}6=VVw*`$6(j%bI~
zba^so!;?ciC(`uQ`q}U3&v5a)9R>SsrvS>f(CBMH0r}BFr!Zd(ac)A^c?mecQ7h>xbSzRG|
zg?t!ZXY1|tAgRlP8?oRWpg=+ak2M1H7nDh7vGrCyffz$3%DptTv@*cO#l=^9!?Cou
zd}0%6XU;G86!R`TFXbhm5Dq^9eLw^0oXE_~Rg3Lj>Ds(EDQs(>Tb${6oQ}nNzi!#t
z+mrI#V;~a=Z1&js0Ew@pu<)C5YwOLy4cW7Iy$JnYXJS6h&PUSe90U_ySubMmC4|2#
zRqJ)pO_wipHmtmSI5X%K7ndexVSy_U_R}bXlK3h7T{Lfeb$dJby#xX_SLl`xgYkCh
z3eGQ|(5{>$44a3?gQ*J8jBd2?{K*8j^Py}Y{x5)!;hT83885}S_t!@&Vp)90Y}S(*0|Uj52h4hU
zy1_^U!;{n#vyJ9xy`G+x^;LbN)7NcskE#CD&BC#yK~*(1dBxGH6hR-1h!yTy#d(LQ_4(!`64y+{YB-23{)uUwn=;wrET=a`6h+X4u#
z8R6{rm9ZEazrf%!Q5A*XNcdsmB&r~O@c$U}o?7?B=K}w9KAjaUia^lFtim{Vw`fz64oc1VK>9Cmmqt3KUQY3A+GSKUeR>ODUJd@xZ>a#kIc{n;aCrZTI`-
zJ>Z{4sy)xvduMCi2o~zCcYt0**@g(=?*sJ$@k{PTA&W6Pdv)Q-jNMJ%Pf+O`)@zGR
z7bY#)FJhO~FAFx5CLZJGEtb3|@t6M?(;{g_buIR0Wt6F+g!cqr7{YYIZ`yB1wFnAKA=*hrU
zgaOmiUW&NJpwWWC!ZPKsSr%4OVnaf@2Fx@=j@Kz)W`QFD{|o~hd+4@T~Z{JtZ*Z*5x=^FCC#OC0iF`9_KXM7=llHkS?5@6y7iN
z0s;cVx{ZMPtF?Yb7b=-LKOHxOb9ZOi4F|^;TpNpyr?{9(slw-X^u^3(Gd{_Bo2o-w
zG$sgG2|C?wnDCkP&th-!UBoyI_3-x+lQeg*cyG3Il*Gl~i3XRLsg{w$1u8TU6%__cC*hp@71T{A}}SOGRKTrrq$lSO;$sxPvddbsZpU*l_gNc
zu@M*9nEjgY>D)oU;|QFc<&w=75CJ??`1YBCe2AdmC|@{O
z4Gauso1Hw;ju>B{yRS_GTUvPU&fRR!H_d@C6#zJJNI3Ky*-Q;K>&2L1hsh+U@Q+u#18)H$1Ox?a6MXVUn?{qxH$}6M$=lwy>~(!=wwfd2(m7non`N
zz2U#?5;$lC8a+1K&eWl}6B8`WjEpk5w
z75sjKSZ$pvog_XD%@{v8St1_y{`q!8bts9x`~C_qh1-xJEG#Ve>H6AvmX~XDSLM0G
zZtZ8U^iA?(aUe;)jQgepv(Xy_TsC5D5fh*>g-Sjb0_+$E`)x9v&PQ?a;x(70=DJi?
zQ;HRz7kYZlddM7`j%779H70{wD%p%v&IDyDbS|T_WoSgg4=vYLP4-(f8+~3PWx&@?n5{7t>=NqYE-zVq
zfo>}KTi3AT$wUh2%oR&xG>jaHzBQv%CO^T`Jvge8YhM{w
z)%Na-qM%49Aq^tk-6bvE-O}A%Dgx5o-5}lF-QC^Y-FL9}|D3b;bI<*D*9Y|xSj;u&
z7;pUI9rF4E32hH|2(Wr;>gs4rt~7RglN}2SfjK#bgHQ<@AQi-w{O0nAyZPSfov?^ZLu0le-1bxvf`Gp>zAz%7f9@aWU$o)B|y*b-j>+pXMgFGw_
z?z7=NZT5t*)5Wg5_f{_`e%x-)Khx3qQ40kz(Z%dI9WSS@JWWn2Byc+T@%aSN=$|{L
zTR##9qdh)tK7z$k>eS~9gF^O8B(lB3KRTAthAJ4Bnfw`_blK#L#5KPun4B;
zo1UEw&6f#{i7`YDlL;eWz<|5FyaXjgnj8s`wrw7-;KQObgoF`_T3(so-gNZe+#B?}
zE*zz&rJbCa-78#aR9kA>AI`P{wD{)X3f=o)adFXft}zsaTp=?S_AXx$0YnSF6<)93
z0e;_}8XqWB&WS;dY$5N{KkVbjX=Q_nIoL0lF0W&x?du=^Geyw~_A&h(BltqG^bRjdXiEe)
zFqqEQ&Kes?l}ibPg?(Qou=eFE+XNE%i$svL{Qkg4qS%N9lI<^V?^68%D1{;w$QUBk
zv9`XvH++<6d|wzj&%DUX0mLStrD{OS2~rqT?WTp^!{
zt{C9HnA}abpq57?HXsHmcxy1x;Bejxgxudm;uzA!T0FqVz-oI;L$BXYOBWLBKffLS
z^yrdkFq9-+V@-IvIlwoKi9d?*Gj9l?SV5QY7@K#+xXZijUx7
z!eK0Sy8%2ntSoFamRj5x%;vv9*_GI}RdXhGeOqVR6BVinzXmFRGo!9T!7C+DRTQeZ
zVQ*5}Ei48_6qkJGg|tE_c;hgh;-|2z!Ye+b0-vCMg6Km)GS?mI&o0-_S=(0WLBlSJi&jRFJ_mrh?DrG
z$ZLEd*i7rl-u0nmTt!9Hm||#{*aTL#&G68GNLU9Rm9boyj(Xio=mjSKdN%>9#+K
zK2g9ws@QNvCS50*Lj8*u%*M%u8L)Nqk*bWxJ6~X6cnzA)>>|0}=pp`<5-QEJ6$;`4
z?yb?l=I?50NeT&hUunA7sp(PhC2v4kLqt?q*jfe|zt?WFiw;}bXaY)7jB||qQrEd7
z$tY+d`r%|#pGaNJJ2TNGXgBNwjMvYZvTWHp2};lh2sg(DG-Nqn-2}iN%!LtKXi!j4
zI9@Nm0K!q=QCNe>SFb|E#l_v7GSM1WAXhAGKW%!xbVN`?^z|!y6zldRQ^Yh)Z{OG1
zTXc+$`ss_SzTCt_dZEz>Yw&O@9)QX0My=)5|Rw&3*c}#c5h3s!THxL3UDqmx3sjF&ebNq
zfV`8gIqeek?)QeXDV*Bt)18193!Q>EU@uR1IwJy`EQZ5r9t2$7nbIcMH6KGKY`CLPz9$By*l5I1{z1%XK7E}7c#?qELO)7dtgfj^lOlNo1EYVoS&*+*
zGHW>Uhtx(gtKSF|LzlY~o=|WP$CszAJu|+)u3r^C+)+Q>H~5tqJb4IOf*u?cOULHj
zp?I>qKO=@qN?}!$1@TC`4Yow2)Lsc-ou2wiGD2)F%(nGqC_2v8oqVPmrFlz@ULQi2
z<>a3QasM#YTUBWC?c3*UiKNd&Oi`Z&{DyO+A^lLP1?QNsVQ~{Z#GV30a6S4#E&B!*
zrWM~pBi%-~0(W^TmwT*S8Hq}xx;+$Mh!i{)pxDWfYWW#}!3h6-cOsA0?bd?B{XPan
zTWvi(fsr(UKv-p5HuFL%2nvnz2$4vxEX^h^a8KhZjHPPDj2>f{JYi7CrOFMZ!-ooz
z*GI^gK(n1@IFbfpSv)8cV-sYtdl~6E;$rmaD!z?
ze4`ho#_o=ZED}aJ%4n(*E|OgFGZ7nxmy9ogu%L#!NM;!5Q~(0~HE?(04T}T3e3&1x
zWb%ns<|#S`-N4Pg!@+!8n-5#M0Wa0ow#i~X=?jA)>%)Cku0pxcMK@>ZLRVHOShN6z
z@Uou9@$EJ?GJ@B^ycTJ4N?N2dh|%x;y)u85r6Y~(5}0$=2*%f{kMyb}D!P8ei47wd
z$yY`S3zGxdwZ-+@>6uxZ$9pF^VY26U9#m(O&iMKPDD?D6#%e@~8*lWnByqU4A8z45
zQ2=IH(f3AD3vEd({0x@65&E%!5i6PCmc%mzBAaRN^i
zgW!q=E$72cVzUN&f`S+*(u8~jZ7N;>-F*t|{*=~@}-x}0K;Y7rA0CgZ2&
ze&rxs?jM<6UM;dSqoZLPeWHwutm-5%~c@XLr`8c#J++FxDh&q=a>v>GGA?Rr3u^uTgwF6TNi=$WS8qWv*`dPq}YRNRq|jkmI8W;f32Ct!ul~
zw{L6H#qR0ohZ>y{Mwxl(t>;7HZpsTKSz9{;RBKH*;tjWUu`DOqVu3LbDuLc0vIE0~
zuYVamQ1NNs1}yE&*Faw#Eo^Ov>O@ef`+*`64gK{W`Mj6Sq4-@+AUT4&X*}`ANVogE
zdy6NP*K4{~FJ3#orjwuZOUrIl5x|Ze*o2@)kEOr#=6hekWq!JRa-@=Y(
zw$WspYs0`{+)CHll3wo52&tJ;fXAJqSVRR7v=omg9wQlSy>WZ733R%;t6*~Z6#W7W
zsE5vxmQWDgXpG0dQczMVUuIL87Uw$O%?%nc7|q6vW{O%JFKefzr2&A98z8(XAWh%j
zj}@6NCb*Nm`wzsrA4VT6#;Qk$Pe`1lGP$ayCzQ$2Q7o-ub$sC>Aw5WGuG(a-%=s&=gbi`M_sMB+deJA*_&)
z&>y+nevqEVB3_ryBS;mwtH&{!gmvQc9oZ??JJKEktwxcBI)U(NU#O1b>H3c9(%4=5
zgt$Ss>*GD^-ejS{@bZrcD%m(yQYV>bH>K@4Ie?73qZL2w9~=}{R`#Ak*7J72$mJ{j
z0Nxm0KD!#kY{}#T`l!nzQMV=Me9bD~g}N*KoezqCBB=5YHbfPzo$K;7Dh3Vp42=hq
zIESuJmN48AFc`k`ctVfnJIOMcPoFDHvD*-RZ}IfTbT3jbOF|)!rq^zDRH-sgPMrJ2mBNXzO({o0mc!Aq7LkJFgo3ACca$YT5xdzSj;k^h$%~?#DbXm8s;0P5%@
zO6pONUN9A=$shx76r*L$>60#Rx?G
zx(l^%u4*MO3k#|48Jvu3aZ9thC(qI7H_7+0_tDQgift9|E*2acfngS*!CeRZ3Zc@gbj19>S
z75
zs6Y2J{;1S?D?bTY**pY+5u(`jhFhOKIUwLADd9KomqMcCh~*f5*S&H_hJBSqNW#BM
zIvUD9s=AQZnpF{MO21p>(~Gk6BN|AnR+AgJ?8u@fYd-y&r&yT2Mci_
zWIfS_N0Mv0_}T6)MxLw*HEo28`{$k>H;FmlqQ^{nlsR8z?GAxXGyt954?xYXlV!ou
z+p3%(Jj3EXMy^y52vevr1ZRn3o}Ed`1`_E|tJk)!3(JbRLp|T&oT})N$~y!cw9en-
zj_YSyE4=ECd#QXv`a2goA`L?c@F|TJoLE@7ROGrpSV=}djI{?fk^XZ>4dVtx3
z0criMul;8l&4i-1Bq`Y;fH`CD0XeG
z3aQLmYizc1WwSpzomQWnW)8+k7pTZXNF=#7ppC2PeBPFUwmq0d|4y#>#5h}Jv=+r+
zoeQGabBv}pc!@^qirmxF0|E5Vi6uHs-?oQ&?oazH&^3nSW=wZuoXmu3nEwvJl&S$o%mR8QbP5nNuJkK+3{!L<7Lx(X-~I6e
zLEBNSoe90gqbXosB0582HRgH>2SY|0_F_3*l6WlaY;1I<4uKwfWJ0T(LEd7hCqdBE
zG$E9^BDxCIB(ucjL+
zSHs{i4X#&MWy!Dn`PD99&2>&C{pT9FFLSaOhK8Om%hMB|EV7q`e{}Affq{>|KmFF=
zE*HZ)N9ULCQE`P_T{*zkZ=IWCAFxtBfHs`vN6pfoDs)@#+tR*f_s~FvKVJ(bfBF7W
z2DP`ytZtGdV)JaXTRb7r&bvQmT4}Oq=_@GHlienX=4>@kOggnSXpH$Uy{
z=pY<$;@X?=#N%tyny;3oP+-&h;cRVI33rGIw>G^YKxRE|jv7n_5A9u-(`v)Yn
z!!wGkq@-)=?_de|KsL4qlwZ$z_h>kX*9)fM!Skz+Cp5y|pyoKae;E3ie$G0G0hZgt
zA7DP7X7Ky2vi?a9P%wbtVdlX`!GLay?&Br6g%b0k=Heb3
z3mfR_Y-&9~70AlQ{Ka+Ngc_qj5KzOlk>?<*ZeGvl3Llse3nNZO*&9-7tn8Ti`_~bM
z(tem$Y0@Zo%yQ5WWXW28)!+Tz0tO?{J6*^&JVU^({zZ;v5e|r8`!fv)sHmu(^>xky
z2K;p0brHjvfM0H>%@oh*d@gZc!>ng(G_WObII*<}`vcPC0}@i3W-bu|z?5vZsJ_lD
zF^rjDvF6t;0k#^Wl8}hV`f{Ju)XdCETqtQHVtzNirDdqba^*7$nF391Q&d45WU)=x
zp%_qWb`}S88pzUS7akKOvb*)>DHbVRZY}9^U)AwO7htU;%S)z@q>LIK-_0g%zoA4$
zHLM!60u$LCSd5xL(58tSnMQAv0#7JiT$fMb@8-N7tX
zI^ElwF6(^e{Hx@p;!e*|4wTZ(V0TUAO=X$1yCNAF5QC2h*GcI1=Vw(W52WTT!nVoz
zRJBz)!-m>|no_+Z4rmHsaTw+^YU5;%(z}9mw6%E-*ec-k9>A4O7{Vz^_k?F(
zGamDWhAAo^T}00o=L)4t0ajB`Cd^Nj*^ol5tBl%C7q3ihWy&9;7A9D
z()$xDzF0Tv!qU@A`^Uzr=*Zkhg{8T!UKf{|kM0N&leIQ_0N9p|y8=2*&G~t?v514&
z3VKk&=z}hYLgU_`^004o6p@*kxlp4{(Av5*HE^lUAvmR33$%Zjy|uM9GN1ss%j}C|M$;(}hkS5RjCr4XFT`+%i@M0jOw3
zir&8S>xgcscbn8qXtXbY;8w`+D~WhKI
z+6EyQh|_a4mQ`vuCkTT|)t@FH`UYmy=_*#VXh?$n>%d&MiOudu)|K_1F@6Doc-KOQ
zTzVh~v)mMe0Fz5tSXp0K6jg2MO04y)5#LwbTjUoM7{-X;BLCIwf9ihAde+U)D>&&C
z(5qQl$f}a_sZwNUEXBCkvsG>Q$9Eujj_%Xts+z>*
z<|mSwW~qIK-h5F*tEVhTZX!iS@y6G=vmnJ^Np<#{g+a>&bhP9BD%awTfBIyOG+BhV
z4jsK=r``#U7~yB$sxXD6LVw4dLy!9@9ki#57>13D(?h^lwPm!B*`Lg2JZ?-;^PQxah4SD86Ey>E`YBJ`j83+8AFM|Ud&g-bkkxvV^XC7jJkT`
z!h_LI>C5ufFhU08pYRC#^mofLhXB=q#%%wRifXXjd?Bpyfy)52gVzUDJD}00>f?$>
zx9G(w`YZsU{(IyjWn3m{(N#ocX=y81h>ArTeGD1dtTggCkI^&&-1M1Gai@pk6Uhy-
z^>{~1eJsq0b#<8dg7E3W;eyjMGcV9ux0F@4C`8)8YS6tZPculfLoN;M(
zFzE%C)jV#2plBPEJ1B$S3x^$_oo$S6^a-wTIULS+fc2Floz7-3_)4lu0=s#7ugG+U
z4i=Lu2B24|a%3Zh3^@}RVoJD?jA2w4zgt_OyfP^f5lcIxI3|k%aR#I8m8Pq|X|F{T
zPGu@Y*}bzC%aPJ|)-ne2cJ!wUv?Oki7NGNqb!DeiVMqrx>9f>DI1ETonp<06nwXID
z#p-kg0iAGfNHn@E!&W3k@OI=WnUOMlZ@GaS1`VltZ#0CaV(Y&>YPF*rpC$arahzuKfu<^X6GWS
z60*Cdo+;ZrR2KBoRyOpM*++Gg=o(pQR15R-ju*QVs(S~liDT8Fh`D(=4xv?S8qd0*
zmp_)ptKzbPAbG)_f?JutPd&8dKPH&7!V546PcyJlrymh%cq$g>5
z`_}i%t#<@Ks1Xqn{XEklO{NN)`}*DyXP4)(U*yP9!u+xaby>5Q}z&euD!i{IqrOx<|7
zKe<7%+wW(&1Q&uW?q_c{2TY!73io9&-71%jzK^rYUP^-$$>s_*_7~ww7KLh)nEVk(
z&GB4Sw?x|t%E8#oag$~$rMf+Ie-w)Zf4sbjWq06-8tROo6)PCgGK;k1rnhrt@=Dl+
zK~I(1zKu!{cA@t%b&Br(sue0$C!oMDL}aC%i^wiY`A1hYfiv8Ydm+iXAgo1DypeZu
zKN;DJ(7rniN?0K#A(x7bEDi|0Ecau$F_{WCffB6DY|lRY&eU0#zy%(gtu^QXj9*e*
zn+0_{gWhP{I8!{%OsLNjirC1I*iKVcy^HL{R{mh76iG~z7CfP7lvbO!xLR$_yOXI>
z`FE~vd)Y4ib<5qMI^+4ui6c6V>)`pTRa?@Ion}q41Eg+iP!sfj>iK5*q!%MXfaD2o
ziYlUETLQlpjlu8}sAhov6#|3t5})lhl84IK*}2s5#I?LM>h&4w$@U47shR0>rhd)w
zE@lhwE24^Sd1*dSMZ_`S=}weF>6&$}=nQ<5cLP)|hr!E1Fuw}lJ((#IEO<;^2f=4i
z3aPBe>PnlCSRz|sw6-=&UG?!n)mmULHizRc9L~D2d?TGG3T44FeQ^*;XfXW45W}a-
zTo4lLY(bxbDI^39$g5)GiM`)eiE^dg%Kq*o*!C357!$Lr#j!{kZfgE!DTn1JIg12H#Xud8Xq%T{%h
z{>dN+zX)_Fphr8TB;-Dv8|2Jn&JM*6lkK#5K%@RoOD1cr+dW=zI+YSxPD1#4Xf53_
z>KI1YdyLu~5N#udjNRYqHawZQSl<@p3-CgQQBB3SsDFYC!e!?HmWl1jf-_ZdiOTDY
z*Pw(Cw59+e2tw
z{JHRUJ0Y!^#KNY(eB&SJt9M_0q*P*!-Xs>wza_y*H!u@Y(8hmHA2~w*{?myGOLycp`0WcDQX$oE(d{ZPju+GT*7>L?u`p9zWv?!e+^I
z!2I%R%vk!hD3;9V^Sx{f7;$I;VcW7W04E&gczRBHhk&)Zyn?S*>-yS&m>7ico%tPE
zM5OTQr%yVPkYyZC5lmXz-tS8wR#s|J{s8mX(k&LDXaq=5Kf8hl!j}{*en;q`XYvZ0
zeq-nhy6+xnwwYFCPgTeh7Ln4iFd3@wiN1E9v1~j%AukLv_eQwt=b)>=pd@~f9H|$O
zoh>&zn{-lLTAz_sC;6jWG5da$ir##w5$M7szm242QfP1lQwzZx^hKFL1s~+=S{R?>
z)Z@CHOV>_`NJtQoki?`3G>oBHG}PAvFp+NVj-I$?f|;j^L>J&E=erZ(AjFQ8=&*w(
zj@=<6(N-ilzq1(3D)jqE>BpPeZTpjyea%Jz&V?f%0X8Gp)L5
z5m7b5u)-KQ#=Lv{Y=4H{e6d;pFdRL}+#XSGOfFlKiG3}LT(UFiGP#bxVhjWa)6>(y
zUJS$(;$~$#lcezgdE(cqL2|(dctv1`+$kVu>3uqlp6OKQzhY|NIuo
z{07Q$K|Nl+HWtg}_rUqx**E78Zc_>9a@%+lZh_cudAqqC*ZtewSqbhP5BBXnw##Hl5}&pC?JTRxDK804*Pw
z@bMEcA<_lT@(KlNiA2$WtK8cjzmWx0EI(i%N-4^?7PYV_#AnWrG<+eBay|wy0Q#uc)gE&FD|!A
zF1O21K@cKys;j^Gq7>Xc;B62b(-%i$aQqTCVGf96An$+(iOHakVqu%cyv&<02Gn=y
z#Ro)G)S*SrTHhb_PNNcHSyfMf0)c?VrG2HUsv2H|V!25HBs}ZFTWq*w_V$+q?UpLA*q^Zm8j&K;hp3nxpFek@Eb3EH|P2F
ziO%KzqG-#{r2E@F>YdG#Zoguwg>~DT(~VL$Q)Ba`NzPy}Ot4|%1k7h?o2tSAd<^ri
zLnl?aKf1v3)zN;`w9(r%1?WM&UdeD4`_^Pa53ojZ$DPnb5dl5p{-i^MO0C}6Gx9;+
znodDMApni(7k~~7oUv^KR0~wx9_Wxx6=L7tONgr*0Hh7+7E6oXdmK)u5r8(5%9fzq&FDpmigRJ){nWm+6
zwylpKm|U377r$1H+L2&
z_ppj(zAH@bSWUtZUPa9nw<`AadaE4fm$ZrK_(tgxM0D%oJT~$BA{te00BiKO4*%2%
zLofi9Id>?ocPv{H2(j=OO(s$_9%^Hw7MhMAfJg|8lw}yJgv_d%X^#+K%|$h6C;*C-
zkWhDhktfEDh4??*cXxN`3VAyt>Fi0b$2Q-INzjhZOwYzxs~$zvIULaeAtUI1V;NmA
zn3#(8GBl?%aUIHJkJ@~Kk9Q}?+3a?|KF^+T29!umH`wx?fIc64x<&zF{mXrK&dnXT
zxZJ(-Cvfv(Ihm4SEOD8&Ey(8$-wGyrY|kfg)~$sOc|P1-8symM
z3o#imW(o51r;QkrC=PPmHjx@ur~u#w>Pu3+(~>IZA|udO-5<9RfK3>~u;bD;ZAjIy
zIBu^6?_?&i&^oU>X}?%CcucjKL=hp9ZaFtNC;<`(c7Z})iO!SiyZXO1r}f;{o1vsX
z@*{o606$*x84J!B*&6|iRPUBtI9?28>f1T#rVtRH0=VTsQqqRynCdNtsIK^CxGvZN
zf<4>0hB0ybM7paIOn^;FO7D@?|eztmlr
zShsWLM6HmoHW*9)0{nnfMzK}CI~X4KsC+^UWY)mY(+rjwfGk5JGFAb>qkIUh{w5Ms
zB+GlM$pv#v){pbA!SvkYbBZsnYA=CW6(0gn^xo0Ys8>fzLg|xIS*Av=uC4(J0$aZn
zX=&vORAOZ^MKE9uXIe%^K5%n$|MW~YQ0g2Ui~_4Y-3;(^sj5{P^|16wZ>BIg4#c}h
zssNY6U@;Pbvrt#!HYb6@>D)icjr!7ZqnGhBK7MgUMY{Ed$a8HA^q1DV<2$fJ%zC{R
zfD8e09ZfJ6prz&v_4#8=c6y(plrl*GjZF;T^XQCD5%!mwa5H&*x&+*~}HoiR`ac4r7T>F(9;;0Ys|
zOqr!AmvxHW*}=#5N
zk~qZWQSzBKI9nk+=ug#Qt9ABL20oLl-H2?_sXJG-5
z33UQOpT+U`c&@S3LD2kCeAsCqk;5s@`NH;QY_f1hONLV%y-lG|MHGlzZ!W4dS)9*V
zs5R=rYJdX$1uq{j>;@1GzBpX05sIbLi(xgvXnJDuOi4*$&?`+R*Nygi7X@Ou+3m$$
z!fb_!)!Ho_ffqlR$+9z6$Bhw4G*?Q<2n~;wWjsMfq1qTjpA8A<{gs)rFCQsY;tpze
zN6=|6vc#lPntMJIQdA12&XJ3f=)TQ-Nud1pYpsB>3T3Tne%OlIj&wc06_dG28;G_w
zR%;)vtZF$j8BHeJfzAvJ*~K{R)t@jZYoq3V>TUJ10lILg7cUH)?zd?Hd=^2j8RW|?
z#FC
zd-Mm3U4yG5Zkn1W{flS7i;u4@hSi2jr^~&=8_wj-8x~Q+uWx`V$7*L3Winr*4}gH#
z00VoL0s=}VMIkR&xlFL~h?x_pZY5^uGDl4jVBA}F<&C;rDXN)>oLGWzKLNUDgeJ>8m2H2;E&TMT^Jy9oEw3jv2y0pNu3p
z%*u=t?+N1y*Si7!$pXy|U}ai4%_Qe=yJc8t1de~4I7W+Ba6egXw`oG9rKgotG0|_%
z!F=6tJU*zA;#6EzYPH_scMd(Pde^s;U4w%`uit&dJfN?TY#@I*n4kv+)jp?@K+Gx2
zlTkt-GT{e^6j0KAd%PEj#d#Kk=!tQk=!GfBa$#nWx(^D>Nk!I>Q
zCn8sRrh&_JA<6fao2GFGz|cZWK=3Q2`4bRqzO5
zHPm&w;ek2p^_O+-C67dpa*!CKVSXg6b(2rBIt>#HdI8r`W(Mf*zY9)=E%m-mzNSwB
zevMfr&JC+jsa}@$bf>qrAQ;WZ%1xLj^4gg`-a
z8=OkYZZ9<QRq12|zL)Mx88_b;ol>%e9+l1;mQ6OlGPhm`M&FbE$tt(aDH|+M`28~WpweHsonU1fYR4rqsHRS*F{_dZtIZa~
z{n_91D!2#?zy##Hztfokz3KIP;2-VFk3BOS&A>w;i|7KbOn^isK|`16U#I}Low1T~
z5)P1hx}J1MsZ<#Y#4}Oms#MUyU&6O{bbUZWYri~Tua1;3hv7uP;n1D0wm{=@r2$h1
z!MPlCeZ?(1sUwDHELtR*ffzi27!x^aHHZMu`}M0HXqy|nU0sbUyn*9Ss#47eY@r_&
zk&Iv((*8nSGNFI89!4Amdv|Gnjx^Hs-H{hbga{NIIuDQ-lF2{D7|FViic|E^^^l>Q
zygjLRMGqk11dQiP*rx9}RJiV6n&qA;EQa0&Qf+GrwKpvgY=g+;8JUSfTT(LLe
zOU&L_Ixa{GrD8N-izAc2Ws#Lck+t*MM+6dl15R#(Wz>h0v$IS$AN%&sPOGCuPB0Vn
zx34d)a%D!>rnqW%d{-ho_T00Q5)7BM-glGqBSmyPkk6gOB)m|yeMd@AAY)++q0GyB
zBba;s7VfRy;r#38Ll;0&(zdVw6CDTu6{2hZM<4o_4515hAncW%e
zcE@@0Zm?;@aW*67hmYu1#UJ+jLes?$o0J;>IBD=5c(2|gqkSz}yvXb
z5m&=&*$Qksro4br&YUbrh_pRBpv$;L$kFqS;ZHn~h1#cR?tDpL61!HFc)j=ahv}9U
zqOKT#0095qHZsDs*Scf5zkO1rf=za9kuub`y}R2Qz@3#+EOoko5dI}f`QnNWFbE`(
zFu)O#d~qN-lC~IteSrd?Q9xPohlPdFCC-10>Ab*1g-zvML)1aP7c#(sT56Lq%A~gx
zLF|nv?sXm#2OhW_glzr!2e0lT*p35jCmu1h06kHiNzSuHBI1rB{fXrnp)
zT}t#Svc8BHX3IuYz~Gmw-z6%l=@5c
zJerPn>luM|SNr;RDlqm@sN<)8GWo@UdQV+!J)!yRgyCN5JgOu6%U<~Av8yK(Z_E;r
z)RVMW&PFGUAT>n8A|!OgSk}ImRk@V>{hLLohL%^$V?ky{W1C2TMg#8fB5k~Spc^D$
zh&Yb^U^-nL`2Y={&8l#Gsn%rGqLmU6;)sLO-NByi^zruhb~OoN*s641c<2k!OhTr~
zN|w1g8ImGYd69`Mt)$Q1I)uWA-u+J>_?M7lJSCWe4b(|6O)0{enhL*sy0!!Z1_E$6
z!?w2-$8)3;d*#V!wObwb=S-3k7PG89Vwi=!OhZ>Ex_cv}MWafjNJvey`(&}A(8TlE
zUSyoxOo?Ei&kVlYYkuW73uztt}+uECzILYVAjAK7-fju;g15`ZP*3*gbe$H2#4J3<|16gZcf@Hw79p!rKJ>W
zvDq|9PPH+v`4oL5bTO}x?;XH;dENyxgus%_U^a>t3#BJ36YJ0v0e{hgWt-(HU$s-vrAm;By0NVafiZuR0S%24Le@kxv`%B@C5~uW(AYJswH+2sc9)MspP!r@bN+f?5!u=
zI6V>)C|CCD5*HwglS&9+V7saQW
ztY$da(#oo(a-Zrjpp>v_qcerY>q>30dV@K3$XRlhoBOYyL-gQm3`I9#sWrn0omrtt
z$HZVME(~(R#2_&>{!ENT#E3Yf?>m#SCbe-P6A{twH!jB|EV(r{E+_Kv70>f*$A(4nmRO=a^_-(0%?uq^M}KKUok^l#AD4X2$LvklMeM-n*B%xQ3?-tMQ2t
zF;$X9%$#KW&~XYaDl415ND_Cke=uu)3$hunmftM6Ui)9~&-pdjRF};RBj$C>r|hUm
zD;a^;tf}uIGTpgF>FBO$I1}Y_b0e-F&JS~8dz^glHY7HY6e)(l==$kF`#eVe6%#3QP7hNkA30N8f
zJuB(u3_pX)23*9?l4A}A3eT1L+%GP$>g>q76cxg-;USNCml`>yo47lKg(MS%LN1C|f;|#vCP5z{H$tc-|C|BlXqDNfWr&O)BJk!TAQI3f0F!SF2hL;OM)5ye>b1$+a!wzKy>Rd>NsI7?@7Cs2jD8vWPx{ufpXXU>D6k2N(JLZ8KQa!>;Yjl8e^Jq~{QjGkqPI7#cTdmQj^y
zc`_&V-#1Ul5y|aEA}#+_I~MYr?S
zCX*q!Ftp^{$u3ZE#_A%K;a4o3t1;V(`L9tuP2fVAJmxpKONg>`(vId5Z^8>{9rHIf
z=GDxx>0T98%$JyB^TowkYF7>Z>-s-SFPIBv8EMd68VCr$T9~e1?3*59a8!?F>IS~>
zG&7fAI?^$sc%bKl?S2yyjq{nF_2-b)+dA*rl;~4uTtY^7rm5?<0^iQq)5XOh98mR*
z1>@pl%kC~SHA&i^OlR8<_9m@Xx8C^QWzNm9cK;Wd}!Y+RrsIa^>WN
zesPxruOIez5*W=fn@~jF{p)Yme8y>mTke5gQyLOE@?2ySP#--QP45s$iN4;1{k2JyZnYjaYX@R5a
zHJ4l~G{MxG5)vfsg!n?G6rAb<|2jo6bYa*GBeukQX^7c$dHvKH=WvR;mRdiaP!F4e
z$~%9Z232yl|Ee=;b;l%kX*tfKV^F_FzNqx*Vduquwk)DhkoZ!O7B`UhsDxF?z>t+uIV*caBZ|5(Vg*Us8
zIXT|G))y_ib8))xaGBn+W@Pj-Zj(?m8$NHE=eCa
z9rI+a#KWV1ug1A8aF$Uu=?Ln|doyH>3M+h&Q>rbNzi{<;H6f
zl*_4*Q27*RLrT02tYi?0738GQ-WXyzX;_UK~}7H^_)VNS}@KJRki
zn9rC{{|ticEN8&7h$~4t!j=`W^NQBw;EoWAzBDn?8ch|Rkq7Tu?wv`xztR8~>nay9
zSpC8di!Cc^Bo?l|kuAQs?o2<+?2&^|SXeB-KyT^RnX9`yg@rUXQ~BQ`71_54ZeIoj
zR$c|o)J76aJ#S=i1z4Dg+D1R(vy0YLh2)C0&FG@Jn8KzM4TKD|UYh&peRJ?J;|hMk
z(OFte5-y5^+2eZqazRLe~N?;A9maj7rO%v
zuvr^Q5x*;1TYulC5Swb9kY%#IUx_qT3hzgeJZzio)#d0s429Ac`uJPPQ-^}E!rlG)
zoQvX#BC@S>>bNYOd0EBMUWW0~X>qVOZE|hpc-NQ?|HC||Yr#M6>*vo)x^K;NJBe7}
zVPB!CYf4JXAm+))Si=6I6~kFXLnac1NEODF*Nav
zsI{N)i|{!(1P7zYwk^Qx9*OYOmBVL1-2
z5{}RWgS!tdhy3hKq6O<KNq`6v9(A~wVZl!NX5~`1E%uP1V3pZoA2Lc
zkF6y}t*Ll?Rh_p)VpN?xUBMhWU50$pcM9Be{;w*?G(EfoW6%5Tc%*Fky}E|m{tNvE
zS>EEZE4H@k>(H(m*H;uzd$DTA%e4mqCRud0v#e_84QpuJf4+-l`}U>{DV^_v(dO28
z9VI-;gPjtp{v%u8!)uOPWm$~-7uN}Wa!GFz2yOIFn%mBl=8ChY2=3$T=#q>IL~|Mw
z0?8NGB88q>bl&;LAGr{(X-*Pi8
zC>3VX{hV!x^ZXMvMczI^Ug6@}VCUMbHL1s?Pl99DH{Rikdxwo_iR8%1J!_Gtwx=W~
zBnyQqC#r+ZMI4=w
zk`x)$V;0}dGuEz720I(r9~y(-=NDVGJa@RYUuc*X5Psk6^(o@50_
z&4}GAncNf|d!rpS??k7_u~3q|VsJ01xx5(b^o#qNlfH@DUwm-^t8J;LLZA=DavD9_
za_}t@y81M
zrhJu_w2lFK%EA~34I{~Y5>zX@ZT>ZfOKoX)4(40Pl{LyY$|@L8ps3?=Zp0aHH|-NN
zCS6bx?o#+xobQf6b!1}nheBV}tm~t4NNKIcVtxtF9}$t9!)x4wQZ4*y-Xyljc()*C|k7S6_u
zGv>Y|kDvu_7!k5`bTkXL8pz9yoU$vu(+uhR>(QkXiHiR|-F`ZA3{iww-@&Vu+E
z#ILDG$G!>H6R)zwZ;_sCF4poFwbQ#(wK^&1ukvkJJzJ0+$ptnVPK8$qJGEItQJ*B61H_kQ-Z&w-QfnIOKdX8y@
zmK_w+tex&L=+%_Kr);V;(1c*{xI%qz$O{io)#B~kN_rEJ;7r6U#`e>y$~_sNkGTT`
z0Sk3q=6s}>eHiQv6e-dI1PGl_LTDk7+zo!;ob%0`
zJ2PkI&OdX9-!HHs*=w)$zR!BzvR>ATRnu5MNy#CGrx4%L(Uo%LH(smzWR=RX?3J#v
z!8%{B)%iVV7wyYI-Qi;<9Am?L66M3-qX}Z5HyIrl85wu2a-)H7)H>TtLgU?s4|PR2
z&Kdg+M%#XEN^AaH%x*tA!kSRh`&!orB|o?u`E~k(Fu!pq^u?u1v<5cME^5*y-<+Ct
zm>az2S>@K(V1evQT)bK=yzl&K-9>PYkoFY)#qR;fBUUw?01?gL^2=Sc3PlFY%ajt4
z{dW~c_bybYb+dS`TFK^ESEO3Wvvec6h%1N0MG=oF$dmF?wKwBpC<2
zT?(&+2I!aUN(M5c_NmRDS4AQVHCx5pxF^;iQ*<;3u>v$L#O~&Ah_opX4OJF#8!3jK
zuM{V(3NE$uq@wje1`iK<^pYpd=FK`kQ&(YAL43xGmby+u!CdurzeGI!^Zszy+HF@J
zXrOtg_CSXzNjX#o`(3P6yZJOok^37Z>s!V*XFgmw%jhK&K3DaEY6EXR?P@OMZN4GB
zu&(-0C*Em=s%kFllAyNCa*=w~(qtOH&G>G$Bb=ciL9b#$@q`K~YHw+K;O63YBdoXd
zTpSfl)%|?rITiGn^dy{v0BYDahxWLW7T@J&R6mu#X9%McQW+?#w^WGseYC*7c#hdn
zSINTHl}wX92b_VA2Ow~etyt>2HvOh9`FSVQkMmQ;EqK^W=LPRC7@IZXsEq{PQ0!~;
zyXW6m9w>C#k)~0EtqLhy0bbyP^j@%wkTpoZnZqiI{ihS>;6mjX8PQy$f#RU)c|sM{7bU?*;8rK`p!N^N+ec$Guy(CF)BkX{67{gL=~--d8hv@mB;u
z^`9a6>%^ti3l~roe4{Qmubo#zW7U>-PuO=pp4-Fers8jgZve4$NjFT8Fpj0EwfQ8Alh}w=CSd;XDUD{<~HxO)ss72VhR1Y
z58t(k43)&07ejIq6vUo0UG1uSm9>}?q4fH5_3YBOttGC7iG8XM`ZHwCw0fTuPukD<
zkk=T6jKhTal@m`TICR}ghVSkz$S_}az9{CpPefX`&2rE-O|kju5SVzOCGX_O4JKP_2G8Q7s7-2Bl1Vb=-a*LRlwkveu|oDg35t+{u@ILvH4RZJus
zs&I$-0C!^E)`f5BoMU@CV|U@jB8Rn%1M__H)J6*CSO#w~yqb!%&1oN<4lB3ANO@^4
z_VXifqeqC2co{-vyKxF**4FL36-_?W))o+OSrbSn5axCpXw^;
zuJR#02hyB2Z^veELieqPWHU39M|jZkt>!i+*|7reEn5Q-I8?^8ZnquBMea9XZs)&l
z@JMK{LwE9?1K)S!goixk-ESl)(jF$fV^W&(6XUvvl)2QRQrP`<{qvK4#`BN^W_?|)
z;c>xBB}?0o&Ds8EZ|OE~it$5-x00?3pJu9UT#7hL{cc#sRb)T7lC@)0FIH$UA&p0+syQb-|F}>#m&6WSU@_h60bEaWWpCa#4ttXB1cYGMBP#;Kf*Z=UQ1IgI~
zE(Ci}_-(>iO`dPIFlh~bMkfNkJ%OL5;r??s(e629!TgQw^$O5wM
zdjJ01dBnPOI66$qKWg18Zk5O0+);G#^H=csQlrKv&yacnSvwQws<(%bRfiFG27T0H
z!<=PKvyxHv^weC1%SSR78J>K%NFlN=g%)LNYs~kK6AOMj)~oL (e=^iOQ-#9&i*7r`?Dsej8X7*5w
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 D#iqKOH5!)f_ZtOU1G0y
z!_F(ByOaC-PcI(|Sqq!zVY&Hpb=*3lc@Jv@S25$dK;`qN`-N}*mGlcAhg+IFS-DzB
z#tM{l)|pVN|Hy4@l3!Y?ON?p`I`KXJo!U>4_NlGAj^2g`RkFG=-alou^20B^?#L@t
zFjG%~dA}20X*LUJX3)^DqtV8jTyhN_`1c;*)@8|(hzm$z>Hra8erQRgaiy)P+Ji^drXzA~hBA))
zNe4bat>*hMKP!qbE3CY3zi!;P+NY-MyTCGQEbh&oS6xC(Yp$4>7x2$r1qEh?L4V)4
z7u3U=RUq3~X26&`gN}~&jSiyG#U;er;ui0cp(yL4UyRfiLa^by6`cj1@${kwgnlMaa~sm)~B%D9&T5B_3>ucGM(+O2bK
z)TtBcqc7Xo3X`CwbU*mGl?JpMez^Z-3PjqY+U3mTxjij@DE{S*epb=Ida}Rwb*@B&
z4gT%K^<%?eD8
zPc+PLc%>DMopNC~H|&D-fL0YKv0XjUfX0?3=atgG4H=!6#9qz4lp>-9vt+feU3HEb?u{Ug#9>K4pn;
zJu`D>NKB>WQusuJ>?fD6=!yLBKuPOPiTd)G>Z2htK{|C4+LHLgrGe3+l@r?10Eu9;
zyU?n@P{Hc+*c?C{bsV@o_4z;>6FTFH@64W(uBr@emU!ckz@GLHD2H%)8E4AWNU@%z
zkLp|TGr}(n+4n2Y+#*uxVCr?OV%(FhIGs$Hc!B4zr@La-fyRLr|MP#twU|y;uvbIT
zzOlxkd|*kYUSWcvtMI8(0UL8ixH^)fD6lA_$3fz)TYzQn@xa^<0EIEFk9A5A0j-9+
z+59oe+KNAhsi*VDI1BRs7$|@U>;e|7ZKkz`sc&0T#(?eeEJt^`8A;Vp>Q<%-uoV)J
z;ufkRP5cVVr1+fV3mEqoU>p)w{~l1znlh;#4_o*i4*c?8VJ@)S%k$Fgh~(0qYMVp4
z06$~fsF{Y@o0FL3uI@saJXZ|7t=5&rNBx$D_zwG(-|#eLBJBsJ|CS%F1>OQC~0eKQj#MnS|
zZbj_sCA3vm96jx5T