예제 #1
0
    def getIdentity(self, descriptor):
        if descriptor is None: return -1
        distance = []
        for gallId in self.database:
            dists = []

            for gallEmbedding in self.database[gallId].descriptors:
                dists.append(np.linalg.norm(descriptor - gallEmbedding))

            distance.append(
                [gallId, np.amin(dists)]
            )

        if not distance:
            return self.addNewGallery(Gallery([descriptor], maxDescriptors=self.maxDescriptors))

        bestId, minDistance = min(distance, key=lambda v: v[1])

        if self.threshold is not None:
            if minDistance < self.threshold:
                self.addToGallery(bestId, descriptor)
                return bestId
            else:
                return self.addNewGallery(Gallery([descriptor], maxDescriptors=self.maxDescriptors))
        else:
            return bestId
예제 #2
0
    def post(self):
        """ """

        identity = self.get_argument('id')
        code = self.get_argument('code')
        name = self.get_argument('name')

        param = None

        session = x.data.orm.createSession()

        if session.query(Gallery).filter(Gallery.id == identity).count() == 0:
            param = Gallery(id=str(uuid.uuid4()))
            # 添加到数据库
            session.add(param)
            # 写数据库,但并不提交
            session.flush()
        else:
            param = session.query(Gallery).filter(Gallery.id == identity).one()

        # 设置对象信息
        param.code = code
        param.name = name
        param.modifiedDate = datetime.datetime.now()

        session.add(param)
        session.commit()

        self.write('提交成功!<br/>')
        self.write(name + "<br />")
        self.write('<a href="list">返回列表</a>')
예제 #3
0
 def load_from_json(logger):
     # Check if json file actually exists otherwise return empty array
     if os.path.isfile(json_file_path):
         with open(json_file_path, "r", encoding="utf-8") as save_file:
             result_dicts = json.load(save_file)
             result_galleries = []
             # Convert dictionary back to gallery object...
             for dict in result_dicts:
                 gallery = Gallery(logger)
                 gallery.initialize_from_dictionary(dict)
                 result_galleries.append(gallery)
             return result_galleries
     return []
def buildPersonIdentifier(args):
    detector = choosePersonDetector(args)
    bodyEmbeddingGenerator = chooseBodyEmbeddingGenerator(args)

    if detector is not Detector.mtcnn:
        checkPath(args.bodyDetectorWeights, "Body Detector weights file", True)

        if detector is Detector.yolo:
            checkPath(args.bodyDetectorConfig,
                      "Body detector configuration file", True)

        checkPath(args.embeddingGeneratorWeights,
                  "Embedding generator weights file", True)

        if args.embeddingGeneratorClasses is None:
            args.embeddingGeneratorClasses = 1041 if bodyEmbeddingGenerator is EmbeddingGenerator.alignedReId else 751

    gallery = None

    if args.gallery is not None:
        checkPath(args.bodyDetectorWeights, "Gallery weights file", True)

        checkPath(args.ids, "Ids set file", True)

        ids = getIds(args.ids)
        gallery = loadEmbeddings(args.gallery, ids, args.galleryLocation,
                                 args.oneIndexed)
        gallery = {
            id: Gallery(embeddings)
            for id, embeddings in gallery.items()
        }

        if args.galleryLocation is None:
            raise ValueError(
                "No query location specified. It should be specified with --galleryLocation option."
            )

    return PersonReidentifierService(
        detector=detector,
        detectionThreshold=getDetectionThreshold(args),
        embeddingGenerator=bodyEmbeddingGenerator,
        detectorWeights=args.bodyDetectorWeights,
        detectorConf=args.bodyDetectorConfig,
        embeddingGeneratorWeights=args.embeddingGeneratorWeights,
        embeddingGeneratorNumClasses=args.embeddingGeneratorClasses,
        gallery=gallery,
        databaseThreshold=args.openWorldThreshold,
        maxDescriptors=args.maxDescriptors)
예제 #5
0
    def get(self, id=''):
        print 'id:' + id

        param = Gallery(id=id, name='', code='')

        if id == '':
            self.render("gallery/gallery-form.html",
                        title="Form | Gallery",
                        header="form",
                        footer="footer text",
                        param=param)
        else:
            session = x.data.orm.createSession()

            param = session.query(Gallery).filter_by(id=id).first()
            self.render("gallery/gallery-form.html",
                        title="Form | Gallery",
                        header="form",
                        param=param)
예제 #6
0
    def create_gallery_from_request(request, logger, check_gallery_name=True):
        # Extract the relevant information from the request
        name = request.form.get("gallery-name", '')
        gallery_images = []
        # Note that when the user has not selected any images the file name will simply be empty...
        result = request.files.getlist("gallery-images")
        for data in result:
            if data.filename != "":
                gallery_images.append(data)

        # Check if the name is valid
        if not GalleryHelper.is_valid_gallery_name(name):
            raise Exception(
                "Invalid gallery name " + name +
                ". It should only contain numeric, alphanumeric, '_' , '-' or whitespaces"
            )

        # Check if this gallery already exists
        if check_gallery_name and GalleryHelper.does_gallery_with_name_already_exist(
                name):
            raise Exception("The gallery name " + "'" + name + "'" +
                            " does already exist")

        # Check if image names are valid
        for image in gallery_images:
            # Check file extension
            if not GalleryHelper.is_valid_image_file_extension(image.filename):
                raise Exception(
                    "The image name " + "'" + image.filename + "'" +
                    " has an invalid file extension. Only .png or .jpeg images are supported."
                )

            # Next check also the image file name
            if not GalleryHelper.is_valid_image_name(image.filename):
                raise Exception(
                    "The image name " + "'" + image.filename + "'" +
                    " contains invalid Characters. It should only contain numeric, alphanumeric, '_' , '-' or whitespaces"
                )

        # We need to convert the result from the dropdown "Yes", "No" to a boolean
        is_favourite_str = request.form.get("gallery-favourite", "No")
        is_favourite = GalleryHelper.get_is_favourite_from_str(
            is_favourite_str)

        new_gallery = Gallery(
            logger=logger,
            name=name,
            tags=StringHelper.parse_tags_from_text(
                request.form.get("gallery-tags", ''), logger),
            is_favourite=is_favourite,
            # See: https://pythonise.com/series/learning-flask/the-flask-request-object -> Multiple files section
            images=[],
            description=request.form.get("gallery-description", ""))

        # Create a folder for the gallery name
        gallery_path = base_path + name + "/"
        if not os.path.isdir(gallery_path):
            os.makedirs(gallery_path)

        if len(gallery_images) > 0:
            new_gallery.set_file_paths(absolute_base_path, gallery_images)

            # Save to disk
            GalleryHelper.save_images_to_disk(new_gallery, gallery_images,
                                              logger)

        return new_gallery