summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--megapixels/app/models/sql_factory.py120
-rw-r--r--megapixels/app/server/api.py8
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({