Commit ff19d00b authored by Gilberto Astolfi's avatar Gilberto Astolfi

copy python-extrai-atributos

parent 1bb29030
Banco de Imagens: sojaDrone3C
Descrição:
Banco de imagens para teste do python-extrai-atributos com recortes da imagem "imageOriginal.tiff" de uma plantação de soja com imagens obtidas por um DJI Phantom 2. Os recortes foram separados em três classes, cada uma com 5 exemplos:
- chao: chão da plantação, geralmente de cor marrom
- comFuro: folha de soja com uma furo fácil de identificar visualmente
- semFuro: folha sem fora
This image diff could not be displayed because it is too large. You can view the blob instead.
Melhores resultados usando Explorer
Percentage Split 66%
- Multilayer Perceptron 9/6/2015: PCC = 80%, Medida F = 72%, Area ROC = 88%
Validação Cruzada com 3 dobras
- Multilayer Perceptron 9/6/2015: PCC = 80%, Medida F = 79,8%, Area ROC = 95%
This diff is collapsed.
This diff is collapsed.
src
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/src.iml" filepath="$PROJECT_DIR$/.idea/src.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 2.7.6 (/usr/bin/python2.7)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
\ No newline at end of file
This diff is collapsed.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
"""
Nome: arff.py
Autor: Hemerson Pistori (pistori@ucdb.br)
Descricão: Gera um arquivo arff
"""
import io
class Arff(object):
def cria(self,nomeArquivo, dados, nomeRelacao, nomesAtributos, tiposAtributos, nomesClasses):
arquivo = open(nomeArquivo,'wb')
arquivo.write("%s %s\n\n" % ('@relation ', nomeRelacao))
for nome, tipo in zip(nomesAtributos,tiposAtributos):
arquivo.write("%s %s %s\n" % ('@attribute', nome, tipo))
arquivo.write("%s %s {%s}\n\n" % ('@attribute','classe',', '.join(nomesClasses)))
arquivo.write('@data\n\n')
for instancia in dados:
instancia = map(str, instancia)
line = ",".join(instancia)
arquivo.write(line+"\n")
arquivo.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
"""
Nome: bancoImagens.py
Autor: Hemerson Pistori (pistori@ucdb.br)
Descricão: Manipular um banco de imagens organizado em pastas para cada classe de objetos ou cenas e salvo em disco
"""
import os
import numpy as np
import cv2
class BancoImagens(object):
"""
Facilita a manipulação de um banco de imagens gravado em disco. O banco de imagens
deve ser colocado dentro da pasta 'data'.
"""
pastaRaiz = '../data/'
pastaBancoImagens = None
nomeArquivoArff = None
classes = None
def __init__(self, nomeBancoImagens, pastaRaiz = '../data/'):
self.pastaRaiz = pastaRaiz
self.pastaBancoImagens = self.pastaRaiz + nomeBancoImagens + "/"
self.nomeArquivoArff = self.pastaBancoImagens + nomeBancoImagens + ".arff"
self.classes = self.lista_pastas()
def lista_pastas(self):
return [name for name in os.listdir(self.pastaBancoImagens)
if os.path.isdir(os.path.join(self.pastaBancoImagens, name))]
def imagens_da_classe(self,nomeDaClasse):
pastaDaClasse = self.pastaBancoImagens + nomeDaClasse + "/"
imagens = []
for item in os.listdir(pastaDaClasse):
if not item.startswith('.'):
try:
image = cv2.imread(pastaDaClasse+item)
imagens.append(image)
except IOError:
print 'Não conseguiu abrir imagem '+pastaDaClasse+item
return imagens
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
"""
Nome: extrai_atributos.py
Autor: Hemerson Pistori (pistori@ucdb.br)
Descricão: Extrai vários atributos de um banco de imagens organizado com uma subpasta para cada classe do banco e gerar um arquivo arff que pode ser utilizado com o weka
Modo de Usar:
Coloque seu banco de imagens na pasta 'data' que fica dentro de python-extrai-atributos (veja a organização do banco de exemplo)
Execute o programa:
$ python extraiAtributos nome_do_banco_de_imagens ou
$ python extraiAtributos nome_do_banco_de_imagen pasta_onde_esta_localizado_o_banco
"""
import sys
from arff import Arff
from bancoImagens import BancoImagens
from extratores import Extratores
nomeBancoImagens = 'sojaDrone3C'
nomePastaRaiz = '../data/'
# Testa se o nome foi passado na linha de comando, se não foi, irá abrir o banco de examplos (sojaDrone3C)
if len(sys.argv) > 1:
nomeBancoImagens = sys.argv[1]
if len(sys.argv) > 2:
nomePastaRaiz = sys.argv[2]
print 'Gerando ARFF para o Banco de Imagens ' + nomeBancoImagens + "..."
bancoImagens = BancoImagens(nomeBancoImagens,nomePastaRaiz)
extratores = Extratores()
print 'Localização do Banco ' + bancoImagens.pastaBancoImagens
classes = bancoImagens.classes
print 'Classes Encontradas'
print classes
# Aqui começa a extração de atributos de todas as imagens de cada classe
dados = []
nomesAtributos = []
tiposAtributos = []
valoresAtributos = []
for classe in classes:
imagens = bancoImagens.imagens_da_classe(classe)
print "Processando %s imagens da classe %s " % (len(imagens),classe)
for imagem in imagens:
nomesAtributos, tiposAtributos, valoresAtributos = extratores.extrai_todos(imagem)
dados.append(valoresAtributos+[classe])
if len(classes) > 0:
Arff().cria(bancoImagens.nomeArquivoArff, dados, nomeBancoImagens, nomesAtributos, tiposAtributos, classes)
print 'Arquivo ARFF gerado em ' + bancoImagens.nomeArquivoArff
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment