Skip to content

Commit

Permalink
Merge pull request #471 from haiwen/feat/add-key-face-photo
Browse files Browse the repository at this point in the history
feat: add  make key face photo sup
  • Loading branch information
JoinTyang authored Feb 12, 2025
2 parents 784729a + 3299c9b commit 951e23c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 5 deletions.
9 changes: 7 additions & 2 deletions face_recognition/face_recognition_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
from seafevents.face_recognition.constants import UNKNOWN_PEOPLE_NAME
from seafevents.face_recognition.utils import get_faces_rows, get_cluster_by_center, b64encode_embeddings, \
b64decode_embeddings, VECTOR_DEFAULT_FLAG, get_min_cluster_size, SUPPORTED_IMAGE_FORMATS, EMBEDDING_UPDATE_LIMIT, \
save_cluster_face
save_cluster_face, get_image_face, save_face

from seaserv import seafile_api, get_org_id_by_repo_id
from seaserv import seafile_api

logger = logging.getLogger('face_recognition')

Expand Down Expand Up @@ -257,3 +257,8 @@ def save_face_cluster_message_to_user_notification(self, repo_id, username):
["('%s', '%s', '%s', '%s', %s)" % value for value in values])
session.execute(text(sql))
session.commit()

def update_people_cover_photo(self, repo_id, people_id, obj_id):
face_image = get_image_face(repo_id, obj_id, self.image_embedding_api, center=None)
filename = f'{people_id}.jpg'
save_face(repo_id, face_image, filename, replace=True)
7 changes: 5 additions & 2 deletions face_recognition/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import base64
import os
import json
import posixpath

from seaserv import seafile_api
Expand Down Expand Up @@ -80,7 +81,7 @@ def get_face_embeddings(repo_id, image_embedding_api, obj_ids):
return embeddings


def get_image_face(repo_id, obj_id, image_embedding_api, center):
def get_image_face(repo_id, obj_id, image_embedding_api, center=None):
result = image_embedding_api.face_embeddings(repo_id, [obj_id], True).get('data', [])
if not result:
return None
Expand Down Expand Up @@ -118,10 +119,12 @@ def get_min_cluster_size(faces_num):
return max(faces_num // 100, 5)


def save_face(repo_id, image, filename):
def save_face(repo_id, image, filename, replace=False):
tmp_content_path = posixpath.join(FACES_TMP_DIR, filename)
with open(tmp_content_path, 'wb') as f:
f.write(image)

if replace:
seafile_api.del_file(repo_id, FACES_SAVE_PATH, json.dumps([filename]), 'system')
seafile_api.post_file(repo_id, tmp_content_path, FACES_SAVE_PATH, filename, 'system')
os.remove(tmp_content_path)
2 changes: 1 addition & 1 deletion repo_metadata/script/update_face_recognition.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import sys

from seafevents.db import init_db_session_class
from seafevents.repo_metadata.face_recognition_manager import FaceRecognitionManager
from seafevents.face_recognition.face_recognition_manager import FaceRecognitionManager
from seafevents.repo_metadata.utils import get_face_recognition_enabled_repo_list, get_faces_rows
from seafevents.repo_metadata.constants import FACES_TABLE
from seafevents.app.config import get_config
Expand Down
32 changes: 32 additions & 0 deletions seafevent_server/request_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,3 +269,35 @@ def add_convert_wiki_task():
return make_response((e, 500))

return {'task_id': task_id}, 200


@app.route('/update-people-cover-photo', methods=['POST'])
def update_cover_photo():
is_valid, error = check_auth_token(request)
if not is_valid:
return make_response((error, 403))

try:
data = json.loads(request.data)
except Exception as e:
logger.exception(e)
return {'error_msg': 'Bad request.'}, 400

repo_id = data.get('repo_id')
people_id = data.get('people_id')
obj_id = data.get('obj_id')

if not repo_id:
return {'error_msg': 'repo_id invalid.'}, 400
if not people_id:
return {'error_msg': 'people_id invalid.'}, 400
if not obj_id:
return {'error_msg': 'obj_id invalid.'}, 400

try:
app.face_recognition_manager.update_people_cover_photo(repo_id, people_id, obj_id)
except Exception as e:
logger.error(e)
return make_response((e, 500))

return {'success': True}, 200
2 changes: 2 additions & 0 deletions seafevent_server/seafevent_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from seafevents.seafevent_server.task_manager import task_manager
from seafevents.seafevent_server.export_task_manager import event_export_task_manager
from seafevents.seasearch.index_task.index_task_manager import index_task_manager
from seafevents.face_recognition.face_recognition_manager import FaceRecognitionManager


class SeafEventServer(Thread):
Expand All @@ -18,6 +19,7 @@ def __init__(self, app, config):

task_manager.run()
event_export_task_manager.run()
application.face_recognition_manager = FaceRecognitionManager(config)
self._server = WSGIServer((self._host, int(self._port)), application)

index_task_manager.init(config)
Expand Down

0 comments on commit 951e23c

Please sign in to comment.