Processamento de Imagem de CFTV 2.0

 

Informações pertinentes ao processamento de imagem

import sys
import numpy as np
import cv2
import MySQLdb

def conexao():
 Banco="banco"
 User="usuario"
 Passwrd="senha"
 Host="ip"
 resultado = 0

try:
 resultado = MySQLdb.connect(db=Banco,user=User, passwd=Passwrd, host=Host)
 except:
 print("Erro ao conectar no Banco de dados")
 resultado = -1
 return resultado



def GravaReg(arquivo,x,y,a,h):
 con = conexao()
 cursor = con.cursor()
 sql= "insert into eventoCam (arquivo,x,y,a,h) values ('%s',%d,%d,%d,%d)" %(arquivo,x,y,a,h)
 print(sql)
 try:
 cursor.execute(sql)
 con.commit()
 print("Registro Gravado")
 except MySQLdb as erro:
 print("Erro ao Executar SQL", erro)
 
#Pega o nome do arquivo a ser analisado
Arquivo = sys.argv[1]

# load an color image in grayscale
img = cv2.imread(Arquivo)
print("Carregado:%s",Arquivo)

classificador = cv2.CascadeClassifier("/projetos/python/cv/face.xml")



imagemCinza = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

facesDetectadas = classificador.detectMultiScale(imagemCinza, scaleFactor=1.5, minSize=(100,100))

for (x,y,l, a ) in facesDetectadas:
 print("Face:",x,y)
 GravaReg(Arquivo,x,y,l,a)



cv2.destroyAllWindows()
print("Finalizou")

Arquivo de script do Motion, bash para processamento de imagem

#!/bin/bash#!/bin/bash

quebrar() {
 local filepath="$1" local filename=$(basename "$filepath") 
 local ext=$(echo "$filename"| awk -F '.' '{ if (NF==2) {print $NF} else if ( NF>2) {print $(NF-1)"."$NF} }') 
 local dir=$(echo "$filepath" | awk -F '/' '{ print substr($0, 0 , length($0)-length($NF)-1) }') 
 echo -e "$dir""\t""$filename""\t""$ext"
}

ret="$(quebrar "$1")"
echo "$diretorio: " "$(echo "$ret" | cut -f1)"
diretorio="$(echo "$ret"|cut -f1)"
filename="$(echo "$ret"| cut -f2)"
somentefilename="$(echo "$filename"| cut -d. -f1)"
extensao="$(echo "$filename"| cut -d. -f2)"
novoarquivo="$(echo "$1"| cut -d. -f1)"
novoarquivo="$(echo "$novoarquivo"".mp4")"
#echo "Desmembramento do arquivo"
#echo $diretorio
#echo $somentefilename
#echo $extensao
#echo $filenameecho $novoarquivo

#ffmpeg  -i $1 -c:v libx264 -preset ultrafast $novoarquivo
python /projetos/python/cv/load.py $novoarquivo

rm -f $1

 

Programação PHP Integrada ao R

O Desenvolvimento e analise de dados não é tarefa fácil.

Integrar o R com outras linguagens é o segredo para analisar grande volume de dados em tempo real, gerando vetores e gráficos.

Um exemplo deste é a Webapi que criei para linguagem PHP:

http://maurinsoft.com.br:8090/ws/graphic.php

Esta web api, gera um arquivo de imagem com um gráfico.

Ao chamar o URL, é chamado em tempo de execução um script em R, que gera a imagem e armazena em um repositório.

É possível criar diversos scripts com o mesmo URL, basta indicar nos parametros o script em R que deverá ser rodado.

No caso do default.R, lê as informações processadas do sensor de chuva, que aponta quando ocorre precipitação de chuva em minha casa.

Valore altos de 900 até 1024, indicam tempo seco.

A imagem é armazenada neste endereço.

Neste exemplo, o R processou o seguinte comando SQL

select

devvalue, dtupdate

from logdevpar

where

devparname=’dev3′

and iddevice=’2′

and (dtupdate>=( DATE_SUB(CONCAT(CURDATE(), ‘ 00:00:00’), INTERVAL 1 DAY) ))

