腾讯云每月每种服务均有10000次的免费调用额度,足够个人测试学习使用。可以在 控制台-资源包管理 中查看免费资源包的消耗情况。
安装库
pip install tencentcloud-sdk-python
pip install Pillow
只保留成年人的人脸照片
import os
import base64
from PIL import Image
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.iai.v20200303 import iai_client, models
# 获取当前文件夹下的所有jpg文件
jpg_files = [f for f in os.listdir('.') if f.endswith('.jpg')]
try:
# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
# cred = credential.Credential("SecretId", "SecretKey")
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "iai.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = iai_client.IaiClient(cred, "ap-beijing", clientProfile)
# 遍历所有jpg文件,逐一检测人脸
for filename in jpg_files:
f = open(filename, 'rb')
imagebytes = str(base64.b64encode(f.read()))[2:-1]
f.close()
req = models.DetectFaceAttributesRequest()
params = {
"MaxFaceNum": 1,
"Image": imagebytes,
"FaceAttributesType": "Age"
}
req.from_json_string(json.dumps(params))
try:
resp = client.DetectFaceAttributes(req)
resp_dict = json.loads(resp.to_json_string())
face_info = resp_dict["FaceDetailInfos"][0]
age = face_info["FaceDetailAttributesInfo"]["Age"]
if age < 18:
print(f"图片:{filename} 人脸年龄小于:18岁 年龄为:{age}岁")
os.remove(filename)
else:
print(f"图片:{filename} 人脸年龄大于等于:18岁 年龄为:{age}岁")
except TencentCloudSDKException as err:
print(f"图片:{filename} 检测人脸失败,错误信息:{err}")
os.remove(filename)
except TencentCloudSDKException as err:
print(err)