mcp-deepfake-forensics / graph_alt.svg
LPX55's picture
feat: add flowchart representation of image prediction process and enhance README with flowchart and multi-model consensus methods overview
e2d09ed
<?xml version="1.0" encoding="UTF-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="729pt" height="872pt" viewBox="0.00 0.00 729.00 872.00">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 868)">
<title>ImagePredictionFlow</title>
<polygon fill="#d3d3d3" stroke="transparent" fill-opacity="0.2" points="-8,8 -8,-872 729,-872 729,8 -8,8"/>
<g id="clust1" class="cluster">
<title>cluster_models</title>
<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="8,-568 8,-748 510,-748 510,-568 8,-568"/>
<text text-anchor="middle" x="259" y="-735" font-family="Arial" font-size="10.00" fill="#000000">Model Ensemble</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_forensics</title>
<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="268,-136 268,-334 713,-334 713,-136 268,-136"/>
<text text-anchor="middle" x="490.5" y="-321" font-family="Arial" font-size="10.00" fill="#000000">Forensic Analysis</text>
</g>
<!-- A -->
<g id="node1" class="node">
<title>A</title>
<path fill="#d3d3d3" stroke="#000000" d="M284.3398,-864C284.3398,-864 233.6602,-864 233.6602,-864 227.6602,-864 221.6602,-858 221.6602,-852 221.6602,-852 221.6602,-840 221.6602,-840 221.6602,-834 227.6602,-828 233.6602,-828 233.6602,-828 284.3398,-828 284.3398,-828 290.3398,-828 296.3398,-834 296.3398,-840 296.3398,-840 296.3398,-852 296.3398,-852 296.3398,-858 290.3398,-864 284.3398,-864"/>
<text text-anchor="middle" x="259" y="-849" font-family="Arial" font-size="10.00" fill="#000000">User Upload,</text>
<text text-anchor="middle" x="259" y="-837" font-family="Arial" font-size="10.00" fill="#000000">Predict</text>
</g>
<!-- B -->
<g id="node2" class="node">
<title>B</title>
<path fill="#ffffe0" stroke="#000000" d="M285.0593,-792C285.0593,-792 232.9407,-792 232.9407,-792 226.9407,-792 220.9407,-786 220.9407,-780 220.9407,-780 220.9407,-768 220.9407,-768 220.9407,-762 226.9407,-756 232.9407,-756 232.9407,-756 285.0593,-756 285.0593,-756 291.0593,-756 297.0593,-762 297.0593,-768 297.0593,-768 297.0593,-780 297.0593,-780 297.0593,-786 291.0593,-792 285.0593,-792"/>
<text text-anchor="middle" x="259" y="-777" font-family="Arial" font-size="10.00" fill="#000000">Img Pre-proc,</text>
<text text-anchor="middle" x="259" y="-765" font-family="Arial" font-size="10.00" fill="#000000">Agent Init</text>
</g>
<!-- A&#45;&gt;B -->
<g id="edge25" class="edge">
<title>A-&gt;B</title>
<path fill="none" stroke="#000000" d="M259,-827.8314C259,-820.131 259,-810.9743 259,-802.4166"/>
<polygon fill="#000000" stroke="#000000" points="262.5001,-802.4132 259,-792.4133 255.5001,-802.4133 262.5001,-802.4132"/>
</g>
<!-- ImageIn -->
<g id="node3" class="node">
<title>ImageIn</title>
<ellipse fill="#add8e6" stroke="#000000" cx="259" cy="-720" rx="0" ry="0"/>
</g>
<!-- B&#45;&gt;ImageIn -->
<g id="edge26" class="edge">
<title>B-&gt;ImageIn</title>
<path fill="none" stroke="#000000" d="M259,-755.7181C259,-747.1814 259,-737.3423 259,-730.155"/>
<polygon fill="#000000" stroke="#000000" points="262.5001,-730.058 259,-720.058 255.5001,-730.058 262.5001,-730.058"/>
</g>
<!-- Model1 -->
<g id="node4" class="node">
<title>Model1</title>
<path fill="#f08080" stroke="#000000" d="M58,-684C58,-684 28,-684 28,-684 22,-684 16,-678 16,-672 16,-672 16,-660 16,-660 16,-654 22,-648 28,-648 28,-648 58,-648 58,-648 64,-648 70,-654 70,-660 70,-660 70,-672 70,-672 70,-678 64,-684 58,-684"/>
<text text-anchor="middle" x="43" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model1</text>
</g>
<!-- ImageIn&#45;&gt;Model1 -->
<g id="edge1" class="edge">
<title>ImageIn-&gt;Model1</title>
<path fill="none" stroke="#000000" d="M258.9252,-719.993C255.909,-719.7092 162.3116,-710.7656 79.6898,-683.7404"/>
<polygon fill="#000000" stroke="#000000" points="80.7861,-680.4165 70.1919,-680.5347 78.5475,-687.0489 80.7861,-680.4165"/>
</g>
<!-- Model2 -->
<g id="node5" class="node">
<title>Model2</title>
<path fill="#f08080" stroke="#000000" d="M130,-684C130,-684 100,-684 100,-684 94,-684 88,-678 88,-672 88,-672 88,-660 88,-660 88,-654 94,-648 100,-648 100,-648 130,-648 130,-648 136,-648 142,-654 142,-660 142,-660 142,-672 142,-672 142,-678 136,-684 130,-684"/>
<text text-anchor="middle" x="115" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model2</text>
</g>
<!-- ImageIn&#45;&gt;Model2 -->
<g id="edge2" class="edge">
<title>ImageIn-&gt;Model2</title>
<path fill="none" stroke="#000000" d="M258.9554,-719.9879C257.195,-719.5082 203.6332,-704.8689 151.6633,-683.9929"/>
<polygon fill="#000000" stroke="#000000" points="152.9114,-680.7219 142.3311,-680.1669 150.256,-687.1987 152.9114,-680.7219"/>
</g>
<!-- Model3 -->
<g id="node6" class="node">
<title>Model3</title>
<path fill="#f08080" stroke="#000000" d="M202,-684C202,-684 172,-684 172,-684 166,-684 160,-678 160,-672 160,-672 160,-660 160,-660 160,-654 166,-648 172,-648 172,-648 202,-648 202,-648 208,-648 214,-654 214,-660 214,-660 214,-672 214,-672 214,-678 208,-684 202,-684"/>
<text text-anchor="middle" x="187" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model3</text>
</g>
<!-- ImageIn&#45;&gt;Model3 -->
<g id="edge3" class="edge">
<title>ImageIn-&gt;Model3</title>
<path fill="none" stroke="#000000" d="M258.9478,-719.9609C257.7979,-719.0984 237.8471,-704.1353 219.2472,-690.1854"/>
<polygon fill="#000000" stroke="#000000" points="221.244,-687.308 211.1439,-684.1079 217.0439,-692.908 221.244,-687.308"/>
</g>
<!-- Model4 -->
<g id="node7" class="node">
<title>Model4</title>
<path fill="#f08080" stroke="#000000" d="M274,-684C274,-684 244,-684 244,-684 238,-684 232,-678 232,-672 232,-672 232,-660 232,-660 232,-654 238,-648 244,-648 244,-648 274,-648 274,-648 280,-648 286,-654 286,-660 286,-660 286,-672 286,-672 286,-678 280,-684 274,-684"/>
<text text-anchor="middle" x="259" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model4</text>
</g>
<!-- ImageIn&#45;&gt;Model4 -->
<g id="edge4" class="edge">
<title>ImageIn-&gt;Model4</title>
<path fill="none" stroke="#000000" d="M259,-719.8451C259,-718.3662 259,-706.5294 259,-694.3297"/>
<polygon fill="#000000" stroke="#000000" points="262.5001,-694.216 259,-684.2161 255.5001,-694.2161 262.5001,-694.216"/>
</g>
<!-- Model5 -->
<g id="node8" class="node">
<title>Model5</title>
<path fill="#f08080" stroke="#000000" d="M346,-684C346,-684 316,-684 316,-684 310,-684 304,-678 304,-672 304,-672 304,-660 304,-660 304,-654 310,-648 316,-648 316,-648 346,-648 346,-648 352,-648 358,-654 358,-660 358,-660 358,-672 358,-672 358,-678 352,-684 346,-684"/>
<text text-anchor="middle" x="331" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model5</text>
</g>
<!-- ImageIn&#45;&gt;Model5 -->
<g id="edge5" class="edge">
<title>ImageIn-&gt;Model5</title>
<path fill="none" stroke="#000000" d="M259.0522,-719.9609C260.2021,-719.0984 280.1529,-704.1353 298.7528,-690.1854"/>
<polygon fill="#000000" stroke="#000000" points="300.9561,-692.908 306.8561,-684.1079 296.756,-687.308 300.9561,-692.908"/>
</g>
<!-- Model6 -->
<g id="node9" class="node">
<title>Model6</title>
<path fill="#f08080" stroke="#000000" d="M418,-684C418,-684 388,-684 388,-684 382,-684 376,-678 376,-672 376,-672 376,-660 376,-660 376,-654 382,-648 388,-648 388,-648 418,-648 418,-648 424,-648 430,-654 430,-660 430,-660 430,-672 430,-672 430,-678 424,-684 418,-684"/>
<text text-anchor="middle" x="403" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model6</text>
</g>
<!-- ImageIn&#45;&gt;Model6 -->
<g id="edge6" class="edge">
<title>ImageIn-&gt;Model6</title>
<path fill="none" stroke="#000000" d="M259.0446,-719.9879C260.805,-719.5082 314.3668,-704.8689 366.3367,-683.9929"/>
<polygon fill="#000000" stroke="#000000" points="367.744,-687.1987 375.6689,-680.1669 365.0886,-680.7219 367.744,-687.1987"/>
</g>
<!-- Model7 -->
<g id="node10" class="node">
<title>Model7</title>
<path fill="#f08080" stroke="#000000" d="M490,-684C490,-684 460,-684 460,-684 454,-684 448,-678 448,-672 448,-672 448,-660 448,-660 448,-654 454,-648 460,-648 460,-648 490,-648 490,-648 496,-648 502,-654 502,-660 502,-660 502,-672 502,-672 502,-678 496,-684 490,-684"/>
<text text-anchor="middle" x="475" y="-663" font-family="Arial" font-size="10.00" fill="#000000">Model7</text>
</g>
<!-- ImageIn&#45;&gt;Model7 -->
<g id="edge7" class="edge">
<title>ImageIn-&gt;Model7</title>
<path fill="none" stroke="#000000" d="M259.0748,-719.993C262.091,-719.7092 355.6884,-710.7656 438.3102,-683.7404"/>
<polygon fill="#000000" stroke="#000000" points="439.4525,-687.0489 447.8081,-680.5347 437.2139,-680.4165 439.4525,-687.0489"/>
</g>
<!-- WeightedConsensusInput -->
<g id="node11" class="node">
<title>WeightedConsensusInput</title>
<path fill="#ffffe0" stroke="#000000" d="M286.8397,-612C286.8397,-612 231.1603,-612 231.1603,-612 225.1603,-612 219.1603,-606 219.1603,-600 219.1603,-600 219.1603,-588 219.1603,-588 219.1603,-582 225.1603,-576 231.1603,-576 231.1603,-576 286.8397,-576 286.8397,-576 292.8397,-576 298.8397,-582 298.8397,-588 298.8397,-588 298.8397,-600 298.8397,-600 298.8397,-606 292.8397,-612 286.8397,-612"/>
<text text-anchor="middle" x="259" y="-591" font-family="Arial" font-size="10.00" fill="#000000">Model Results</text>
</g>
<!-- Model1&#45;&gt;WeightedConsensusInput -->
<g id="edge8" class="edge">
<title>Model1-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M70.2951,-651.7443C73.2029,-650.409 76.142,-649.1334 79,-648 121.9688,-630.9596 172.5091,-616.241 209.0792,-606.4936"/>
<polygon fill="#000000" stroke="#000000" points="210.2273,-609.8106 219.0056,-603.8783 208.4438,-603.0416 210.2273,-609.8106"/>
</g>
<!-- Model2&#45;&gt;WeightedConsensusInput -->
<g id="edge9" class="edge">
<title>Model2-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M142.0853,-652.4574C162.224,-642.388 190.1682,-628.4159 213.6871,-616.6564"/>
<polygon fill="#000000" stroke="#000000" points="215.4115,-619.7074 222.7905,-612.1047 212.281,-613.4464 215.4115,-619.7074"/>
</g>
<!-- Model3&#45;&gt;WeightedConsensusInput -->
<g id="edge10" class="edge">
<title>Model3-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M205.1686,-647.8314C213.7152,-639.2848 224.0557,-628.9443 233.3802,-619.6198"/>
<polygon fill="#000000" stroke="#000000" points="235.9905,-621.9592 240.5867,-612.4133 231.0408,-617.0095 235.9905,-621.9592"/>
</g>
<!-- Model4&#45;&gt;WeightedConsensusInput -->
<g id="edge11" class="edge">
<title>Model4-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M259,-647.8314C259,-640.131 259,-630.9743 259,-622.4166"/>
<polygon fill="#000000" stroke="#000000" points="262.5001,-622.4132 259,-612.4133 255.5001,-622.4133 262.5001,-622.4132"/>
</g>
<!-- Model5&#45;&gt;WeightedConsensusInput -->
<g id="edge12" class="edge">
<title>Model5-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M312.8314,-647.8314C304.2848,-639.2848 293.9443,-628.9443 284.6198,-619.6198"/>
<polygon fill="#000000" stroke="#000000" points="286.9592,-617.0095 277.4133,-612.4133 282.0095,-621.9592 286.9592,-617.0095"/>
</g>
<!-- Model6&#45;&gt;WeightedConsensusInput -->
<g id="edge13" class="edge">
<title>Model6-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M375.9147,-652.4574C355.776,-642.388 327.8318,-628.4159 304.3129,-616.6564"/>
<polygon fill="#000000" stroke="#000000" points="305.719,-613.4464 295.2095,-612.1047 302.5885,-619.7074 305.719,-613.4464"/>
</g>
<!-- Model7&#45;&gt;WeightedConsensusInput -->
<g id="edge14" class="edge">
<title>Model7-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="#000000" d="M447.7049,-651.7443C444.7971,-650.409 441.858,-649.1334 439,-648 396.0312,-630.9596 345.4909,-616.241 308.9208,-606.4936"/>
<polygon fill="#000000" stroke="#000000" points="309.5562,-603.0416 298.9944,-603.8783 307.7727,-609.8106 309.5562,-603.0416"/>
</g>
<!-- ContextualIntelligenceAgent -->
<g id="node12" class="node">
<title>ContextualIntelligenceAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M139.9742,-540C139.9742,-540 68.0258,-540 68.0258,-540 62.0258,-540 56.0258,-534 56.0258,-528 56.0258,-528 56.0258,-516 56.0258,-516 56.0258,-510 62.0258,-504 68.0258,-504 68.0258,-504 139.9742,-504 139.9742,-504 145.9742,-504 151.9742,-510 151.9742,-516 151.9742,-516 151.9742,-528 151.9742,-528 151.9742,-534 145.9742,-540 139.9742,-540"/>
<text text-anchor="middle" x="104" y="-525" font-family="Arial" font-size="10.00" fill="#000000">Contextual</text>
<text text-anchor="middle" x="104" y="-513" font-family="Arial" font-size="10.00" fill="#000000">Intelligence Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;ContextualIntelligenceAgent -->
<g id="edge27" class="edge">
<title>WeightedConsensusInput-&gt;ContextualIntelligenceAgent</title>
<path fill="none" stroke="#000000" d="M219.887,-575.8314C199.2488,-566.2446 173.7516,-554.4008 151.9327,-544.2655"/>
<polygon fill="#000000" stroke="#000000" points="153.3756,-541.0766 142.8318,-540.038 150.4266,-547.4251 153.3756,-541.0766"/>
</g>
<!-- BaggingAgent -->
<g id="node13" class="node">
<title>BaggingAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M236.3082,-540C236.3082,-540 181.6918,-540 181.6918,-540 175.6918,-540 169.6918,-534 169.6918,-528 169.6918,-528 169.6918,-516 169.6918,-516 169.6918,-510 175.6918,-504 181.6918,-504 181.6918,-504 236.3082,-504 236.3082,-504 242.3082,-504 248.3082,-510 248.3082,-516 248.3082,-516 248.3082,-528 248.3082,-528 248.3082,-534 242.3082,-540 236.3082,-540"/>
<text text-anchor="middle" x="209" y="-519" font-family="Arial" font-size="10.00" fill="#000000">BaggingAgent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;BaggingAgent -->
<g id="edge28" class="edge">
<title>WeightedConsensusInput-&gt;BaggingAgent</title>
<path fill="none" stroke="#000000" d="M246.3829,-575.8314C240.6828,-567.6232 233.8337,-557.7606 227.5641,-548.7323"/>
<polygon fill="#000000" stroke="#000000" points="230.3658,-546.6306 221.787,-540.4133 224.6162,-550.6234 230.3658,-546.6306"/>
</g>
<!-- DeepEnsembleAgent -->
<g id="node14" class="node">
<title>DeepEnsembleAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M339.3497,-540C339.3497,-540 278.6503,-540 278.6503,-540 272.6503,-540 266.6503,-534 266.6503,-528 266.6503,-528 266.6503,-516 266.6503,-516 266.6503,-510 272.6503,-504 278.6503,-504 278.6503,-504 339.3497,-504 339.3497,-504 345.3497,-504 351.3497,-510 351.3497,-516 351.3497,-516 351.3497,-528 351.3497,-528 351.3497,-534 345.3497,-540 339.3497,-540"/>
<text text-anchor="middle" x="309" y="-525" font-family="Arial" font-size="10.00" fill="#000000">DeepEnsemble</text>
<text text-anchor="middle" x="309" y="-513" font-family="Arial" font-size="10.00" fill="#000000">Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;DeepEnsembleAgent -->
<g id="edge29" class="edge">
<title>WeightedConsensusInput-&gt;DeepEnsembleAgent</title>
<path fill="none" stroke="#000000" d="M271.6171,-575.8314C277.3172,-567.6232 284.1663,-557.7606 290.4359,-548.7323"/>
<polygon fill="#000000" stroke="#000000" points="293.3838,-550.6234 296.213,-540.4133 287.6342,-546.6306 293.3838,-550.6234"/>
</g>
<!-- EvolutionEnsembleAgent -->
<g id="node15" class="node">
<title>EvolutionEnsembleAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M458.5759,-540C458.5759,-540 381.4241,-540 381.4241,-540 375.4241,-540 369.4241,-534 369.4241,-528 369.4241,-528 369.4241,-516 369.4241,-516 369.4241,-510 375.4241,-504 381.4241,-504 381.4241,-504 458.5759,-504 458.5759,-504 464.5759,-504 470.5759,-510 470.5759,-516 470.5759,-516 470.5759,-528 470.5759,-528 470.5759,-534 464.5759,-540 458.5759,-540"/>
<text text-anchor="middle" x="420" y="-525" font-family="Arial" font-size="10.00" fill="#000000">EvolutionEnsemble</text>
<text text-anchor="middle" x="420" y="-513" font-family="Arial" font-size="10.00" fill="#000000">Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;EvolutionEnsembleAgent -->
<g id="edge30" class="edge">
<title>WeightedConsensusInput-&gt;EvolutionEnsembleAgent</title>
<path fill="none" stroke="#000000" d="M298.7978,-576.2022C320.4042,-566.5397 347.3194,-554.5031 370.2941,-544.2287"/>
<polygon fill="#000000" stroke="#000000" points="371.8419,-547.3707 379.5418,-540.0931 368.9842,-540.9805 371.8419,-547.3707"/>
</g>
<!-- WeightManager -->
<g id="node16" class="node">
<title>WeightManager</title>
<path fill="#e0ffff" stroke="#000000" d="M274.9549,-468C274.9549,-468 243.0451,-468 243.0451,-468 237.0451,-468 231.0451,-462 231.0451,-456 231.0451,-456 231.0451,-444 231.0451,-444 231.0451,-438 237.0451,-432 243.0451,-432 243.0451,-432 274.9549,-432 274.9549,-432 280.9549,-432 286.9549,-438 286.9549,-444 286.9549,-444 286.9549,-456 286.9549,-456 286.9549,-462 280.9549,-468 274.9549,-468"/>
<text text-anchor="middle" x="259" y="-453" font-family="Arial" font-size="10.00" fill="#000000">Weight</text>
<text text-anchor="middle" x="259" y="-441" font-family="Arial" font-size="10.00" fill="#000000">Manager</text>
</g>
<!-- ContextualIntelligenceAgent&#45;&gt;WeightManager -->
<g id="edge31" class="edge">
<title>ContextualIntelligenceAgent-&gt;WeightManager</title>
<path fill="none" stroke="#000000" d="M143.113,-503.8314C167.3399,-492.5776 198.2625,-478.2136 222.0709,-467.1542"/>
<polygon fill="#000000" stroke="#000000" points="223.5489,-470.3269 231.1437,-462.9397 220.5999,-463.9783 223.5489,-470.3269"/>
</g>
<!-- BaggingAgent&#45;&gt;WeightManager -->
<g id="edge32" class="edge">
<title>BaggingAgent-&gt;WeightManager</title>
<path fill="none" stroke="#000000" d="M221.6171,-503.8314C227.3172,-495.6232 234.1663,-485.7606 240.4359,-476.7323"/>
<polygon fill="#000000" stroke="#000000" points="243.3838,-478.6234 246.213,-468.4133 237.6342,-474.6306 243.3838,-478.6234"/>
</g>
<!-- DeepEnsembleAgent&#45;&gt;WeightManager -->
<g id="edge33" class="edge">
<title>DeepEnsembleAgent-&gt;WeightManager</title>
<path fill="none" stroke="#000000" d="M296.3829,-503.8314C290.6828,-495.6232 283.8337,-485.7606 277.5641,-476.7323"/>
<polygon fill="#000000" stroke="#000000" points="280.3658,-474.6306 271.787,-468.4133 274.6162,-478.6234 280.3658,-474.6306"/>
</g>
<!-- EvolutionEnsembleAgent&#45;&gt;WeightManager -->
<g id="edge34" class="edge">
<title>EvolutionEnsembleAgent-&gt;WeightManager</title>
<path fill="none" stroke="#000000" d="M379.3729,-503.8314C353.8792,-492.4305 321.2477,-477.8375 296.3927,-466.7222"/>
<polygon fill="#000000" stroke="#000000" points="297.4982,-463.3826 286.9406,-462.4952 294.6405,-469.7727 297.4982,-463.3826"/>
</g>
<!-- WeightedConsensus -->
<g id="node17" class="node">
<title>WeightedConsensus</title>
<path fill="#d3d3d3" stroke="#000000" d="M311.014,-396C311.014,-396 268.986,-396 268.986,-396 262.986,-396 256.986,-390 256.986,-384 256.986,-384 256.986,-372 256.986,-372 256.986,-366 262.986,-360 268.986,-360 268.986,-360 311.014,-360 311.014,-360 317.014,-360 323.014,-366 323.014,-372 323.014,-372 323.014,-384 323.014,-384 323.014,-390 317.014,-396 311.014,-396"/>
<text text-anchor="middle" x="290" y="-381" font-family="Arial" font-size="10.00" fill="#000000">Weighted</text>
<text text-anchor="middle" x="290" y="-369" font-family="Arial" font-size="10.00" fill="#000000">Consensus</text>
</g>
<!-- WeightManager&#45;&gt;WeightedConsensus -->
<g id="edge35" class="edge">
<title>WeightManager-&gt;WeightedConsensus</title>
<path fill="none" stroke="#000000" d="M266.8226,-431.8314C270.2109,-423.9617 274.2541,-414.5712 278.0076,-405.8533"/>
<polygon fill="#000000" stroke="#000000" points="281.3321,-406.9822 282.0721,-396.4133 274.9027,-404.214 281.3321,-406.9822"/>
</g>
<!-- OptimizeAgent -->
<g id="node18" class="node">
<title>OptimizeAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M247.521,-324C247.521,-324 210.479,-324 210.479,-324 204.479,-324 198.479,-318 198.479,-312 198.479,-312 198.479,-300 198.479,-300 198.479,-294 204.479,-288 210.479,-288 210.479,-288 247.521,-288 247.521,-288 253.521,-288 259.521,-294 259.521,-300 259.521,-300 259.521,-312 259.521,-312 259.521,-318 253.521,-324 247.521,-324"/>
<text text-anchor="middle" x="229" y="-309" font-family="Arial" font-size="10.00" fill="#000000">Weight</text>
<text text-anchor="middle" x="229" y="-297" font-family="Arial" font-size="10.00" fill="#000000">Opt Agent</text>
</g>
<!-- WeightedConsensus&#45;&gt;OptimizeAgent -->
<g id="edge36" class="edge">
<title>WeightedConsensus-&gt;OptimizeAgent</title>
<path fill="none" stroke="#000000" d="M274.6071,-359.8314C267.5096,-351.454 258.952,-341.3531 251.176,-332.1749"/>
<polygon fill="#000000" stroke="#000000" points="253.7348,-329.7807 244.6001,-324.4133 248.3939,-334.3056 253.7348,-329.7807"/>
</g>
<!-- ForensicIn -->
<g id="node19" class="node">
<title>ForensicIn</title>
<ellipse fill="#add8e6" stroke="#000000" cx="438" cy="-306" rx="0" ry="0"/>
</g>
<!-- WeightedConsensus&#45;&gt;ForensicIn -->
<g id="edge38" class="edge">
<title>WeightedConsensus-&gt;ForensicIn</title>
<path fill="none" stroke="#000000" d="M323.2141,-361.8418C357.2749,-345.2717 408.1008,-320.5455 428.7655,-310.4924"/>
<polygon fill="#000000" stroke="#000000" points="430.4871,-313.5472 437.9483,-306.0252 427.4248,-307.2526 430.4871,-313.5472"/>
</g>
<!-- OptimizeAgent&#45;&gt;WeightManager -->
<g id="edge37" class="edge">
<title>OptimizeAgent-&gt;WeightManager</title>
<path fill="none" stroke="#000000" d="M232.7687,-324.0896C237.8918,-348.6805 247.1052,-392.905 253.1361,-421.8531"/>
<polygon fill="#000000" stroke="#000000" points="249.7344,-422.6864 255.2005,-431.7623 256.5873,-421.2586 249.7344,-422.6864"/>
</g>
<!-- GradientProcessing -->
<g id="node20" class="node">
<title>GradientProcessing</title>
<path fill="#ffb6c1" stroke="#000000" d="M329.9546,-252C329.9546,-252 288.0454,-252 288.0454,-252 282.0454,-252 276.0454,-246 276.0454,-240 276.0454,-240 276.0454,-228 276.0454,-228 276.0454,-222 282.0454,-216 288.0454,-216 288.0454,-216 329.9546,-216 329.9546,-216 335.9546,-216 341.9546,-222 341.9546,-228 341.9546,-228 341.9546,-240 341.9546,-240 341.9546,-246 335.9546,-252 329.9546,-252"/>
<text text-anchor="middle" x="309" y="-237" font-family="Arial" font-size="10.00" fill="#000000">Gradient</text>
<text text-anchor="middle" x="309" y="-225" font-family="Arial" font-size="10.00" fill="#000000">Processing</text>
</g>
<!-- ForensicIn&#45;&gt;GradientProcessing -->
<g id="edge15" class="edge">
<title>ForensicIn-&gt;GradientProcessing</title>
<path fill="none" stroke="#000000" d="M437.9065,-305.9478C435.5011,-304.6053 387.1781,-277.6343 350.4002,-257.1071"/>
<polygon fill="#000000" stroke="#000000" points="351.7714,-253.8642 341.3337,-252.0467 348.3598,-259.9766 351.7714,-253.8642"/>
</g>
<!-- MinMaxProcessing -->
<g id="node21" class="node">
<title>MinMaxProcessing</title>
<path fill="#ffb6c1" stroke="#000000" d="M412.9546,-252C412.9546,-252 371.0454,-252 371.0454,-252 365.0454,-252 359.0454,-246 359.0454,-240 359.0454,-240 359.0454,-228 359.0454,-228 359.0454,-222 365.0454,-216 371.0454,-216 371.0454,-216 412.9546,-216 412.9546,-216 418.9546,-216 424.9546,-222 424.9546,-228 424.9546,-228 424.9546,-240 424.9546,-240 424.9546,-246 418.9546,-252 412.9546,-252"/>
<text text-anchor="middle" x="392" y="-237" font-family="Arial" font-size="10.00" fill="#000000">MinMax</text>
<text text-anchor="middle" x="392" y="-225" font-family="Arial" font-size="10.00" fill="#000000">Processing</text>
</g>
<!-- ForensicIn&#45;&gt;MinMaxProcessing -->
<g id="edge16" class="edge">
<title>ForensicIn-&gt;MinMaxProcessing</title>
<path fill="none" stroke="#000000" d="M437.9667,-305.9478C437.1562,-304.6792 421.7262,-280.5279 408.9642,-260.5526"/>
<polygon fill="#000000" stroke="#000000" points="411.8632,-258.5893 403.5298,-252.0467 405.9643,-262.358 411.8632,-258.5893"/>
</g>
<!-- ELAPorcessing -->
<g id="node22" class="node">
<title>ELAPorcessing</title>
<path fill="#ffb6c1" stroke="#000000" d="M515.3507,-252C515.3507,-252 454.6493,-252 454.6493,-252 448.6493,-252 442.6493,-246 442.6493,-240 442.6493,-240 442.6493,-228 442.6493,-228 442.6493,-222 448.6493,-216 454.6493,-216 454.6493,-216 515.3507,-216 515.3507,-216 521.3507,-216 527.3507,-222 527.3507,-228 527.3507,-228 527.3507,-240 527.3507,-240 527.3507,-246 521.3507,-252 515.3507,-252"/>
<text text-anchor="middle" x="485" y="-231" font-family="Arial" font-size="10.00" fill="#000000">ELAPorcessing</text>
</g>
<!-- ForensicIn&#45;&gt;ELAPorcessing -->
<g id="edge17" class="edge">
<title>ForensicIn-&gt;ELAPorcessing</title>
<path fill="none" stroke="#000000" d="M438.0341,-305.9478C438.8622,-304.6792 454.6276,-280.5279 467.667,-260.5526"/>
<polygon fill="#000000" stroke="#000000" points="470.6841,-262.3337 473.2195,-252.0467 464.8224,-258.5073 470.6841,-262.3337"/>
</g>
<!-- BitPlaneExtraction -->
<g id="node23" class="node">
<title>BitPlaneExtraction</title>
<path fill="#ffb6c1" stroke="#000000" d="M593.4537,-252C593.4537,-252 556.5463,-252 556.5463,-252 550.5463,-252 544.5463,-246 544.5463,-240 544.5463,-240 544.5463,-228 544.5463,-228 544.5463,-222 550.5463,-216 556.5463,-216 556.5463,-216 593.4537,-216 593.4537,-216 599.4537,-216 605.4537,-222 605.4537,-228 605.4537,-228 605.4537,-240 605.4537,-240 605.4537,-246 599.4537,-252 593.4537,-252"/>
<text text-anchor="middle" x="575" y="-237" font-family="Arial" font-size="10.00" fill="#000000">BitPlane</text>
<text text-anchor="middle" x="575" y="-225" font-family="Arial" font-size="10.00" fill="#000000">Extraction</text>
</g>
<!-- ForensicIn&#45;&gt;BitPlaneExtraction -->
<g id="edge18" class="edge">
<title>ForensicIn-&gt;BitPlaneExtraction</title>
<path fill="none" stroke="#000000" d="M438.0993,-305.9478C440.7547,-304.5523 496.1012,-275.4651 535.5966,-254.7084"/>
<polygon fill="#000000" stroke="#000000" points="537.5308,-257.6458 544.7546,-249.8954 534.2743,-251.4494 537.5308,-257.6458"/>
</g>
<!-- WaveletBasedNoiseAnalysis -->
<g id="node24" class="node">
<title>WaveletBasedNoiseAnalysis</title>
<path fill="#ffb6c1" stroke="#000000" d="M692.5612,-252C692.5612,-252 635.4388,-252 635.4388,-252 629.4388,-252 623.4388,-246 623.4388,-240 623.4388,-240 623.4388,-228 623.4388,-228 623.4388,-222 629.4388,-216 635.4388,-216 635.4388,-216 692.5612,-216 692.5612,-216 698.5612,-216 704.5612,-222 704.5612,-228 704.5612,-228 704.5612,-240 704.5612,-240 704.5612,-246 698.5612,-252 692.5612,-252"/>
<text text-anchor="middle" x="664" y="-237" font-family="Arial" font-size="10.00" fill="#000000">Wavelet</text>
<text text-anchor="middle" x="664" y="-225" font-family="Arial" font-size="10.00" fill="#000000">Noise Analysis</text>
</g>
<!-- ForensicIn&#45;&gt;WaveletBasedNoiseAnalysis -->
<g id="edge19" class="edge">
<title>ForensicIn-&gt;WaveletBasedNoiseAnalysis</title>
<path fill="none" stroke="#000000" d="M438.0716,-305.9795C440.9579,-305.1532 530.5526,-279.4765 613.8055,-251.9857"/>
<polygon fill="#000000" stroke="#000000" points="615.0101,-255.2737 623.3975,-248.8005 612.804,-248.6304 615.0101,-255.2737"/>
</g>
<!-- AnomalyAgent -->
<g id="node25" class="node">
<title>AnomalyAgent</title>
<path fill="#e0ffff" stroke="#000000" d="M502.2325,-180C502.2325,-180 467.7675,-180 467.7675,-180 461.7675,-180 455.7675,-174 455.7675,-168 455.7675,-168 455.7675,-156 455.7675,-156 455.7675,-150 461.7675,-144 467.7675,-144 467.7675,-144 502.2325,-144 502.2325,-144 508.2325,-144 514.2325,-150 514.2325,-156 514.2325,-156 514.2325,-168 514.2325,-168 514.2325,-174 508.2325,-180 502.2325,-180"/>
<text text-anchor="middle" x="485" y="-165" font-family="Arial" font-size="10.00" fill="#000000">Anomaly</text>
<text text-anchor="middle" x="485" y="-153" font-family="Arial" font-size="10.00" fill="#000000">Detection</text>
</g>
<!-- GradientProcessing&#45;&gt;AnomalyAgent -->
<g id="edge20" class="edge">
<title>GradientProcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="#000000" d="M342.0777,-219.3657C344.7534,-218.2162 347.4192,-217.0823 350,-216 382.2392,-202.4796 419.1063,-187.784 446.1588,-177.1416"/>
<polygon fill="#000000" stroke="#000000" points="447.6252,-180.3261 455.6547,-173.4138 445.0673,-173.8101 447.6252,-180.3261"/>
</g>
<!-- MinMaxProcessing&#45;&gt;AnomalyAgent -->
<g id="edge21" class="edge">
<title>MinMaxProcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="#000000" d="M415.4678,-215.8314C427.0327,-206.8779 441.1404,-195.9558 453.6183,-186.2955"/>
<polygon fill="#000000" stroke="#000000" points="455.775,-189.0521 461.5397,-180.1628 451.4898,-183.5171 455.775,-189.0521"/>
</g>
<!-- ELAPorcessing&#45;&gt;AnomalyAgent -->
<g id="edge22" class="edge">
<title>ELAPorcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="#000000" d="M485,-215.8314C485,-208.131 485,-198.9743 485,-190.4166"/>
<polygon fill="#000000" stroke="#000000" points="488.5001,-190.4132 485,-180.4133 481.5001,-190.4133 488.5001,-190.4132"/>
</g>
<!-- BitPlaneExtraction&#45;&gt;AnomalyAgent -->
<g id="edge23" class="edge">
<title>BitPlaneExtraction-&gt;AnomalyAgent</title>
<path fill="none" stroke="#000000" d="M552.2892,-215.8314C541.204,-206.9632 527.7046,-196.1637 515.7148,-186.5718"/>
<polygon fill="#000000" stroke="#000000" points="517.6987,-183.6768 507.7035,-180.1628 513.3258,-189.1429 517.6987,-183.6768"/>
</g>
<!-- WaveletBasedNoiseAnalysis&#45;&gt;AnomalyAgent -->
<g id="edge24" class="edge">
<title>WaveletBasedNoiseAnalysis-&gt;AnomalyAgent</title>
<path fill="none" stroke="#000000" d="M623.3821,-217.6621C593.5413,-205.6591 553.2424,-189.4495 523.8308,-177.6191"/>
<polygon fill="#000000" stroke="#000000" points="524.8884,-174.272 514.3046,-173.7873 522.2761,-180.7663 524.8884,-174.272"/>
</g>
<!-- DataLoggingAndOutput -->
<g id="node26" class="node">
<title>DataLoggingAndOutput</title>
<path fill="#ffa07a" stroke="#000000" d="M510.9695,-108C510.9695,-108 459.0305,-108 459.0305,-108 453.0305,-108 447.0305,-102 447.0305,-96 447.0305,-96 447.0305,-84 447.0305,-84 447.0305,-78 453.0305,-72 459.0305,-72 459.0305,-72 510.9695,-72 510.9695,-72 516.9695,-72 522.9695,-78 522.9695,-84 522.9695,-84 522.9695,-96 522.9695,-96 522.9695,-102 516.9695,-108 510.9695,-108"/>
<text text-anchor="middle" x="485" y="-93" font-family="Arial" font-size="10.00" fill="#000000">Data Logging</text>
<text text-anchor="middle" x="485" y="-81" font-family="Arial" font-size="10.00" fill="#000000">Output</text>
</g>
<!-- AnomalyAgent&#45;&gt;DataLoggingAndOutput -->
<g id="edge39" class="edge">
<title>AnomalyAgent-&gt;DataLoggingAndOutput</title>
<path fill="none" stroke="#000000" d="M485,-143.8314C485,-136.131 485,-126.9743 485,-118.4166"/>
<polygon fill="#000000" stroke="#000000" points="488.5001,-118.4132 485,-108.4133 481.5001,-118.4133 488.5001,-118.4132"/>
</g>
<!-- ResultsDisplay -->
<g id="node27" class="node">
<title>ResultsDisplay</title>
<path fill="#d3d3d3" stroke="#000000" d="M500,-36C500,-36 470,-36 470,-36 464,-36 458,-30 458,-24 458,-24 458,-12 458,-12 458,-6 464,0 470,0 470,0 500,0 500,0 506,0 512,-6 512,-12 512,-12 512,-24 512,-24 512,-30 506,-36 500,-36"/>
<text text-anchor="middle" x="485" y="-15" font-family="Arial" font-size="10.00" fill="#000000">Results</text>
</g>
<!-- DataLoggingAndOutput&#45;&gt;ResultsDisplay -->
<g id="edge40" class="edge">
<title>DataLoggingAndOutput-&gt;ResultsDisplay</title>
<path fill="none" stroke="#000000" d="M485,-71.8314C485,-64.131 485,-54.9743 485,-46.4166"/>
<polygon fill="#000000" stroke="#000000" points="488.5001,-46.4132 485,-36.4133 481.5001,-46.4133 488.5001,-46.4132"/>
</g>
</g>
</svg>