图片 1

目前,人脸识别应用叫广大天地,如支付宝的用户征,许多底能识别人心情之
AI,也即是口的面庞表情,还有能分析人之年纪之类,而立即其间有着许多的难度,在这边我思念只要分享的凡一个动七牛
SDK 简单的兑现人脸识别的不二法门,当然七牛的 SDK
中提供了成百上千底进行,在返回的 JSON
中含着若年龄当消息,这里虽无进行分享了。这里我们设动用的凡七牛云平台遭遇出于阅面科技提供的
API。

以下也官方给有之机能:

  • 人脸 1v1 比对
  • 口脸关键点(106 点)
  • 丁脸属性(年龄,性别)

我们只要就此底劳务就是首先单:人脸 1v1 比对

需求分析

假若做安全方面的始末,依靠人脸识别通过与仓库中之面目比对后判定相似率来验证用户位置。

霎时从图片被分辨出人的消息,用于寻人功能等。

骨子里打平安之角度出发来许多可以包括的。比如智能家居中之刷脸开门,支付软件之刷脸支付相当于还是例证。

人脸特征提取的手续

真正的人脸识别需要广大底文化,大体上大概的可以分成以下步骤:

  1.人脸检测(从图中找到人脸):返回人脸位置及尺寸的参数。
  2.人数脸特征定位:一般 69 点或者 106 独点对脸部的特性定位,技术达到生
Adaboost&haar,以及 MSRA 的 alignment。
  3.人数脸特征归一化(几哪归一/灰度归一):前者针对图像进行仿射变化让不同之面目可以开展比对,后者则能而图像展现更多之底细和减弱光线光照的下。
  4.特征提取-特征后期融合。(基于特征近似度的多特点融合)
  5.特征距之间的偏离来比对相似度、三姓距离。(马氏、欧氏 、巴氏)

(以上因以前翻及整治的资料得出,可能会见是认识错误)
得视要直白指向人口脸进行剖析是坏复杂的,而现在为闹多熟之人脸识别库,像是名的
OpenCV ,OpenBR,还有国产的 Seeta Face engine
等等很多,这里就先行不介绍了,而使开源云平台的 API
可以假设我们的工作量愈来愈的粗。

七牛云 API 的优点

用七牛云平台的 API
对于使用者的力量要求较逊色,开发速度迅速,只要输入/返回即可,但进一步适用于移动端。

操作过程中之注意事项

  1. 每张图片要事先上传播 bucket 中才方可用。
  2. API 对人口脸匹配再返很非常程度靠让用户的纱带来富。
  3. 当用户网络不好的状况下需要很悠久之日才能够获取返回结果。
  4. 若果透过压缩处理,一般识别的较为规范最多但是拿图片压缩到 25 kb 左右。

采取七牛 API 的接口准备

俺们要以的起 Qiniu 库的上传/鉴权命令,以及 requests
库得到处理后底图像,以及 json 库得到返回给我们的保留于 JSON 中之音讯。

另外七牛的是接口及图片瘦身接口一样吗是如付钱的,具体的价依据官方给的凡(人脸识别对比服务
->¥1.5/1000次于 )可以预先向账户充入 ¥2 幸免无法使用服务。

缓解问题之手续

以简化这问题,所以按照实例仅凸显 上传->识别 ->返回结果
的经过,对于什么通过电脑照相头取像,窗体制作仅提供方及思路不开展详尽分享。

首先,我们先分析七牛云蒙是 API 的接口 :

http://xxx.xxx.glb.clouddn.com/xxx.jpg?faceanalyze/verification/url/<urlSafeBase64URI><!-- 人脸一对一比对API-->

俺们来分析下之接口:
前面的http://xxx.xxx.glb.clouddn.com/xxx.jpg是我们恰好上传的人像图片的链接地址,?face-analyze/verification/url/<urlSafeBase64URI>
是 API 的接口,其中我们用最终之当即句<urlSafeBase64URI>
单独将出的话,因为此的意是要是将我们用来人像比对的正统人像图片的地点经过
urlbase64 加密后的地址信息。

