Example #1
0
        internal RespostaVerificacao verificarSePossuiComportamentoSuspeito(ParametrosDinamicos parametros)
        {
            RespostaVerificacao resposta = new RespostaVerificacao();

            resposta.Suspeito = true;
            if (parametros == null)
            {
                parametros = new ParametrosDinamicos();
            }

            if (verificarSeEstaEmAreaProibida(parametros.RegiaoAreaRestrita))
            {
                resposta.Mensagem = "ATENÇÃO - PERMANÊNCIA EM ÁREA PROIBIDA";
                return(resposta);
            }
            if (verificarSeNaoEstaEmPe(parametros.RetanguloPessoa))
            {
                resposta.Mensagem = "ATENÇÃO - PESSOA EM POSIÇÃO SUSPEITA";
                return(resposta);
            }
            if (obterVelocidadeKmPorHora() > parametros.VelocidadeMaxima)
            {
                resposta.Mensagem = "ATENÇÃO - VELOCIDADE ACIMA DO NORMAL";
                return(resposta);
            }
            if (verificarSePossuiRotaSuspeita(parametros.NumeroMaximoDeInversoesDeRota))
            {
                resposta.Mensagem = "ATENÇÃO - MOVIMENTAÇÃO SUSPEITA";
                return(resposta);
            }
            if (obterTempoEmCena() > parametros.TempoMaximoEmCena)
            {
                resposta.Mensagem = "ATENÇÃO - TEMPO EM CENA ACIMA DO NORMAL";
                return(resposta);
            }
            resposta.Suspeito = false;
            resposta.Mensagem = "NORMAL";
            return(resposta);
        }
Example #2
0
        public void desenharEprocessar()
        {
            if (parametros.PontosAreaRestrita != null && parametros.PontosAreaRestrita.Count > 0)
            {
                for (int i = 1; i < parametros.PontosAreaRestrita.Count; i++)
                {
                    //CvInvoke.cvLine(mImagemColorida, parametros.PontosAreaRestrita[i - 1], parametros.PontosAreaRestrita[i], new MCvScalar(255, 0, 0, 0), 1, LINE_TYPE.CV_AA, 0);
                    CvInvoke.Line(mImagemColorida, parametros.PontosAreaRestrita[i - 1], parametros.PontosAreaRestrita[i], new MCvScalar(255, 0, 0, 0), 1, LineType.AntiAlias, 0);
                }
            }

            List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>();

            foreach (CvBlob blob2 in mblobs.Values)
            {
                MCvBlob blob = new MCvBlob();
                blob.Center = blob2.Centroid;
                blob.Size   = blob2.BoundingBox.Size;

                if (verificarSeEhTamanhoDePessoa(blob.Size.Height, blob.Size.Width, blob.Center.X, blob.Center.Y) || verificarExistenciaBlob(blob) != 0)
                {
                    MonitorDePessoa vMonitorAtual = obterMonitorDePessoa(blob);
                    blob.ID = vMonitorAtual.obterIdentificador();
                    vMonitorAtual.adicionarNovoBlob(blob, base.mContadorDeFrames);
                    List <Point> vPontos = vMonitorAtual.obterPontos();
                    // desenharCaminho(vPontos);
                    Point     p1 = new Point((int)((blob.Center.X - blob.Size.Width / 2) * 0.98), (int)((blob.Center.Y - blob.Size.Height / 2) * 0.98));
                    Point     p2 = new Point((int)((blob.Center.X + blob.Size.Width / 2) * 1.08), (int)((blob.Center.Y + blob.Size.Height / 2) * 1.08));
                    MCvScalar corTexto;
                    parametros.RetanguloPessoa = new Rectangle(new Point(p1.X, p2.Y), new Size(p2.X - p1.X, p2.Y - p1.Y));
                    if (vMonitorAtual.verificarSePossuiComportamentoSuspeito(parametros).Suspeito)
                    {
                        corTexto = new MCvScalar(0, 0, 255, 0);
                    }
                    else
                    {
                        corTexto = new MCvScalar(0, 255, 0, 0);
                    }

                    Point[] pontosKalman = aplicarFiltroKalman(blob);
                    corTexto = new MCvScalar(255, 0, 0, 0);
                    vMonitorAtual.adicionarPontoKalman(pontosKalman[1]);
                    //CvInvoke.cvRectangle(mImagemColorida, p1, p2, corTexto, 1, LINE_TYPE.CV_AA, 0);
                    CvInvoke.Rectangle(mImagemColorida, blob2.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2);
                    p1.Y = p1.Y - 10;
                    escreverId(blob.ID.ToString(), p1, corTexto);
                    vPessoasEmCena.Add(vMonitorAtual);
                }
            }
            mJanelaMonitoramento.GridPessoasMonitoradas.Rows.Clear();
            foreach (MonitorDePessoa vPessoa in vPessoasEmCena)
            {
                if (!mJanelaMonitoramento.Visible)
                {
                    return;
                }
                RespostaVerificacao resposta   = vPessoa.verificarSePossuiComportamentoSuspeito(parametros);
                DataGridViewRow     vNovaLinha = new DataGridViewRow();
                vNovaLinha.CreateCells(mJanelaMonitoramento.GridPessoasMonitoradas, new String[] { vPessoa.obterIdentificador().ToString(), vPessoa.obterVelocidadeMetroPorSegundo().ToString(),
                                                                                                   vPessoa.obterVelocidadeKmPorHora().ToString(), vPessoa.obterTempoEmCena().ToString(), vPessoa.obterNumeroDeInversoes().ToString(),
                                                                                                   resposta.Mensagem });
                vNovaLinha.DefaultCellStyle.BackColor          = resposta.Suspeito ? Color.Red : Color.Green;
                vNovaLinha.DefaultCellStyle.SelectionBackColor = vNovaLinha.DefaultCellStyle.BackColor;
                mJanelaMonitoramento.GridPessoasMonitoradas.Rows.Add(vNovaLinha);
            }

            mSalvarImagem = mJanelaMonitoramento.SalvarImagem;
            mJanelaMonitoramento.SalvarImagem = false;
        }
Example #3
0
 internal void adicionarNovoBlob(MCvBlob pBlob, int pNumeroDoFrame)
 {
     mListaBlobsENumeroFrame.Add(new BlobENumeroDoFrame(pBlob, pNumeroDoFrame));
     mPossuiMovimentoSuspeito = null;
 }