コード例 #1
0
ファイル: frmAutoScan.cs プロジェクト: yufish/omrmarkengine
        /// <summary>
        /// Start scan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            this.m_scannedPages = new OmrPageOutputCollection();
            foreach (var itm in this.m_uiResults)
            {
                itm.Value.Dispose();
                itm.Key.Tag = null;
            }
            this.m_uiResults = new Dictionary <ListViewItem, Image>();
            lsvView.Items.Clear();

            if (cboScanners.SelectedItem == null)
            {
                MessageBox.Show("Please select a valid scanner");
            }
            else
            {
                stsMain.Visible    = true;
                this.stsMain.Style = ProgressBarStyle.Marquee;
                lblStatus.Text     = "Acquiring Images...";
                groupBox1.Enabled  = false;
                this.m_scanEngine.ScanAsync(cboScanners.SelectedItem as ScannerInfo);
                lblStatus.Text = "Waiting for processing to complete...";
            }
        }
コード例 #2
0
 /// <summary>
 /// Transform
 /// </summary>
 public byte[] Transform(Template.OmrTemplate template, OmrPageOutputCollection pages)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         new XmlSerializer(typeof(OmrPageOutputCollection)).Serialize(ms, pages);
         ms.Flush();
         return(ms.ToArray());
     }
 }
コード例 #3
0
        /// <summary>
        /// Save output to XML file
        /// </summary>
        private void saveSelectedOutputToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (lsvImages.SelectedItems.Count == 0)
            {
                return;
            }

            // Filters
            StringBuilder filters = new StringBuilder();

            foreach (var tx in this.m_transforms)
            {
                filters.AppendFormat("{0} (*.{1})|*.{1}|", tx.Name, tx.Extension);
            }
            filters.Remove(filters.Length - 1, 1);

            var saveDialog = new SaveFileDialog()
            {
                Title        = "Save Output",
                Filter       = filters.ToString(),
                AddExtension = true
            };

            if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    var transformer = this.m_transforms.Find(o => saveDialog.FileName.EndsWith(o.Extension));
                    using (FileStream fs = File.Create(saveDialog.FileName))
                    {
                        OmrPageOutputCollection pages = new OmrPageOutputCollection();
                        foreach (ListViewItem sel in lsvImages.SelectedItems)
                        {
                            pages.Pages.Add(sel.Tag as OmrPageOutput);
                        }

                        byte[] data = transformer.Transform(this.m_currentTemplate, pages);
                        fs.Write(data, 0, data.Length);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error Saving");
                }
            }
        }
