使用智能媒体管理(IMM)快速搭建图片分类服务

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个图片分类的功能,示例使用 PHP 语言实现。

概述

在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个图片分类的功能,示例使用 PHP 语言实现。

我们以新闻场景为例。用户上传了若干体育运动相关图片,我们需要按照运动的类别进行分类管理。操作流程如下:

  1. 将图片传入 OSS 存储中。
  2. 创建一个媒体集 Set,用于存储这些图片的 元数据
  3. 将图片索引至 Set 内。
  4. 按照标签进行搜索。

如下图:

ImageClassifyIntro

下面我们分步操作一下。

创建 IMM 项目

开通 IMM 服务后,访问 控制台 ,在左侧点击加号创建一个新项目。

左上方地域我们选择 华东1(杭州),右侧的项目名称命名为 ImageClassifyDemo ,所属地域选择 华东1(杭州) ,类型选择 图片标准型QPS 填入 1 ,点击下一步。

截止本文发表时,图片标准型的 1 QPS 是免费的,可以放心测试。参考 计费说明

ImageClassifyDemo_CreateProject

准备测试图片

我们准备了6张测试图片:

oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-00.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-01.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-02.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-00.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-01.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-02.jpg

您可以将地址改为 http 路径以在浏览器打开查看。如

https://imm-user-wmt-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/image-classify-demo/soccer-02.jpg

您也可以自己准备图片。请将图片上传至 OSS 中,并确保 OSS 的 Bucket 桶和第一步创建的 IMM 项目在同一个地域。

开始使用

下载并安装最新版本 阿里云 PHP SDK

复制如下代码,并填入您的 AccessKeyAccessSecret 。您可以在 阿里云用户控制台 获取。

若您使用和本文不同的项目名称、地域、图片等,请修改示例代码中的对应部分。

<?php
// 将本文件置入 SDK 的同目录下
include_once './aliyun-php-sdk-core/Config.php';
use imm\Request\V20170906 as Imm;

// 填入您的阿里云 AccessKey 和 AccessSecret
const AccessKey = ""; 
const AccessSecret = ""; 
// 填入服务开通地域,这里以杭州区域为例
const Region = "cn-hangzhou";
// 填入创建好的 Project 名称
const Project = "ImageClassifyDemo";
// 填入刚上传好的图片 URL,注意替换为自己的 bucket
const Images = [
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-00.jpg",
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-01.jpg",
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-02.jpg",
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-00.jpg",
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-01.jpg",
    "oss://imm-user-wmt-cn-hangzhou/image-classify-demo/soccer-02.jpg",
];

//初始化客户端
$iClientProfile = DefaultProfile::getProfile(
    Region,
    AccessKey,
    AccessSecret
);
$client = new DefaultAcsClient($iClientProfile);

//创建媒体集 Set
$setId = "image-classify-demo";
$request = new Imm\CreateSetRequest();
$request->setProject(Project);
$request->setSetId($setId);
try {
    $response = $client->getAcsResponse($request);
    print_r("Create set response:\n");
    print_r($response);
} catch (ServerException $e){
    print_r("Create set failed:\n");
    print_r($e);
}


//将图片添加到媒体集
foreach (Images as $OSSURI) {
    //由于我们开通 Project 时选择的是限时免费的 1 CU
    //因此在循环时增加 sleep 来避免超过请求频率限制
    sleep(1);
    $request = new Imm\IndexImageRequest();
    $request->setProject(Project);
    $request->setSetId($setId);
    $request->setImageUri($OSSURI);
    $response = $client->getAcsResponse($request);
    print_r("Index image $OSSURI response:\n" );
    print_r($response);
}

//等待索引完成
sleep(5); 

//统计下媒体集内的标签数量
$request = new Imm\ListSetTagsRequest();
$request->setProject(Project);
$request->setSetId($setId);
$response = $client->getAcsResponse($request);
print_r("List tags in set response:\n" );
print_r($response);

//获取所有标签为 打篮球 的图片
$request = new Imm\FindImagesByTagNamesRequest();
$request->setProject(Project);
$request->setSetId($setId);
$request->setTagNames(json_encode(["打篮球"]));
$response = $client->getAcsResponse($request);
print_r("Images with tag \"打篮球\" response:\n" );
foreach ($response->Images as $image) {
    // 这里仅把搜索到的图片 URI 输出
    print_r($image->ImageUri . "\n");
}
//如果想看到更详细的图片信息,可以直接打印 $response
//print_r($response);

随后运行该文件,即可看到返回结果。

代码解析

该段代码主要分为 4 步操作。

创建媒体集 Set

这一步帮助我们在 IMM 的项目中,新建了一个媒体集 Set 。这个 Set 用于保存我们接下来要索引的图片的 元数据 ,即标签、人脸、OCR 等等信息。

这一步正确的输出如下。我们可以看到成功创建了一个叫做 image-classify-demo 的 Set。

CreateSet API 官方文档

Create set response:
stdClass Object
(
    [RequestId] => 6B49F679-9ABF-460B-93F3-1941CD5E29E3
    [CreateTime] => 2019-01-16T11:09:23.658Z
    [SetName] => 
    [ModifyTime] => 2019-01-16T11:09:23.658Z
    [SetId] => image-classify-demo
)

将图片索引至媒体集 Set

这一步将我们的图片添加至媒体集。

正确输出如下,仅用一张图片的输出示例。

IndexImage API 官方文档

