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
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>')
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)
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)
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