Beispiel #1
0
        public GenerateOCRLib(APPLICATION_DATA appData, string srcDir, string outDir)
        {
            m_AppData = appData;
            m_LPREngine = (LPREngine)m_AppData.LPREngine;
            m_LPR_C_Lib = m_LPREngine.m_LPRFuntions;

            m_SourceDirectory = srcDir;

            m_DesitnationDirectory = outDir;
            m_DestinationFile = m_SourceDirectory + "\\OCR_charLib.h";
        }
Beispiel #2
0
        public LPREngine(APPLICATION_DATA appData)
        {
            try
            {
                m_AppData = appData;
                m_AppData.AddOnClosing(Stop, APPLICATION_DATA.CLOSE_ORDER.MIDDLE);
                m_Log = (ErrorLog)m_AppData.Logger;
                m_FrameGen = (FrameGenerator)m_AppData.FrameGenerator;

                m_LPRProcessQ = new ThreadSafeQueue<FRAME>(m_LPRProcessQueSize, "QueueOverruns_LPR_LPRProcessQ", m_AppData); // this queue hold frames that come from the framegenerator and need to be processed by LPR
                m_AppData.LPRGettingBehind = false;

                m_LPRFinalPlateGroupOutputQ = new ThreadSafeQueue<FRAME>(60, "QueueOverruns_LPR_LPRFinalPlateGroupOutputQ", m_AppData); // filtered plate readings, grouped into similar readings, redundant readings removed

                m_LPRPerFrameReadingQ = new ThreadSafeQueue<FRAME>(60, "QueueOverruns_LPR_LPRPerFrameReadingQ", m_AppData); // instantaneous output from LPR for each fram processed

                m_StoredFrameData = new ThreadSafeHashableQueue(30 * 60);// 60 seconds of frames at 30fps

                m_LPRFuntions = new LPROCR_Lib();
                unsafe
                {       // the plate group processor accumulates per-frame plate readings and consolidates them into a single plate reading where appropriate
                    m_LPRFuntions.RegisterPlateGroupCB(OnNewPlateGroupReady);
                }

                int maxW = 0, minW = 0, maxH = 0, minH = 0;

                m_LPRFuntions.GetMinMaxPlateSize(ref minW, ref maxW,ref minH, ref maxH);

                m_AppData.MAX_PLATE_HEIGHT = maxH;
                m_AppData.MIN_PLATE_HEIGHT = minH;
                m_AppData.MAX_PLATE_WIDTH = maxW;
                m_AppData.MIN_PLATE_WIDTH = minW;

                m_processOptions = new LPROCR_Lib.LPR_PROCESS_OPTIONS();

                m_processOptions.roll = 1;
                m_processOptions.rotation = 1;

                // register with the frame grabber to get new bitmaps from the channel sources as they come in

                m_ConsumerID = m_FrameGen.GetNewConsumerID();

            //                m_NumSourceChannels = m_FrameGen.GetNumberOfConfiguredChannels();
                m_NumSourceChannels = (m_AppData.RunninAsService) ? m_AppData.MAX_PHYSICAL_CHANNELS : m_AppData.MAX_VIRTUAL_CHANNELS;

                m_LPREngineProcessThread = new Thread(LPREngineProcessLoop);

                PushLPRResultsThread = new Thread(PushLPRResultsLoop);
            }
            catch (Exception ex) { m_Log.Trace(ex, ErrorLog.LOG_TYPE.FATAL); }
        }
