예제 #1
0
def save_objects_in_obj_name():

    mt = MyTools()

    f = "./obj.names"

    objects = get_objects()

    lines = ""
    for obj in objects:
        lines += obj + "\n"

    mt.write_data_in_file(lines, f, "w")
예제 #2
0
def get_conf():
    # Chemin courrant
    abs_path = MyTools().get_absolute_path(__file__)
    print("Chemin courrant", abs_path)

    # Nom du script
    name = os.path.basename(abs_path)
    print("Nom de ce script:", name)

    # Abs path de semaphore sans / à la fin
    parts = abs_path.split("mon_semaphore")
    print("parts", parts)
    gl.root = os.path.join(parts[0], "mon_semaphore")
    print("Path de semaphore:", gl.root)
예제 #3
0
def directory_rename():

    mt = MyTools()
    rep_num = 0
    rep = "/media/data/3D/projets/darknet-letters/letters/game/textures/pngs"

    sub_dirs = mt.get_all_sub_directories(rep)
    # sub_dirs comprend pngs qui est le root
    del sub_dirs[0]

    for sb in sub_dirs:
        dst = rep + "/font_" + str(rep_num)
        print(sb, dst)
        os.rename(sb, dst)
        rep_num += 1
예제 #4
0
def save_test(root, resp, weight_list, gray, blur, learningrate):
    mt = MyTools()
    t = datetime.today().strftime("%Y-%m-%d %H:%M:%S")

    a = "{} Date: {}  TRAIN: {} TEST: {} Gray: {} Blur: {} Learningrate: {}\n"
    line = a.format(format(round(resp, 2), '.2f'), t, TRAIN, TEST, gray, blur,
                    round(learningrate, 4))
    print(line)
    fichier = os.path.join(root, "hyperparameter_tuning.txt")

    mt.write_data_in_file(line, fichier, "a")

    name = str(round(resp, 2))
    np.save(os.path.join(root, 'weights', 'weights_' + name + '.npy'),
            weight_list)
예제 #5
0
def main():
    """Lancé une seule fois à la 1ère frame au début du jeu par main_once."""

    print("Initialisation des scripts lancée un seule fois au début du jeu:")

    # Le couteau suisse
    gl.tools = MyTools()

    # Récupération de la configuration
    get_conf()
    set_variable()
    gl.nbr = -1
    set_tempo()
    get_sun_set()

    # Numéro de toutes les lettres entre 0 et 399
    get_obj_num()

    # Carrés en dehors de la vue caméra
    set_all_letters_position()

    intro_init()

    # Pour les mondoshawan
    print("Initialisation du jeu terminée\n\n")
예제 #6
0
    def __init__(self, size):
        self.size = size
        self.tools = MyTools()

        # 10 polices possible seulement
        self.colors = COLORS
        self.color_num = 0
        
        # Create pngs directory
        self.tools.create_directory("./pngs")
        
        # Dict des dossiers avec ttf
        self.ttf_list = self.get_ttfs()
        
        # Création des sous dossiers dans ./pngs 
        self.create_sub_directories()
예제 #7
0
    def __init__(self, root, size):
        self.root = root  # soit ..../semaphore
        self.size = int(size)

        # Mes outils personnels
        self.tools = MyTools()

        # Renommage de training_shot en training_shot_copy
        self.rename_training_shot()

        # Re-création des dossiers
        self.create_training_shot_dir()
        self.create_sub_folders()

        # Liste des images
        self.shot_list = self.get_shot_list()
예제 #8
0
def test(dossier, essai):
    """
    best = 41000
    last = 43000
    final = 42000
    """
    mt = MyTools()

    w_dir = "/media/data/projets/darknet-letters/letters/darknet/data_22/backup/"
    w_list = mt.get_all_files_list(w_dir, ".weights")
    #print("\n\nTous les fichiers de poids:", w_list)

    for w in w_list:
        # Pas le dossier principal
        if w:
            print("\n\nFichier de poids en cours:", w, "\n\n")
        if w != w_dir:
            play_letters(dossier, essai, test=1, weights=w)
예제 #9
0
    def __init__(self):
        self.tools = MyTools()

        # Liste des images du répertoire
        root = "/media/data/3D/projets/darknet-letters/letters/ttf_to_png"
        imgs = self.tools.get_all_files_list(root + "/pngs", ".png")

        # [... , CognacRum ,Z.png]

        for img in imgs:
            if "a.png" in img or "A.png" in img:
                name_list = img.split("/")
                name = name_list[-2] + "_" + name_list[-1]
                file_name = root + "/fonts_chooser/" + name
                print(file_name)

                image = cv2.imread(img, cv2.IMREAD_UNCHANGED)
                cv2.imwrite(file_name, image)
예제 #10
0
def get_conf():
    """Récupère la configuration depuis le fichier *.ini."""
    gl.tools = MyTools()

    gl.letters_dir = str(LETTERS_DIR.resolve())

    # Dossier *.ini
    ini_file = gl.letters_dir + "/letters.ini"
    gl.ma_conf = MyConfig(ini_file, verbose=0)
    gl.conf = gl.ma_conf.conf
예제 #11
0
    def __init__(self, size, video, number=1000):
        """
        letters = {'a': image de a,
                   ' ': image de ' ',
                   etc ...}
        """
        self.size = size
        self.number = number

        self.tools = MyTools()
        self.create_directories()
        self.letters = self.get_letters_images()
        self.numero_lettre = 0

        self.capture = cv2.VideoCapture(video)
        self.width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
        print("Taille Video:", self.width, self.height)

        self.get_shots()
예제 #12
0
    def __init__(self, midi_file, FPS, volume=""):
        """Un seul fichier midi
        FPS de 10 à 1000, 50 ou 100 est bien
        Plus le FPS est élevé, plus le temps de calcul est long !
        """

        print("\n\nAnalyse de", midi_file.split('/')[-1], "\n")

        self.midi_file = midi_file
        self.FPS = FPS
        self.volume = volume
        
        self.end_time = 0
        self.instruments = None
        self.instruments = []
        self.partitions = []
        self.mytools = MyTools()

        # Pour gérer les threads dans blender
        self.end = 0