因此我们只要拓展如下的步骤:

1)得到我们刚经过摄像头拿走的人像
2)对咱们的人像图片展开削减
3)上传我们的人像图片及我们的 bucket 中
(这里而申一点,七牛所有支持的 API 都要求文件于华东的 Bucket 下)
4)得到我们上传的图片的链接地址
5)对链接进行 urlbase64 加密(这里而 import python 的 base64 库即可)
6)请求 API
7)得到网页的 JSON 格式数据
8)通过 JSON 库对数码进行分析
9)判断人脸的相似度是否入,输出结果
10)删除 Bucket 中及传的临时图片

回的 JSON 格式分析

{"status":"ok","confidence":0.73065597}

我们可以看到返回的 JSON 信息非常简短, status 的意是成和无成功,而
confidence 则是相似度,所以我们针对回到的信进行分析会非常粗略。 status
如若成功则也 ok,不成功则为 invalid。

口形容似度的判定

图片 2

及表中所用的图片都来好互联网,从表数据我们可以大体将自身的貌似度因为 0.7
为分界线。不过有趣的凡,不明了为什么以杨幂进行整容的怎么相似度竟然低于杨幂以及范冰冰的相似度(其他女性星照的图也范冰冰的人像),不同性别的相似度差异显著,所以即便简单的基于表格定为
>0.7 即可认为是自。

装所需要的仓库

于 python 中,我享受的此事例总共用引入 6 个仓库

#import SDK
from qiniu import Auth,put_file,etag
import qiniu.config
import requestsimport base64
import json
from PIL import Image
import os

 

requests 库,json 库,PIL 库请自行安装;
base64 库和 OS 库为自带所以不要安装。

(由于计算机就装了比较多库,所以对于这些库是否为自带也记得不极端理解,如果起了不当,请大家对应自己安装。)

程序的兑现

央见下方的代码,采集到的口脸呢 face.jpg。
(这里用了杨幂的点滴张图作为示范)

#七牛云"人脸识别"功能的python实现方法:by xlxw
#请得到自己的Secret和Access key用于上传图片到空间中进行处理
#人像识别是七牛云的一项收费项目,价格为 ¥1.5/1000次 测试时请先存2元避免意外

#import SDK
from qiniu import Auth,put_file,etag
import qiniu.config
import requests
import base64
import json
from PIL import Image
import os

#上传
def upload(bucket,path,filename,key,url):
    token = key.upload_token(bucket, filename, 3600)
    print('正在上传..')
    reform,inform = put_file(token, filename, path)
    if reform != None:
        print('已经成功地将{}->>{}'.format(filename,bucket))
        print("正在处理您的图片...")
        url=url + '/' + filename
        path=path.split('/')[-1]
    else:
        print('这里出现了一个小错误.无法上传..')

#调用API
def apiget(urlbucket,url):
    try:
        url=urlbucket + '/001.jpg' + '?face-analyze/verification/url/' + url
        #标准对比的图片地址,名称为001.jpg
        r=requests.get(url)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        print("网络发生故障,请重试..")

#base64 Encode
def base64encode(url):
    try:
        print("正在加密链接..")
        enurl=base64.urlsafe_b64encode(bytes(url, "utf-8"))
        print("加密完成")
        enurl=str(enurl)
        enurl=enurl.split("'")[1]
        return enurl
    except:
        print("这里出现了一个问题,请重试..")

#PIL 图片压缩
def pilresize(per,path):
    im=Image.open(path)
    imsize=im.size
    sizex=int(imsize[0]*per)
    sizey=int(imsize[1]*per)
    im=im.resize((sizex,sizey))
    im.save('trans.jpg','JPEG')
    print('图片压缩完成,输出成功')
    print('{}->>({},{})'.format(imsize,sizex,sizey))

def pilwork(path):
    try:
        size=os.path.getsize(path)
        size = float(size)
        kb=size/1024
        per=10/kb
        pilresize(per,path)
    except:
        print("请检查您的地址是否输入错误")


