0
votes

Python - variable locale référencée avant erreur d'affectation

J'essaie d'adopter le code d'origine MASK_RCNN à mon jeu de données.Le code d'origine prend des fichiers XML et je viens de modifier mon code pour accepter le format JSON. Voici le code

   def load_mask(self, image_id, xml=False):
        # get details of image
        info = self.image_info[image_id]

        if xml:
            # define anntation  file location
            path = info['annotation']
            # load XML
            boxes, w, h = self.extract_boxes(path, xml=True)
        else:
            with open('D:\Mask_RCNN\Mask_RCNN\dataset\\annots\\annotations.json', 'r') as f:
                annots = json.load(f)
                found = False
                for value in annots.values():
                    if 'image' in value and value['instance_list']:
                        if value['image']['original_filename'][:-3] == info['id']:
                            boxes, w, h = self.extract_boxes(value)
                            found = True
                            break

        if found:
            # create one array for all masks, each on a different channel
            masks = zeros([h, w, len(boxes)], dtype='uint8')
        else:
            stop = "here"

                if found:
            # create one array for all masks, each on a different channel
            masks = zeros([h, w, len(boxes)], dtype='uint8')
        else:
            stop = "here"

        # create masks
        class_ids = list()
        for i in range(len(boxes)):
            box = boxes[i]
            row_s, row_e = box[1], box[3]
            col_s, col_e = box[0], box[2]
            masks[row_s:row_e, col_s:col_e, i] = 1
            class_ids.append(self.class_names.index('Penquins'))
        return masks, asarray(class_ids, dtype='int32')

    # load an image reference
        #"""Return the path of the image."""
    def image_reference(self, image_id):
            info = self.image_info[image_id]
            print(info)
            return info['path']


11 commentaires

Où avez-vous déclaré cases ?


@Guy: déclarer devrait lire: Attribuer à ou initialiser .


@Guidot "commençant par Python 3.6, vous pouvez déclarer des types de variables et fonctions" docs.python .org / 3 / bibliothèque / Typing.html


@Guy je pense qu'il voulait dire qu'il n'y a pas de tel que déclarant en python. Cependant, comme dit dans mon autre commentaire, il y a.


@Guy, désolé j'ai posté à nouveau avec quelques lignes de code supplémentaires


Si l'erreur est référencée avant l'affectation Cela signifie que la variable n'a pas encore reçu de valeur et que l'interprète n'en sait pas.


Dans votre définition de la fonction, écrivez ces cases d'instruction = Aucune comme première ligne.


@WIMANICESIR TYPE-TYPE-ITS ne sont pas des déclarations variables. Python ne a des déclarations variables .


@ Juanpa.arrivillaga, lisez les docs .. Ils utilisent même "déclarer" plusieurs fois dans les documents eux-mêmes. Une définition trouvée ailleurs est "La déclaration donne un nom et un type de données pour la variable".


@ Juanpa.arrivillaga aussi Ceci -> geeksforgeeks.org/difence-beween-definition -et-déclare ion


@WimaniceSir pendant que vous êtes techniquement correct, pourrais-je suggérer d'arrêter cette discussion ici? Il est entièrement hors sujet et sert probablement à confondre seulement l'affiche originale


4 Réponses :


0
votes

Seulement si XML est vrai, il est garanti, que les cases obtiennent une valeur. Sinon, des conditions supplémentaires doivent être remplies, ce qui ne semble pas être le cas.


0 commentaires

0
votes

des cases est initialisé dans certains des scénarios dans load_mask s premier si sinon bloc, ce qui signifie Il peut ne pas exister lorsque vous atteignez si trouvé: . Il suffit de le déclarer au début xxx


0 commentaires

0
votes

Cela signifie que vous essayez d'itérer sur le nombre de cases code> code>, mais de vos instructions ci-dessus sont construites de manière à ce que cases code> pourrait ne pas quitter l'heure Cette déclaration est exécutée.

Essayez cet exemple simple: p> xxx pré>

Ceci entraînera la même erreur que vous voyez. Votre problème est que ces deux instructions doivent passer avant que les cases code> sont définies: p>

           if 'image' in value and value['instance_list']:
                if value['image']['original_filename'][:-3] == info['id']:


0 commentaires

0
votes

Le problème est que les cases ne sont pas déclarées en ligne de ceci pour la boucle, de sorte que définir des cases comme une liste vide dans la première partie de la fonction xxx pré>

puis lorsque vous faites la boucle Il faut maintenant être déclaré (à moins que l'une des fonctions ne renvoie pas les cases et vous donne autre chose) p>

Conseil rapide Lorsque vous faites la boucle, vous pouvez faire P>

for i, box in enumerate(boxes):
    ...


0 commentaires