使用智能媒体管理(IMM)快速搭建人脸搜索服务

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个人脸搜索的功能,示例使用 Python 2.7 实现。

概述

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

我们以学生点名场景为例。首先构造学生照片集合,再对现场拍摄的照片进行检测。操作流程如下:

  1. 将所有学生图片传入 OSS 存储中。
  2. 创建一个媒体集 Set,用于存储这些图片的 元数据,本文将利用其中的 人脸特征 数据。
  3. 将所有学生图片预置至 Set 内。
  4. 传入一张待测图片,查找和该照片匹配的人物。

如下图:

routemap

下面我们分步操作一下。

创建 IMM 项目

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

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

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

RollCallDemo_CreateProject

准备测试图片

我们准备了3张学生图片,用于构建学生集:

oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun.jpg
oss://imm-user-wmt-cn-hangzhou/roll-call-demo/caichongxin.jpg
oss://imm-user-wmt-cn-hangzhou/roll-call-demo/zhangyong.jpg

以及一张待检测图片

oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun-test.jpg

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

https://imm-user-wmt-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/roll-call-demo/mayun.jpg

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

开始使用

安装最新版本 阿里云 Python SDK 。可以使用 pip 进行安装

 # Install the core library
 pip install aliyun-python-sdk-core
 # Install the ECS management library
 pip install aliyun-python-sdk-imm

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

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

import time
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkimm.request.v20170906 import CreateSetRequest
from aliyunsdkimm.request.v20170906 import IndexImageRequest
from aliyunsdkimm.request.v20170906 import FindSimilarFacesRequest

# 请更换为您自己的 AccessKey 和 AccessSecret
AccessKey = ""
AccessSecret = ""

# 服务开通地域
Region = "cn-hangzhou"
# 在 IMM 控制台创建的项目名称
Project = "RollCallDemo"
# 用于存储媒体元信息的 Set 的 ID
SetId = "roll-call-demo"

# 所有学生的照片 OSS URI 和姓名
Students = [
    "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun.jpg",
    "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/caichongxin.jpg",
    "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/zhangyong.jpg",
]

# 待测试的学生照片的 OSS URI
CameraPhoto = "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun-test.jpg"

# 初始化 AcsClient 客户端,用于调用 API 接口
client = AcsClient(
    AccessKey,
    AccessSecret,
    Region
)

# 创建一个媒体集 Set
try:
    request = CreateSetRequest.CreateSetRequest()
    request.set_Project(Project)
    request.set_SetId(SetId)
    response = client.do_action_with_exception(request)
    print response
except ServerException, e:
    print ("ServerException: ", e.message)

# 将学生照片添加至媒体集 Set 中
for URI in Students:
    # 由于创建项目的 QPS 为 1,在循环中加入 sleep 来避免超过限制
    time.sleep(1)
    request = IndexImageRequest.IndexImageRequest()
    request.set_Project(Project)
    request.set_SetId(SetId)
    # 传入图片路径
    request.set_ImageUri(URI)
    response = client.do_action_with_exception(request)
    print response

# 等待一段时间,确保图像元数据处理完成
time.sleep(8)

# 根据传入的照片,在媒体集 Set 中搜索照片中的学生
request = FindSimilarFacesRequest.FindSimilarFacesRequest()
request.set_Project(Project)
request.set_SetId(SetId)
# 指定传入图片路径
request.set_ImageUri(CameraPhoto)
# 我们要寻找相似度最高的图片,故返回值限制为 1 个
request.set_Limit(1)
response = client.do_action_with_exception(request)
faces = json.loads(response, encoding="utf-8")
print faces[u'Faces'][0][u'ImageUri']
print faces[u'Faces'][0][u'Similarity']

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

代码解析

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

创建媒体集 Set

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

# 创建一个媒体集 Set
try:
    request = CreateSetRequest.CreateSetRequest()
    request.set_Project(Project)
    request.set_SetId(SetId)
    response = client.do_action_with_exception(request)
    print response
except ServerException, e:
    print ("ServerException: ", e.message)

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

CreateSet API 官方文档

{
  "CreateTime": "2019-01-18T03:37:16.768Z",
  "RequestId": "8E074565-A896-4CB6-B171-7F87237A687F",
  "SetName": "",
  "ModifyTime": "2019-01-18T03:37:16.768Z",
  "SetId": "roll-call-demo"
}

将图片索引至媒体集 Set

这一步将所有学生的图片添加至媒体集。

# 将学生照片添加至媒体集 Set 中
for URI in Students:
    # 由于创建项目的 QPS 为 1,在循环中加入 sleep 来避免超过限制
    time.sleep(1)
    request = IndexImageRequest.IndexImageRequest()
    request.set_Project(Project)
    request.set_SetId(SetId)
    # 传入图片路径
    request.set_ImageUri(URI)
    response = client.do_action_with_exception(request)
    print response

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

{
  "RequestId": "EC90B8F9-E40B-45BB-B02A-3C22FD116B91",
  "CreateTime": "2019-01-18T03:44:22.672Z",
  "ModifyTime": "2019-01-18T03:44:22.672Z",
  "SetId": "roll-call-demo",
  "RemarksA": "",
  "ImageUri": "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun.jpg",
  "RemarksB": ""
}

至此我们已经准备好学生媒体集。但还需要稍等几秒来确保 AI 相关检测完成。

根据待测图片搜索人物

接下来,我们传入一张待检测图片,看看和集合中的哪个人物相符。

# 待测试的学生照片的 OSS URI
CameraPhoto = "oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun-test.jpg"
# 根据传入的照片,在媒体集 Set 中搜索照片中的学生
request = FindSimilarFacesRequest.FindSimilarFacesRequest()
request.set_Project(Project)
request.set_SetId(SetId)
# 指定传入图片路径
request.set_ImageUri(CameraPhoto)
# 我们要寻找相似度最高的图片,故返回值限制为 1 个
request.set_Limit(1)
response = client.do_action_with_exception(request)
faces = json.loads(response, encoding="utf-8")
print faces[u'Faces'][0][u'ImageUri']
print faces[u'Faces'][0][u'Similarity']

正常返回值如下。成功找到了同一人物,并且我们看到相似度约为 0.96 。通常我们认为相似度超过 0.8 即可基本确认为同一人物。

FindSimilarFaces API 官方文档

oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun.jpg
0.953676342964

以上就是利用 智能媒体管理(IMM) 快速实现了一个人脸搜索的 DEMO 。

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

相关产品

  • 智能媒体管理