mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-03 07:55:36 +00:00
timing face cluster (#6950)
* timing face cluster * update * update * update --------- Co-authored-by: zheng.shen <zheng.shen@seafile.com>
This commit is contained in:
@@ -134,6 +134,7 @@ class MetadataManage(APIView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
record.enabled = False
|
record.enabled = False
|
||||||
|
record.face_recognition_enabled = False
|
||||||
record.save()
|
record.save()
|
||||||
RepoMetadataViews.objects.filter(repo_id=repo_id).delete()
|
RepoMetadataViews.objects.filter(repo_id=repo_id).delete()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1020,20 +1021,17 @@ class FaceRecognitionManage(APIView):
|
|||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
|
||||||
from seafevents.repo_metadata.utils import FACES_TABLE
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
metadata = metadata_server_api.get_metadata()
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if record and record.face_recognition_enabled:
|
||||||
|
is_enabled = True
|
||||||
|
else:
|
||||||
|
is_enabled = False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
tables = metadata.get('tables', [])
|
|
||||||
faces_table_id = [table['id'] for table in tables if table['name'] == FACES_TABLE.name]
|
|
||||||
is_enabled = True if faces_table_id else False
|
|
||||||
|
|
||||||
return Response({'enabled': is_enabled})
|
return Response({'enabled': is_enabled})
|
||||||
|
|
||||||
def post(self, request, repo_id):
|
def post(self, request, repo_id):
|
||||||
@@ -1052,13 +1050,19 @@ class FaceRecognitionManage(APIView):
|
|||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
|
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||||
|
init_faces(metadata_server_api)
|
||||||
|
|
||||||
|
try:
|
||||||
|
RepoMetadata.objects.enable_face_recognition(repo_id)
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, 'Internal Server Error')
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
'repo_id': repo_id,
|
'repo_id': repo_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
|
||||||
init_faces(metadata_server_api)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
task_id = add_init_face_recognition_task(params=params)
|
task_id = add_init_face_recognition_task(params=params)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@@ -184,3 +184,8 @@ class MetadataServerAPI:
|
|||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/metadata'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/metadata'
|
||||||
response = requests.get(url, headers=self.headers, timeout=self.timeout)
|
response = requests.get(url, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
|
def delete_table(self, table_id):
|
||||||
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/tables/{table_id}'
|
||||||
|
response = requests.delete(url, headers=self.headers, timeout=self.timeout)
|
||||||
|
return parse_response(response)
|
||||||
|
@@ -44,6 +44,13 @@ class RepoMetadataManager(models.Manager):
|
|||||||
metadata.save()
|
metadata.save()
|
||||||
return metadata
|
return metadata
|
||||||
|
|
||||||
|
def enable_face_recognition(self, repo_id):
|
||||||
|
metadata = self.filter(repo_id=repo_id).first()
|
||||||
|
face_recognition_enabled = True
|
||||||
|
metadata.face_recognition_enabled = face_recognition_enabled
|
||||||
|
metadata.save()
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
|
||||||
class RepoMetadata(models.Model):
|
class RepoMetadata(models.Model):
|
||||||
|
|
||||||
@@ -51,6 +58,7 @@ class RepoMetadata(models.Model):
|
|||||||
created_time = models.DateTimeField(auto_now_add=True)
|
created_time = models.DateTimeField(auto_now_add=True)
|
||||||
modified_time = models.DateTimeField(auto_now=True)
|
modified_time = models.DateTimeField(auto_now=True)
|
||||||
enabled = models.BooleanField(db_index=True)
|
enabled = models.BooleanField(db_index=True)
|
||||||
|
face_recognition_enabled = models.BooleanField(db_index=True)
|
||||||
from_commit = models.CharField(max_length=40)
|
from_commit = models.CharField(max_length=40)
|
||||||
to_commit = models.CharField(max_length=40)
|
to_commit = models.CharField(max_length=40)
|
||||||
|
|
||||||
|
@@ -105,6 +105,7 @@ def get_sys_columns():
|
|||||||
def get_link_column(face_table_id):
|
def get_link_column(face_table_id):
|
||||||
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||||
columns = [
|
columns = [
|
||||||
|
METADATA_TABLE.columns.face_vectors.to_dict(),
|
||||||
METADATA_TABLE.columns.face_links.to_dict({
|
METADATA_TABLE.columns.face_links.to_dict({
|
||||||
'link_id': FACES_TABLE.link_id,
|
'link_id': FACES_TABLE.link_id,
|
||||||
'table_id': METADATA_TABLE.id,
|
'table_id': METADATA_TABLE.id,
|
||||||
@@ -168,6 +169,7 @@ def init_metadata(metadata_server_api):
|
|||||||
def init_faces(metadata_server_api):
|
def init_faces(metadata_server_api):
|
||||||
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||||
|
|
||||||
|
remove_faces_table(metadata_server_api)
|
||||||
resp = metadata_server_api.create_table(FACES_TABLE.name)
|
resp = metadata_server_api.create_table(FACES_TABLE.name)
|
||||||
|
|
||||||
# init link column
|
# init link column
|
||||||
@@ -179,6 +181,21 @@ def init_faces(metadata_server_api):
|
|||||||
metadata_server_api.add_columns(resp['id'], face_columns)
|
metadata_server_api.add_columns(resp['id'], face_columns)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_faces_table(metadata_server_api):
|
||||||
|
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||||
|
metadata = metadata_server_api.get_metadata()
|
||||||
|
|
||||||
|
tables = metadata.get('tables', [])
|
||||||
|
for table in tables:
|
||||||
|
if table['name'] == FACES_TABLE.name:
|
||||||
|
metadata_server_api.delete_table(table['id'])
|
||||||
|
elif table['name'] == METADATA_TABLE.name:
|
||||||
|
columns = table.get('columns', [])
|
||||||
|
for column in columns:
|
||||||
|
if column['key'] in [METADATA_TABLE.columns.face_vectors.key, METADATA_TABLE.columns.face_links.key]:
|
||||||
|
metadata_server_api.delete_column(table['id'], column['key'])
|
||||||
|
|
||||||
|
|
||||||
def get_file_download_token(repo_id, file_id, username):
|
def get_file_download_token(repo_id, file_id, username):
|
||||||
return seafile_api.get_fileserver_access_token(repo_id, file_id, 'download', username, use_onetime=True)
|
return seafile_api.get_fileserver_access_token(repo_id, file_id, 'download', username, use_onetime=True)
|
||||||
|
|
||||||
|
@@ -1528,6 +1528,8 @@ CREATE TABLE `repo_metadata` (
|
|||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
`repo_id` VARCHAR(36) NOT NULL,
|
`repo_id` VARCHAR(36) NOT NULL,
|
||||||
`enabled` TINYINT(1) NOT NULL,
|
`enabled` TINYINT(1) NOT NULL,
|
||||||
|
`face_recognition_enabled` TINYINT(1) NULL,
|
||||||
|
`last_face_cluster_time` DATETIME NULL,
|
||||||
`modified_time` DATETIME NOT NULL,
|
`modified_time` DATETIME NOT NULL,
|
||||||
`created_time` DATETIME NOT NULL,
|
`created_time` DATETIME NOT NULL,
|
||||||
`from_commit` varchar(40) NULL,
|
`from_commit` varchar(40) NULL,
|
||||||
@@ -1536,6 +1538,7 @@ CREATE TABLE `repo_metadata` (
|
|||||||
`last_face_cluster_time` datetime DEFAULT NULL,
|
`last_face_cluster_time` datetime DEFAULT NULL,
|
||||||
UNIQUE KEY `key_repo_metadata_repo_id`(`repo_id`),
|
UNIQUE KEY `key_repo_metadata_repo_id`(`repo_id`),
|
||||||
KEY `key_repo_metadata_enabled`(`enabled`),
|
KEY `key_repo_metadata_enabled`(`enabled`),
|
||||||
|
KEY `key_repo_metadata_face_recognition_enabled`(`face_recognition_enabled`),
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user