Loading... 通过腾讯接口人脸识别本地照片人的年龄。 所有开通腾讯云人脸识别服务的客户,每月每种服务均有10000次的免费调用额度,以资源包的形式发放到您的腾讯云账号中,优先扣除。您可以在 [控制台-资源包管理](https://console.cloud.tencent.com/aiface/source) 中查看免费资源包的消耗情况。离线 SDK 默认免费绑定3台设备测试60天。 * [腾讯人脸识别官网](https://cloud.tencent.com/product/facerecognition) * [腾讯人脸接口介绍](https://cloud.tencent.com/document/product/867/44989) * [腾讯密钥接口获取](https://console.cloud.tencent.com/cam/capi) * [人脸识别限时特惠](https://url.cn/iT77y3Ht) # 只保留成年人图片 ``` 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("AKID*", "Z*") # 实例化一个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) ``` # 显示人脸图片的年龄 ``` 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 # 需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 ### 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 cred = credential.Credential("AKID*", "Z*") httpProfile = HttpProfile() httpProfile.endpoint = "iai.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = iai_client.IaiClient(cred, "ap-beijing", clientProfile) # 定义要搜索的图像文件扩展名列表 img_exts = ['.jpg', '.jpeg', '.png', '.bmp'] # 循环当前目录中的文件并检测图像文件中的人脸年龄 for filename in os.listdir('.'): if os.path.isfile(filename) and os.path.splitext(filename)[1].lower() in img_exts: print(f"文件名: {filename}...") with open(filename, 'rb') as f: imagebytes = str(base64.b64encode(f.read()))[2:-1] # 图片转换成二进制 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()) age = resp_dict["FaceDetailInfos"][0]["FaceDetailAttributesInfo"]["Age"] if age > 18: print(f" (这张照片年龄是: {age} 岁,大于 18 岁).") else: print(f" (这张照片年龄是: {age} 岁,小于 18 岁).") except TencentCloudSDKException as err: print(f" Error detecting age: {err}.") ``` 腾讯云人脸识别提供在线 API 调用和离线识别 SDK 使用两种服务方式,您可以单独使用其中一种,也可以二者结合形成端与云方案使用。 * 针对在线 API 调用服务方式,提供按 QPS 计费和按调用次数计费两种计费模式。 * 针对离线识别 SDK 服务方式,提供按设备永久授权方式(**50**台起购)。 ## 调用次数计费(资源包) 资源包当前不支持退款和剩余次数冻结。如需购买,请单击 [购买资源包](https://buy.cloud.tencent.com/iai_face)。 | 资源包规格 | 10万次 | 100万次 | 1000万次 | 5000万次 | 1亿次 | | ---------------- | -------- | --------- | ---------- | ---------- | ---------- | | 人脸检测与分析 | 48元 | 450元 | 4100元 | 17500元 | 25000元 | | 五官定位 | 198元 | 1900元 | 18200元 | 82500元 | 135000元 | | 人脸比对 | 318元 | 3100元 | 30400元 | 142500元 | 255000元 | | 人脸验证 | 318元 | 3100元 | 30400元 | 142500元 | 255000元 | | 人脸搜索 | 318元 | 3100元 | 30400元 | 142500元 | 255000元 | | 人员库管理 | 318元 | 3100元 | 30400元 | 142500元 | 255000元 | | 资源包规格 | 1万次 | 10万次 | 100万次 | | ------------------------------ | -------- | --------- | ---------- | | 人脸静态活体检测(高精度版) | 1200元 | 11500元 | 100000元 | ## 调用次数计费(后付费) | 月接口调用总量 | 0 < 调用量 ≤ 300万 | 300万<调用量 ≤ 1500万 | 调用量 > 1500万 | | ------------------------------ | --------------------- | ------------------------- | ----------------- | | 人脸检测与分析 | 0.0005元/次 | 0.0004元/次 | 0.0003元/次 | | 五官定位 | 0.002元/次 | 0.0018元/次 | 0.0015元/次 | | 人脸比对 | 0.0032元/次 | 0.003元/次 | 0.0027元/次 | | 人脸验证 | 0.0032元/次 | 0.003元/次 | 0.0027元/次 | | 人脸搜索 | 0.0032元/次 | 0.003元/次 | 0.0027元/次 | | 人员库管理 | 0.0032元/次 | 0.003元/次 | 0.0027元/次 | | 人脸静态活体检测(高精度版) | 0.15元/次 | 0.15元/次 | 0.15元/次 | ##调用次数计费(资源包) * 示例一 用户预计一年内调用人脸比对接口3000万次,可购买3个1000万次规格的人脸对比资源包,所需支付的费用计算如下: 30400 \* 3 = 91200(元) * 示例二 用户当月累计调用人脸搜索接口3200万次,调用人员搜索接口2000万次,且已购买了1个5000万次规格的人脸搜索资源包。按照资源包次数耗尽后超额使用转入后付费模式的计算方式,且人脸搜索和人员搜索接口同属于 [人脸搜索相关接口](https://cloud.tencent.com/document/product/867/32770#.E4.BA.BA.E8.84.B8.E6.90.9C.E7.B4.A2.E7.9B.B8.E5.85.B3.E6.8E.A5.E5.8F.A3) 合并计算调用量,所需支付的费用计算如下: (32000000 + 20000000 – 50000000-10000) \* 0.0032 + 142500 = 148868(元) # 调用次数计费(后付费) * 示例一 用户当月累计调用五官定位接口 100 万次,按照阶梯到达的计算方式,所需支付的费用计算如下: (1000000 – 10000) \* 0.002 = 1980(元) * 示例二 用户当月累计调用人脸比对接口350万次,按照阶梯到达的计算方式,所需支付的费用计算如下: (3500000 – 10000) \* 0.003 = 10470(元) * 示例三 用户当月累计调用创建人员接口300万次、增加人脸接口200万次、获取人员库列表10万次、获取人员列表100万次,因为创建人员、增加人脸、获取人员库列表、获取人员列表四个接口同属 [人员库管理相关接口](https://cloud.tencent.com/document/product/867/32770#.E4.BA.BA.E5.91.98.E5.BA.93.E7.AE.A1.E7.90.86.E7.9B.B8.E5.85.B3.E6.8E.A5.E5.8F.A3),且仅创建人员和增加人脸两个子接口收费并合并计入人员库管理,按照阶梯到达的计算方式,所需支付的费用计算如下: (3000000 + 2000000 – 10000) \* 0.003 = 14970(元) ## QPS 计费 * 示例 用户需要购买1个月 + 5天的10个 QPS,可以按照包月 + 按天的搭配模式购买,所需支付的费用计算如下: (240 \* 1 + 16 \* 5) \* 10 = 3200元 # 离线识别 SDK ## 按设备授权方式购买 * 示例 用户购买了1000台设备的离线人脸识别 SDK,按照阶梯到达的计算方式,所需支付的费用计算如下: 1000 \* 118 = 118000元 # 公共库识别人脸代码 ``` import os from PIL import Image import face_recognition # https://github.com/Silufer/dlib-python # setx CMAKE_C_COMPILER "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe" # setx CMAKE_CXX_COMPILER "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe" # pip install face_recognition CMake Boost # pip install cmake # pip install dlib==19.8.1 # pip install face_recognition # pip install opencv-contrib-python==4.1.0.25 # pip install twisted def is_human_face(image_path): image = face_recognition.load_image_file(image_path) face_locations = face_recognition.face_locations(image) if len(face_locations) == 0: return False top, right, bottom, left = face_locations[0] face_width = right - left face_height = bottom - top face_area = face_width * face_height # 如果面积小于 70,视为非人脸 if face_area < 70: return False return True should_crop = input("是否需要裁剪人脸?(y/n)") if should_crop == "y": should_crop = True elif should_crop == "n": should_crop = False else: print("无效输入,程序结束。") exit() if not os.path.exists('face'): os.makedirs('face') num_of_faces_detected = 0 # 统计检测到人脸的照片数量 x = 30 # 上下左右裁剪人脸间隔像素 for file_name in os.listdir('.'): if file_name.endswith('.jpg') or file_name.endswith('.png'): image_path = os.path.join('.', file_name) if is_human_face(image_path): # 移动原始人脸 face_image_path = os.path.join('face', file_name) if os.path.exists(face_image_path): os.remove(face_image_path) os.rename(image_path, face_image_path) # 裁剪人脸区域并保存 if should_crop: image = face_recognition.load_image_file(face_image_path) face_locations = face_recognition.face_locations(image) top, right, bottom, left = face_locations[0] top = max(0, top - x) bottom = min(image.shape[0], bottom + x) left = max(0, left - x) right = min(image.shape[1], right + x) face_image = Image.fromarray(image[top:bottom, left:right]) face_image_path = os.path.join('face', file_name[:-4] + '_cut.jpg') face_image.save(face_image_path) num_of_faces_detected += 1 print("共检测到{}张人脸照片,已保存至 face 文件夹。".format(num_of_faces_detected)) if should_crop: print("已裁剪所有检测到的人脸,人脸上下左右各加" + str(x) + "像素,并保存至 face 文件夹中。") ``` 最后修改:2024 年 10 月 07 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