IPC事件搜索最佳实践

更新时间:
复制为 MD 格式

IPC事件搜索是基于内容理解的媒体检索功能(如对象、场景、文字、图标等)。本文档指导开发者通过API实现IPC事件搜索。

前提条件

  1. 请确保已通过CreateIpcOrder - 创建IPC订单下单购买。

  2. 请确保已完成环境搭建,详情可参考OpenAPI门户工具

创建搜索库

使用CreateSearchLib - 创建搜索库创建搜索库。示例如下:

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
import json

from typing import List

from alibabacloud_ice20201109.client import Client as ICE20201109Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ice20201109 import models as ice20201109_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ICE20201109Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = f'ice.cn-shenzhen.aliyuncs.com'
        return ICE20201109Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_search_lib_request = ice20201109_models.CreateSearchLibRequest(
            search_lib_name='IPCamera_test1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = client.create_search_lib_with_options(create_search_lib_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_search_lib_request = ice20201109_models.CreateSearchLibRequest(
            search_lib_name='IPCamera_test1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = await client.create_search_lib_with_options_async(create_search_lib_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

请求参数:

参数名称

类型

必填

描述

示例值

SearchLibName

string

搜索库名称。数据字母组合。IPC 场景前缀必须为IPCamera_

IPCamera_test1

返回参数:

参数名称

类型

描述

示例值

RequestId

string

请求ID。

******3B-0E1A-586A-

AC29-742247******

Success

string

是否调用成功,取值:

  • true:调用成功。

  • false:调用失败。

true

Code

string

返回码。

200

SearchLibName

string

搜索库名称。

IPCamera_test1

返回示例:

{
  "RequestId": "******3B-0E1A-586A-AC29-742247******",
  "Success": true,
  "Code": 200,
  "SearchLibName": "IPCamera_test1"
}

创建搜索索引

使用CreateSearchIndex - 创建搜索索引创建索引。示例如下:

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
import json

from typing import List

from alibabacloud_ice20201109.client import Client as ICE20201109Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ice20201109 import models as ice20201109_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ICE20201109Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = f'ice.cn-shenzhen.aliyuncs.com'
        return ICE20201109Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_search_index_request = ice20201109_models.CreateSearchIndexRequest(
            search_lib_name='IPCamera_test1',
            index_type='mm',
            index_config='{"level":"S.large"}'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = client.create_search_index_with_options(create_search_index_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_search_index_request = ice20201109_models.CreateSearchIndexRequest(
            search_lib_name='IPCamera_test1',
            index_type='mm',
            index_config='{"level":"S.large"}'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = await client.create_search_index_with_options_async(create_search_index_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

请求参数:

参数名称

类型

必填

描述

示例值

SearchLibName

string

搜索库名称。

  • 未填写搜索库名称时,默认情况下搜索索引会被创建在 IMS的默认搜索库下。默认值ims-default-search-lib

  • 您还可以通过QuerySearchLib - 查询搜索库查询已有的搜索库信息。

IPCamera_test1

IndexType

string

索引类别。取值:

  • mm:大模型视觉状态。可识别视频中的复杂特征与动作,支持特定动作、运动及事件的检测与搜索,例如足球射门、篮球运动员受伤等场景。

mm

IndexStatus

string

索引状态,取值:

  • Active(默认):激活。

  • Deactive:失效。

Active

IndexConfig

string

索引配置,为JSON格式。详情参见下表。

{"level":"S.large"}

IndexConfig参数:

参数名称

类型

描述

示例值

level

string

索引规格,取值:

  • Shared(默认):共享型,支持100万人脸或 1000小时视频大模型分析。

  • S.large:独享型,支持100万人脸或1万小时视频大模型分析。

  • S.2xlarge:独享型,支持

    200万人脸或2万小时视频大模型分析。

  • S.4xlarge:独享型,支持

    400万人脸或4万小时视频大模型分析。

  • S.8xlarge:独享型,支持

    800万人脸或8万小时视频大模型分析。

  • S.16xlarge:独享型,支持

    1600万人脸或16万小时视频大模型分析。

Shared

返回参数:

参数名称

类型

描述

示例值

RequestId

string

请求ID。

*****ACB-44F2-5F2D-

88D7-1283E70*****

Success

string

是否调用成功,取值:

  • true:调用成功。

  • false:调用失败。

true

Code

string

返回码。

200

返回示例:

{
  "RequestId": "*****ACB-44F2-5F2D-88D7-1283E70*****",
  "Success": true,
  "Code": 200
}

插入媒资到搜索库

使用InsertMediaToSearchLib - 插入媒资到搜索库插入媒资。示例如下:

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
import json

from typing import List

from alibabacloud_ice20201109.client import Client as ICE20201109Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ice20201109 import models as ice20201109_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ICE20201109Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = f'ice.cn-shenzhen.aliyuncs.com'
        return ICE20201109Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        insert_media_to_search_lib_request = ice20201109_models.InsertMediaToSearchLibRequest(
            search_lib_name='IPCamera_test1',
            media_type='video',
            input='oss://[example-bucket-]/[object_path-]',
            msg_body='{"title":"简短描述","visionDescription":"详细视觉描述"}',
            images_input='{"images":["oss://[example-bucket-]/[object_path-]xxx1.jpg","oss://[example-bucket-]/[object_path-]xxx2.jpg","oss://[example-bucket-]/[object_path-]xxx3.jpg","oss://[example-bucket-]/[object_path-]xxx4.jpg"]}',
            namespace='name-1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = client.insert_media_to_search_lib_with_options(insert_media_to_search_lib_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        insert_media_to_search_lib_request = ice20201109_models.InsertMediaToSearchLibRequest(
            search_lib_name='IPCamera_test1',
            media_type='video',
            input='oss://[example-bucket-]/[object_path-]',
            msg_body='{"title":"简短描述","visionDescription":"详细视觉描述"}',
            images_input='{"images":["oss://[example-bucket-]/[object_path-]xxx1.jpg","oss://[example-bucket-]/[object_path-]xxx2.jpg","oss://[example-bucket-]/[object_path-]xxx3.jpg","oss://[example-bucket-]/[object_path-]xxx4.jpg"]}',
            namespace='name-1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = await client.insert_media_to_search_lib_with_options_async(insert_media_to_search_lib_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

请求参数:

参数名称

类型

必填

描述

示例值

SearchLibName

string

搜索库名称。需确保已使用CreateSearchLib - 创建搜索库建立搜索库。

IPCamera_test1

MediaId

string

媒资ID。不填入则自动生成。

411bed50018971edb60b0764a0ec6***

MediaType

string

媒资类型,取值:

  • video:视频。

video

Input

string

要入库的视频文件的地址。可选:

  • OSS地址(

    推荐):例如oss://[example-bucket-]/[object_path-]

  • HTTP地址:公网可下载的地址,例如http://example-test-****.mp4。

说明

请确认您的文件名正确且所在Bucket 与接口调用地域一致,以保证源文件可被正常访问。

oss://[example-bucket-]/[object_path-]

MsgBody

string

媒资信息。视频内容理解的简短描述。

{"title":"简短描述","visionDescription":"详细视觉描述"}

ImagesInput

string

视频文件的抽帧图片集信息。仅支持IPCamera场景,MediaType需为video。

{

"images": ["oss://[exampl-bucket-]/[object_path-]xxx1.jpg","oss://[example-bucket-]/[object_path-]xxx2.jpg","oss://[example-bucket-]/[object_path-]xxx3.jpg","oss://[example-bucket-]/[object_path-]xxx4.jpg"]

}

Namespace

string

命名空间。

name-1

返回参数:

参数名称

类型

描述

示例值

RequestId

string

请求ID。

*****ACB-44F2-5F2D-88D7-1283E70*****

MediaId

string

媒资ID。

****20b48fb04483915d4f2cd8ac****

Success

string

是否调用成功。取值:

  • true: 成功。

  • false:失败。

true

Code

string

返回码。

200

返回示例:

{
  "RequestId": "*****ACB-44F2-5F2D-88D7-1283E70*****",
  "MediaId": "****20b48fb04483915d4f2cd8ac****",
  "Success": true,
  "Code": 200
}

事件检索

使用SearchMediaByHybrid - 混合搜索进行检索。示例如下:

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
import json

from typing import List

from alibabacloud_ice20201109.client import Client as ICE20201109Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ice20201109 import models as ice20201109_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ICE20201109Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = f'ice.cn-shenzhen.aliyuncs.com'
        return ICE20201109Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        search_media_by_hybrid_request = ice20201109_models.SearchMediaByHybridRequest(
            search_lib_name='IPCamera_test1',
            media_type='video',
            text='两只熊猫在打架',
            namespace='name-1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = client.search_media_by_hybrid_with_options(search_media_by_hybrid_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        search_media_by_hybrid_request = ice20201109_models.SearchMediaByHybridRequest(
            search_lib_name='IPCamera_test1',
            media_type='video',
            text='两只熊猫在打架',
            namespace='name-1'
        )
        runtime = util_models.RuntimeOptions()
        try:
            resp = await client.search_media_by_hybrid_with_options_async(search_media_by_hybrid_request, runtime)
            print(json.dumps(resp, default=str, indent=2))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

请求参数:

参数名称

类型

必填

描述

示例值

SearchLibName

string

搜索库。

IPCamera_test1

MediaType

string

媒资类型。取值:

  • video:视频。

video

PageNo

integer

当前页码,默认值为1。

1

PageSize

integer

每页返回的数据条数。默认值为10,最大值为 50。

10

Text

string

搜索内容。

两只熊猫在打

MediaId

string

媒资 ID。携带时返回媒资命中详细信息。

****c469e944b5a856828dc2****

Namespace

string

命名空间。

name-1

返回参数:

参数名称

类型

描述

示例值

RequestId

string

请求ID。

****63E8B7C7-4812-46AD-0FA56029AC86****

Success

string

操作是否成功,取值:

  • true:成功。

  • false:失败。

true

Code

string

返回码。

200

MediaList

array<object>

符合要求的媒资集合。

MediaList

object

媒资信息详情。

MediaList.MediaId

string

媒资ID。

a18936e0e28771edb5

9ae6f6f47a****

MediaList.ClipInfo

array<object>

片段信息。

MediaList.ClipInfo

object

MediaList.ClipInfo.From

double

片段起始时间

2

MediaList.ClipInfo.To

double

片段结束时间

4

MediaList.ClipInfo.Score

double

打分

0.99

Total

long

满足搜索条件的媒资信息总条数。

20

返回示例:

{
  "RequestId": "****63E8B7C7-4812-46AD-0FA56029AC86****",
  "Success": true,
  "Code": 200,
  "MediaList": [
    {
      "MediaId": "a18936e0e28771edb59ae6f6f47a****",
      "ClipInfo": [
        {
          "From": 2,
          "To": 4,
          "Score": 0.99
        }
      ]
    }
  ],
  "Total": 20
}

事件检索最佳实践

建议使用完整自然语言描述(含1-2个关键词),避免过多关键词导致部分匹配或语句过于简短模糊。

类别

推荐

不推荐

分析

人物形象描述

儿童在公园游玩

穿着红色衣服背着书包的儿童在公园游玩。

红色衣服、书包、儿童、公园关键词过多。

农民在田间劳动

-

-

动作描述

足球运动员受伤

羽毛球挑边

挑边专业术语难理解

篮球运动员投篮

-

-

马龙发球

-

-

物体、风景、场景描述

埃尔菲铁塔

幸福幼儿园

特定小地标难理解

镜头描述

舞台远景画面

-

-

黄山航拍

-

-

主持人近景画面

-

-

情感生活描述

-

人与人相处要有边界感

抽象类难理解

艺术诗词描述

-

春风化雨育桃李

抽象类难理解