人物图片精准对焦眼部区域并实现个性打码?精准度高于95%!看这一篇就够了
宝子们,是不是经常遇到这种情况:手里有一张人物照片,看着挺好的,但总觉得眼睛部分有点“露馅儿”,想给它打个码,又怕打不好,显得很突兀?别急,今天就来给大家唠唠,怎么精准对焦眼部区域并实现个性打码,让你的照片既保护了隐私,又看起来自然得很!那要如何做实现并不规范尺寸的图片也可以精准识别眼睛位置,并实现...
扫码分享二维码
宝子们,是不是经常遇到这种情况:手里有一张人物照片,看着挺好的,但总觉得眼睛部分有点“露馅儿”,想给它打个码,又怕打不好,显得很突兀?别急,今天就来给大家唠唠,怎么精准对焦眼部区域并实现个性打码,让你的照片既保护了隐私,又看起来自然得很!那要如何做实现并不规范尺寸的图片也可以精准识别眼睛位置,并实现...
扫码分享二维码
宝子们,是不是经常遇到这种情况:手里有一张人物照片,看着挺好的,但总觉得眼睛部分有点“露馅儿”,想给它打个码,又怕打不好,显得很突兀?别急,今天就来给大家唠唠,怎么精准对焦眼部区域并实现个性打码,让你的照片既保护了隐私,又看起来自然得很!
那要如何做实现并不规范尺寸的图片也可以精准识别眼睛位置,并实现涂抹或者自定义其它格式的打码?
第一步、获取一个人脸识别服务的API
在此处演示我们采用腾讯的接口,具体开通人脸识别服务:https://console.cloud.tencent.com/aiface/source
关于API提供的免费额度可以参考:https://cloud.tencent.com/document/product/867/34603
第二步、获取账号的SecretId 和 SecretKey
密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
第三步、构建程序识别眼睛坐标;
此处支持本地图片和网络图片;如果是本地图片,需要转换为BASE64编码格式,同时base64 编码后大小不可超过5M。
关于接口服务下的人脸识别之五官定位,更多说明可以参考:
https://cloud.tencent.com/document/product/867/45019?share_token=949e1682-a20b-4b9a-ad71-e49d1bc61391&tt_from=copy_link&utm_campaign=client_share&utm_medium=toutiao_android&utm_source=copy_link
PYTHON执行程序为:
# -*- coding: utf-8 -*-
import json
import types
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
try:
cred = credential.Credential("AKIDKZfLcfaO2av2vZz", "GI6lTO7XAk9MLH")
# 使用临时密钥示例
# cred = credential.Credential("SecretId", "SecretKey", "Token")
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "iai.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = iai_client.IaiClient(cred, "ap-beijing", clientProfile)
# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.AnalyzeFaceRequest()
params = {
"Url": "https://www.diebaoyun.com/static/upload/image/20250619/1750299799277636.png"
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个AnalyzeFaceResponse的实例,与请求对象对应
resp = client.AnalyzeFace(req)
# 输出json格式的字符串回包
print(resp.to_json_string())
except TencentCloudSDKException as err:
print(err)以上代码执行后返回格式:
{"ImageWidth": 268, "ImageHeight": 140, "FaceShapeSet": [{"FaceProfile": [{"X": 107, "Y": 48}, {"X": 106, "Y": 57}, {"X": 105, "Y":
66}, {"X": 105, "Y": 75}, {"X": 106, "Y": 84}, {"X": 108, "Y": 93}, {"X": 111, "Y": 101}, {"X": 117, "Y": 108}, {"X": 124, "Y": 114}, {"X": 132, "Y": 118}, {"X": 141, "Y": 119}, {"X": 150, "Y": 118}, {"X": 158, "Y": 115}, {"X": 165, "Y": 111}, {"X": 171, "Y": 104}, {"X": 176, "Y": 97}, {"X": 179, "Y": 89}, {"X": 181, "Y": 80}, {"X": 182, "Y": 71}, {"X": 183, "Y": 63}, {"X": 182, "Y": 54}], "LeftEye": [{"X": 120, "Y": 48}, {"X": 123, "Y": 50}, {"X": 127, "Y": 50}, {"X": 130, "Y": 49}, {"X": 134, "Y": 49}, {"X": 131, "Y": 46}, {"X": 127, "Y": 46}, {"X": 123, "Y": 46}], "RightEye": [{"X": 167, "Y": 52}, {"X": 163, "Y": 53}, {"X": 160, "Y": 53}, {"X": 156, "Y": 52}, {"X": 153, "Y": 51}, {"X": 156, "Y": 49}, {"X": 160, "Y": 49}, {"X": 164, "Y": 50}], "LeftEyeBrow": [{"X": 113, "Y": 39}, {"X": 119, "Y": 37}, {"X": 126, "Y": 37}, {"X": 133, "Y": 37}, {"X": 139, "Y": 37}, {"X": 134, "Y": 32}, {"X": 126, "Y": 31}, {"X": 118, "Y": 33}], "RightEyeBrow": [{"X": 176, "Y": 44}, {"X": 170, "Y": 41}, {"X": 164, "Y": 40}, {"X": 158, "Y": 39}, {"X": 151, "Y": 38}, {"X": 157, "Y": 34}, {"X": 165, "Y": 34}, {"X": 172, "Y": 37}], "Mouth": [{"X": 130, "Y": 91}, {"X": 134, "Y": 94}, {"X": 138, "Y": 96}, {"X": 142, "Y": 96}, {"X": 148, "Y": 96}, {"X": 153, "Y": 95}, {"X": 158, "Y": 92}, {"X": 152, "Y": 89}, {"X": 147, "Y": 87}, {"X": 143, "Y": 88}, {"X": 139, "Y": 87}, {"X": 134, "Y": 88}, {"X": 134, "Y": 90}, {"X": 138, "Y": 91}, {"X": 143, "Y": 91},
{"X": 148, "Y": 91}, {"X": 153, "Y": 91}, {"X": 153, "Y": 91}, {"X": 148, "Y": 91}, {"X": 142, "Y": 91}, {"X": 138, "Y": 90}, {"X":
134, "Y": 90}], "Nose": [{"X": 144, "Y": 70}, {"X": 144, "Y": 50}, {"X": 141, "Y": 55}, {"X": 139, "Y": 61}, {"X": 136, "Y": 66}, {"X": 132, "Y": 71}, {"X": 138, "Y": 74}, {"X": 143, "Y": 76}, {"X": 148, "Y": 75}, {"X": 154, "Y": 72}, {"X": 151, "Y": 66}, {"X": 149, "Y": 61}, {"X": 147, "Y": 56}], "LeftPupil": [{"X": 126, "Y": 47}], "RightPupil": [{"X": 161, "Y": 50}]}], "FaceModelVersion": "3.0", "RequestId": "cabff882-4f51-48d9-adf0-8d2351d1ae8e"}第四步、根据返回的五官坐标实施遮挡或者其它行为操作;
以下以遮挡眼睛为例实施代码:
from PIL import Image, ImageDraw
# 定义图片路径
image_path = 'C:\\Users\\Administrator\\Desktop\\456.png'
# 定义坐标列表
coordinates = [
(142, 195), (150, 200), (159, 202), (169, 201),
(177, 197), (171, 189), (161, 186), (150, 188),
(268, 195), (260, 200), (251, 202), (241, 201),
(233, 198), (239, 190), (250, 187), (260, 189)
]
# 打开图片
image = Image.open(image_path)
# 创建绘图对象
draw = ImageDraw.Draw(image)
# 定义圆圈的半径和颜色
radius = 5 # 像素为10,半径为5
color = (255, 0, 0) # 红色
# 在每个坐标处画圆圈
for x, y in coordinates:
draw.ellipse((x - radius, y - radius, x + radius, y + radius), outline=color, width=1)
# 保存标注好的图片
output_path = 'C:\\Users\\Administrator\\Desktop\\456_annotated.png'
image.save(output_path)
print(f'标注好的图片已保存至 {output_path}')第五步、最终实施看看效果

Copyright Notice
当前文章由【付涛】本人原创开发与文案内容写作,内容版权归当前平台所有,如需转载,请务必注明来源及链接,谢谢合作!
本文最后更新发布于【2025-06-19】,某些文章具有时效性,若有错误或已失效,请联系客服
争议处理:针对本站内容若有异义,亦可直接与【法律顾问:易兴俊,律师联系电话:13825799821】直接联系沟通