使用智能媒体管理(IMM)快速搭建人脸搜索服务
概述
在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个人脸搜索的功能,示例使用 Python 2.7 实现。
我们以学生点名场景为例。首先构造学生照片集合,再对现场拍摄的照片进行检测。操作流程如下:
- 将所有学生图片传入 OSS 存储中。
- 创建一个媒体集 Set,用于存储这些图片的 元数据,本文将利用其中的 人脸特征 数据。
- 将所有学生图片预置至 Set 内。
- 传入一张待测图片,查找和该照片匹配的人物。
如下图:
下面我们分步操作一下。
创建 IMM 项目
开通 IMM 服务后,访问 控制台 ,在左侧点击加号创建一个新项目。
左上方地域我们选择 华东1(杭州),右侧的项目名称命名为 RollCallDemo ,所属地域选择 华东1(杭州) ,类型选择 图片标准型 ,QPS 填入 1 ,点击下一步。
截止本文发表时,图片标准型的 1 QPS 是免费的,可以放心测试。参考 计费说明
准备测试图片
我们准备了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
随后复制如下代码,并填入您的 AccessKey
和 AccessSecret
。您可以在 阿里云用户控制台 获取。
若您使用和本文不同的项目名称、地域、图片等,请修改示例代码中的对应部分。
# -*- 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。
{ "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
即可基本确认为同一人物。
oss://imm-user-wmt-cn-hangzhou/roll-call-demo/mayun.jpg 0.953676342964
以上就是利用 智能媒体管理(IMM) 快速实现了一个人脸搜索的 DEMO 。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
NLP度量指标BELU真的完美么?
刚接触自然语言处理的朋友通常会问我:当系统的输出是文本,而非对输入文本进行某种分类,如何对该系统进行评估。当模型的输入是文本信息,输出也是文本信息时,我们称之为序列到序列问题,也可称为字符串转换问题。 序列到序列建模是解决NLP中较难任务的核心,它包括:1、 自动文摘(Text Summarization);2、 文本简化(Text simplification);3、 问答(Question answering);4、 聊天机器人(Chatbots);5、 机器翻译(Machine translation); 理解序列到序列建模问题相对容易,如何对其进行评价才是难点。 对于刚入门NLP的人来说,选取衡量标准较为困难。目前最流行的评价指标之一BLEU虽然常用,但也存在较大的缺陷。 本文将介绍BELU的工作原理
- 下一篇
1月22日云栖精选夜读 | 阿里云智能总裁张建锋:云更应该是CEO关心的问题
新零售得到全社会共鸣,商业创新的本质来自技术变革,云不仅是技术问题,更多是一个商业问题,不仅是CIO应该关心,更应该是CEO关心的问题。 热点热议 阿里云智能总裁张建锋:云更应该是CEO关心的问题 作者:技术小能手 我在达摩院,破了第一个案件 作者:技术小能手发表在:阿里技术 智库大会 | 高红冰:拥抱智能时代的新市场经济 作者:技术小能手发表在:阿里研究院 知识整理 Apache Module加载问题解决方案 作者:北阙青云 使用pm2管理系统进程 作者:隔壁卖瓜王 报表中如何控制附件的上传和下载权限 作者:ibelieve001 一文读懂SSL证书以及https对于网站安全的重要性 作者:阿莲168 利用ScriptEngineManager实现字符串公式灵活计算 作者:动力节点 美文回顾 使用nrm快捷切换npm默认仓库 作者:隔壁卖瓜王 DNS解析导致java api获取本机IP超时 作者:晴天哥 使用nvm安装并管理node.js 作者:隔壁卖瓜王 Java总结 - clone总结 作者:期待l Quick BI 的模型设计与生成SQL原理剖析 作者:涂涂的画笔发表在:数据中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果