Beispiel #3
0
        void WriteMaskFile(string path, bool lastChar)
        {
            Bitmap bmp = new Bitmap(path);

            FileInfo fi = new FileInfo(path);

            string inputNameOnly = fi.Name;
            string intputNameNoExtention;

            if (inputNameOnly.Contains("_"))
            {
                string[] s = inputNameOnly.Split('_');
                intputNameNoExtention = s[0];
            }
            else
            {
                string[] s = inputNameOnly.Split('.');
                intputNameNoExtention = s[0];
            }

            string inputDirectory = fi.DirectoryName;

            string outPath = m_DestinationFile;

            int[,] charY = new int[bmp.Width, bmp.Height];

            getPixelsFromImageInY(bmp, ref charY);

            if (bmp.Width != 20 || bmp.Height != 40)
            {
                LPROCR_Lib LPR_C_Lib = new LPROCR_Lib();

                int[,] newScaledArray = new int[20, 40];

                LPR_C_Lib.OCR_prepChar(charY, charY.GetLength(0), charY.GetLength(1), newScaledArray);

                charY = newScaledArray;

                bmp = new Bitmap(20, 40);

                putPixelsFromImageinYBW(ref bmp, charY);

            }

            string line1 = "{\"" + intputNameNoExtention + "\", //name \r\n";
            string line2 = "{ \r\n";

            File.AppendAllText(outPath, line1);
            File.AppendAllText(outPath, line2);

            StringBuilder sb;

            for (int x = 0; x < charY.GetLength(0); x++)
            {
                sb = new StringBuilder();

                sb.Append("{ ");

                for (int y = 0; y < charY.GetLength(1); y++)
                {
                    int val;
                    if (charY[x, y] <= 0) val = -1;
                    else val = 1;

                    //   int val = charY[x, y];

                    sb.Append(val.ToString());

                    if (y != charY.GetLength(1) - 1) sb.Append(", ");
                    else sb.Append(" ");
                }

                if (x != charY.GetLength(0) - 1) sb.Append(" },\r\n");  // not last data line for this data entry
                else sb.Append(" }\r\n");   // is last data line

                File.AppendAllText(outPath, sb.ToString());
            }

            if (!lastChar) line1 = " }},\r\n"; // close this array entry, but not last array data entry
            else line1 = " }}\r\n";

            File.AppendAllText(outPath, line1);
        }
        public GoNoGoStatusMainForm()
        {
            InitializeComponent();

            this.Text = "First Evidence GoNoGo System Monitor, version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

            m_AppData = new APPLICATION_DATA();
            m_Log = new ErrorLog(m_AppData);
            m_AppData.Logger =(object) m_Log;

            LPROCR_Lib LPRlib = new LPROCR_Lib();

            // get plate min max to draw the min/max target boxes for the user to see
            LPRlib.GetMinMaxPlateSize(ref minW, ref maxW, ref minH, ref maxH);

            // fudge the min box size so the user will make the plate bigger
            minH += 20;
            minW += 40;

            m_ReceiveDataSingleton = new object();

            jpegQ = new ThreadSafeQueue<JPEG>(30);

            m_PreviousPlateNumber = new string[4];
            m_UneditedImages = new UNEDITEDIMAGES[4];
            m_UneditedImages[0] = new UNEDITEDIMAGES();
            m_UneditedImages[1] = new UNEDITEDIMAGES();
            m_UneditedImages[2] = new UNEDITEDIMAGES();
            m_UneditedImages[3] = new UNEDITEDIMAGES();

            m_SystemStatusLock = new object();
            m_SystemStatus = new SYSTEM_STATUS_STRINGS();

            m_FullScreenPB = new bool[4];
            m_FullScreenPB[0] = false;
            m_FullScreenPB[1] = false;
            m_FullScreenPB[2] = false;
            m_FullScreenPB[3] = false;

            this.FormClosing += new FormClosingEventHandler(GoNoGoStatusMainForm_FormClosing);

            this.Resize +=new EventHandler(GoNoGoStatusMainForm_Resize);

            m_ServerConnection = new RCSClient( m_AppData);

            m_PollingThread = new Thread(PollingLoop);

            m_ServerConnection.MessageEventGenerators.OnRxChannelList += OnReceiveChannels;
            m_ServerConnection.MessageEventGenerators.OnRxJpeg += OnNewJpeg;
            m_ServerConnection.MessageEventGenerators.OnRxHealthStatus += OnRxStats;

            pb_ClickGenericHandler = new pb_ClickDelegate[4];
            pb_ClickGenericHandler[0] = pb_Click0;
            pb_ClickGenericHandler[1] = pb_Click1;
            pb_ClickGenericHandler[2] = pb_Click2;
            pb_ClickGenericHandler[3] = pb_Click3;

            m_JpegPlayControl = new JPEG_PLAY_CONTROL[4];
            m_JpegPlayControl[0] = new JPEG_PLAY_CONTROL();
            m_JpegPlayControl[1] = new JPEG_PLAY_CONTROL();
            m_JpegPlayControl[2] = new JPEG_PLAY_CONTROL();
            m_JpegPlayControl[3] = new JPEG_PLAY_CONTROL();

            progressBarPlateProcessQueueLevel = new MyProgressBar();
            progressBarPlateProcessQueueLevel.Location = new Point(10, 40);
            progressBarPlateProcessQueueLevel.Size = new Size(groupBoxPlateProcessQueLevel.Size.Width-20, 30);

            groupBoxPlateProcessQueLevel.Controls.Add(progressBarPlateProcessQueueLevel);

            buttonSaveCurrentImage.Visible = false;
            buttonSaveCurrentImage.Enabled = false;

            m_PollingThread.Start();
        }