order by dtupdate

limit 100

 

Escolhendo o melhor tipo de grafico em R

A seleção de um bom exemplo de gráfico pode te auxiliar a provar ou apresentar uma idéia ou informação.Ref.: https://www.ibpad.com.br/blog/analise-de-dados/qual-e-o-grafico-mais-adequado/

Segue documento que visa auxiliar esta escolha:

http://maurinsoft.com.br/download/Tipos de Grafico R.pdf

 

Exemplo de Conexão com RStudio em Mysql

Segue um exemplo prático de obtenção de dados do Banco Mysql usando R

#install.packages(“dbConnect”,type=”source”)
library(RMySQL)
library(dbConnect)

con = dbConnect(MySQL(), user=’user’, password=’passwrd’, dbname=’SMSdb’, host=’192.168.1.211′)

dbListTables(con)

#Create table in R from Mysql table
myQuery = “select * from jobs”

str(df)

telefone= “16981434112”

 

#my_d_query=paste(“select * from jobs where telefone = ‘”,telefone,”‘ “)
my_d_query=paste(“select * from jobs “)
out_df= dbGetQuery(con,my_d_query)

dbWriteTable(con,”out_df”,out_df, overwrite=TRUE, append=FALSE)
dbDisconnect(con)

 

Instalando Mysql Conection em RStudio

O Procedimento a seguir foi extraído do seguinte artigo com variances:

http://db.rstudio.com/databases/my-sql/

Em Tools > Install Packages instale os seguintes pacotes:

  • RMySQL
  • devtools
  • dbConnect

Instale o ODBC e a lib do Mysql

Restart RStudio

Segue exemplo de conexão com Mysql

#install.packages(“dbConnect”,type=”source”)
library(RMySQL)
library(dbConnect)

con = dbConnect(MySQL(), user='<user>’, password='<password>’, dbname=’SMSdb’, host=’192.168.1.211′)

dbListTables(con)

#Create table in R from Mysql table
myQuery = “select * from jobs”

str(df)

telefone= “16981434112”

 

my_d_query=paste(“select * from jobs where telefone = ‘”,telefone,”‘ “)
out_df= dbGetQuery(con,my_d_query)

dbWriteTable(con,”out_df”,out_df, overwrite=TRUE, append=FALSE)
dbDisconnect(con)

 

 

Exemplo de código em R

Segue um exemplo bem simples em R,

Criado para avaliar as notas , calculando média.

Fonte:

##Criado por Marcelo Maurin Martins
##Aplicação de Média
##19/02/2018
##Treinamento de Linguagem R

#Criar um algoritmo em R que faça:
#1 – Cadastro de alunos (nome, e-mail, etc…, notas de provas)
#2 – Mostra os dados dos alunos cadastrados informando também os aprovados e reprovados.

 

Nomes=c(“Marcelo”,”Fernanda”,”Camille”,”Roberta”,”Marcella”)
Nomes=as.character(Nomes)
Email=c(“marcelomaurinmartins@gmail.com”,”teste1@”,”teste2@”,”teste3@”,”teste4@”)
Email=as.character(Email)
Nota1=c(9,1.4,9,3,9)
Nota1=as.numeric(Nota1)
Nota2=c(9,2.4,9,2,8)
Nota2=as.numeric(Nota2)
Nota3=c(9,1.4,9,3,7)
Nota3=as.numeric(Nota3)
Nota4=c(9,3.4,9,4,6)
Nota4=as.numeric(Nota4)
Media=c(0,0,0,0,0)
Media=as.numeric(Media)

#Monta o data frame
Notas=data.frame(Nomes,Email,Nota1,Nota2,Nota3,Nota4,Media)

#Calcula a media
for(i in 1:length(Nomes))
{
print(Notas[i,1])
Notas[i,7]=(Notas[i,3]+Notas[i,4]+Notas[i,5]+Notas[i,6])/4
if(Notas[i,7]>=7)
{
print(“Aprovado”)
}
else
{
print(“Reprovado”)
}
}

Resultado do Data.frame

