/// <summary> /// Detect edge transitions using value deltas /// </summary> /// <param name="parms">Detection parameters</param> public void DetectEdges(DetectorParams parms) { Bitmap srcImg = parms.SourceImage; int threshold = parms.Threshold; Bitmap destImg = new Bitmap(srcImg.Width, srcImg.Height); float step = 100f / (float)(srcImg.Height + 1); State = DetectorState.Processing; int[,] levels = DetectorHelper.GetChannel(srcImg, parms.Channel, UpdateUi); for (int y = 0; y < destImg.Height - 1 && State == DetectorState.Processing; y++) { for (int x = 0; x < destImg.Width - 1; x++) { int dx = levels[x + 1, y] - levels[x, y]; int dy = levels[x, y + 1] - levels[x, y]; Color rgb = (dx > threshold || dy > threshold) ? Color.White : Color.Black; destImg.SetPixel(x, y, rgb); } UpdateUi(50 + y * 50 / destImg.Height); } EndUpdate(destImg); State = DetectorState.Ready; }
private void ChangeState(DetectorState state) { var newState = CurrentState.GetStates().Contains(state) ? state : CurrentState; if (newState == CurrentState) { return; } switch (newState) { case DetectorState.Entry: OnTrainEnter(); return; case DetectorState.Exit: OnTrainExit(false); return; case DetectorState.Nothing: OnNothing(); return; default: throw new ArgumentOutOfRangeException(); } }
public DetectorStatus(DetectorState _state, DetectorOperationMode _mode, byte _fps, byte _nof, UInt16 _BMPRate, MessageType messageType = MessageType.DETECTOR_STATUS_MESSAGE) : base(MessageType.DETECTOR_STATUS_MESSAGE) { mState = _state; mOperationMode = _mode; mFPS = _fps; mNOF = _nof; mBMPRate = _BMPRate; }
public DetectorStatus(MessageType messageType = MessageType.DETECTOR_STATUS_MESSAGE) : base(MessageType.DETECTOR_STATUS_MESSAGE) { mState = DetectorState.DISCONNECTED; mOperationMode = DetectorOperationMode.BINDING; mFPS = 0; mNOF = 0; mBMPRate = 0; }
private void OnNothing() { CurrentState = DetectorState.Nothing; _foundNothingCount++; if (_foundNothingCount > NoBoundingBoxBackgroundThreshold) { UpdateMotionFinder(); } }
public override void deserialize(byte[] array) { ByteBuffer buf = new ByteBuffer(); buf.putBytes(array, array.Length); byte tmp = 0xFF; buf.getByte(ref tmp); mState = (DetectorState)tmp; buf.getByte(ref tmp); mOperationMode = (DetectorOperationMode)tmp; buf.getByte(ref mFPS); buf.getByte(ref mNOF); buf.getUInt16(ref mBMPRate); }
public bool IsRunningBehind(DetectorState detectorState) { if (Position < detectorState.Position) { return(true); } if (Position > detectorState.Position) { return(false); } if ((LastDataBlock != null) && (detectorState.LastDataBlock == null)) { return(true); } return(false); }
private void OnTrainExit(bool abort) { CurrentState = DetectorState.Exit; _exitDateTime = _timeProvider.Now; _scheduledExit = null; if (abort) { // It has not been long enough since the entry. So this probably was a misfire. Log.Warn($"Entry followed by exit was shorter than {MinTimeAfterEntry}s. Aborting."); Abort?.Invoke(this, new EventArgs()); } else { // Train properly exited. Exit?.Invoke(this, new EventArgs()); } }
private void OnTrainEnter() { if (_timeProvider.Now.Subtract(TimeSpan.FromSeconds(MinTimeAfterExit)) < _exitDateTime) { // It has not been long enough since the last exit. return; } CurrentState = DetectorState.Entry; _entryDateTime = _timeProvider.Now; _foundNothingCount = 0; if (_exitDateTime == null) { // We also set exit time if it's null _exitDateTime = _timeProvider.Now; } Enter?.Invoke(this, new EventArgs()); }
public virtual void Scan(IDataReader dataReader, IProgressReporter aProgressReporter) { PreConditions.Argument("dataReader").Value(dataReader).IsNotNull(); PreConditions.Argument("aProgressReporter").Value(aProgressReporter).IsNotNull(); ProgressReporter progressReporter = new ProgressReporter(aProgressReporter, _detectorStates.Count); IDataReader progressDataReader = _createProgressDataReader(dataReader, progressReporter); ResetDetectorStates(progressDataReader.Length); aProgressReporter.ReportProgress(0); DetectorState detectorState = SelectNextDetector(progressReporter, progressDataReader); long lastReportedOffset = 0L; while ((progressDataReader.State == DataReaderState.Ready) && !aProgressReporter.CancellationPending) { detectorState.DetectNextDataBlock(progressDataReader, _createDataBlockBuilder()); // Select next detector detectorState = SelectNextDetector(progressReporter, progressDataReader); // Report detected data block, if any if (!aProgressReporter.CancellationPending && (detectorState.LastDataBlock != null)) { ReportUnknownData(lastReportedOffset, GetMinimumLatestDataBlockStartOffset()); if (detectorState.Position > lastReportedOffset) { lastReportedOffset = detectorState.Position; } OnDataBlockDetected(new DataBlockDetectedEventArgs(detectorState.LastDataBlock)); } } // Report unknown data at end of stream, if any if (!aProgressReporter.CancellationPending) { ReportUnknownData(lastReportedOffset, progressDataReader.Length); } }
private DetectorState SelectNextDetector(ProgressReporter progressReporter, IDataReader dataReader) { DetectorState nextDetector = null; foreach (DetectorState detectorState in _detectorStates) { if ((nextDetector == null) || detectorState.IsRunningBehind(nextDetector)) { nextDetector = detectorState; } } if (nextDetector == null) { dataReader.Position = dataReader.Length; } else { progressReporter.CurrentDetector = nextDetector; dataReader.Position = nextDetector.Position; } return(nextDetector); }
private void handleResponseMessage(BaseMessage msg) { switch (msg.getMessageType()) { case MessageType.DETECTOR_STATUS_MESSAGE: { DetectorStatus detectorStatus = msg as DetectorStatus; this.mState = detectorStatus.getState(); this.mOperationMode = detectorStatus.getOperationMode(); this.mFPS = detectorStatus.getFPS(); this.mNOF = detectorStatus.getNOF(); this.mBMPRate = detectorStatus.getBMPRate(); this.Dispatcher.Invoke((MethodInvoker) delegate { switch (this.mState) { case DetectorState.DISCONNECTED: { lbDetectorState.Content = "Chưa kết nối"; lbDetectorBMPRate.Content = ""; lbDetectorFPS.Content = ""; lbDetectorNumOfFrame.Content = ""; break; } case DetectorState.CONNECTED: { lbDetectorState.Content = "Đã kết nối"; circleDetectorState.Fill = Brushes.Green; //lbDetectorBMPRate.Content = "BMPRate ( " + this.mBMPRate.ToString() + " % )"; lbDetectorFPS.Content = "FPS (" + this.mFPS.ToString() + ")"; lbDetectorNumOfFrame.Content = "Số ảnh chụp(" + this.mNOF.ToString() + ")"; break; } case DetectorState.CALIBARATING: { lbDetectorState.Content = "Đang hiệu chỉnh"; circleDetectorState.Fill = Brushes.Green; //lbDetectorBMPRate.Content = "BMPRate ( " + this.mBMPRate.ToString() + " % )"; lbDetectorFPS.Content = "FPS (" + this.mFPS.ToString() + ")"; lbDetectorNumOfFrame.Content = "Số ảnh chụp(" + this.mNOF.ToString() + ")"; break; } case DetectorState.CALIBRATE_DARK_DONE: { lbDetectorState.Content = "Hiệu chỉnh tối xong"; circleDetectorState.Fill = Brushes.Green; //lbDetectorBMPRate.Content = "BMPRate ( " + this.mBMPRate.ToString() + " % )"; lbDetectorFPS.Content = "FPS ( " + this.mFPS.ToString() + " )"; lbDetectorNumOfFrame.Content = "Số ảnh chụp(" + this.mNOF.ToString() + ")"; break; } case DetectorState.CALIBRATE_BRIGHT_DONE: { lbDetectorState.Content = "Hiệu chỉnh sáng xong"; circleDetectorState.Fill = Brushes.Green; lbDetectorBMPRate.Content = "BMPRate ( " + this.mBMPRate.ToString() + " % )"; lbDetectorFPS.Content = "FPS ( " + this.mFPS.ToString() + " )"; lbDetectorNumOfFrame.Content = "Số ảnh chụp(" + this.mNOF.ToString() + ")"; break; } case DetectorState.READY_GET_IMAGE: { lbDetectorState.Content = "Sẵn sàng chụp ảnh"; circleDetectorState.Fill = Brushes.Green; lbDetectorBMPRate.Content = "BMPRate (" + this.mBMPRate.ToString() + " %)"; lbDetectorFPS.Content = "FPS ( " + this.mFPS.ToString() + " )"; lbDetectorNumOfFrame.Content = "Số ảnh chụp(" + this.mNOF.ToString() + ")"; break; } } }); //Logger.Info("DETECTOR_STATUS_MESSAGE: state = {0}, mode = {1}, FPS = {2}, NOF = {3}, BMP = {4}", // detectorStatus.getState(), detectorStatus.getOperationMode(), detectorStatus.getFPS(), detectorStatus.getNOF(), detectorStatus.getBMPRate()); break; } case MessageType.DETECTOR_GET_IMAGE_DONE: { DetectorGetImageDone res = msg as DetectorGetImageDone; this.mCurResImage = res.getIndex(); Logger.Info("DETECTOR_GET_IMAGE_DONE: index = {0}", res.getIndex()); break; } case MessageType.DETECTOR_ERROR_MESSAGE: { DetectorError res = msg as DetectorError; Logger.Info("DETECTOR_ERROR_MESSAGE: error code = {0}", res.getErrorCode()); break; } default: { //Logger.Info("DetectorCodec key = {0} does NOT match any key", BitConverter.ToString(BitConverter.GetBytes((ushort)_key))); break; } } }
public void StartBlinkDetection() { state = DetectorState.Started; }
private static MemberInfo ForValue(DetectorState state) { return(typeof(DetectorState).GetField(Enum.GetName(typeof(DetectorState), state))); }
public static IEnumerable <DetectorState> GetStates(this DetectorState state) { return(GetAttr(state).States); }
public DetectMultiStep() { State = DetectorState.Ready; }
public DetectSingleStep() { State = DetectorState.Ready; }
public void StopBlinkDetection() { state = DetectorState.Stopped; }
public virtual void SetActiveState(DetectorState state) { State = state; }
private static NextStates GetAttr(DetectorState state) { return((NextStates)Attribute.GetCustomAttribute(ForValue(state), typeof(NextStates))); }