Python+阿里云人脸信息脱敏 实现大量照片批量给人脸打马赛克并保存至本地
- 前言
- 1、软件包下载
- 1.1 单解释器,系统Python环境下载软件包
- 1.2 多解释器,PyCharm给指定解释器安装软件包
- 2、调用人脸脱敏API批量处理图片并将结果下载到本地代码
前言
1、通过阿里云提供的人脸人体-人脸信息脱敏功能实现了对目录中大量照片自动人脸打码并下载保存到指定目录。
2、若import不全请自行添加所需要的库。
3、本代码仅适合代码与需要处理的图片在本地的情况。
4、阿里云人脸打码接口只支持图片小于3m并且尺寸小于5000*5000的图片输入,如果需要处理大图,可以参考我的另一篇配套文章 基于Python的图片批量切割与合并(保持原像素不变,不会出现像素大小不匹配、填充黑边的问题)
本文提供的代码可直接复制,方法已经封装好了。
代码中需要自己填写四个地方:阿里云key、阿里云密钥、读取图片的文件夹路径、保存处理后的文件夹路径。
1、软件包下载
1.1 单解释器,系统Python环境下载软件包
#终端
pip3 install alibabacloud_facebody20191230
1.2 多解释器,PyCharm给指定解释器安装软件包
在首选项中找到Python解释器设置:
点击解释器下的加号,搜索alibabacloud-facebody,根据人脸脱敏相关文档,选择20191230版本。
2、调用人脸脱敏API批量处理图片并将结果下载到本地代码
import os
import time
import requests
from alibabacloud_facebody20191230.models import BlurFaceRequest, BlurFaceAdvanceRequest
from alibabacloud_facebody20191230.client import Client
from alibabacloud_tea_openapi.models import Config
from alibabacloud_oss_util.models import RuntimeOptions
config = Config(
# 2、"YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
# 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
# 您的 AccessKey ID
access_key_id='你的key',
# 您的 AccessKey Secret
access_key_secret='你的key对应的密钥',
# 3、访问的域名。注意:这个地方需要求改为相应类目的域名,当前对应类目:人脸人体
#参考:https://help.aliyun.com/document_detail/143103.html
endpoint='facebody.cn-shanghai.aliyuncs.com',
# 访问的域名对应的region,无需修改
region_id='cn-shanghai'
)
# 加载本机图片列表
def round_read_file(file_path):
image_name_list = []
for file_name in os.listdir(file_path):
# 排除MacOS目录自动生成的.DS_Store文件
if file_name != '.DS_Store':
print("加载图片:"+str(file_path)+str(file_name))
image_name_list.append(str(file_name))
print("总计加载图片数量" + str(len(image_name_list)))
# 返回图片列表
return image_name_list
# 调用阿里接口
def ali(org_temp_file_path, org_temp_file_name):
runtime_option = RuntimeOptions()
with open(org_temp_file_path+org_temp_file_name, 'rb') as f:
# 4、初始化Request,
request = BlurFaceAdvanceRequest()
request.image_urlobject = f
try:
# 初始化Client
client = Client(config)
print("初始化Client")
# 5、调用api.
response = client.blur_face_advance(request, runtime_option)
print("调用API")
# 获取整体结果
# print(response.body)
# 获取单个字段,这里只是一个例子,具体能力下的字段需要看具体能力的文档
print(response.body.data.image_url)
# 返回处理完成的图片下载链接
return response.body.data.image_url
except Exception as error:
print("!!!!error!!!!!")
# 获取整体报错信息
print(error)
# 获取单个字段
print(error.code)
# tips: 可通过error.__dict__查看属性名称
# 主函数
if __name__ == '__main__':
# 两个重要目录路径
main_from_TEMP_path = '填写需要批量处理的图片所在的目录/'
main_fin_TEMP_path = '填写处理完成的图片保存的目录/'
# 加载图片
main_org_tmp_list = round_read_file(main_from_TEMP_path)
# 从图片列表中循环
for tmp_file_name in main_org_tmp_list:
# 睡一秒,防止请求太快被阿里云拒绝
time.sleep(1)
# 获得处理后的图像地址
tmp_url = ali(main_from_TEMP_path, tmp_file_name)
# 下载
r = requests.get(tmp_url)
with open(main_fin_TEMP_path+tmp_file_name, "wb") as f:
f.write(r.content)
print("全部完成")