예제 #13
0
    def __init__(self):
        """self.conf est le dict de la config définie dans global.ini"""

        path = MyTools().get_absolute_path(__file__)
        print("Nom de ce script:", os.path.basename(path))  # semaphore.py

        self.root = os.path.split(path)[0]
        print("Path du projet:",
              self.root)  #'/media/data/3D/projets/semaphore'

        ini_file = os.path.join(self.root, "global.ini")
        super().__init__(ini_file)
예제 #14
0
    def __init__(self):
        self.mt = MyTools()

        self.blur_mini = CONF["letters_shot_jpg"]["blur_mini"]
        self.blur_maxi = CONF["letters_shot_jpg"]["blur_maxi"]
        self.size = CONF["letters_shot_jpg"]["shot_size"]
        
        # Dossiers
        self.shot = shot_dir
        print("Dossier shot:", self.shot)
        self.create_shot_jpg()
        self.create_sub_directories()

        # Images png
        self.all_png_files = self.mt.get_all_files_list(self.shot, '.png')
        print("Nombre de fichiers à convertir:", len(self.all_png_files))
        if len(self.all_png_files) == 0:
            print("\n\nPas d'images à convertir")
            print("Créer les images avant !")
            os._exit(0)

        # Exécution du script flou puis save
        self.save_to_jpg()
예제 #15
0
def get_conf():
    """Récupère la configuration depuis le fichier *.ini."""

    # Chemin courrant
    abs_path = MyTools().get_absolute_path(__file__)
    print("Chemin courrant", abs_path)

    # Nom du script
    name = os.path.basename(abs_path)
    print("Nom de ce script:", name)

    # Abs path de semaphore sans / à la fin
    parts = abs_path.split("semaphore")
    gl.root = os.path.join(parts[0], "semaphore")
    print("Path de semaphore:", gl.root)

    # Dossier *.ini
    ini_file = os.path.join(gl.root, "global.ini")
    gl.ma_conf = MyConfig(ini_file)
    gl.conf = gl.ma_conf.conf

    print("\nConfiguration du jeu semaphore:")
    print(gl.conf, "\n")
예제 #16
0
    def __init__(self, root, size, blur, imshow=1):
        """ root = dossier semaphore
            size = taille des images pour l'ia
            blur = 0 à 10 pour flouter les images pour l'ia
            imshow = 0 ou 1 pour affichage d'image ou non pendant l'exécution
        """

        self.root = root  # soit ..../semaphore
        self.size = int(size)
        self.size = max(20, self.size)
        self.size = min(800, self.size)
        self.blur = blur
        self.imshow = imshow

        # Mes outils personnels
        self.tools = MyTools()

        # Le terrain de jeu
        self.create_training_shot_resized_dir()

        # Liste
        self.shot_list = self.get_shot_list()

        self.create_sub_folders()
예제 #17
0
def create_directories():
    """
    Création de n dossiers
    un fichier = ./semaphore/shot/shot_0/shot_a_0.png
    """

    # Dossier d'enregistrement des images
    gl.shot_directory = os.path.join(gl.root, 'training_shot')
    print("Dossier des shots:", gl.shot_directory)

    # Si le dossier n'existe pas, je le crée
    mt = MyTools()
    mt.create_directory(gl.shot_directory)

    # Nombre de dossiers nécessaires
    n = int(gl.nombre_shot_total / gl.nombre_de_fichiers_par_dossier) + 1

    for i in range(n):
        directory = os.path.join(gl.shot_directory, 'shot_' + str(i).zfill(3))
        mt.create_directory(directory)
예제 #18
0
class CreateShot:
    def __init__(self, size, video, number=1000):
        """
        letters = {'a': image de a,
                   ' ': image de ' ',
                   etc ...}
        """
        self.size = size
        self.number = number

        self.tools = MyTools()
        self.create_directories()
        self.letters = self.get_letters_images()
        self.numero_lettre = 0

        self.capture = cv2.VideoCapture(video)
        self.width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
        print("Taille Video:", self.width, self.height)

        self.get_shots()

    def create_directories(self):
        """Un dossier root=shot, un sous dossier par lettre"""

        self.tools.create_directory("./shot")
        for l in LETTRES:
            if l == " ":
                l = "space"
            self.tools.create_directory("./shot/shot_" + l)

    def get_letters_files(self):
        letters_files = self.tools.get_all_files_list("lettre_epaisse_alpha",
                                                      ".png")
        print("Nombre de letters =", len(letters_files))
        return letters_files

    def get_letters_images(self):
        """Récupère toutes les images de lettres"""

        letters = {}
        for l_file in self.get_letters_files():
            # lettre/shot_10_j.png
            l = l_file[:-4][-1]
            img = cv2.imread(l_file, -1)
            img = delete_gray(img)
            letters[l] = img
        return letters

    def frame_resize(self, frame):
        """Pour 1024: resize puis coupe des 2 cotés de 398
        pour 416: 1280x720 devient 739x416
        """

        # Largeur
        a = int(self.width * self.size / self.height)
        # Hauteur
        b = self.size
        # Resize
        frame = cv2.resize(frame, (a, b), interpolation=cv2.INTER_AREA)

        # Coupe
        x = int((a - b) / 2)
        y = 0
        w, h = self.size, self.size
        frame = frame[y:y + h, x:x + w]

        return frame

    def aspect_change(self, lettre):
        """Couleur, flou, rotation
        lettre est l'image de la lettre
        """

        bg_color = lettre[0][0]
        R = random.randint(0, 100)
        G = random.randint(0, 50)
        B = random.randint(100, 255)
        lettre[np.all(lettre == [0, 0, 0, 255], axis=2)] = [R, G, B, 255]
        mask = np.all(lettre == bg_color, axis=2)
        lettre[mask] = [0, 0, 0, 0]

        # Rotation
        some = random.randint(-3, 3)
        lettre = rotateImage(lettre, some)

        # Flou de 0 à 4
        flou = random.randint(0, 4)
        if flou != 0:
            lettre = cv2.blur(lettre, (flou, flou))

        return lettre

    def lettre_image_change(self, lettre):
        """Adapte une lettre, calcule taille, position, flou, couleur
        lettre est l'image de la lettre
        """

        # Modification de l'aspect
        lettre = self.aspect_change(lettre)

        # Variation sur la taille du sémaphore
        semaphore_mini = int(self.size / 7)

        w, h = lettre.shape[1], lettre.shape[0]
        # Set de la hauteur, puis largeur
        y_size = random.randint(semaphore_mini, int(self.size * 0.8))
        x_size = int(w * y_size / h)

        # Maxi de taille de lettre < self.size
        y_size = min(y_size, self.size)
        x_size = min(x_size, self.size)

        lettre = cv2.resize(lettre, (x_size, y_size),
                            interpolation=cv2.INTER_CUBIC)

        # Position posible
        x = random.randint(0, self.size - x_size)
        y = random.randint(0, self.size - y_size)

        return lettre, x_size, y_size, x, y

    def overlay(self, frame):
        """Trouve une lettre, supperpose à la frame"""

        # Lecture des lettres de l'alphabet en boucle
        l = LETTRES[self.numero_lettre]
        self.numero_lettre += 1
        if self.numero_lettre == 27:
            self.numero_lettre = 0

        # lettre est l'image de lettre
        lettre = self.letters[l]

        # Adaptation
        lettre, x_size, y_size, x, y = self.lettre_image_change(lettre)

        # Overlay
        img = over_transparent(frame, lettre, x, y)

        return img, l, x_size, y_size, x, y

    def save(self, img, lettre, x_size, y_size, x, y, n):
        """Enregistrement dans le dossier ./shot/shot_a/ de
        shot_0_a.jpg et shot_0_a.txt
        class position(x y) taille(x y)
        x, y position du coin haut gauche
        s = taille de la lettre
        """

        # Get indice avant modif liste
        indice = LETTRES.index(lettre)

        # pour avoir dossier clair
        if lettre == " ":
            lettre = "space"

        # Avec sous dossiers
        fichier = "./shot/shot_" + lettre + "/shot_" + str(n) + "_" + lettre

        # Enregistrement de l'image
        cv2.imwrite(fichier + ".jpg", img)

        # Enregistrement des datas
        # Taille relative de l'image lettre
        tx = x_size / self.size
        ty = y_size / self.size

        # Origine = top left
        xc = (x + (x_size / 2)) / self.size
        yc = (y + (y_size / 2)) / self.size
        # class-position du centre-taille
        data = (str(indice) + " " + str(xc) + " " + str(yc) + " " + str(tx) +
                " " + str(ty))

        self.tools.write_data_in_file(data, fichier + ".txt", "w")

    def get_shots(self):
        n, m = 0, 0
        self.loop = 1
        while self.loop:
            ret, frame = self.capture.read()
            if ret:
                # pour enregistrer 1 frame sur 10 et varier les fonds
                if n % 10 == 0:
                    frame = self.frame_resize(frame)

                    # Overlay d'une lettre
                    img, l, x_size, y_size, x, y = self.overlay(frame)

                    print("Shot numéro", m, "Lettre", l)

                    # Enregistrement de l'image et du fichier txt
                    self.save(img, l, x_size, y_size, x, y, m)
                    m += 1

                cv2.imshow("image", img)

                # Jusqu'à number
                n += 1
                if m == self.number:
                    self.loop = 0

                # Echap et attente
                k = cv2.waitKey(10)
                if k == 27:
                    self.loop = 0
            else:
                # Reset si la video est terminée
                self.capture = cv2.VideoCapture(video)

        print("Nombre d'images crées:", m)
        cv2.destroyAllWindows()
예제 #19
0
import os, sys
import random
from pymultilame import MyTools

# Import du dossier parent soit letters
# Pas d'import possible direct du dossier parent
# ValueError: attempted relative import beyond top-level package
sys.path.append("..")
from letters_path import LettersPath

lp = LettersPath()
letters_dir = lp.letters_dir
CONF = lp.conf

mt = MyTools()

# Dossier des images et txt
SHOT_JPG = lp.shot_jpg_dir

# liste de toutes les images
files = mt.get_all_files_list(SHOT_JPG, '.jpg')
# Rebat les cartes pour prendre les fichiers au hazard dans les sous-dossiers
random.shuffle(files)
nb = len(files)
print("Nombre de fichiers", nb)

if nb == 0:
    print("\n\nErreur:")
    print("Définir les chemins de shot_jpg dans letters.ini\n\n")
    os._exit(0)
예제 #20
0
class ResizeTrainingShot:
    def __init__(self, root, size):
        self.root = root  # soit ..../semaphore
        self.size = int(size)

        # Mes outils personnels
        self.tools = MyTools()

        # Renommage de training_shot en training_shot_copy
        self.rename_training_shot()

        # Re-création des dossiers
        self.create_training_shot_dir()
        self.create_sub_folders()

        # Liste des images
        self.shot_list = self.get_shot_list()

    def rename_training_shot(self):
        ori = os.path.join(self.root, "training_shot")
        dest = os.path.join(self.root, "training_shot_copy")
        os.rename(ori, dest)

    def create_training_shot_dir(self):
        directory = os.path.join(self.root, "training_shot")
        print("Dossier training_shot:", directory)
        self.tools.create_directory(directory)

    def create_sub_folders(self):
        """Création de n dossiers shot_000"""

        # Nombre de dossiers nécessaires
        d = os.path.join(self.root, "training_shot_copy")
        n = len(self.tools.get_all_sub_directories(d)) - 1
        print("Nombre de sous répertoires", n)
        for i in range(n):
            directory = os.path.join(self.root, 'training_shot',
                                     'shot_' + str(i).zfill(3))
            self.tools.create_directory(directory)
        print("Sous répertoires créés")

    def get_shot_list(self):
        """Liste des images"""

        # Liste
        shot = os.path.join(self.root, "training_shot_copy")
        shot_list = self.tools.get_all_files_list(shot, ".png")

        print("Dossier des images NB:", shot)
        print("Nombre d'images:", len(shot_list))

        return shot_list

    def change_resolution(self, img, x, y):
        """Une image peut-être ratée"""

        try:
            res = cv2.resize(img, (x, y), interpolation=cv2.INTER_AREA)
        except:
            res = np.zeros([self.size, self.size, 1], dtype=np.uint8)
        return res

    def get_new_name(self, shot):

        return shot.replace("/training_shot_copy/", "/training_shot/")

    def create_training_shot_resized_dir(self):

        directory = os.path.join(self.root, "training_shot_resized")
        print("Dossier training_shot_resized:", directory)
        self.tools.create_directory(directory)

    def batch(self):
        """Lecture, resize, save"""

        i = 0

        # Pour chaque image
        for shot in self.shot_list:
            # Lecture
            img = cv2.imread(shot, 0)

            # Resize
            img_out = self.change_resolution(img, self.size, self.size)
            i += 1

            # Save
            new_shot = self.get_new_name(shot)
            print(new_shot)
            cv2.imwrite(new_shot, img_out)
