diff options
| -rw-r--r-- | megapixels/app/models/sql_factory.py | 120 | ||||
| -rw-r--r-- | megapixels/app/server/api.py | 8 |
2 files changed, 66 insertions, 62 deletions
diff --git a/megapixels/app/models/sql_factory.py b/megapixels/app/models/sql_factory.py index 82e59b22..05984500 100644 --- a/megapixels/app/models/sql_factory.py +++ b/megapixels/app/models/sql_factory.py @@ -88,9 +88,9 @@ class SqlDataset: } def get_identity(self, id): - table = self.get_table('identity_meta') + table = self.get_table('identity') # id += 1 - identity = table.query.filter(table.image_id <= id).order_by(table.image_id.desc()).first().toJSON() + identity = table.query.filter(table.record_id <= id).order_by(table.record_id.desc()).first().toJSON() return { 'uuid': self.select('uuids', id), 'identity': identity, @@ -99,17 +99,17 @@ class SqlDataset: } def search_name(self, q): - table = self.get_table('identity_meta') - uuid_table = self.get_table('uuids') + table = self.get_table('identity') identity_list = table.query.filter(table.fullname.like(q)).order_by(table.fullname.desc()).limit(10) return identity_list - def get_uuids_for_identities(self, identity_list): + def get_file_records_for_identities(self, identity_list): identities = [] + file_record_table = self.get_table('file_record') for row in identity_list: - uuid = uuid_table.query.filter(uuid_table.id == row.image_id).first() + file_record = file_record_table.query.filter(file_record_table.id == row.record_id).first() identities.append({ - 'uuid': uuid.toJSON(), + 'file_record': file_record.toJSON(), 'identity': row.toJSON(), }) return identities @@ -120,7 +120,7 @@ class SqlDataset: return None session = Session() # for obj in session.query(table).filter_by(id=id): - # print(table) + # print(table) obj = session.query(table).filter(table.id == id).first() session.close() return obj.toJSON() @@ -128,43 +128,70 @@ class SqlDataset: def get_table(self, type): if type in self.tables: return self.tables[type] - elif type == 'uuids': - self.tables[type] = self.uuid_table() - elif type == 'roi': - self.tables[type] = self.roi_table() - elif type == 'identity_meta': + elif type == 'file_record': + self.tables[type] = self.file_record_table() + elif type == 'identity': self.tables[type] = self.identity_table() - elif type == 'pose': - self.tables[type] = self.pose_table() + elif type == 'face_roi': + self.tables[type] = self.face_roi_table() + elif type == 'face_pose': + self.tables[type] = self.face_pose_table() else: return None return self.tables[type] - # ==> uuids.csv <== - # index,uuid - # 0,f03fd921-2d56-4e83-8115-f658d6a72287 - def uuid_table(self): - class UUID(self.base_model): - __tablename__ = self.name + "_uuid" + # ==> file_record.csv <== + # index,ext,fn,identity_key,sha256,subdir,uuid,identity_index + def file_record_table(self): + class FileRecord(self.base_model): + __tablename__ = self.name + "_file_record" id = Column(Integer, primary_key=True) + ext = Column(String(3, convert_unicode=True), nullable=False) + fn = Column(String(36, convert_unicode=True), nullable=False) + identity_key = Column(String(36, convert_unicode=True), nullable=False) + sha256 = Column(String(36, convert_unicode=True), nullable=False) + subdir = Column(String(36, convert_unicode=True), nullable=False) uuid = Column(String(36, convert_unicode=True), nullable=False) + identity_index = Column(Integer) def toJSON(self): return { 'id': self.id, 'uuid': self.uuid, + 'identity_index': self.identity_index, } - return UUID + return FileRecord - # ==> roi.csv <== + # ==> identity.csv <== + # index,description,gender,images,fullname + # 0,A. J. Cook,Canadian actress,f,1,0 + def identity_table(self): + class Identity(self.base_model): + __tablename__ = self.name + "_identity" + id = Column(Integer, primary_key=True) + description = Column(String(36, convert_unicode=True), nullable=False) + gender = Column(String(1, convert_unicode=True), nullable=False) + images = Column(Integer, nullable=False) + fullname = Column(String(36, convert_unicode=True), nullable=False) + def toJSON(self): + return { + 'id': self.id, + 'fullname': self.fullname, + 'images': self.images, + 'gender': self.gender, + 'description': self.description, + } + return Identity + + # ==> face_roi.csv <== # index,h,image_height,image_index,image_width,w,x,y # 0,0.33000000000000007,250,0,250,0.32999999999999996,0.33666666666666667,0.35 - def roi_table(self): - class ROI(self.base_model): + def face_roi_table(self): + class FaceROI(self.base_model): __tablename__ = self.name + "_roi" id = Column(Integer, primary_key=True) h = Column(Float, nullable=False) image_height = Column(Integer, nullable=False) - image_index = Column(Integer, nullable=False) + record_index = Column(Integer, nullable=False) image_width = Column(Integer, nullable=False) w = Column(Float, nullable=False) x = Column(Float, nullable=False) @@ -172,7 +199,7 @@ class SqlDataset: def toJSON(self): return { 'id': self.id, - 'image_index': self.image_index, + 'record_index': self.record_index, 'image_height': self.image_height, 'image_width': self.image_width, 'w': self.w, @@ -180,48 +207,25 @@ class SqlDataset: 'x': self.x, 'y': self.y, } - return ROI - - # ==> identity.csv <== - # index,fullname,description,gender,images,image_index - # 0,A. J. Cook,Canadian actress,f,1,0 - def identity_table(self): - class Identity(self.base_model): - __tablename__ = self.name + "_identity" - id = Column(Integer, primary_key=True) - fullname = Column(String(36, convert_unicode=True), nullable=False) - description = Column(String(36, convert_unicode=True), nullable=False) - gender = Column(String(1, convert_unicode=True), nullable=False) - images = Column(Integer, nullable=False) - image_id = Column(Integer, nullable=False) - def toJSON(self): - return { - 'id': self.id, - 'image_id': self.image_id, - 'fullname': self.fullname, - 'images': self.images, - 'gender': self.gender, - 'description': self.description, - } - return Identity + return FaceROI - # ==> pose.csv <== - # index,image_index,pitch,roll,yaw + # ==> face_pose.csv <== + # index,record_index,pitch,roll,yaw # 0,0,11.16264458441435,10.415885631337728,22.99719032415318 - def pose_table(self): - class Pose(self.base_model): + def face_pose_table(self): + class FacePose(self.base_model): __tablename__ = self.name + "_pose" id = Column(Integer, primary_key=True) - image_id = Column(Integer, primary_key=True) + record_id = Column(Integer, nullable=False) pitch = Column(Float, nullable=False) roll = Column(Float, nullable=False) yaw = Column(Float, nullable=False) def toJSON(self): return { 'id': self.id, - 'image_id': self.image_id, + 'record_id': self.record_id, 'pitch': self.pitch, 'roll': self.roll, 'yaw': self.yaw, } - return Pose + return FacePose diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py index cc791bb2..0af217e3 100644 --- a/megapixels/app/server/api.py +++ b/megapixels/app/server/api.py @@ -150,21 +150,21 @@ def name_lookup(dataset_name): } if len(terms) == 1: names = dataset.search_name('%' + term + '%') if term else [] - results = dataset.get_uuids_for_identities(names) + results = dataset.get_file_records_for_identities(names) else: lookup = {} results_lookup = {} for i, term in enumerate(terms): search_term = '%' + term + '%' - names = dataset.search_name() if term else [] + names = dataset.search_name(term) if term else [] for name in names: if name.id in lookup: lookup[name.id] += 1 else: lookup[name.id] = 1 results_lookup[name.id] = name - top_names = [results_lookup[item[0]] for item in sorted(lookup.items(), key=operator.itemgetter(1))][0:30] - results = dataset.get_uuids_for_identities(top_names) + top_names = [results_lookup[item[0]] for item in sorted(lookup.items(), key=operator.itemgetter(1))][0:20] + results = dataset.get_file_records_for_identities(top_names) # print(results) return jsonify({ |
