public MeasuresEditForm(Filter filter, WeakImage[] references, List<MetricExecBase> metrics)
        {
            InitializeComponent();

            try
            {
                _filter = filter;
                _references = references;
                _originalMetrics = metrics;

                DialogResult = System.Windows.Forms.DialogResult.Cancel;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.GetType().FullName, ex.Message);
            }
        }
예제 #2
0
 /// <summary>
 /// Sets the "output-image", used by the metric function.
 /// </summary>
 /// <param name="img"></param>
 public virtual void SetOutput(WeakImage img)
 {
     output = img;
 }
예제 #3
0
 /// <summary>
 /// Sets the "input-image", used by the metric function.
 /// </summary>
 /// <param name="img"></param>
 public virtual void SetInput(WeakImage img)
 {
     input = img;
 }
예제 #4
0
 /// <summary>
 /// Executed when a filter in a graph finishes measurement.
 /// </summary>
 /// <param name="input">The input of the filter.</param>
 /// <param name="output">The output of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 /// <param name="results">The measures of the filter executed.</param>
 /// <param name="duration">The duration of the execution of the filter.</param>
 protected void filter_f_FilterMeasured(WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, List<MetricResult> results, TimeSpan duration)
 {
     OnFilterMeasured(input, output, filter, configs, results, duration);
 }
예제 #5
0
 /// <summary>
 /// Called to signal the end of a filter execution.
 /// </summary>
 /// <param name="sender">The BatchFilter sender of the event.</param>
 /// <param name="input">The input of the filter.</param>
 /// <param name="output">The output of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 private void OnFilterExecuted(BatchFilter sender, WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, TimeSpan duration)
 {
     if (null != FilterExecuted)
     {
         FilterExecuted(sender, input, output, filter, configs, duration);
     }
 }
예제 #6
0
        private void bt_FilterMeasured_threadsafe_(BatchFilter sender, WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, List<MetricResult> measures, TimeSpan duration)
        {
            try
            {
                Monitor.TryEnter(filterMeas_lock, -1);

                ++_executedFiltros;
                lbXofY.Text = string.Format("{0}/{1}", _executedFiltros, _totFiltros);
                progressExec.Value = (int)(Math.Min(1.0, _executedFiltros / (_totFiltros * 1.0)) * progressExec.Maximum);

                if (ckForgetNoMeasures.Checked)
                {
                    // Forget the row
                    if (measures == null || measures.Count == 0)
                        return;
                }

                // Add row to GridResults ...
                _results.Add(new RowResults(filter.Attributes["ShortName"].ToString(), input, output, measures, filter, configs, duration));

                Flush(false, true);

                gridResults.Refresh();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.GetType().FullName, ex.Message);
            }
            finally
            {
                Monitor.Exit(filterMeas_lock);
            }
        }
예제 #7
0
 /// <summary>
 /// Defines a metric execution for a filter RowResults.
 /// </summary>
 /// <param name="Item1">The metric function.</param>
 /// <param name="Item2">The metric function.</param>
 /// <param name="Item3">A "reference" image, if needed.</param>
 public RowMetricExecution(
         Metric.MetricDelegate Item1,
         MetricExecutionType Item2, WeakImage Item3)
 {
     this.Item1 = Item1;
     this.Item2 = Item2;
     this.Item3 = Item3;
 }
