Beispiel #1
0
        /// <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;
        }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 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;
 }
Beispiel #5
0
        private void OnNothing()
        {
            CurrentState = DetectorState.Nothing;
            _foundNothingCount++;

            if (_foundNothingCount > NoBoundingBoxBackgroundThreshold)
            {
                UpdateMotionFinder();
            }
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
            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);
            }
Beispiel #8
0
        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());
            }
        }
Beispiel #9
0
        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());
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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;
            }
            }
        }
Beispiel #13
0
 public void StartBlinkDetection()
 {
     state = DetectorState.Started;
 }
Beispiel #14
0
 private static MemberInfo ForValue(DetectorState state)
 {
     return(typeof(DetectorState).GetField(Enum.GetName(typeof(DetectorState), state)));
 }
Beispiel #15
0
 public static IEnumerable <DetectorState> GetStates(this DetectorState state)
 {
     return(GetAttr(state).States);
 }
Beispiel #16
0
 public DetectMultiStep()
 {
     State = DetectorState.Ready;
 }
Beispiel #17
0
 public DetectSingleStep()
 {
     State = DetectorState.Ready;
 }
Beispiel #18
0
 public void StopBlinkDetection()
 {
     state = DetectorState.Stopped;
 }
Beispiel #19
0
 public virtual void SetActiveState(DetectorState state)
 {
     State = state;
 }
Beispiel #20
0
 private static NextStates GetAttr(DetectorState state)
 {
     return((NextStates)Attribute.GetCustomAttribute(ForValue(state), typeof(NextStates)));
 }