예제 #21
0
# Import du dossier parent soit letters
# Pas d'import possible direct du dossier parent
# ValueError: attempted relative import beyond top-level package
sys.path.append("..")
from letters_path import LettersPath

lp = LettersPath()
letters_dir = lp.letters_dir
CONF = lp.conf
shot_control_dir = lp.shot_control_dir

# Définir le chemin des shot à contrôler dans letters.ini
shot_jpg_dir = lp.shot_jpg_dir

tools = MyTools()


def cvDrawBoxes(img, coords):
    """Dessine le rectangle avec centre(cx, cy) et taille w et h"""

    # taille des images
    size = img.shape[0]

    # Rectangle
    cx = float(coords[1]) * size
    cy = float(coords[2]) * size
    w = float(coords[3]) * size
    h = float(coords[4]) * size

    xmin = int(cx - w / 2)
예제 #22
0
#
# This file is part of pymultilame.

# pymultilame is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# pymultilame is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with pymultilame.  If not, see <https://www.gnu.org/licenses/>.
#######################################################################
"""
Convertit le README.md en README.dokuwiki pour la page du wiki.
"""

from pymultilame import MyTools

mt = MyTools()

command = [
    'pandoc', 'README.md', '-f', 'markdown', '-t', 'dokuwiki', '-s', '-o',
    'README.dokuwiki'
]

