视频检索结果增加视频名称
This commit is contained in:
@@ -432,16 +432,20 @@ def process_video_check_task(task_id: int) -> bool:
|
||||
)
|
||||
return False
|
||||
|
||||
# 构建视频路径列表
|
||||
video_paths = []
|
||||
# 构建视频信息列表
|
||||
video_infos = []
|
||||
for video in video_list:
|
||||
video_path = os.path.join(settings.VIDEO_RESOURCE_DIR, video.video_name_on_server)
|
||||
if os.path.exists(video_path):
|
||||
video_paths.append(video_path)
|
||||
video_infos.append({
|
||||
'video_id': video.id,
|
||||
'video_name': video.video_name,
|
||||
'video_path': video_path
|
||||
})
|
||||
else:
|
||||
logger.warning(f"视频文件不存在,跳过: {video_path}")
|
||||
|
||||
if not video_paths:
|
||||
if not video_infos:
|
||||
logger.error(f"所有待检查视频文件都不存在: {task_id}")
|
||||
repository.update_task_status(
|
||||
task_id, 5, finish_time=datetime.now(),
|
||||
@@ -451,7 +455,7 @@ def process_video_check_task(task_id: int) -> bool:
|
||||
|
||||
# 批量处理视频进行黑名单检测
|
||||
results = video_biz.batch_process_videos_with_blacklist_detection(
|
||||
video_paths, frame_skip, "_checked"
|
||||
video_infos, frame_skip, "_checked"
|
||||
)
|
||||
|
||||
# 分析结果
|
||||
@@ -468,7 +472,7 @@ def process_video_check_task(task_id: int) -> bool:
|
||||
"total_detections": total_detections,
|
||||
"video_results": results,
|
||||
"target_video": target_video_path,
|
||||
"checked_videos": len(video_paths)
|
||||
"checked_videos": len(video_infos)
|
||||
},
|
||||
feature_data=feature_bytes
|
||||
)
|
||||
|
||||
@@ -255,19 +255,26 @@ class VideoCheckBiz(BaseFaceBiz):
|
||||
|
||||
return None
|
||||
|
||||
def batch_process_videos_with_blacklist_detection(self, video_paths: List[str], frame_skip: int = 10,
|
||||
def batch_process_videos_with_blacklist_detection(self, video_infos: List[Dict], frame_skip: int = 10,
|
||||
suffix: str = "_processed") -> List[Dict]:
|
||||
"""
|
||||
批量处理视频文件,进行黑名单检测并保存结果
|
||||
|
||||
参数:
|
||||
video_paths: 视频文件路径列表
|
||||
video_infos: 视频信息列表,每个元素包含:
|
||||
{
|
||||
'video_id': 视频ID (可选),
|
||||
'video_name': 视频名称 (可选),
|
||||
'video_path': 视频文件路径 (必需)
|
||||
}
|
||||
frame_skip: 跳帧数,每隔多少帧处理一帧
|
||||
suffix: 输出文件后缀
|
||||
|
||||
返回:
|
||||
处理结果列表,每个元素包含:
|
||||
{
|
||||
'video_id': 视频ID,
|
||||
'video_name': 视频名称,
|
||||
'original_path': 原视频路径,
|
||||
'processed_path': 处理后的视频路径,
|
||||
'has_blacklist_match': 是否检测到黑名单中人脸,
|
||||
@@ -281,15 +288,37 @@ class VideoCheckBiz(BaseFaceBiz):
|
||||
# 确保使用黑名单模式
|
||||
self.set_list_mode("0")
|
||||
|
||||
print(f"🎯 开始批量处理视频: 共{len(video_paths)}个视频")
|
||||
print(f"🎯 开始批量处理视频: 共{len(video_infos)}个视频")
|
||||
print(f"🔍 检测模式: 黑名单模式, 跳帧数: {frame_skip}")
|
||||
|
||||
for i, video_path in enumerate(video_paths, 1):
|
||||
print(f"\n--- 处理第{i}/{len(video_paths)}个视频: {os.path.basename(video_path)} ---")
|
||||
for i, video_info in enumerate(video_infos, 1):
|
||||
video_id = video_info.get('video_id')
|
||||
video_name = video_info.get('video_name')
|
||||
video_path = video_info.get('video_path')
|
||||
|
||||
if not video_path:
|
||||
print(f"❌ 视频信息缺少路径: {video_info}")
|
||||
results.append({
|
||||
'video_id': video_id,
|
||||
'video_name': video_name,
|
||||
'original_path': None,
|
||||
'processed_path': None,
|
||||
'has_blacklist_match': False,
|
||||
'detection_count': 0,
|
||||
'total_frames_processed': 0,
|
||||
'blacklist_matches': [],
|
||||
'error': '缺少视频路径'
|
||||
})
|
||||
continue
|
||||
|
||||
video_info_str = f"(ID: {video_id}, 名称: {video_name})" if video_id else ""
|
||||
print(f"\n--- 处理第{i}/{len(video_infos)}个视频: {os.path.basename(video_path)} {video_info_str} ---")
|
||||
|
||||
if not os.path.exists(video_path):
|
||||
print(f"❌ 视频文件不存在: {video_path}")
|
||||
results.append({
|
||||
'video_id': video_id,
|
||||
'video_name': video_name,
|
||||
'original_path': video_path,
|
||||
'processed_path': None,
|
||||
'has_blacklist_match': False,
|
||||
@@ -304,11 +333,17 @@ class VideoCheckBiz(BaseFaceBiz):
|
||||
result = self._process_single_video_with_detection(video_path, frame_skip, suffix)
|
||||
|
||||
if result and result['processed_path']:
|
||||
# 添加视频ID和名称到结果中
|
||||
result['video_id'] = video_id
|
||||
result['video_name'] = video_name
|
||||
results.append(result)
|
||||
status = "✅ 检测到黑名单" if result['has_blacklist_match'] else "⚠️ 未检测到黑名单"
|
||||
print(f"{status}: {os.path.basename(result['processed_path'])} (匹配次数: {result['detection_count']})")
|
||||
video_info_str = f"(ID: {video_id}, 名称: {video_name})" if video_id else ""
|
||||
print(f"{status}: {os.path.basename(result['processed_path'])} (匹配次数: {result['detection_count']}) {video_info_str}")
|
||||
else:
|
||||
error_result = {
|
||||
'video_id': video_id,
|
||||
'video_name': video_name,
|
||||
'original_path': video_path,
|
||||
'processed_path': None,
|
||||
'has_blacklist_match': False,
|
||||
@@ -318,13 +353,14 @@ class VideoCheckBiz(BaseFaceBiz):
|
||||
'error': '处理失败'
|
||||
}
|
||||
results.append(error_result)
|
||||
print(f"❌ 视频处理失败: {os.path.basename(video_path)}")
|
||||
video_info_str = f"(ID: {video_id}, 名称: {video_name})" if video_id else ""
|
||||
print(f"❌ 视频处理失败: {os.path.basename(video_path)} {video_info_str}")
|
||||
|
||||
# 统计结果
|
||||
success_count = sum(1 for r in results if r.get('processed_path'))
|
||||
blacklist_count = sum(1 for r in results if r.get('has_blacklist_match'))
|
||||
|
||||
print(f"\n🎉 批量处理完成: 成功{success_count}/{len(video_paths)}个视频")
|
||||
print(f"\n🎉 批量处理完成: 成功{success_count}/{len(video_infos)}个视频")
|
||||
print(f"🔍 黑名单检测结果: {blacklist_count}个视频检测到黑名单中人脸")
|
||||
|
||||
return results
|
||||
|
||||
Reference in New Issue
Block a user