You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Azure ML中实现视频目标检测?含代码运行问题求指导

在Azure ML Studio实现视频目标检测的解决方案

一、创建视频数据资产并获取数据

  • 上传视频到数据资产
    登录Azure ML Studio,进入「数据」页面,点击「创建」选择「数据资产」,选择「本地文件」上传目标视频(如sample_video_1.avi),设置名称、类型为「文件」后完成创建。
  • 在Notebook中访问数据资产
    先加载工作区并下载数据:
    from azure.ai.ml import MLClient
    from azure.identity import DefaultAzureCredential
    import os
    
    # 替换为你的订阅、资源组和工作区信息
    ml_client = MLClient(DefaultAzureCredential(), subscription_id="你的订阅ID", resource_group_name="资源组名", workspace_name="工作区名")
    
    # 获取数据资产并下载到本地
    data_asset = ml_client.data.get("你的数据资产名称", version="版本号")
    download_path = "./data"
    os.makedirs(download_path, exist_ok=True)
    ml_client.data.download(name=data_asset.name, version=data_asset.version, download_path=download_path)
    
    # 视频文件路径
    video_file = os.path.join(download_path, "sample_video_1.avi")
    

二、修正Blob检测代码适配Azure ML环境

原代码无法运行核心原因是Azure ML计算实例无图形界面,cv2.imshow无法生效,同时需处理OpenCV版本兼容问题,以下是可运行的修正代码:

1. 安装依赖

在Notebook单元格中执行:

!pip install opencv-python numpy matplotlib

2. 修正后的代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
import os

# 配置Blob检测器参数
params = cv2.SimpleBlobDetector_Params()
params.minThreshold = 10
params.maxThreshold = 200
params.filterByArea = True
params.minArea = 1500
params.filterByCircularity = True
params.minCircularity = 0.1
params.filterByConvexity = True
params.minConvexity = 0.87
params.filterByInertia = True
params.minInertiaRatio = 0.01

# 兼容不同OpenCV版本的检测器创建
try:
    detector = cv2.SimpleBlobDetector_create(params)
except AttributeError:
    detector = cv2.xfeatures2d.SimpleBlobDetector_create(params)

# 视频文件路径(从数据资产下载后的路径)
video_file = "./data/sample_video_1.avi"
cap = cv2.VideoCapture(video_file)

# 创建结果保存目录
output_dir = "./blob_detection_results"
os.makedirs(output_dir, exist_ok=True)

frame_count = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break  # 视频读取完毕
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    keypoints = detector.detect(gray)
    im_with_keypoints = cv2.drawKeypoints(gray, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

    # 保存检测后的帧到本地
    frame_output_path = os.path.join(output_dir, f"frame_{frame_count:04d}.jpg")
    cv2.imwrite(frame_output_path, im_with_keypoints)

    # (可选)调试时用matplotlib显示单帧
    # plt.figure(figsize=(10, 6))
    # plt.imshow(cv2.cvtColor(im_with_keypoints, cv2.COLOR_BGR2RGB))
    # plt.title(f"Blob Detection - Frame {frame_count}")
    # plt.axis('off')
    # plt.show()

    frame_count += 1

cap.release()
print(f"检测完成,共处理{frame_count}帧,结果保存至{output_dir}")

三、常见问题排查

  • 视频读取失败:检查文件路径是否正确,或直接使用视频的SAS URL作为VideoCapture参数(无需下载):
    video_sas_url = "你的视频SAS链接"
    cap = cv2.VideoCapture(video_sas_url)
    
  • 检测器创建失败:尝试安装指定兼容版本的OpenCV:!pip install opencv-python==4.5.5.62
  • 大视频处理卡顿:切换至更高配置的计算实例(如Standard_DS3_v2及以上)

内容的提问来源于stack exchange,提问作者sumit Sp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:30:43