视频检索结果增加视频名称

This commit is contained in:
zqc
2025-12-21 16:34:20 +08:00
parent 4a7cfc8ccf
commit ab6bb688a1
2 changed files with 54 additions and 14 deletions

View File

@@ -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
)

View File

@@ -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