Пример #1
0
    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")    
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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