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); } }
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(); }