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); }
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; }
internal void adicionarNovoBlob(MCvBlob pBlob, int pNumeroDoFrame) { mListaBlobsENumeroFrame.Add(new BlobENumeroDoFrame(pBlob, pNumeroDoFrame)); mPossuiMovimentoSuspeito = null; }