mt.run_command_system(command)
예제 #23
0
class GetVideoWithSemaphore:
    def __init__(self, video_in, video_out, lenght, every):
        """  """
        self.video_in = video_in
        self.video_out = video_out
        self.lenght = lenght
        self.every = every * 24
        # [[y_size, x_pos, y_pos]]
        self.size_pos_list = []

        # mes outils perso: pymultilame
        self.tools = MyTools()

        self.letters = self.get_letters_images()
        self.numero_lettre = 0

        # Video d'entrèe
        self.video_in = cv2.VideoCapture(video_in)
        self.width = int(self.video_in.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.video_in.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.FPS = self.video_in.get(cv2.CAP_PROP_FPS)
        print("Video d'entrèe:", self.width, self.height, self.FPS)

        fourcc = cv2.VideoWriter_fourcc(*'MPEG')
        self.video = cv2.VideoWriter(self.video_out, fourcc, float(self.FPS),
                                     (self.width, self.height))

        # Lance la création de la video
        self.get_semaphore_video()

    def get_letters_files(self):
        letters_files = self.tools.get_all_files_list("lettre_epaisse_alpha",
                                                      ".png")
        print("Nombre de letters =", len(letters_files))
        return letters_files

    def get_letters_images(self):
        """Récupère toutes les images de lettres"""

        letters = {}
        for l_file in self.get_letters_files():
            # lettre/shot_10_j.png
            l = l_file[:-4][-1]
            letters[l] = cv2.imread(l_file, -1)
        return letters

    def overlay(self, frame, lettre_img_list, lettre_list, change):
        """ Conservation dans self.size_pos_list = [[y_size, x_pos, y_pos]]
        lettre_img_list: liste des images des lettres [image_de_a, image_de_f, ...]
        lettre_list: liste des lettres ['a', 'f', ...]
        change = changement de lettre, soit affichage des lettres en cours
        """

        for i in range(len(lettre_list)):
            # changement seulement à every
            if change == 1:
                # Plage de taille possible
                h_mini_semaphore = int(self.height / 10)
                h_maxi_semaphore = int(self.height / 1.2)
                # Choix
                y_size = random.randint(h_mini_semaphore, h_maxi_semaphore)
                # x découle de y
                x_size = int(lettre_img_list[i].shape[1] * \
                             y_size/lettre_img_list[i].shape[0])
                # Application de la taille à la lettre en cours
                img = cv2.resize(lettre_img_list[i], (x_size, y_size),
                                 interpolation=cv2.INTER_CUBIC)
                # Position
                x_pos = random.randint(50, self.width - x_size - 50)
                y_pos = random.randint(0, self.height - y_size)

                # Storage
                self.size_pos_list.append([y_size, x_pos, y_pos])
                print("Ajout de", [y_size, x_pos, y_pos])
            else:  # change == 0
                y_size = self.size_pos_list[i][0]
                x_size = int(lettre_img_list[i].shape[1] * \
                             y_size/lettre_img_list[i].shape[0])
                x_pos = self.size_pos_list[i][1]
                y_pos = self.size_pos_list[i][2]
                img = cv2.resize(lettre_img_list[i], (x_size, y_size),
                                 interpolation=cv2.INTER_CUBIC)

            # Modification de l'aspect de la lettre
            img = aspect_change(img)
            # Overlay de lettre_img déjà retaillée à position x, y
            frame = over_transparent(frame, img, x_pos, y_pos)

        return frame

    def add_lettre(self, frame, lettre_list):
        k = 0
        for l in lettre_list:
            if l == " ":
                l = "space"
            # Overlay du caractère l
            font = cv2.FONT_HERSHEY_SIMPLEX
            frame = cv2.putText(frame, l, (10, int(self.height * (0.95 - k))),
                                font, 1, (255, 255, 255), 2, cv2.LINE_AA)
            k += 0.06
        return frame

    def get_lettre_list(self):
        """Retourne une liste d'image de lettres et une liste de ces lettres"""

        # Get some lettres au hasard
        lettre_list = []
        lettre_img_list = []

        # Get n lettres
        n = random.randint(1, 3)
        for i in range(n):
            k = random.randint(0, 26)
            lettre_list.append(list(self.letters.keys())[k])

        print("\nListe des lettre:", lettre_list, "\n")

        for u in range(len(lettre_list)):
            lettre_img_list.append(self.letters[lettre_list[u]])

        return lettre_img_list, lettre_list

    def get_semaphore_video(self):
        """Une lettre ajoutée et changée toutes les every secondes"""

        how_many = 0
        letter_duration = 0
        loop = 1
        change = 1

        # Initialisation
        lettre_img_list, lettre_list = self.get_lettre_list()

        while loop:
            ret, frame = self.video_in.read()

            letter_duration += 1
            # Changement de lettres
            if letter_duration == self.every:
                lettre_img_list, lettre_list = self.get_lettre_list()
                change = 1
                # Reset
                self.size_pos_list = []
                letter_duration = 0

            # Overlay des images de lettres
            frame = self.overlay(frame, lettre_img_list, lettre_list, change)
            # Overlay des textes de lettres
            frame = self.add_lettre(frame, lettre_list)
            # On reste sur les mêmes lettres pendant every
            change = 0

            cv2.imshow('Out', frame)
            self.video.write(frame)

            # Jusqu'à la durée demandée
            how_many += 1
            if how_many == self.FPS * self.lenght:
                loop = 0
            # Echap et attente
            k = cv2.waitKey(33)
            if k == 27:
                loop = 0

        self.video.release()
        cv2.destroyAllWindows()
예제 #24
0
    def __init__(self, images_directory, essai, save, test=0, weights=""):
        """
        essai = numéro del'eaasi dans ini
        save = sauvegarde des notes en json
        test = bidouilles pour passer une série de weights
        """

        # Mes outils
        self.mt = MyTools()

        self.lp = LettersPath()
        self.CONF = self.lp.conf
        self.essai = essai
        self.save = save
        self.test = test

        self.weights = weights
        if self.weights:
            print("Fichier de poids utilisé:", self.weights)
        self.get_weights_file_indice()
        if self.weights:
            self.create_test_subdir()

        # Paramètres de la conf
        # Avec ou sans GPU
        self.gpu = self.CONF['play_letters']['gpu']
        # Résolution de l'écran ou du VP: x, y
        self.screen = self.CONF['play_letters']['screen']

        # Boucle opencv
        self.loop = 1
        self.fps = 0

        # Récup des images
        self.images_directory = images_directory
        self.shot_list = self.get_sorted_shot_list()
        self.all_shot = self.get_all_shot()

        # nom du morceau
        self.filename = self.images_directory.split("/")[-1]

        # Initialisation de la détection
        self.set_darknet()

        # Paramètres de détections
        self.thresh = int(self.CONF['play_letters']['thresh'])
        self.hier_thresh = int(self.CONF['play_letters']['hier_thresh'])
        self.nms = int(self.CONF['play_letters']['nms'])

        # Windows
        self.create_windows()

        # Trackbars
        self.create_trackbar()
        self.set_init_tackbar_position()

        # Midi
        self.fonts = self.CONF['music_and_letters']['fonts']
        self.instruments = []
        self.get_instruments()
        self.notes_en_cours = []
        self.players = {}
        self.set_players()
        self.all_notes = []
예제 #25
0
class GetVideoWithSemaphore:
    def __init__(self, video_in, video_out, lenght, every):
        """  """
        self.video_in = video_in
        self.video_out = video_out
        self.lenght = lenght
        self.every = every * 24
        self.y_fix = 0
        self.x_pos = 0
        self.y_pos = 0

        # mes outils perso: pymultilame
        self.tools = MyTools()

        self.letters = self.get_letters_images()
        self.numero_lettre = 0

        # Video d'entrèe
        self.video_in = cv2.VideoCapture(video_in)
        self.width = int(self.video_in.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.video_in.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.FPS = self.video_in.get(cv2.CAP_PROP_FPS)
        print("Video d'entrèe:", self.width, self.height, self.FPS)

        fourcc = cv2.VideoWriter_fourcc(*'MPEG')
        self.video = cv2.VideoWriter(self.video_out, fourcc, float(self.FPS),
                                     (self.width, self.height))

        # Lance la création de la video
        self.get_semaphore_video()

    def get_letters_files(self):
        letters_files = self.tools.get_all_files_list("lettre", ".png")
        print("Nombre de letters =", len(letters_files))
        return letters_files

    def get_letters_images(self):
        """Récupère toutes les images de lettres"""

        letters = {}
        for l_file in self.get_letters_files():
            # lettre/shot_10_j.png
            l = l_file[:-4][-1]
            letters[l] = cv2.imread(l_file, -1)
        return letters

    def overlay(self, frame, lettre_img, lettre, change):
        """
        lettre 320x320 variation 100 à 800
        frame 1024x1024
        position
            exempe 624: 1024-624 = 400 
        """

        # Variation sur la taille du sémaphore
        semaphore_mini = int(self.height / 7)

        w, h = lettre_img.shape[1], lettre_img.shape[0]

        # Set de la hauteur, puis largeur
        if change == 1:  # changement seulement à every
            y_size = random.randint(semaphore_mini, int(self.height * 0.8))
            self.y_fix = y_size
        else:
            y_size = self.y_fix

        x_size = int(w * y_size / h)

        # Maxi de taille de lettre_img < self.height
        y_size = min(y_size, self.height)
        x_size = min(x_size, self.height)

        lettre_img = cv2.resize(lettre_img, (x_size, y_size),
                                interpolation=cv2.INTER_CUBIC)

        # Position posible
        if change == 1:  # changement seulement à every
            x = random.randint(0, self.height - x_size)
            self.x_pos = x
            y = random.randint(0, self.height - y_size)
            self.y_pos = y
        else:
            x = self.x_pos
            y = self.y_pos

        img = over_transparent(frame, lettre_img, x, y)

        # Overlay du caractère l
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, lettre, (10, int(self.height * 0.8)), font, 4,
                    (255, 255, 255), 2, cv2.LINE_AA)

        return img

    def get_lettre(self):
        # Lecture des lettres de l'alphabet en boucle
        l = list(self.letters.keys())[self.numero_lettre]
        print("Lettre en cours", l, self.numero_lettre)
        self.numero_lettre += 1
        if self.numero_lettre == 27:
            self.numero_lettre = 0
        lettre_img = self.letters[l]
        return lettre_img, l

    def get_semaphore_video(self):
        """Une lettre ajoutée et changée toutes les every secondes"""

        how_many = 0
        letter_duration = 0
        loop = 1
        change = 1

        # Initialisation
        lettre_img, lettre = self.get_lettre()

        while loop:
            ret, frame = self.video_in.read()
            letter_duration += 1
            if letter_duration == self.every:
                # lettre_img est l'image de la lettre lettre
                lettre_img, lettre = self.get_lettre()
                change = 1
                letter_duration = 0

            # Overlay d'une lettre
            frame = self.overlay(frame, lettre_img, lettre, change)
            change = 0

            cv2.imshow('Out', frame)
            self.video.write(frame)

            # Jusqu'à la durée demandée
            how_many += 1
            if how_many == self.FPS * self.lenght:
                loop = 0
            # Echap et attente
            k = cv2.waitKey(2)
            if k == 27:
                loop = 0

        self.video.release()
        cv2.destroyAllWindows()
예제 #26
0
from random import randint

from pymultilame import MyTools

# Import du dossier parent soit letters
# Pas d'import possible direct du dossier parent
# ValueError: attempted relative import beyond top-level package
sys.path.append("..")
from letters_path import LettersPath

lp = LettersPath()
letters_dir = lp.letters_dir
CONF = lp.conf

# Le couteau
tools = MyTools()

# Nombre de shot à réaliser
nbr = CONF["letters_shot"]["nombre_shot_total"]
loop = int(nbr / 115) + 1
print("Nombre de boucle à réaliser", loop)

json_dict = {"partitions": [], "instruments": []}

# Définition des instruments
for i in range(10):
    instr = [[0, 0], "false", " "]
    json_dict["instruments"].append(instr)

# Liste des possibles
# 19 valeurs * maj et min * 10 = 380 objets
예제 #27
0
class ResizeBlur:
    def __init__(self, root, size, blur, imshow=1):
        """ root = dossier semaphore
            size = taille des images pour l'ia
            blur = 0 à 10 pour flouter les images pour l'ia
            imshow = 0 ou 1 pour affichage d'image ou non pendant l'exécution
        """

        self.root = root  # soit ..../semaphore
        self.size = int(size)
        self.size = max(20, self.size)
        self.size = min(800, self.size)
        self.blur = blur
        self.imshow = imshow

        # Mes outils personnels
        self.tools = MyTools()

        # Le terrain de jeu
        self.create_training_shot_resized_dir()

        # Liste
        self.shot_list = self.get_shot_list()

        self.create_sub_folders()

    def create_training_shot_resized_dir(self):

        directory = os.path.join(self.root, "training_shot_resized")
        print("Dossier training_shot_resized:", directory)
        self.tools.create_directory(directory)

    def create_sub_folders(self):
        """Création de n dossiers shot_000"""

        # Nombre de dossiers nécessaires
        d = os.path.join(self.root, "training_shot")
        n = len(self.tools.get_all_sub_directories(d)) - 1
        print("Nombre de sous répertoires", n)
        for i in range(n):
            directory = os.path.join(self.root, 'training_shot_resized',
                                     'shot_' + str(i).zfill(3))
            self.tools.create_directory(directory)

    def get_new_name(self, shot):
        """ de
        /media/data/3D/projets/semaphore/training_shot/shot_000/shot_0_a.png
        à
        /media/data/3D/projets/semaphore/training_shot_resized/shot_000/shot_0_a.png
        j'ai
        /media/data/3D/projets/semaphore/training_shot_resized/shot_000/shot_3921_h.png
        """

        t = shot.partition("training_shot")
        # t = ('/media/data/3D/projets/semaphore/', 'training_shot',
        #                                       '/shot_000/shot_1054_s.png')
        name = os.path.join(self.root, "training_shot_resized", t[2][1:])

        return name

    def change_resolution(self, img, x, y):
        """Une image peut-être ratée"""

        try:
            res = cv2.resize(img, (x, y), interpolation=cv2.INTER_AREA)
        except:
            res = np.zeros([self.size, self.size, 1], dtype=np.uint8)
        return res

    def apply_blur(self, img, k):
        """TODO: Utiliser GaussianBlur
        img = cv2.GaussianBlur(img, (5, 5), 0)
        """

        if self.blur:
            img = cv2.blur(img, (k, k))
        return img

    def random_noise(self, img):
        """Entre 0 et 20 pixels au hasard"""

        nb = random.randint(0, 10)

        for i in range(nb):
            x = random.randint(0, 39)
            y = random.randint(0, 39)
            img[x][y] = 1

        return img

    def some_dirty(self, img):
        """0 à 3 paquets de 4 pixels
        0 1 0
        1 1 1
        0 1 0
        """

        nb = random.randint(0, 2)
        for i in range(nb):
            x = random.randint(0, 34)
            y = random.randint(0, 34)

            # 1ère ligne
            a = x + 1
            b = y + 0
            img[a][b] = 1

            # 2ème ligne
            for u in range(3):
                a = x + u
                b = y + 1
                img[a][b] = 1

            # 3ème ligne
            a = x + 1
            b = y + 2
            img[a][b] = 1

        return img

    def batch(self):
        """Liste des images, lecture, conversion, save"""

        i = 0
        if self.imshow:
            cv2.namedWindow('Image In')
            cv2.namedWindow('Image Out')

        # Pour chaque image
        for shot in self.shot_list:
            # Lecture
            img = cv2.imread(shot, 0)

            # ResizeBlur
            img_out = self.change_resolution(img, self.size, self.size)

            # Flou
            img_out = self.apply_blur(img_out, self.blur)

            # Noise
            # L'ajout de bruit est appris par le réseau et va dégrader la
            # reconnaissance, mais Jo dit que non, ça dépend de ???
            # #img_out = self.random_noise(img_out)
            # #img_out = self.some_dirty(img_out)

            # ## Affichage
            if self.imshow:
                if i % 500 == 0:
                    #print(i)
                    imgB = self.change_resolution(img_out, 600, 600)
                    cv2.imshow('Image In', img)
                    cv2.imshow('Image Out', imgB)
                    cv2.waitKey(1)
            i += 1

            # Save
            new_shot = self.get_new_name(shot)
            cv2.imwrite(new_shot, img_out)

        cv2.destroyAllWindows()

    def get_shot_list(self):
        """Liste des images"""

        # Liste
        shot = os.path.join(self.root, "training_shot")
        shot_list = self.tools.get_all_files_list(shot, ".png")

        print("Dossier des images NB:", shot)
        print("Nombre d'images:", len(shot_list))

        return shot_list
예제 #28
0
class BlurAndConvert:

    def __init__(self):
        self.mt = MyTools()

        self.blur_mini = CONF["letters_shot_jpg"]["blur_mini"]
        self.blur_maxi = CONF["letters_shot_jpg"]["blur_maxi"]
        self.size = CONF["letters_shot_jpg"]["shot_size"]
        
        # Dossiers
        self.shot = shot_dir
        print("Dossier shot:", self.shot)
        self.create_shot_jpg()
        self.create_sub_directories()

        # Images png
        self.all_png_files = self.mt.get_all_files_list(self.shot, '.png')
        print("Nombre de fichiers à convertir:", len(self.all_png_files))
        if len(self.all_png_files) == 0:
            print("\n\nPas d'images à convertir")
            print("Créer les images avant !")
            os._exit(0)

        # Exécution du script flou puis save
        self.save_to_jpg()

    def create_shot_jpg(self):
        self.shot_jpg = shot_jpg
        print("Dossier shot_jpg:", self.shot_jpg)
        # Si le dossier n'existe pas, je le crée
        self.mt.create_directory(self.shot_jpg)

    def create_sub_directories(self):
        """Création de 100 dossiers."""

        # Répartition dans 100 sous dossiers
        for l in range(100):
            directory = os.path.join(self.shot_jpg, str(l))
            self.mt.create_directory(directory)

    def blur(self, img):
        # Flou

        k = random.randint(self.blur_mini, self.blur_maxi)
        if k != 0:
            img = cv2.blur(img, (k, k))
        return img

    def save_to_jpg(self):
        n = 0

        for png in self.all_png_files:
            if n % 100 == 0 and n != 0:
                a = len(self.all_png_files)
                print("Nombre de fichiers convertis:", n, "sur", a)
            n += 1

            # Lecture de png
            img = cv2.imread(png)

            # Flou
            img = self.blur(img)

            # Retaillage avec size de letters.ini
            img = cv2.resize(img, (self.size, self.size), interpolation=cv2.INTER_AREA)

            # On travaille avec Path
            png_path = Path(png)
            jpg_path = self.get_jpg_name(png_path)  # PosixPath
            
            # Ecriture de l'image jpg, cv2 prend seulement path en str
            cv2.imwrite(str(jpg_path), img,
                                       [int(cv2.IMWRITE_JPEG_QUALITY),
                                       100])
            
            # Copie du fichier txt de png dans jpg
            txt, dst = self.get_txt_dst(png_path, jpg_path)
            copyfile(txt, dst)

            # On prend son temps
            sleep(0.01)
            
        print("Nombre de fichiers convertis:", n)

    def get_jpg_name(self, png_path):
        """ png = str
        png = str(self.shot)     + /25/shot_4126.png = str
        jpg = str(self.shot_jpg) + /25/shot_4126.jpg = str
        """

        # Soustraction du chemin de shot_dir
        a = str(png_path).replace(str(shot_dir), "")
        # Ajout du chemin de jpg_dir
        b = Path(str(shot_jpg) + a)

        # Changement de l'extension
        jpg_path = b.with_suffix(".jpg")

        return jpg_path
            
    def get_txt_dst(self, png_path, jpg_path):
        
        txt_path = png_path.with_suffix(".txt")
        dst_path = jpg_path.with_suffix(".txt")

        return txt_path, dst_path
예제 #29
0
class AnalyseMidi:
    """Analyse le fichier midi,
    trouve le nombre et le nom des instruments.
    Retourne la liste des notes sur une time lapse de chaque instrument.
    save_midi_json enregistre le midi en json

    partitions = liste des partitions
    instruments = liste des instruments soit objet avec .program et .name

    L'enregistrement des json avec chemins absolus ne marche que pour letters

    Sous répertoires et sous sous répertoires possible dans /music
    """

    def __init__(self, midi_file, FPS, volume=""):
        """Un seul fichier midi
        FPS de 10 à 1000, 50 ou 100 est bien
        Plus le FPS est élevé, plus le temps de calcul est long !
        """

        print("\n\nAnalyse de", midi_file.split('/')[-1], "\n")

        self.midi_file = midi_file
        self.FPS = FPS
        self.volume = volume
        
        self.end_time = 0
        self.instruments = None
        self.instruments = []
        self.partitions = []
        self.mytools = MyTools()

        # Pour gérer les threads dans blender
        self.end = 0
        
    def get_instruments(self):
        """instruments =
        [Instrument(program=71, is_drum=False, name="Grand Piano"), ...]
        """

        # Récupération des datas avec pretty_midi
        midi_pretty_format = my_pretty_midi.PrettyMIDI(self.midi_file)

        # Supprime les notes avec fin avant le début !
        midi_pretty_format.remove_invalid_notes()

        # Time de fin, instruments du fichier
        self.end_time = midi_pretty_format.get_end_time()
        self.instruments_without_drums = midi_pretty_format.instruments

        # Correction des intruments pour avoir le program des drums
        self.get_instruments_with_drums()

        return self.instruments

    def get_instruments_with_drums(self):
        """"De:
            [Instrument(program=25, is_drum=False, name="Bass"),
             Instrument(program=0, is_drum=True, name="Drums"),
             Instrument(program=0, is_drum=True, name="Drums2")]

            pour une liste de tuple:
            [((0, 25), False, "Bass"),
             ((0, 116), True, "Drums"),
             ((8, 115), True, "Drums2")]

        Pour le dict du json
        "instruments": [[(0, 25), false], [(0, 116), true], [(8, 116), true]]}
        """

        for instrument in self.instruments_without_drums:
            program = instrument.program
            is_drum = instrument.is_drum
            name = instrument.name

            if is_drum:
                bank, bank_nbr = self.get_drum_program()
            else:
                bank = 0
                bank_nbr = int(program)
            self.instruments.append(((bank, bank_nbr), is_drum, name))

    def get_drum_program(self):
        """ Cas possible:
                0 114 Steel Drums
                0 115 Woodblock
                0 116 Taiko Drum
                0 117 Melodic Tom
                0 118 Synth Drum
                0 119 Reverse Cymbal
                8 116 Concert Bass Drum
                8 117 Melo Tom 2
                8 118 808 Tom
        """

        drums = [(0, 112),
                 (0, 113),
                 (0, 114),
                 (0, 115),
                 (0, 116),
                 (0, 117),
                 (0, 118),
                 (0, 119),
                 (8, 116),
                 (8, 117),
                 (8, 118)]
        c = choice(drums)
        return c[0], c[1]

    def get_partitions_and_instruments(self):
        """Fait les étapes pour tous les instruments,
        retourne les instruments et leurs partitions.
        """

        # Si fichier midi anormal
        try:
            self.get_instruments()
        except:
            print("Instruments non récupérable dans le fichier midi\n")
            self.instruments_without_drums = []

        # Si nombre d'instrument > 10 pour IA
        if len(self.instruments) > 10:
            return None, None
            
        for instrument in self.instruments_without_drums:
            if instrument.is_drum:
                drum = "Drum"
            else:
                drum = ""
            print("    Analyse de l'instrument: {:>2} {:>6}   Name: {:>24}".\
            format(instrument.program, drum, instrument.name))

            # Array de 128 x nombre de frames
            instrument_roll = self.get_instrument_roll(instrument)

            # Conversion dans une liste de listes python
            partition = self.get_partition(instrument_roll, instrument)
            self.partitions.append(partition)
        print()
        return self.partitions, self.instruments

    def get_partition(self, instrument_roll, instrument):
        """entrée:
        une ligne du array = (0.0 0.0 0.0 ... 89 ... 91 ... 0.0)
                                             89 est à la position 54
                                                    91 est à la position 68
        sortie:
        une ligne de la liste: 2 notes du même instrument 54 et 68
            [(54, 89), (68, 91)] = [(note=54, volume=89), (note=68, volume=91)]
        """

        partition = []
        
        # Parcours de toutes les lignes
        for n in range(instrument_roll.shape[1]):
            # Analyse des lignes pour ne garder que les non nuls
            non_zero = np.flatnonzero(instrument_roll[:,n])
            notes = []
            if non_zero.size > 0:
                note = int(non_zero[0])
                volume = int(instrument_roll[:,n][note])
                if note:
                    notes.append((note, volume))
            partition.append(notes)

        # velocity maxi entre 0 et 127
        partition = normalize_velocity(partition)
        if self.volume == "flat":
            partition = flatten_partition(partition)
        
        return partition
        
    def get_instrument_roll(self, partition):
        """Retourne un np.array de (128, FPS*durée du morceau en secondes)"""

        # La méthode get_piano_roll marche pour tous les instruments
        instrument_roll = partition.get_piano_roll(self.FPS,
                                                   np.arange(0,
                                                             self.end_time,
                                                             1/self.FPS))

        return instrument_roll

    def save_midi_json(self):
        """Commence par analyser le midi, puis enregistre.
        
        partitions = liste des partitions = [partition_1, partition_2 ...]
        instruments = [Instrument(program=71, is_drum=False, name="mélodie"),
                        ...]

        json_data = {"partitions":  [partition_1, partition_2 ......],
                     "instruments": [instrument_1.program,
                                     instrument_2.program, ...]
                      instrument is not JSON serializable = objet pretty_midi

        midi dans /media/data/3D/projets/darknet-letters/letters/midi/music
                     sous dossiers possible
        json dans /media/data/3D/projets/darknet-letters/letters/midi/json_fps
        et sous dossiers
        """

        # Analyse du midi
        self.get_partitions_and_instruments()

        if len(self.instruments) < 11:
            # Création du json
            json_data = {}
            json_data["partitions"] = self.partitions
            json_data["instruments"] = self.instruments
            
            # Save du json
            json_name = self.get_json_name()
            with open(json_name, 'w') as f_out:
                json.dump(json_data, f_out)
            f_out.close()
            print('Enregistrement de:', json_name)

        # Pour Blender
        self.end = 1

        return self.instruments
        
    def get_json_name(self):
        """Le fichier midi_file est le chemin relatif du fichier dans :
        ./midi/music/
             ou 
        ./midi/music/non_git/

        Le json sera dans le dossier 
        ./midi/json_60/
        ou
        ./midi/json_60/non_git/
        """

        # Remplacement de l'extension .midi en .json
        filename = Path(self.midi_file).with_suffix(".json")
        filename = str(filename)
        
        # Remplacement de music par json
        json_name = filename.replace("music/",
                                     "json_" + str(self.FPS) + "/")

        print("Nom du fichier json", json_name)
        
        # Crée les dossiers et sous dossiers
        self.create_directories(json_name)
        
        return json_name

    def create_directories(self, json_name):
        """
        json_name converti en absolu pour valable ici ou dans blender

        json_name = /med/da/3D/pr/dark/let/midi/json_fps_17/toto.json
                                        5
        json_fps =  /med/da/3D/pr/dark/let/midi/json_fps_17/oui/toto.json
                                                    7
        """

        json_name_abs = Path(json_name).absolute()
        
        # json_17 doit toujours exister, si existe on passe
        index_midi = json_name_abs.parts.index("midi")

        # Bidouille pour agréger les parts
        a = Path(json_name_abs.parts[0])
        b = json_name_abs.parts[1:index_midi + 2]
        json_fps = a.joinpath(*b)
        
        # json_fps = Chemin absolu de json_fps
        self.mytools.create_directory(json_fps)

        # Sous répertoires
        if len(json_name_abs.parts) - index_midi == 4:
            sd_fin = json_name_abs.parts[1:index_midi + 3]
            sd = a.joinpath(*sd_fin)
            print("Sous dossier", sd)
            self.mytools.create_directory(sd)
            
        # Sous sous répertoires
        if len(json_name_abs.parts) - index_midi == 5:
            # Création du sous répertoire
            sd_fin = json_name_abs.parts[1:index_midi + 3]
            sd = a.joinpath(*sd_fin)
            print("Sous dossier", sd)
            self.mytools.create_directory(sd)
            
            # Création des sous sous répertoires
            ssd_fin = json_name_abs.parts[1:index_midi + 4]
            ssd = a.joinpath(*ssd_fin)
            print("Sous sous dossier", ssd)
            self.mytools.create_directory(ssd)
예제 #30
0
            # Resize
            img_out = self.change_resolution(img, self.size, self.size)
            i += 1

            # Save
            new_shot = self.get_new_name(shot)
            print(new_shot)
            cv2.imwrite(new_shot, img_out)


if __name__ == "__main__":

    SIZE = 40

    # Chemin courrant
    abs_path = MyTools().get_absolute_path(__file__)
    print("Chemin courrant", abs_path)

    # Nom du script
    name = os.path.basename(abs_path)
    print("Nom de ce script:", name)

    # Abs path de semaphore sans / à la fin
    parts = abs_path.split("semaphore")
    root = os.path.join(parts[0], "semaphore")
    print("Path de semaphore:", root)

    print("\nResize de toutes les images de  training_shot")

    rts = ResizeTrainingShot(root, SIZE)
    rts.batch()