#JSON分析
def jsonanal(jtext):
    print("正在分析,请稍后..")
    rj=json.loads(jtext)
    stat=rj['status']
    confi=rj['confidence']
    return stat + ',' +str(confi)

#主体
def main():
    #填写你的 AK 和 SK
    accesskey = input('请输入您在七牛云的AccessKey:')
    secretkey = input('请输入您在七牛云的SecretKey:')

    #鉴定身份
    keyq=Auth(accesskey,secretkey)

    #所要操作的空间
    bucketname =input("请输入要操作的空间(公开)名字:")

    #所要操作空间的外链地址
    urlbucket = input("请输入空间所绑定的域名或者默认外链地址:")

    #判定操作类型
    while 1:
        order=input('请输入你需要进行的操作:')
        mode=order.split(' ')[0]
        if mode == '识别':
            path=order.split(' ')[1]
            fname=path.split('/')[-1:][0]
            unrl=urlbucket+'/trans.jpg'
            print('正在压缩图片.请稍后..')
            #调用函数
            pilwork(path)  #压缩图片
            print("正在上传token,请稍后..")
            upload(bucketname,'./trans.jpg','trans.jpg',keyq,urlbucket) #上传文件
            enurl=base64encode(unrl)   #base64加密
            jtext=apiget(urlbucket,enurl) #调用七牛api并得到返回的json数据
            result=jsonanal(jtext)  #分析返回的json,得到最终相似度
            if result.split(',')[0] == 'invalid':
                print('识别发生了错误')
            else:
                if eval(result.split(',')[1]) >= 0.7:
                    print("识别成功,鉴定为本人,相似度为{:.1f}".format(eval(result.split(',')[1])*100))
                else:
                    print("识别成功,鉴定不是本人,相似度过低")
        if mode == '退出':
            print("欢迎您的使用..")
            break

#终端提示显示
print("+----------------------------------------+")
print("|        欢迎使用七牛的人脸识别功能      |")
print("+----------------------------------------+")
print("|本程序须知:                            |")
print("|1.本程序测试图片为杨幂的人像,见face.jpg |")
print("|2.您需要提供服务的Accesskey,Secretkey  |")
print("|3.您需要提供 bucket名字和bucket外链地址 |")
print("+----------------------------------------+")
print("|使用方法:                               |")
print("|1.识别输入格式: 识别 图片位置(包括后缀)|")
print("|2.退出输入格式: 退出                   |")
print("+----------------------------------------+")
main()

 

 

程序运行的截图:

图片 3

从而到的杨幂的有数布置像吧:
(均来自百度图片)

图片 4

(用于比对的正式人像图片)
(已用 PIL 压缩 x0.3,y0.3)

图片 5

(用于比对的图纸)

总结和进行

总结

暨大家分享七牛的 API 差不多了了(说不定以后产生还有意思的 API
也会见拿来分享经验)。七牛还发出很多优良方便之 API
可以便宜我们的使用.在及时之间为修到了累累底知识,比如许多库的熟悉掌握,像是
requests 库、bs4 库、 json 库当然还有主角 Qiniu 库。

拓展

可以用 python 的 QT 库开发图形界面,而 VideoCapture
库可用来调用电脑的摄像头进行拍照,然后经过本文的不二法门就可知实现简单的人像识别了(你需要达成污染标准图片及
Qiniu 的 bucket 里)。

然而另外又加入一些标准图片,如低光,不戴眼镜等等的图形,然后设计一个考评算法来适应各种各样的情况.本文就不再进行拓展,有趣味之朋友可以试。


推荐阅读

  • 下手实操:如何用 6
    小时写个上传七牛云的桌面客户端
  • 动手实操:如何用七牛云 API
    实现照片地图
  • 初稿地址:Python在七牛云平台的以(三)简单的人脸识别

图片 6

报名办法:有重多有意思之创作分享给大家?扫描上方二维码和嫦娥队长接头,即可成为【动手实操】系列玩家。

 

相关文章

网站地图xml地图