コード例 #4
0
        /// <summary>
        ///     Transform the output
        /// </summary>
        public byte[] Transform(OmrTemplate template, OmrPageOutputCollection pages)
        {
            // CSV output is formatted as follows:
            //                 BARCODE0    BARCODE1    BARCODEN   BUBBLEQ1   BUBBLEQ2    BUBBLEQ3
            // PAGE1     ROW1
            // PAGE1     ROW2
            // PAGE1     ROWN
            // PAGE2     ROW1
            // PAGE2     ROW2
            // PAGE2     ROWN
            // PAGEN

            using (var ms = new MemoryStream())
            {
                using (var sw = new StreamWriter(ms))
                {
                    // Get the headings
                    var barcodeGroup =
                        template.FlatFields.OfType <OmrBarcodeField>().GroupBy(o => o.AnswerRowGroup).FirstOrDefault();
                    var nBarcodesPerRow = 0;
                    if (barcodeGroup != null)
                    {
                        nBarcodesPerRow = barcodeGroup.Count();
                    }
                    var questionsPerRow =
                        template.FlatFields.OfType <OmrBubbleField>().Select(o => o.Question).Distinct().ToArray();
                    // Output header row
                    sw.Write("PAGE,ROW");
                    for (var i = 0; i < nBarcodesPerRow; i++)
                    {
                        sw.Write(",BARCODE{0}", i);
                    }
                    foreach (var q in questionsPerRow)
                    {
                        sw.Write(",{0}", q);
                    }
                    sw.WriteLine();

                    foreach (var pg in pages.Pages)
                    {
                        foreach (var rw in pg.Details.OfType <OmrRowData>())
                        {
                            sw.Write("{0},{1}", pg.Id, rw.Id);
                            var barcodes = rw.Details.OfType <OmrBarcodeData>().ToArray();

                            // Barcode
                            for (var i = 0; i < nBarcodesPerRow; i++)
                            {
                                if (barcodes.Length > i)
                                {
                                    sw.Write(",\"{0}\"", barcodes[i].BarcodeData);
                                }
                                else
                                {
                                    sw.Write(",");
                                }
                            }

                            // Questions
                            foreach (var q in questionsPerRow)
                            {
                                var answerBubble = rw.Details.OfType <OmrBubbleData>().Where(o => o.Key == q).ToArray();
                                var aggregate    =
                                    rw.Details.OfType <OmrAggregateDataOutput>().Where(o => o.Id == q).ToArray();
                                var nonGroupedAnswer =
                                    pg.Details.OfType <OmrBubbleData>().Where(o => o.Key == q).ToArray();

                                if (aggregate.Length > 0)
                                {
                                    sw.Write(",{0}", MakeString(aggregate));
                                }
                                else if (answerBubble.Length > 0)
                                {
                                    sw.Write(",{0}", MakeString(answerBubble));
                                }
                                else if (nonGroupedAnswer.Length > 0)
                                {
                                    sw.Write(",{0}", MakeString(nonGroupedAnswer));
                                }
                                else
                                {
                                    sw.Write(",");
                                }
                            }

                            sw.WriteLine();
                        }
                    }
                    sw.Flush();
                    return(ms.ToArray());
                }
            }
            // Get the header
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: uzbekdev1/dtm-test
        private static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Optical Mark Engine Console Utility");
                Console.WriteLine("Version {0}, {1}", Assembly.GetEntryAssembly().GetName().Version,
                                  Assembly.GetEntryAssembly()
                                  .GetCustomAttributes(typeof(AssemblyCopyrightAttribute))
                                  .Select(o => o as AssemblyCopyrightAttribute)
                                  .First()
                                  .Copyright);

                // Parse parameters
                var parser     = new ParameterParser <ConsoleParameters>();
                var parameters = parser.Parse(args);

                // Show help?
                var showHelp = string.IsNullOrEmpty(parameters.OutputFile) || string.IsNullOrEmpty(parameters.Template) ||
                               (parameters.SourceFiles == null) ||
                               parameters.Help;
                if (showHelp)
                {
                    parser.WriteHelp(Console.Out);
                }
                else if (!File.Exists(parameters.Template))
                {
                    throw new ArgumentException(string.Format("{0} not found", parameters.Template));
                }
                else if ((parameters.OutputFormat.ToLower() != "csv") && (parameters.OutputFormat.ToLower() != "xml"))
                {
                    throw new ArgumentException("Output format must be XML or CSV!");
                }

                // Load the files
                foreach (var ptrn in parameters.SourceFiles)
                {
                    string directory = Path.GetDirectoryName(ptrn) ?? ".",
                             pattern = Path.GetFileName(ptrn);

                    // Get files
                    var outputCollection = new OmrPageOutputCollection();
                    var engine           = new Engine();
                    var tsu      = new TemplateScriptUtil();
                    var template = OmrTemplate.Load(parameters.Template);


                    // Process files
                    foreach (var fileName in Directory.GetFiles(directory, pattern))
                    {
                        Console.Write("Processing {0}...", Path.GetFileName(fileName));
                        using (var sci = new ScannedImage(fileName))
                        {
                            sci.Analyze();
                            if (sci.TemplateName != template.Id)
                            {
                                Console.WriteLine("Wrong template!");
                                continue;
                            }

                            var output   = engine.ApplyTemplate(template, sci);
                            var validate = output.Validate(template);
                            if (parameters.Validate && !validate.IsValid)
                            {
                                Console.WriteLine("Invalid");
                                foreach (var iss in validate.Issues)
                                {
                                    Console.WriteLine("\t{0}", iss);
                                }
                            }
                            else
                            {
                                try
                                {
                                    if (parameters.Run)
                                    {
                                        tsu.Run(template, output);
                                    }
                                    outputCollection.Pages.Add(output);
                                    Console.WriteLine("Success");
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine("Error\r\n\t{0}", e.Message);
                                }
                            }
                        }
                    }

                    // Save the output?
                    switch (parameters.OutputFormat)
                    {
                    case "csv":
                    {
                        var outputBytes = new CsvOutputTransform().Transform(template, outputCollection);
                        using (var fs = File.Create(parameters.OutputFile))
                        {
                            fs.Write(outputBytes, 0, outputBytes.Length);
                        }
                        break;
                    }

                    default:
                    {
                        var outputBytes = new RawOutputTransform().Transform(template, outputCollection);
                        using (var fs = File.Create(parameters.OutputFile))
                        {
                            fs.Write(outputBytes, 0, outputBytes.Length);
                        }
                    }
                    break;
                    }
                }
#if DEBUG
                Console.ReadKey();
#endif
                Environment.Exit(0);
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Error: {0}", e.Message);
                Environment.Exit(-1);
            }
        }