在前一篇博客中,我们提到了
使用鲸探API对
阿里云
飞天的
图片进行
人脸识别,并且用面部特征相似度作为筛选
条件。由于该
方法效果不是很好,
今天我们将尝试另一条更优雅的路径:直接使用AI库进行人脸
检测并进行比对。
我们首先要从阿里云飞天中爬取图片
地址,这是因为所有图片都是公开的,并且有固定的命名规则。假设我们的代码能够
成功地把这些图片都
下载下来,我们
可以直接用
深度学习库来进行人脸检测然后比较特征。
但是,这个
问题的难点在于每张图片可能都不止一张人脸,所以我们
需要对每张图进行多次检测,每次只检测
一个人脸。在阿里云飞天中,一个人可能出
现在很多张
照片上,我们需要将这些照片都找出来并且相似度高于阈值的才算是同一个人。
最后,将所有同一个人的照片都下载下来,并
保存成指定的
格式即可。下面我们来看看完整的代码:
```
python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
import json
from PIL import Image
from aip import AipFace
# 阿里云AI APPID、APIKEY、SECRETKEY
APP_ID = ''你的APP_ID''
API_KEY = ''你的API_KEY''
SECRET_KEY = ''你的SECRET_KEY''
class
Aliyun_AIP:
def __init__(self):
self.client = AipFace(APP_ID, API_KEY)
def faceDetect(self, image):
# 人脸检测
result = self.client.faceDetection(image)
return result
def compareFaces(self, group1, group2):
# 比较两组人脸特征
faceset_group1 = {''usergroup_id'': ''your_face_set_1'', ''faceset_group_id'': group1}
faceset_group2 = {''usergroup_id'': ''your_face_set_2'', ''faceset_group_id'': group2}
result = self.client.compareFaces(faceset_group1, faceset_group2)
return result
if __name__ == ''__main__'':
aliAI = Aliyun_AIP()
# 从阿里云飞天爬取人脸图片
headers = {
''User-Agent'': ''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.3''
}
url1 = "https://www.aliyun.com/video/flyover/cloud"
url2 = "https://www.aliyun.com/video/flyover"
for url in [url1, url2]:
time.sleep(5)
req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.text, ''lxml'')
images = soup.select(''#flyover > script:nth-child(4)'')
if not images:
continue
js_data = json.loads(images[0].text)
img_url = "https://flyover.aliyun.com" + js_data[''images''][0]
# 下载图片
image_response = requests.get(img_url)
pil_image = Image.open(BytesIO(image_response.
content))
# 人脸检测并保存成jpg图片
face_result = aliAI.faceDetect(image_response.content)
if len(face_result[''result'']) > 0:
img = Image.fromarray(face_result[''result''][0][''image_data''])
img.save(''temp.jpg'')
# 同一个人脸比较
group1, group2 = ''your_face_set_1'', ''your_face_set_2''
compare_result = aliAI.compareFaces(group1, group2)
if compare_result[''result''] == 90:
print("该图片是同
一人")
```
**注意
事项**
在使用此代码前,请在阿里云控制台中新建一个人脸识别集和两组人脸特征,并且填入对应的APPID、APIKEY、SECRETKEY。
同时,需要在阿里云控制台
开启相应的API
能力。
本代码主要用于抓取阿里云飞天中公开图片并进行人脸识别和比对,并不是用于
商业用途,若有此类
需求,请联系阿里云
官方。
**使用说明**
1. 在阿里云控制台中新建一个人脸识别集和两组人脸特征,分别作为face_set_1、face_set_2。
2. 在阿里云控制台开启相应的API能力。
3. 填入对应的APPID、APIKEY、SECRETKEY。
4. 运行代码抓取图片并进行人脸识别和比对。
**注意**
本代码仅供学习参考,若有任何商业用途,请联系阿里云官方。