예제 #8
0
        public void WeakImagesTestDisposable()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Trace.WriteLine(string.Format("Init: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));

            List<WeakImage> _weaks = new List<WeakImage>();
            List<string> tempFiles = new List<string>();
            foreach (Image i in new Image[] { (Image)Properties.Resources.big_img.Clone() })
            {
                WeakImage w = new WeakImage(i);

                _weaks.Add(w);
                tempFiles.Add(w.Filename);

                long size = (new FileInfo(w.Filename)).Length;

                Assert.AreNotEqual(0, size, "Size of the file {0} is zero!");

                Trace.WriteLine(string.Format("File {0}, size = {1}.", w.Filename, size));

                i.Dispose();
            }

            // Check that every files exists before a collect
            Trace.WriteLine(string.Format("Before Collect: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Trace.WriteLine(string.Format("After Collect: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));

            // Check that every files exists after a collect
            foreach (string file in tempFiles)
            {
                Trace.WriteLine(string.Format("Test if {0} is alive.", file));
                Assert.IsTrue(File.Exists(file), "File {0} was expected to be alive, is dead.", file);
            }

            // Dispose every WeakImage
            foreach (WeakImage weak in _weaks)
            {
                weak.Dispose();
            }

            // Check that every files is deleted
            foreach (string file in tempFiles)
            {
                Trace.WriteLine(string.Format("Test if {0} is dead.", file));
                Assert.IsFalse(File.Exists(file), "File {0} was expected to be dead, is alive.", file);
            }
        }
 /// <summary>
 /// The SetInput method is overrided to leave the attribute untouched.
 /// </summary>
 /// <param name="img"></param>
 public override void SetInput(WeakImage img)
 {
     // SKIP
 }
예제 #10
0
 /// <summary>
 /// Defines an image inside the batch.
 /// </summary>
 /// <param name="Item1">The image. Images will be persisted using the base64 encoded binary representation of the Image.</param>
 public RowImage(WeakImage Item1)
 {
     this.Item1 = Item1;
 }
 /// <summary>
 /// Metric associable to a node that takes a previously defined 
 /// reference and the output of the filter to calculate the metric after the filter execution.
 /// </summary>
 /// <param name="key">The key of the metric.</param>
 /// <param name="method">The metric function.</param>
 /// <param name="reference">The reference to use in the calculation of the metric.</param>
 public MetricExecReference(string key, Metric.MetricDelegate method, WeakImage reference)
     : base(key, method)
 {
     base.SetInput(reference);
 }
예제 #12
0
 /// <summary>
 /// Executed when a filter in a graph finishes measurement.
 /// </summary>
 /// <param name="input">The input image of the filter.</param>
 /// <param name="output">The output image of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 /// <param name="measures">The measures of the filter executed.</param>
 private void _graph_FilterMeasured(WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, List<MetricResult> measures, TimeSpan duration)
 {
     OnFilterMeasured(this, input, output, filter, configs, measures, duration);
 }
예제 #13
0
 /// <summary>
 /// Executed when a filter in a graph finishes execution.
 /// </summary>
 /// <param name="input">The input image of the filter.</param>
 /// <param name="output">The output image of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 private void _graph_FilterExecuted(WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, TimeSpan duration)
 {
     OnFilterExecuted(this, input, output, filter, configs, duration);
 }
예제 #14
0
 /// <summary>
 /// Called to signal the end of a filter execution.
 /// </summary>
 /// <param name="input">The input of the filter.</param>
 /// <param name="ouput">The output of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 protected void OnFilterExecuted(WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, TimeSpan duration)
 {
     if (null != FilterExecuted)
         FilterExecuted(input, output, filter, configs, duration);
 }
예제 #15
0
 /// <summary>
 /// Results of the execution of a filter.
 /// </summary>
 /// <param name="Item1">The name of the filter (for display only).</param>
 /// <param name="Item2">The input image used by the filter.</param>
 /// <param name="Item3">The output of the filter.</param>
 /// <param name="Item4">The list of calculated metrics.</param>
 /// <param name="Item5">The filter used.</param>
 /// <param name="Item6">The filter's configurations.</param>
 public RowResults(string Item1, WeakImage Item2, WeakImage Item3,
         List<MetricResult> Item4, Filter Item5,
         SortedDictionary<string, object> Item6, TimeSpan Item7)
 {
     this.Item1 = Item1;
     this.Item2 = Item2;
     this.Item3 = Item3;
     this.Item4 = Item4;
     this.Item5 = Item5;
     this.Item6 = Item6;
     this.Item7 = Item7;
 }
예제 #16
0
 /// <summary>
 /// Called to signal the end of a filter measurement.
 /// </summary>
 /// <param name="input">The input of the filter.</param>
 /// <param name="ouput">The output of the filter.</param>
 /// <param name="filter">The filter executed.</param>
 /// <param name="configs">The configurations used by the filter.</param>
 /// <param name="measures">The measures of the filter executed.</param>
 protected void OnFilterMeasured(WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, List<MetricResult> measures, TimeSpan duration)
 {
     if (null != FilterMeasured)
         FilterMeasured(input, output, filter, configs, measures, duration);
 }
예제 #17
0
 // MEASURED
 private void bt_FilterMeasured(BatchFilter sender, WeakImage input, WeakImage output, Filter filter, SortedDictionary<string, object> configs, List<MetricResult> measures, TimeSpan duration)
 {
     try
     {
         FilterMeasuredDelegate inv = new FilterMeasuredDelegate(bt_FilterMeasured_threadsafe_);
         this.Invoke(inv, sender, input, output, filter, configs, measures, duration);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.GetType().FullName, ex.Message);
     }
 }
