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_REL + '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 _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") self.nome_arquivo.replace('\n','') 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 if os.path.exists(self.nome_arquivo + "_caption.txt"): self.legenda = self.crawler.file_to_variavel(self.nome_arquivo + "_caption.txt") self.legenda = self.legenda.replace("\n", "") self.path_legenda = self.nome_arquivo + "_caption.txt" #caminho da legenda else: self.legenda = "" self.path_legenda = "" self.path_imagem = self.nome_arquivo + ".jpg" # caminho da imagem original shutil.copy2(self.path_imagem, STATIC_REL + 'alinhamento2.jpg') print("imagem copiada") 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 if os.path.exists(self.nome_arquivo + "_caption.txt"): 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") if os.path.exists(self.nome_arquivo + "_caption.txt"): os.remove(self.nome_arquivo + "_caption.txt") else: self.noticia_sem_imagem = True
def _experiment_2(self): dic_json = {} bbox_pessoas = self._get_bounding_persons() img_original = None # imagem original if len(self._get_bounding_persons() ) > 0: # Se existirem pessoas para serem alinhadas nomes_alinhamento = self._cluster_names() nomes_dlib = utils.file_to_List( BASE_DIR + "/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_sem_acento = utils.removerAcentosECaracteresEspeciais( nome) if nome_sem_acento in nomes_dlib: # se o nome existir nos dados do DLIB img_original = cv2.imread(STATIC_REL + "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 = face_recognition.comparar_pessoas( "bBoxImage.jpg", nome_sem_acento) if isinstance(distancia, int) or isinstance( distancia, float): print(nome, ": distancia < THR_DLIB: ", distancia < self.THR_DLIB) if distancia < self.THR_DLIB and self._add_alignment( ne=nome, bbx=bBox): # 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 = BASE_DIR + "/data/alinhador/faceDB/lfw/" + nome_sem_acento.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_sem_acento.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_sem_acento) print("CRIOU NOME: " + nome_sem_acento) img_original = cv2.imread(STATIC_REL + "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_sem_acento) if isinstance(distancia, int) or isinstance( distancia, float): if distancia < self.THR_GGL_IMG and self._add_alignment( ne=nome, bbx=bBox): # 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 = BASE_DIR + "/data/alinhador/faceDB/lfw/" + nome_sem_acento.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_sem_acento.replace(" ", "_") + "_" + str(qtd_imagens) + ".jpg") nomes_dlib.append(nome) utils.escrever_arquivo_from_list( nomes_dlib, BASE_DIR + "/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(): texto += entidade + "= " + str(value.imagem) + "\n" num_pessoa += 1 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() print("ENTIDADE:" + entidade) cv2.rectangle(img_original, (x, y), (x + w, y + h), self.palette.next_color(type="bb", inc=True), 2) self.index_cor_bounding_box += 1 if img_original is not None: cv2.imwrite(STATIC_REL + "alinhamento2.jpg", img_original) path_arquivo = self.path_noticia + "alinhamento_pessoas.txt" utils.escrever_arquivo(texto, path_arquivo) return dic_json
def _experiment_1(self): """Experimento 4 + Experimento 2""" global maior_distancia print('experimento 1') arquivo_wup = "/wup_top5.txt" img_original = cv2.imread(STATIC_REL + "alinhamento2.jpg") bbox_objects = self._get_bounding_objects() num_objeto = 0 lst_palavras_visuais = self.read_words_visual("visual_words.txt") for bbox in bbox_objects: bbox.lst_cnn.append(bbox.objeto) dic_json = {} # 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 = {} 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: pass except: distancia_wup = 0 if distancia_wup > maior_distancia: maior_distancia = distancia_wup print("maior distancia: ", maior_distancia) if maior_distancia > self.thr: dicionario_distancias_wup[substantivo] = maior_distancia print(dicionario_distancias_wup) if dicionario_distancias_wup: 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 = add_dic_alinhamento(dict=dic_alinhamento, word=palavra_ranqueada, nun_obj=num_objeto) num_objeto += 1 # 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) alignment = Alignment(term=palavra_ranqueada, bounding_box=bbox) self.align_group.add_alignments(alignment=alignment) # _________________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() # draw bounding box in img_original cv2.rectangle(img_original, (x, y), (x + w, y + h), self.palette.next_color(type="bb", inc=True), 2) self.index_cor_bounding_box += 1 # remove a bounding box bbox_objects.pop(0) if img_original is not None: cv2.imwrite(STATIC_REL + "alinhamento2.jpg", img_original) return dic_json