예제 #1
0
        protected override void desenharEMapear()
        {
            List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>();

            foreach (var 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))
                {
                    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 = 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);
                }
            }

            parametros.PontosAreaRestrita = mJanelaAreaRestrita.obterPontos();
            desenharCaminho(parametros.PontosAreaRestrita, new MCvScalar(0, 0, 255.0, 0));
            mJanelaAreaRestrita.GridPessoasMonitoradas.Rows.Clear();
            foreach (MonitorDePessoa vPessoa in vPessoasEmCena)
            {
                DataGridViewRow vNovaLinha = new DataGridViewRow();
                vNovaLinha.CreateCells(mJanelaAreaRestrita.GridPessoasMonitoradas, new String[] { vPessoa.obterIdentificador().ToString(), vPessoa.obterVelocidadeMetroPorSegundo().ToString(),
                                                                                                  vPessoa.obterVelocidadeKmPorHora().ToString(), vPessoa.obterTempoEmCena().ToString(), vPessoa.obterNumeroDeInversoes().ToString(),
                                                                                                  "MAPEANDO..." });
                vNovaLinha.DefaultCellStyle.BackColor          = Color.Green;
                vNovaLinha.DefaultCellStyle.SelectionBackColor = vNovaLinha.DefaultCellStyle.BackColor;
                if (mJanelaAreaRestrita.GridPessoasMonitoradas.ColumnCount > 0)
                {
                    mJanelaAreaRestrita.GridPessoasMonitoradas.Rows.Add(vNovaLinha);
                }
            }

            if (!mJanelaAreaRestrita.Visible)
            {
                mFinalizar = true;
            }
        }
예제 #2
0
        private void desenharRetanguloPessoa()
        {
            List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>();

            foreach (var 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))
                {
                    MonitorDePessoa vMonitorAtual = obterMonitorDePessoa(blob);
                    blob.ID = vMonitorAtual.obterIdentificador();
                    vMonitorAtual.adicionarNovoBlob(blob, base.mContadorDeFrames);

                    List <Point> vPontos = vMonitorAtual.obterPontos();
                    desenharCaminho(vPontos, new MCvScalar(0, 0, 255.0, 0));
                    desenharCaminho(vMonitorAtual.obterPontosKalman(), new MCvScalar(0, 0, 255.0, 0));
                    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 (verificarSeEhTamanhoDePessoa(parametros.RetanguloPessoa))
                    if (true)
                    {
                        Point[] pontosKalman = aplicarFiltroKalman(blob);
                        corTexto = new MCvScalar(255, 0, 0, 0);
                        vMonitorAtual.adicionarPontoKalman(pontosKalman[1]);
                        CvInvoke.Rectangle(mImagemColorida, blob2.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2);
                        CvInvoke.Line(mImagemColorida, pontosKalman[0], pontosKalman[0], new MCvScalar(255.0, 0, 0, 0), 3);
                        CvInvoke.Line(mImagemColorida, pontosKalman[1], pontosKalman[1], new MCvScalar(0, 0, 255.0, 0), 3);
                        p1.Y = p1.Y - 10;
                        escreverId(blob.ID.ToString(), p1, corTexto);
                        vPessoasEmCena.Add(vMonitorAtual);
                    }
                }
            }
        }
예제 #3
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;
        }