def _get_resources(self, url): encontrou_img = 0 #inicializa a variavel # rastreia a página self.nome_arquivo, self.titulo_noticia, encontrou_img = self.crawler.crawl_page(url) print("aq") if encontrou_img == 1 and os.path.exists(self.nome_arquivo): # se achou imagem na notícia if self.titulo_noticia != "": # se a noticia existe em ingles # le o arquivo e guarda na variavel self.noticia = self.crawler.file_to_variavel(self.nome_arquivo) # Remove caracteres estranhos das noticias self.titulo_noticia = self._remover_caracteres_especiais(self.titulo_noticia) self.titulo_diretorio = self.titulo_noticia.replace(" ", "") #titulo do diretorio #grava no txt o titulo - noticias/nomenoticia/titulo.txt utils.escrever_arquivo(self.titulo_noticia, "noticia_atual/titulo.txt") #grava a legenda da imagem--noticias/nomenoticia/caption.txt self.legenda = self.crawler.file_to_variavel(self.nome_arquivo + "_caption.txt") self.legenda = self.legenda.replace("\n", "") self.path_imagem = self.nome_arquivo + ".jpg" # caminho da imagem original shutil.copy2(self.path_imagem,'static/alinhamento2.jpg') print("imagem copiada") self.path_legenda = self.nome_arquivo + "_caption.txt" #caminho da legenda self.path_titulo = "noticia_atual/titulo.txt" #caminho do título self.path_noticia = self.nome_arquivo # path da noticia self.directory = "noticias/" + self.titulo_diretorio #nome do diretorio que será criado # if os.path.exists(self.directory): # se a noticia ainda não foi coletada # shutil.rmtree(self.directory) if not os.path.exists(self.directory): # se a noticia ainda não foi coletada os.makedirs(self.directory) #cria o diretorio da noticia #envia a imagem original para o dir da noticia os.rename(self.path_imagem, self.directory + "/img_original.jpg") #envia a noticia original para o dir da noticia os.rename(self.nome_arquivo, self.directory + "/noticia.txt") #envia a legenda para o dir da noticia os.rename(self.path_legenda, self.directory + "/caption.txt") #envia o titulo para o dir da noticia os.rename(self.path_titulo, self.directory + "/titulo.txt") # novo path da imagem original self.path_imagem = self.directory + "/img_original.jpg" self.path_noticia = self.directory + "/noticia.txt" #novo path da noticia else: # Se a noticia não estiver em inglês os.remove(self.nome_arquivo + ".jpg") os.remove(self.nome_arquivo + "_caption.txt") else: self.noticia_sem_imagem = True
def _set_manual_resources(self): self.titulo_diretorio = self.titulo_noticia.replace(" ", "") #titulo do diretorio #grava no txt o titulo - noticias/nomenoticia/titulo.txt utils.escrever_arquivo(self.titulo_noticia, "noticia_atual/titulo.txt") shutil.copy2(self.path_imagem,'static/alinhamento2.jpg') print("imagem copiada") self.directory = "noticias/" + self.titulo_diretorio #nome do diretorio que será criado utils.escrever_arquivo(self.noticia,"noticia_manual.txt") self.path_noticia = "noticia_manual.txt" # path da noticia # if os.path.exists(self.directory): # se a noticia ainda não foi coletada # shutil.rmtree(self.directory) if not os.path.exists(self.directory): # se a noticia ainda não foi coletada os.makedirs(self.directory) #cria o diretorio da noticia shutil.copy2(self.path_imagem, self.directory + "/img_original.jpg")
def _experiment_2(self): """Experimento 4 + Experimento 3 """ arquivo_embedding = "/embedding_top5.txt" img_original = cv2.imread("static/alinhamento2.jpg") bbox_objects = self._get_bounding_objects() dic_alinhamento = {} lst_palavras_visuais = self.read_words_visual("visual_words.txt") num_objeto = 0 # for bbox in bbox_objects: # bbox.lst_cnn.remove('torch') # bbox.lst_cnn.append(bbox.objeto) # for palavra in self.lst_substantivos: # if palavra in bbox.lst_cnn: # dic_alinhamento[palavra] = num_objeto # num_objeto += 1 # break dic_json = {} # for palavra, value in dic_alinhamento.items(): # dic_json[palavra] = "Objeto " + str(dic_alinhamento[palavra]) # x, y, w, h = bbox_objects[0].Rect() # #draw bounding box in img_original # cv2.rectangle(img_original, (x, y), (x + w, y + h), (0, 255, 0), 2) # cv2.putText(img_original, "Objeto" + str(dic_alinhamento[palavra]), (x + 15, y + 30), # cv2.FONT_HERSHEY_TRIPLEX, 0.9, (0, 255, 0), 1) # #remove a bounding box # print("REMOVIDA:" + palavra) # bbox_objects.pop(0) # cv2.imwrite("static/" + "alinhamento2.jpg", img_original) # img_original = cv2.imread("static/alinhamento2.jpg") #bbox_objects = self._get_bounding_objects() dic_alinhamento = {} # A P L I C A Ç Ã O - W O R D E M B E D D I N G S # w_embeddings = WordEmbeding(100) #inicializa as word embeddings # w_embeddings.CarregarWordEmbeddings() dic_top_5 = {} # coloca todos substantivos em Lower Case e # Organiza os substantivos por ordem alfabética for i in range(0, len(self.lst_substantivos)): self.lst_substantivos[i] = self.lst_substantivos[i].lower() self.lst_substantivos.sort() #gera e obtém todas W Embeddings dos substantivos w = WordEmbeding(100) # instancia a classe wordEmbedding w.CarregarWordEmbeddings() dicionario_embeddings = w.RetornarDicionario(self.lst_substantivos) palavra_ranqueada = "" if not bbox_objects: return dic_json for bbox in bbox_objects: #cria uma pasta com nome {num_foto-nome_objeto} object_name = str(bbox.imagem) + "-" + bbox.objeto if not os.path.exists(self.path_folder + "/" + object_name): os.mkdir(self.path_folder + "/" + object_name) dir_objeto = self.path_folder + "/" + object_name index_maior_palavra = 0 palavra_ranqueada = "" distancia_ranqueada = 100 #dicionario para calcular as distancias da palavra da Bbox para todos substantivos dicionario_distancias = {} for substantivo in self.lst_substantivos: # para cada substantivo for palavra in bbox.lst_cnn: palavra_bbox = palavra # obtém a palavra que está na Bbox palavra_bbox = TrocarNomes(palavra_bbox) maior_distancia = 0 index_maior_palavra = 0 #retorna a WOrd Embedding da palavra da Bbox embedding_cnn = w.RetornarVetor(palavra_bbox) if embedding_cnn is None: continue if substantivo not in dicionario_embeddings: continue if dicionario_embeddings[substantivo] is None: continue distancia_we = 0 # Calcula a distância entre a Wvec_palavra e substantivo_vec for x in range(0, 100): try: distancia_we = distancia_we + ( dicionario_embeddings[substantivo][x] - embedding_cnn[x])**2 except: continue distancia_we = sqrt(distancia_we) # armazena no dicionario a distância dicionario_distancias[palavra_bbox] = distancia_we # ordena o dicionario de acordo com menor distancia sorted_we = sorted(dicionario_distancias.items(), key=operator.itemgetter(1)) # texto = "" # for z in range(0, 5): #prepara o texto do arquivo # try: # texto += sorted_we[z][0] + "\n" # except: # pass # utils.escrever_arquivo(texto, dir_objeto + arquivo_embedding) if sorted_we: if sorted_we[0][1] < distancia_ranqueada: distancia_ranqueada = sorted_we[0][1] palavra_ranqueada = substantivo dic_top_5[substantivo] = sorted_we[0][1] # ordena o dicionario de acordo com menor distancia sorted_we = sorted(dic_top_5.items(), key=operator.itemgetter(1)) if sorted_we[0][0] not in lst_palavras_visuais: we_deque = deque() for z in range(0, 5): try: #verifica se esta na lista das palavras visuais if sorted_we[z][0].lower() in lst_palavras_visuais: we_deque.appendleft(sorted_we[z][0]) else: we_deque.append(sorted_we[z][0]) except: pass # se estiver sobe uma posicao na lista palavra_ranqueada = we_deque[0] if palavra_ranqueada != '': dic_alinhamento[palavra_ranqueada] = num_objeto num_objeto += 1 print(palavra_ranqueada) # ESCREVE NO DIRETORIO O TOP-5 top5 = "" for z in range(0, 5): try: top5 += self.dict_lematizado[sorted_we[z] [0]] + "-------" + str( sorted_we[z][1]) + "\n" except: pass utils.escrever_arquivo(top5, dir_objeto + arquivo_embedding) for palavra, value in dic_alinhamento.items(): # dic_json[palavra] = "Objeto " + str(dic_alinhamento[palavra]) palavra_radio_button = palavra.replace(" ", "_") dic_json[ palavra] = '<label><input type="radio" value="sim" name="radio_' + palavra_radio_button + '">Sim</label><span style="margin: 0 10px 0 10px;"></span> <label><input type="radio" value="nao" name="radio_' + palavra_radio_button + '">Não</label>' x, y, w, h = bbox_objects[0].Rect() # size_caracters = len(palavra) * 15 #draw bounding box in img_original cv2.rectangle( img_original, (x, y), (x + w, y + h), self.colors_bounding_box[self.index_cor_bounding_box], 2) # cv2.rectangle(img_original,(x,y),(x + size_caracters, y + 30),(0,0,0),thickness=-1) # cv2.putText(img_original, palavra, (x + 3, y + 20), # cv2.FONT_HERSHEY_DUPLEX, 0.8, (255, 255, 255), 1) self.index_cor_bounding_box += 1 #remove a bounding box bbox_objects.pop(0) cv2.imwrite("static/" + "alinhamento2.jpg", img_original) return dic_json
def _experiment_1(self): """Experimento 4 + Experimento 2""" arquivo_wup = "/wup_top5.txt" img_original = cv2.imread("static/alinhamento2.jpg") bbox_objects = self._get_bounding_objects() dic_alinhamento = {} num_objeto = 0 lst_palavras_visuais = self.read_words_visual("visual_words.txt") for bbox in bbox_objects: bbox.lst_cnn.append(bbox.objeto) # for palavra in self.lst_substantivos: # if palavra in bbox.lst_cnn: # dic_alinhamento[palavra] = num_objeto # num_objeto += 1 # break dic_json = {} # for palavra, value in dic_alinhamento.items(): # dic_json[palavra] = "Objeto " + str(dic_alinhamento[palavra]) # x, y, w, h = bbox_objects[0].Rect() # #draw bounding box in img_original # cv2.rectangle(img_original, (x, y), (x + w, y + h), (0, 255, 0), 2) # cv2.putText(img_original, "Objeto" + str(dic_alinhamento[palavra]), (x + 15, y + 30), # cv2.FONT_HERSHEY_TRIPLEX, 0.9, (0, 255, 0), 1) # #remove a bounding box # print("REMOVIDA:" + palavra) # bbox_objects.pop(0) # cv2.imwrite("static/" + "alinhamento2.jpg", img_original) # img_original = cv2.imread("static/alinhamento2.jpg") #bbox_objects = self._get_bounding_objects() # S I M I L A R I D A D E W U P dic_alinhamento = {} if not bbox_objects: return dic_json for bbox in bbox_objects: #cria uma pasta com nome {num_foto-nome_objeto} object_name = str(bbox.imagem) + "-" + bbox.objeto if not os.path.exists(self.path_folder + "/" + object_name): os.mkdir(self.path_folder + "/" + object_name) dir_objeto = self.path_folder + "/" + object_name # dicionario para calcular as distancias da palavra da Bbox para todos substantivos dicionario_distancias_wup = {} index_maior_palavra = 0 palavra_ranqueada = "" distancia_ranqueada = 0 for substantivo in self.lst_substantivos: maior_distancia = 0 lst_synsets = wn.synsets(substantivo, pos=wn.NOUN) for j in range(0, len(lst_synsets)): #pega um dos synsets referentes ao substantivo synset = str(lst_synsets[j]) synset = synset.replace("Synset('", "") synset = synset.replace("')", "") word_substantivo = wn.synset(synset) for palavra in bbox.lst_cnn: palavra_bbox = palavra # obtém a palavra que está na Bbox palavra_bbox = TrocarNomes(palavra_bbox) word_bounding = TrazerSynsetBoundingBox( palavra_bbox) #synset da bbox if word_bounding is None: lst_synsets_cnn = wn.synsets(palavra_bbox, pos=wn.NOUN) for k in range(0, len(lst_synsets_cnn)): synset = str( lst_synsets_cnn[k] ) #pega um dos synsets referentes ao substantivo synset = synset.replace("Synset('", "") synset = synset.replace("')", "") word_bounding = wn.synset(synset) try: distancia_wup = word_substantivo.wup_similarity( word_bounding) except: distancia_wup = 0 if distancia_wup > maior_distancia: maior_distancia = distancia_wup # index_maior_palavra = i #palavra_ranqueada = substantivo else: try: distancia_wup = word_substantivo.wup_similarity( word_bounding) except: distancia_wup = 0 if distancia_wup > maior_distancia: maior_distancia = distancia_wup dicionario_distancias_wup[substantivo] = maior_distancia sorted_wup = sorted(dicionario_distancias_wup.items(), key=operator.itemgetter(1), reverse=True) wup_deque = deque() palavra_ranqueada = sorted_wup[0][0] #para cada palavra da sorted wup (0 a 4) if sorted_wup[0][0] not in lst_palavras_visuais: for z in range(0, 5): try: #verifica se esta na lista das palavras visuais if sorted_wup[z][0].lower() in lst_palavras_visuais: wup_deque.appendleft(sorted_wup[z][0]) else: wup_deque.append(sorted_wup[z][0]) except: pass # se estiver sobe uma posicao na lista palavra_ranqueada = wup_deque[0] dic_alinhamento[palavra_ranqueada] = num_objeto num_objeto += 1 print(maior_distancia) print(palavra_ranqueada) # ESCREVE NO DIRETORIO O TOP-5 top5 = "" for z in range(0, 5): try: top5 += self.dict_lematizado[sorted_wup[z][0].lower( )] + "-------" + str(sorted_wup[z][1]) + "\n" except: pass utils.escrever_arquivo(top5, dir_objeto + arquivo_wup) # _________________ALINHAMENTO________________ for palavra, value in dic_alinhamento.items(): # dic_json[palavra] = "Objeto " + str(dic_alinhamento[palavra]) palavra_radio_button = palavra.replace(" ", "_") dic_json[ palavra] = '<label><input type="radio" value="sim" name="radio_' + palavra_radio_button + '">Sim</label><span style="margin: 0 10px 0 10px;"></span> <label><input type="radio" value="nao" name="radio_' + palavra_radio_button + '">Não</label>' x, y, w, h = bbox_objects[0].Rect() size_caracters = len(palavra) * 15 #draw bounding box in img_original cv2.rectangle( img_original, (x, y), (x + w, y + h), self.colors_bounding_box[self.index_cor_bounding_box], 2) # cv2.rectangle(img_original,(x,y),(x + size_caracters, y + 30),(0,0,0),thickness=-1) # cv2.putText(img_original, palavra, (x + 3, y + 20), # cv2.FONT_HERSHEY_DUPLEX, 0.8, (255, 255, 255), 1) self.index_cor_bounding_box += 1 #remove a bounding box bbox_objects.pop(0) cv2.imwrite("static/" + "alinhamento2.jpg", img_original) return dic_json
def _experiment_3(self): bbox_pessoas = self._get_bounding_persons() qtd_bbox_pessoas = len(bbox_pessoas) qtd_pessoas_legenda = len(self.pessoas_legenda) qtd_pessoas_texto = len(self.pessoas_texto) nomes_alinhamento = [] img_original = None # imagem original if qtd_bbox_pessoas > 0: # Se existirem pessoas para serem alinhadas if qtd_pessoas_legenda > 0: # Se não houver nomes na legenda nomes_alinhamento = list( self.pessoas_legenda ) #copia para a lista oficial de nomes que serão alinhados else: # pega nomes do texto para completar a lista de nomes para alinhamento for nome in self.pessoas_texto: # para cada nome do texto nomes_alinhamento.append( nome.palavra) # adiciona o nome na lista if len( nomes_alinhamento ) == qtd_bbox_pessoas: # se o número de pessoas for o mesmo da quantidade de pessoas break nomes_dlib = utils.file_to_List( "/data/alinhador/database_names.txt") dic_alinhamento = {} removed_Bbox = None # variavel que armazena o bbox que sera removido caso encontre names_to_remove = [] face_recognition = FaceRecognition() # Varre a lista de nomes for nome in nomes_alinhamento: nome = utils.removerAcentosECaracteresEspeciais(nome) if nome in nomes_dlib: # se o nome existir nos dados do DLIB img_original = cv2.imread("static/alinhamento2.jpg") for bBox in bbox_pessoas: # para cada bounding box new_sample = img_original.copy() crop = new_sample[bBox.top:bBox.bot, bBox.left:bBox.right] cv2.imwrite("bBoxImage.jpg", crop) distancia = 1 distancia = face_recognition.comparar_pessoas( "bBoxImage.jpg", nome) if isinstance(distancia, int) or isinstance( distancia, float): print(distancia) if distancia < 0.50: #a face da Bbox corresponde com alguma imagem do nome no dlib names_to_remove.append(nome) dic_alinhamento[ nome] = bBox # grava o crop da imagem no dicionario bBox.label = nome # grava o nome na bBox DIR_pessoa = "/data/alinhador/faceDB/lfw/" + nome.replace( " ", "_") + "/" qtd_imagens = len( [i for i in os.listdir(DIR_pessoa)]) + 1 #envia a crop da imagem para a pasta do dlib correspondente os.rename( "bBoxImage.jpg", DIR_pessoa + nome.replace(" ", "_") + "_" + str(qtd_imagens) + ".jpg") removed_Bbox = bBox break # vai para o proximo nome if removed_Bbox in bbox_pessoas: bbox_pessoas.remove( removed_Bbox ) #remove das Bbox uma face já alinhada else: #busca as imagens da pessoa no google imagens folder_g_image = g_image.get_images(nome) print("CRIOU NOME: " + nome) img_original = cv2.imread("static/alinhamento2.jpg") face_recognition.criar_db_g_images(folder_g_image) for bBox in bbox_pessoas: # para cada bounding box new_sample = img_original.copy() crop = new_sample[bBox.top:bBox.bot, bBox.left:bBox.right] #corta a Bbox cv2.imwrite("bBoxImage.jpg", crop) # cria a imagem da Bbox distancia = face_recognition.comparar_pessoas_google_imagens( "bBoxImage.jpg", nome) if isinstance(distancia, int) or isinstance( distancia, float): print(distancia) if distancia < 0.50: #a face da Bbox corresponde com alguma imagem do google imagens names_to_remove.append(nome) dic_alinhamento[ nome] = bBox # grava o crop da imagem no dicionario bBox.label = nome # grava o nome na bBox DIR_pessoa = "/data/alinhador/faceDB/lfw/" + nome.replace( " ", "_") + "/" if not os.path.exists(DIR_pessoa): os.makedirs(DIR_pessoa) qtd_imagens = len( [i for i in os.listdir(DIR_pessoa)]) + 1 #envia a crop da imagem para a pasta do dlib correspondente os.rename( "bBoxImage.jpg", DIR_pessoa + nome.replace(" ", "_") + "_" + str(qtd_imagens) + ".jpg") nomes_dlib.append(nome) utils.escrever_arquivo_from_list( nomes_dlib, "/data/alinhador/database_names.txt") removed_Bbox = bBox break # Quando encontra sai e vai para o próximo nome if removed_Bbox in bbox_pessoas: bbox_pessoas.remove( removed_Bbox ) #remove das Bbox uma face já alinhada texto = "" num_pessoa = 0 dic_json = {} for key, value in dic_alinhamento.items(): #showfig(value, key) texto += key + "= " + str(value.imagem) + "\n" num_pessoa += 1 dic_json[key] = "Pessoa " + str(num_pessoa) x, y, w, h = value.Rect() cv2.rectangle(img_original, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.putText(img_original, "Pessoa " + str(num_pessoa), (x + 15, y + 15), cv2.FONT_HERSHEY_TRIPLEX, 0.5, (0, 255, 0), 1) PATH_PROJETO = os.path.dirname(os.path.abspath(__file__)) + "/" #cv2.imwrite(PATH_PROJETO+"/static/" + "alinhamento2.jpg", img_original) path_arquivo = self.path_noticia + "alinhamento_pessoas.txt" utils.escrever_arquivo(texto, path_arquivo) print(names_to_remove) #remove os nomes ja alinhados for name in names_to_remove: nomes_alinhamento.remove(name) #TODO: remover isso nomes_alinhamento.append("DESCONHECIDO") #aplica o experimento 1 while len(bbox_pessoas) > 0 and len(nomes_alinhamento) > 0: entidade = nomes_alinhamento[0] texto += entidade + "= " + str(bbox_pessoas[0].imagem) + "\n" x, y, w, h = bbox_pessoas[0].Rect() num_pessoa += 1 dic_json[entidade] = "Pessoa " + str(num_pessoa) #draw bounding box in img_original cv2.rectangle(img_original, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.putText(img_original, "Pessoa " + str(num_pessoa), (x + 15, y + 15), cv2.FONT_HERSHEY_TRIPLEX, 0.5, (0, 255, 0), 1) #remove a pessoa e a bounding box nomes_alinhamento.pop(0) bbox_pessoas.pop(0) cv2.imwrite("static/" + "alinhamento2.jpg", img_original) path_arquivo = self.path_noticia + "alinhamento_pessoas.txt" utils.escrever_arquivo(texto, path_arquivo) return dic_json
def _experiment_2(self): dic_json = {} bbox_pessoas = self._get_bounding_persons() qtd_bbox_pessoas = len(bbox_pessoas) qtd_pessoas_legenda = len(self.pessoas_legenda) qtd_pessoas_texto = len(self.pessoas_texto) nomes_alinhamento = [] img_original = None # imagem original if qtd_bbox_pessoas > 0: # Se existirem pessoas para serem alinhadas if qtd_pessoas_legenda > 0: # Se não houver nomes na legenda nomes_alinhamento = list( self.pessoas_legenda ) #copia para a lista oficial de nomes que serão alinhados for nome in self.pessoas_texto: # para cada nome do texto if nome.palavra not in nomes_alinhamento: nomes_alinhamento.append( nome.palavra) # adiciona o nome na lista nomes_dlib = utils.file_to_List( "/data/alinhador/database_names.txt") dic_alinhamento = {} removed_Bbox = None # variavel que armazena o bbox que sera removido caso encontre names_to_remove = [] face_recognition = FaceRecognition() # Varre a lista de nomes for nome in nomes_alinhamento: print(nome) nome = utils.removerAcentosECaracteresEspeciais(nome) if nome in nomes_dlib: # se o nome existir nos dados do DLIB img_original = cv2.imread("static/alinhamento2.jpg") for bBox in bbox_pessoas: # para cada bounding box new_sample = img_original.copy() crop = new_sample[bBox.top:bBox.bot, bBox.left:bBox.right] cv2.imwrite("bBoxImage.jpg", crop) distancia = 1 distancia = face_recognition.comparar_pessoas( "bBoxImage.jpg", nome) if isinstance(distancia, int) or isinstance( distancia, float): if distancia < 0.55: #a face da Bbox corresponde com alguma imagem do nome no dlib names_to_remove.append(nome) dic_alinhamento[ nome] = bBox # grava o crop da imagem no dicionario bBox.label = nome # grava o nome na bBox DIR_pessoa = "/data/alinhador/faceDB/lfw/" + nome.replace( " ", "_") + "/" qtd_imagens = len( [i for i in os.listdir(DIR_pessoa)]) + 1 #envia a crop da imagem para a pasta do dlib correspondente os.rename( "bBoxImage.jpg", DIR_pessoa + nome.replace(" ", "_") + "_" + str(qtd_imagens) + ".jpg") removed_Bbox = bBox names_to_remove.append(nome) break # vai para o proximo nome if removed_Bbox in bbox_pessoas: bbox_pessoas.remove( removed_Bbox ) #remove das Bbox uma face já alinhada else: #busca as imagens da pessoa no google imagens folder_g_image = g_image.get_images(nome) print("CRIOU NOME: " + nome) img_original = cv2.imread("static/alinhamento2.jpg") face_recognition.criar_db_g_images(folder_g_image) for bBox in bbox_pessoas: # para cada bounding box new_sample = img_original.copy() crop = new_sample[bBox.top:bBox.bot, bBox.left:bBox.right] #corta a Bbox cv2.imwrite("bBoxImage.jpg", crop) # cria a imagem da Bbox distancia = face_recognition.comparar_pessoas_google_imagens( "bBoxImage.jpg", nome) if isinstance(distancia, int) or isinstance( distancia, float): if distancia < 0.6: #a face da Bbox corresponde com alguma imagem do google imagens names_to_remove.append(nome) dic_alinhamento[ nome] = bBox # grava o crop da imagem no dicionario bBox.label = nome # grava o nome na bBox DIR_pessoa = "/data/alinhador/faceDB/lfw/" + nome.replace( " ", "_") + "/" if not os.path.exists(DIR_pessoa): os.makedirs(DIR_pessoa) qtd_imagens = len( [i for i in os.listdir(DIR_pessoa)]) + 1 #envia a crop da imagem para a pasta do dlib correspondente os.rename( "bBoxImage.jpg", DIR_pessoa + nome.replace(" ", "_") + "_" + str(qtd_imagens) + ".jpg") nomes_dlib.append(nome) utils.escrever_arquivo_from_list( nomes_dlib, "/data/alinhador/database_names.txt") removed_Bbox = bBox names_to_remove.append(nome) break # Quando encontra sai e vai para o próximo nome if removed_Bbox in bbox_pessoas: bbox_pessoas.remove( removed_Bbox ) #remove das Bbox uma face já alinhada texto = "" num_pessoa = 0 for entidade, value in dic_alinhamento.items(): #showfig(value, key) texto += entidade + "= " + str(value.imagem) + "\n" num_pessoa += 1 # dic_json[entidade] = "Pessoa "+str(num_pessoa) palavra_radio_button = entidade.replace(" ", "_") dic_json[ entidade] = '<label><input type="radio" value="sim" name="radio_' + palavra_radio_button + '">Sim</label><span style="margin: 0 10px 0 10px;"></span> <label><input type="radio" value="nao" name="radio_' + palavra_radio_button + '">Não</label>' x, y, w, h = value.Rect() # cv2.rectangle(img_original, (x, y), (x + w, y + h), (0, 0, 255), 2) # cv2.putText(img_original, entidade, (x + 15, y + 30), cv2.FONT_HERSHEY_TRIPLEX, 0.9, (0, 255, 0), 1) # size_caracters = len(entidade) * 15 print("ENTIDADE:" + entidade) cv2.rectangle( img_original, (x, y), (x + w, y + h), self.colors_bounding_box[self.index_cor_bounding_box], 2) self.index_cor_bounding_box += 1 # cv2.rectangle(img_original,(x,y),(x + size_caracters, y + 30),(0,0,0),thickness=-1) # cv2.putText(img_original, entidade, (x + 3, y + 20), # cv2.FONT_HERSHEY_DUPLEX, 0.8, (255, 255, 255), 1) PATH_PROJETO = os.path.dirname(os.path.abspath(__file__)) + "/" cv2.imwrite("static/" + "alinhamento2.jpg", img_original) path_arquivo = self.path_noticia + "alinhamento_pessoas.txt" utils.escrever_arquivo(texto, path_arquivo) return dic_json