Index image oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-00.jpg response:
stdClass Object
(
    [RequestId] => 79F320DB-1985-45F5-A1F6-FBAB4B1726F2
    [CreateTime] => 2019-01-16T11:09:24.706Z
    [ModifyTime] => 2019-01-16T11:09:24.706Z
    [SetId] => image-classify-demo
    [RemarksA] => 
    [ImageUri] => oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-00.jpg
    [RemarksB] => 
)

至此我们的智能媒体集的元数据已经构建完毕了。后面是如何利用元数据进行查询。

获取媒体集 Set 内的标签列表

这一步可以获取到媒体集 Set 内图片的标签列表,及其计数。

正常返回值如下。我们注意到结果是按标签出现次数降序排序的。出现的最多的标签是“体育运动”,出现了 6 次。

ListSetTags API 官方文档

List tags in set response:
stdClass Object
(
    [Tags] => Array
        (
            [0] => stdClass Object
                (
                    [TagCount] => 6
                    [TagName] => 体育运动
                )
            [1] => stdClass Object
                (
                    [TagCount] => 6
                    [TagName] => 球类
                )
            [2] => stdClass Object
                (
                    [TagCount] => 3
                    [TagName] => 打篮球
                )
            [3] => stdClass Object
                (
                    [TagCount] => 3
                    [TagName] => 踢足球
                )
        )
    [RequestId] => 6D5294A6-2B77-4C86-8857-EAF8EF57D361
    [SetId] => image-classify-demo
)

根据标签筛选图片

最后一步我们筛选所有“打篮球”的图片。

正常返回值如下。正确筛选出了 3 张图片。

FindImagesByTagNames API 官方文档

Images with tag "打篮球" response:
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-02.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-01.jpg
oss://imm-user-wmt-cn-hangzhou/image-classify-demo/basketball-00.jpg

当然 元数据 不止有标签,还有人脸等更多信息。可以取消上述代码最后一行的注释来查看全部结果。

以上就是利用 智能媒体管理(IMM) 快速实现了一个图片分类的 DEMO 。如有任何问题可以联系 服务同学

目录
相关文章
|
人工智能 监控 API
智能媒体管理图片标准型是什么
在控制台 创建项目 中选择 图片标准型,并且创建成功后,您就可以通过 控制台 或者 API 调用图片 AI 相关功能。
565 0
|
存储 JSON 数据挖掘
利用智能媒体管理(IMM) 搭建云相册指南
- 为用户创建智能云相册 - 支持人脸检测,获取包括人脸位置、表情、年龄等信息 - 支持人脸分组,可以根据人物搜索、展示照片 - 支持照片标签检测,可以根据标签对照片进行分类 - 支持地理位置检测,获取照片拍摄的具体位置、时间,并且可以进行搜索
976 0
|
存储 对象存储 计算机视觉
智能媒体管理(IMM)视频分析中明星识别介绍
智能媒体管理已经支持了视频分析功能,用户可以方便的使用该功能对存储在oss上的视频进行全面的分析。本文主要介绍利用智能媒体管理的视频分析功能来提取视频中的明星信息。 智能媒体管理的视频分析包含了明星识别功能,可以帮助用户抽取出视频中出现的明星信息。
2927 0
|
存储 计算机视觉 对象存储
智能媒体管理(IMM)视频分析在在线教育行业中的应用
智能媒体管理已经支持了视频分析功能,用户可以方便的使用该功能对存储在oss上的视频进行全面的分析。本文主要介绍利用智能媒体管理的视频分析功能来评估在线教育视频的质量。 智能媒体管理的视频分析包含了多种分析功能,针对在线教育行业,主要利用了人脸、内容理解以及语音转文字的功能。
1802 0
|
存储 Web App开发 定位技术
智能媒体管理(IMM) 多媒体文件元数据管理设计
## 简介 随着存储团队的产品愈加丰富,我们发现处理对文件、内容本身的高性能、稳定、安全存储之外,用户更多的对挖掘存储内容对价值提出了要求。对于多媒体文件(如图片、视频、音频、文档等),其包含的信息量是非常丰富的。如何将这些信息激活,有效的进行管理和检索,是 智能媒体管理(IMM) 尝试解决的问题。 ## 媒体集 Set 为此,IMM 设计了 媒体集 ( Set ) 的概念,表示
2078 0
|
搜索推荐 API 对象存储
使用智能媒体管理(IMM)快速搭建人脸搜索服务
在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个人脸搜索的功能,示例使用 Python 2.7 实现。
2130 0
|
消息中间件 API Python
IMM 服务(智能媒体管理)通过 MNS 队列通知获取异步任务执行结果--Python示例
IMM服务(智能媒体管理)的 API 提供异步接口能力,处理大文件的文档转码、图像或者视频的 AI 处理,此时采用轮训的方式(比如文档转码的 GetOfficeConversionTask接口)效率不高,通过 MNS 队列通知获取异步任务执行结果是一种高效的方式,转载文章提供了 Python 示例,供大家参考。
1602 0
|
Web App开发 API
智能媒体管理(IMM)文档转换/预览提供 API 按量计费模式
智能媒体管理 (Intelligent Media Management, IMM) 是阿里云的云服务,它通过 文档标准型 实例提供了 Cloud Native 架构的文档转换/预览功能 ,本文介绍 API 按量计费模式的配置。
3100 0
|
开发工具 Python
【转载】智能媒体管理(IMM) Python SDK DEMO
本文针对智能媒体管理的文档转码、图片内容识别、人脸检测、二维码识别、人脸聚类等功能,提供了 Python 的 SDK 使用 DEMO,希望通过这些实例能够尽快帮助使用文档、图片的智能管理能力。
1578 0

相关产品

  • 智能媒体管理