IPC事件搜索是基于内容理解的媒体检索功能(如对象、场景、文字、图标等)。本文档指导开发者通过API实现IPC事件搜索。
前提条件
请确保已通过CreateIpcOrder - 创建IPC订单下单购买。
请确保已完成环境搭建,详情可参考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_test1 |
返回参数:
参数名称 | 类型 | 描述 | 示例值 |
RequestId | string | 请求ID。 | ******3B-0E1A-586A- AC29-742247****** |
Success | string | 是否调用成功,取值:
| 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 | 否 | 搜索库名称。
| IPCamera_test1 |
IndexType | string | 是 | 索引类别。取值:
| mm |
IndexStatus | string | 否 | 索引状态,取值:
| Active |
IndexConfig | string | 否 | 索引配置,为JSON格式。详情参见下表。 | {"level":"S.large"} |
IndexConfig参数:
参数名称 | 类型 | 描述 | 示例值 |
level | string | 索引规格,取值:
| Shared |
返回参数:
参数名称 | 类型 | 描述 | 示例值 |
RequestId | string | 请求ID。 | *****ACB-44F2-5F2D- 88D7-1283E70***** |
Success | string | 是否调用成功,取值:
| 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 |
Input | string | 是 | 要入库的视频文件的地址。可选:
说明 请确认您的文件名正确且所在Bucket 与接口调用地域一致,以保证源文件可被正常访问。 |
|
MsgBody | string | 否 | 媒资信息。视频内容理解的简短描述。 | {"title":"简短描述","visionDescription":"详细视觉描述"} |
ImagesInput | string | 否 | 视频文件的抽帧图片集信息。仅支持 | { "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 |
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 |
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 |
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个关键词),避免过多关键词导致部分匹配或语句过于简短模糊。
类别 | 推荐 | 不推荐 | 分析 |
人物形象描述 | 儿童在公园游玩 | 穿着红色衣服背着书包的儿童在公园游玩。 | 红色衣服、书包、儿童、公园关键词过多。 |
农民在田间劳动 | - | - | |
动作描述 | 足球运动员受伤 | 羽毛球挑边 | 挑边专业术语难理解 |
篮球运动员投篮 | - | - | |
马龙发球 | - | - | |
物体、风景、场景描述 | 埃尔菲铁塔 | 幸福幼儿园 | 特定小地标难理解 |
镜头描述 | 舞台远景画面 | - | - |
黄山航拍 | - | - | |
主持人近景画面 | - | - | |
情感生活描述 | - | 人与人相处要有边界感 | 抽象类难理解 |
艺术诗词描述 | - | 春风化雨育桃李 | 抽象类难理解 |