使用 OpenCV 和 Hugging Face 的transformers
库中的预视视觉模型来分析视频内容
依赖库
python
pip install opencv-python transformers torch
代码
python
import cv2
import torch
from transformers import pipeline
# 加载预训练的目标检测模型
detector = pipeline("object-detection", model="facebook/detr-resnet-50")
def analyze_video(video_path):
# 打开视频文件
cap = cv2.VideoCapture(video_path)
frame_count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break # 视频读取完成
# 每隔一定帧数分析一次
if frame_count % 30 == 0: # 每 30 帧分析一次,可以根据需要调整
# 将帧转换为RGB格式
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 使用模型进行目标检测
results = detector(rgb_frame)
# 输出检测结果
print(f"Frame {frame_count}:")
for obj in results:
label = obj['label']
score = obj['score']
box = obj['box']
print(f"Detected: {label}, Confidence: {score:.2f}")
# 在帧上绘制检测结果
x1, y1, x2, y2 = int(box['xmin']), int(box['ymin']), int(box['xmax']), int(box['ymax'])
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, f"{label} ({score:.2f})", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 显示带有检测结果的帧
cv2.imshow("Video Analysis", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
frame_count += 1
# 释放视频捕获对象并关闭窗口
cap.release()
cv2.destroyAllWindows()
# 示例用法
video_path = 'path_to_your_video.mp4' # 替换为实际视频路径
analyze_video(video_path)
- 使用OpenCV逐帧读取视频,把每第30帧作为分析帧。
- 通过拥抱人脸的
detr-resnet-50
模型检测视频帧中的物体,模型会输出每个物体的类别、置信度和位置。 - 将检测结果以校正框和标签形态差在视频帧上,然后查看识别效果。
- 每个分析帧的检测结果都会在控制台输出,同时在窗口中显示。