summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/actions.js6
-rw-r--r--client/faceSearch/faceSearch.result.js35
-rw-r--r--megapixels/app/models/sql_factory.py5
-rw-r--r--megapixels/app/server/api.py9
-rw-r--r--site/assets/css/applets.css17
5 files changed, 57 insertions, 15 deletions
diff --git a/client/actions.js b/client/actions.js
index 37b4eb2e..bb011838 100644
--- a/client/actions.js
+++ b/client/actions.js
@@ -1,9 +1,5 @@
import * as faceSearch from './faceSearch/faceSearch.actions'
-// import * as review from './review/review.actions'
-// import * as metadata from './metadata/metadata.actions'
export {
- // search,
- // review,
- // metadata,
+ faceSearch
}
diff --git a/client/faceSearch/faceSearch.result.js b/client/faceSearch/faceSearch.result.js
index 844a5a70..2b223a46 100644
--- a/client/faceSearch/faceSearch.result.js
+++ b/client/faceSearch/faceSearch.result.js
@@ -1,17 +1,44 @@
import React, { Component } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
+import { courtesyS } from '../util'
import * as actions from './faceSearch.actions'
class FaceSearchResult extends Component {
- componentDidMount() {
- }
-
render() {
+ const { dataset } = this.props.payload
+ const { distances, results } = this.props.result
+ if (!results) {
+ return (
+ <div className='result'></div>
+ )
+ }
+ if (!this.props.result.results.length) {
+ return (
+ <div className='result'>No results</div>
+ )
+ }
+ const els = results.map((result, i) => {
+ const distance = distances[i]
+ const { uuid } = result.uuid
+ const { fullname, gender, description, images } = result.identity
+ return (
+ <div>
+ <img src={'https://megapixels.nyc3.digitaloceanspaces.com/v1/media/' + dataset + '/' + uuid + '.jpg'} />
+ {fullname} {'('}{gender}{')'}<br/>
+ {description}<br/>
+ {courtesyS(images, 'image')}<br />
+ {distance}
+ </div>
+ )
+ })
+
return (
<div className='result'>
- Result here
+ <div class='results'>
+ {els}
+ </div>
</div>
)
}
diff --git a/megapixels/app/models/sql_factory.py b/megapixels/app/models/sql_factory.py
index 0f7e73a0..9a44941b 100644
--- a/megapixels/app/models/sql_factory.py
+++ b/megapixels/app/models/sql_factory.py
@@ -83,8 +83,8 @@ class SqlDataset:
def get_identity(self, id):
table = self.get_table('identity_meta')
- identity = table.query.filter(table.image_id >= id).order_by(table.image_id.asc()).first().toJSON()
- print(identity)
+ # id += 1
+ identity = table.query.filter(table.image_id <= id).order_by(table.image_id.desc()).first().toJSON()
return {
'uuid': self.select('uuids', id),
'identity': identity,
@@ -100,6 +100,7 @@ class SqlDataset:
# for obj in session.query(table).filter_by(id=id):
print(table)
obj = session.query(table).filter(table.id == id).first()
+ session.close()
return obj.toJSON()
def get_table(self, type):
diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py
index 36563910..2f78ecd3 100644
--- a/megapixels/app/server/api.py
+++ b/megapixels/app/server/api.py
@@ -70,7 +70,7 @@ def upload(name):
query = np.array([ vec ]).astype('float32')
# query FAISS!
- distances, indexes = faiss_dataset.search(query, 5)
+ distances, indexes = faiss_dataset.search(query, 10)
if len(indexes) == 0:
print("weird, no results!")
@@ -85,6 +85,7 @@ def upload(name):
return []
lookup = {}
+ ids = [i+1 for i in indexes]
for _d, _i in zip(distances, indexes):
lookup[_i+1] = _d
@@ -97,13 +98,13 @@ def upload(name):
query = {
'timing': time.time() - start,
}
- results = [ dataset.get_identity(index) for index in indexes ]
+ results = [ dataset.get_identity(id) for id in ids ]
print(results)
return jsonify({
'results': results,
- # 'distances': distances.tolist(),
- # 'indexes': indexes.tolist(),
+ 'distances': distances.tolist(),
+ 'indexes': indexes.tolist(),
})
@api.route('/dataset/<name>/name', methods=['GET'])
diff --git a/site/assets/css/applets.css b/site/assets/css/applets.css
index 54508f44..a01703d5 100644
--- a/site/assets/css/applets.css
+++ b/site/assets/css/applets.css
@@ -17,6 +17,23 @@
justify-content: flex-start;
}
+.results {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+.results > div {
+ width: 200px;
+ margin-left: 20px;
+ margin-bottom: 40px;
+ font-size: 8pt;
+}
+.results > div img {
+ margin-bottom: 4px;
+}
+.results > div:nth-child(3n+1) {
+ margin-left: 0;
+}
.query h2 {
margin-top: 0; padding-top: 0;
}