Notas
Nomes Email
1 Marcelo marcelomaurinmartins@gmail.com
2 Fernanda teste1@
3 Camille teste2@
4 Roberta teste3@
5 Marcella teste4@
Nota1 Nota2 Nota3 Nota4 Media
1 9.0 9.0 9.0 9.0 9.00
2 1.4 2.4 1.4 3.4 2.15
3 9.0 9.0 9.0 9.0 9.00
4 3.0 2.0 3.0 4.0 3.00
5 9.0 8.0 7.0 6.0 7.50

Output de dados

[1] Marcelo
[1] “Aprovado”
[1] Fernanda
[1] “Reprovado”
[1] Camille
[1] “Aprovado”
[1] Roberta
[1] “Reprovado”
[1] Marcella
[1] “Aprovado”

 

Motion AVI 2 MP4

Português:

O objetivo destes scripts são de permitir interagir de forma facil e prática a partir do reconhecimento de movimento do programa do linux motion.

Os scripts são dois:

analisa_img.sh

Executa um script, permitindo a programação de outros comandos associados ao reconhecimento de imagem e/ou analise e filtragem da imagem capturada.

analisa_avi.sh

Executa um script, permitindo a progração de outros comandos associados a conversão para formato MP4, permitindo assim a visualização através do browser.

Este script pode ser modificado a medida de sua necessidade, peço apenas que no uso, envie um email para marcelomaurinmartins@gmail.com, informando a finalidade. Justamente para que eu veja os frutos de 3 dias de trabalho, realmente auxiliaram alguem em algum lugar do mundo 😉

Complemento: 

Para o perfeito funcionamento deste script é necessário instalar préviamente os seguintes pacotes:

ffmpeg – realiza a conversão do arquivo avi para mp4

sudo apt-get install ffmpeg

Instalação

  1. Deve-se criar as pastas /projetos/sosconsulta/linux/ eu recomendo mudar o caminho da pasta, porem será necessário mudar toda a referencia nos scripts. :-0

2. Copie a pasta analisa_img para o caminho indicado no passo 1

Entre na pasta; cd /projetos/sosconsulta/linux/analisa_img/

3. Rode o Makefile; make all

Este procedimento, irá instalar os scripts na pasta /usr/local/bin

4. Configure o arquivo motion.conf, editando em /etc/motion, vim motion.conf

Altere o arquivo, incluindo:

on_movie_end /usr/local/bin/analisa_avi.sh %f

caso tenha threads.conf, faça nas mesmas, se houver necessidade.

 

Git:

https://github.com/MarceloMaurin/motion_avi_mp4/blob/master/analisa_img/analisa_avi.sh

English

The purpose of these scripts is to allow easy and practical interaction from the motion recognition of the linux motion program.

The scripts are two:

analisa_img.sh

Performs a script, allowing programming of other commands associated with image recognition and / or analysis and filtering of the captured image.

analisa_avi.sh

It executes a script, allowing the programming of other commands associated with the conversion to MP4 format, thus allowing the visualization through the browser.

This script can be modified to suit your needs, just ask that in use, send an email to marcelomaurinmartins@gmail.com, stating the purpose. Just so I can see the fruits of 3 days of work, really helped someone somewhere in the world 😉

Complement:

For the perfect operation of this script it is necessary to install the following packages:

ffmpeg – performs conversion from avi file to mp4

sudo apt-get install ffmpeg

 

Installation

1. You should create the folders / projects / sosconsulta / linux / I recommend changing the folder path, however it will be necessary to change the entire reference in the scripts.  😮

2. Copy the analisa_img folder to the path indicated in step 1

Enter the folder; cd / projects / sosconsulta / linux / analisa_img /

3. Run the Makefile; make all

This will install the scripts in the / usr / local / bin folder

4. Configure the motion.conf file by editing in / etc / motion, vim motion.conf

Change the file, including:

on_movie_end /usr/local/bin/analisa_avi.sh% f

if it has threads.conf, do it on them, if need be.

 

Git:

https://github.com/MarceloMaurin/motion_avi_mp4/blob/master/analisa_img/analisa_avi.sh