Commit 45d8a421 authored by Fábio Prestes's avatar Fábio Prestes

README.md atualizado, e ferramenta XML adicionada.

parent cfb38ff0
...@@ -162,6 +162,13 @@ Se der erro na reinstalação do matplotlib (depois que desinstalar), tente desi ...@@ -162,6 +162,13 @@ Se der erro na reinstalação do matplotlib (depois que desinstalar), tente desi
``` ```
$ sudo apt-get remove python-matplotlib $ sudo apt-get remove python-matplotlib
``` ```
### Como instalar o tqdm
#### Ubuntu
```
$ sudo pip3 install tqdm
```
### Mais informações ### Mais informações
...@@ -352,10 +359,21 @@ Após a implementação de seu classificador, você deve configurá-lo no pynovi ...@@ -352,10 +359,21 @@ Após a implementação de seu classificador, você deve configurá-lo no pynovi
Caso você necessite de classes utilitárias, os arquivos delas devem ser criados no diretório src/util/. Além disso, as classes utilitárias devem ser registradas como módulos no arquivo src/util/__init__.py Caso você necessite de classes utilitárias, os arquivos delas devem ser criados no diretório src/util/. Além disso, as classes utilitárias devem ser registradas como módulos no arquivo src/util/__init__.py
teste
Caso dê problema relacionado ao número de processos, adicione as duas váriaveis de ambiente, Caso dê problema relacionado ao número de processos, adicione as duas váriaveis de ambiente,
sendo que deve adicionar no número de threads que o seu processador permite: sendo que deve adicionar no número de threads que o seu processador permite:
export OMP_NUM_THREADS=8 export OMP_NUM_THREADS=8
export KMP_AFFINITY="verbose,explicit,proclist=[0,3,5,9,12,15,18,21],granularity=core" export KMP_AFFINITY="verbose,explicit,proclist=[0,3,5,9,12,15,18,21],granularity=core"
### Como utilizar as ferramentas de anotação XML
Para aqueles que desejam criar arquivos XML durante o processo de segmentação, o Pynovisão agora é capaz de realizar tal tarefa.
Após selecionar sua imagem e segmenta-la, apenas selecione os segmentos desejados, a ferramenta ira automaticamente salvar as caixas com as regiões de interesse. Quando estiver satisfeito, clique novamente em *Segmentation -> Create .XML file* e o arquivo com as anotações em formato XML será criado na pasta *pynovisao/data/XML*, com o nome *imagem + .xml*.
Caso o usuário já tenha segmentos prontos e a imagem original, também há a opção de identificar automaticamente a posição de tal segmento e criar a caixa com a região de interesse correspondente. Para utilizar esta ferramenta:
- Selecione *XML -> Configure folders*
- Selecione a opção para mudar o diretório desejado.
- Na interface agora aberta, entre na pasta com as imagens originais e a pasta com todos os grupos de segmentos desejados respectivamente.
- Clique em *Save All Directories*
- Com os diretórios desejados agora salvos, clique em *XML -> Execute Conversion*
- Após o processo de criação de XML, é possivel encontrá-lo em [...]/pynovisao/data/XML com o nome *imagem + .xml*.
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -72,8 +72,13 @@ class Act(object): ...@@ -72,8 +72,13 @@ class Act(object):
self._image_name = None self._image_name = None
self._image_path = None self._image_path = None
self._xml_file = None self._xml_file = None
self._seg_folder = os.getcwd() current_path=os.getcwd()
self._img_folder = os.getcwd() current_path=current_path[-1::-1]
current_path=current_path[3::1]
current_path=current_path[-1::-1]
current_path=current_path+"data"
self._img_folder=current_path+"/images"
self._seg_folder=current_path+"/demo"
self._init_dataset(args["dataset"]) self._init_dataset(args["dataset"])
self._init_classes(args["classes"], args["colors"]) self._init_classes(args["classes"], args["colors"])
...@@ -1119,57 +1124,58 @@ class Act(object): ...@@ -1119,57 +1124,58 @@ class Act(object):
arquivos = [] arquivos = []
#verificar arquivos em todas as pastas partindo de um diretório raiz #verificar arquivos em todas as pastas partindo de um diretório raiz
for pog, _, files in os.walk(os.path.abspath(pathIO)): for pog, _, files in os.walk(os.path.abspath(pathIO)):
#acha os arquivos de imagem na pasta de segmentos if (not pog.endswith('demo') and not pog.endswith('XML')):
for file in files: #acha os arquivos de imagem na pasta de segmentos
if(file.endswith('.jpeg') or file.endswith('.tif') or file.endswith('.jpg') or file.endswith('.png')):##(-f) for file in files:
#leitura dos arquivos de imagem na pasta original if(file.endswith('.jpeg') or file.endswith('.tif') or file.endswith('.jpg') or file.endswith('.png')):##(-f)
arquivo=os.path.join(pog, file) #leitura dos arquivos de imagem na pasta original
imgog=cv2.imread(arquivo,-1) arquivo=os.path.join(pog, file)
LinhaOg,ColunaOg,_=imgog.shape imgog=cv2.imread(arquivo,-1)
# Writer(path, width, height) para iniciar o geramento do xml LinhaOg,ColunaOg,_=imgog.shape
print("criando xml para a imagem {}".format(file)) # Writer(path, width, height) para iniciar o geramento do xml
writer = wr(pog, LinhaOg, ColunaOg) print("criando xml para a imagem {}".format(file))
for pseg, _,filesIO in os.walk(os.path.abspath(pathS)): writer = wr(pog, LinhaOg, ColunaOg)
pasta=pseg#pega o nome da pasta (classe do segmento) for pseg, _,filesIO in os.walk(os.path.abspath(pathS)):
pasta = pasta[-1::-1] pasta=pseg#pega o nome da pasta (classe do segmento)
pasta = pasta[:pasta.index('/')] pasta = pasta[-1::-1]
pasta = pasta[-1::-1] pasta = pasta[:pasta.index('/')]
for fileIO in filesIO: pasta = pasta[-1::-1]
if(fileIO.endswith('.jpeg') or fileIO.endswith('.tif') or fileIO.endswith('.jpg') or fileIO.endswith('.png')):##(-f) for fileIO in filesIO:
if (fileIO.startswith(file)): #verifica se eh o segmento desta imagem ou nao. if(fileIO.endswith('.jpeg') or fileIO.endswith('.tif') or fileIO.endswith('.jpg') or fileIO.endswith('.png')):##(-f)
#leitura dos segmentos em seus diretorios if (fileIO.startswith(file)): #verifica se eh o segmento desta imagem ou nao.
arquivo=os.path.join(pseg,fileIO) #leitura dos segmentos em seus diretorios
imgseg=cv2.imread(arquivo,-1) arquivo=os.path.join(pseg,fileIO)
LinhaSeg,ColunaSeg,_=imgseg.shape imgseg=cv2.imread(arquivo,-1)
l=0 LinhaSeg,ColunaSeg,_=imgseg.shape
print("buscando encaixe do superpixel {}".format(fileIO)) l=0
#arraste do superpixel sobre a imagem original print("buscando encaixe do superpixel {}".format(fileIO))
starttime = time.time() #arraste do superpixel sobre a imagem original
l,c,i,j,igual=arrasteSeg(imgog, imgseg, LinhaOg, ColunaOg, LinhaSeg, ColunaSeg) starttime = time.time()
if(igual): #Se o segmento esta igual a sua posicao no original l,c,i,j,igual=arrasteSeg(imgog, imgseg, LinhaOg, ColunaOg, LinhaSeg, ColunaSeg)
igual=False if(igual): #Se o segmento esta igual a sua posicao no original
#tudo isso pra terminar o loop desse segmento igual=False
if not(fileIO in arquivos): #Se o segmento atual ja foi visto #tudo isso pra terminar o loop desse segmento
# ::addObject(name, xmin, ymin, xmax, ymax) if not(fileIO in arquivos): #Se o segmento atual ja foi visto
print("adicionando anotacao, superpixel {} encontrado em {}".format(fileIO,file)) # ::addObject(name, xmin, ymin, xmax, ymax)
tottime = tottime + time.time() - starttime print("adicionando anotacao, superpixel {} encontrado em {}".format(fileIO,file))
arquivos.append(fileIO) #Adiciona nos segmentos ja vistos tottime = tottime + time.time() - starttime
writer.addObject(pasta, c, l, c + ColunaSeg, l + LinhaSeg) #adiciona o objeto no xml arquivos.append(fileIO) #Adiciona nos segmentos ja vistos
l=LinhaOg+1 writer.addObject(pasta, c, l, c + ColunaSeg, l + LinhaSeg) #adiciona o objeto no xml
c=ColunaOg+1 l=LinhaOg+1
#save(path) termina o salvamento do xml c=ColunaOg+1
print("salvando xml") #save(path) termina o salvamento do xml
print("Tempo decorrido em segundos: {}".format(tottime)) print("salvando xml")
writer.save('{}.{}'.format(file,'xml')) print("Tempo decorrido em segundos: {}".format(tottime))
#gera o xml com as medidas writer.save('{}.{}'.format(file,'xml'))
current_path=os.getcwd() #gera o xml com as medidas
current_path=current_path[-1::-1] current_path=os.getcwd()
current_path=current_path[3::1] current_path=current_path[-1::-1]
current_path=current_path[-1::-1] current_path=current_path[3::1]
current_path=current_path+"data/XML" current_path=current_path[-1::-1]
if(not os.path.exists(current_path)): current_path=current_path+"data/XML"
os.makedirs(current_path) if(not os.path.exists(current_path)):
shutil.move(os.getcwd()+"/{}.xml".format(file),current_path+"/{}.xml".format(file)) os.makedirs(current_path)
shutil.move(os.getcwd()+"/{}.xml".format(file),current_path+"/{}.xml".format(file))
print("Processo finalizado") print("Processo finalizado")
achaImg(self._seg_folder,self._img_folder) achaImg(self._seg_folder,self._img_folder)
...@@ -1179,7 +1185,7 @@ class Act(object): ...@@ -1179,7 +1185,7 @@ class Act(object):
def close_config_xml(config_xml): def close_config_xml(config_xml):
config_xml.destroy() config_xml.destroy()
def config_xml_directory(Button, E): def config_xml_directory(Button, E):
path = self.tk.utils.ask_directory(default_dir = os.getcwd()) path = self.tk.utils.ask_directory(default_dir = current_path)
if(Button == 1): if(Button == 1):
self._img_folder = path self._img_folder = path
E.delete(0,END) E.delete(0,END)
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
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