예제 #18
0
        public void WeakImagesTestCollection()
        {
            List<string> tempFiles = new List<string>();

            // Creation of local scope ...
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                Trace.WriteLine(string.Format("Init: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));

                List<WeakImage> _weaks = new List<WeakImage>();

                foreach (Image i in new Image[] { (Image)Properties.Resources.big_img.Clone() })
                {
                    WeakImage w = new WeakImage(i);

                    _weaks.Add(w);
                    tempFiles.Add(w.Filename);

                    long size = (new FileInfo(w.Filename)).Length;

                    Assert.AreNotEqual(0, size, "Size of the file {0} is zero!");

                    Trace.WriteLine(string.Format("File {0}, size = {1}.", w.Filename, size));

                }

                // Check that every files exists before a collect
                Trace.WriteLine(string.Format("Before Collect: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));
                GC.Collect();
                GC.WaitForPendingFinalizers();
                Trace.WriteLine(string.Format("After Collect: GC.GetTotalMemory = {0}", GC.GetTotalMemory(false)));

                // Check that every files exists after a collect
                foreach (string file in tempFiles)
                {
                    Trace.WriteLine(string.Format("Test if {0} is alive.", file));
                    Assert.IsTrue(File.Exists(file), "File {0} was expected to be alive, is dead.", file);
                }

                // Resets the list.
                // Do not call Dispose directly!!!
                _weaks.Clear(); _weaks = null;

                GC.Collect();
                GC.WaitForPendingFinalizers();
            }

            //// Force new Collection.
            //// You have to call it n times. DOC!!!
            //for (int i = 0; i < 10; ++i)
            //{
            //    GC.Collect();
            //    GC.WaitForPendingFinalizers();
            //}

            //System.IO.Directory.GetFiles(System.IO.Path.GetTempPath());
            // Wait for pending IO operations ...
            System.Threading.Thread.Sleep(10000);
            // Dummy way to refresh file system
            foreach (string file in tempFiles)
            {
                Trace.WriteLine(string.Format("{0} exists = {1}", file, File.Exists(file)));
            }

            // Check that every files is deleted
            foreach (string file in tempFiles)
            {
                Trace.WriteLine(string.Format("Test if {0} is dead.", file));

                Assert.IsFalse(File.Exists(file), "File {0} was expected to be dead, is alive.", file);
            }
        }
예제 #19
0
        /// <summary>
        /// Implementation of the execution of the node.
        /// </summary>
        /// <param name="inputs">The input of the node.</param>
        /// <returns>The output of the node.</returns>
        protected override List<WeakImage> Execute_Impl(List<WeakImage> inputs)
        {
            List<WeakImage> outputs = new List<WeakImage>();

            if (null == filter)
            {
                outputs = inputs;
            }
            else
            {
                FilterCore flt = (FilterCore)Activator.CreateInstance(filter.FilterType);
                Image o; WeakImage wo;
                foreach (WeakImage i in inputs)
                {
                    DateTime start = DateTime.Now;

                    o = flt.ApplyFilter((Image)i, configs);

                    DateTime end = DateTime.Now;

                    // _duration is always initialized to TimeSpan.Zero
                    // if the node has a parent, _duration should be initialized
                    // with the duration of the parent
                    if (Parent != null)
                        _duration = Parent.Duration;

                    _duration += (end - start);

                    o.Tag = Facilities.CloneTag((Image)i);
                    Facilities.AddFilterExecution(ref o, flt, configs);

                    wo = new WeakImage(o);
                    outputs.Add(wo);

                    OnFilterExecuted(i, wo, filter, configs, _duration);

                    // Calculate Metrics ** Here **
                    // Raise even without measures
                    List<MetricResult> results = new List<MetricResult>();
                    if (null != measures)
                    {
                        //SortedDictionary<string, double> results = new SortedDictionary<string, double>();
                        foreach (MetricExecBase m in measures)
                        {
                            m.SetInput(i);
                            m.SetOutput(wo);
                            results.Add(new MetricResult(m.Input, m.Key, m.Calculate()));
                        }
                    }

                    OnFilterMeasured(i, wo, filter, configs, results, _duration);
                }
            }

            return outputs;
        }