肤色识别系统

该篇文章介绍了作者利用Tkinter开发的在线肤色识别工具,结合OpenCV的Haar级联检测器和HSV颜色空间,通过分析实时摄像头输入的图片或视频,根据白色像素占比判断消费者的肤色,为电商平台的个性化推荐提供技术支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创作灵感

根据电商平台的发展趋势和需要,我提出了一个在线肤色识别工具的创意。这个工具可以帮助消费者在选择化妆品时更准确地根据自己的肤色选择适合的产品。

接下来代码部分(写的有点简陋):

tkinter界面:

分别写了三个按钮 对应:图片识别,实时识别,视频识别

# 添加按钮
button1 = tk.Button(window, text='选取图片', command=open_image_file)
button1.pack()

button2 = tk.Button(window, text='实时摄像头识别', command=lambda: start_recognition(0))
button2.pack()

button3 = tk.Button(window, text='选取视频', command=open_video_file)
button3.pack()

Haar 级联检测器:

本文使用的是opencv中的Haar 级联检测器来检测人脸

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faceRects = faceCascade.detectMultiScale(gray, 1.1, 5)

后将人脸部分提取出来进行肤色识别

 for (x, y, w, h) in faceRects:
        roi_color = frame[y:y + h, x:x + w]  # 获取人脸区域图像

肤色识别:

将识别到的人脸

  1. 颜色空间转换

    • 利用 OpenCV 中的 cv2.cvtColor() 函数将感兴趣区域(roi_color)的颜色空间从 BGR 转换为 HSV。
  2. 皮肤颜色提取

    • 通过设定预定义的皮肤颜色范围(在 HSV 颜色空间中),使用 cv2.inRange() 函数创建一个掩码(mask),用于过滤出图像中符合皮肤颜色范围的像素。
  3. 皮肤区域提取

    • 使用 cv2.bitwise_and() 函数将原始图像的感兴趣区域与皮肤掩码进行按位与操作,得到包含皮肤区域的图像(skin)。
 hsv = cv2.cvtColor(roi_color, cv2.COLOR_BGR2HSV)
 lower_skin = np.array([0, 20, 70], dtype=np.uint8)
 upper_skin = np.array([20, 255, 255], dtype=np.uint8)
 mask = cv2.inRange(hsv, lower_skin, upper_skin)
 skin = cv2.bitwise_and(roi_color, roi_color, mask=mask)
计算皮肤区域的白色像素占比:
                计算图像中感兴趣区域内皮肤区域的白色像素所占的比例。通过这一比例,我们可以了解皮肤区域在整个感兴趣区域中的相对大小。这对于人脸检测、肤色分析以及图像处理等任务非常有用
white_pixels = np.sum(mask == 255) 
total_pixels = mask.shape[0] * mask.shape[1]
white_ratio = white_pixels / total_pixels

白色像素占皮肤区域的比例 white_ratio,判断出不同肤色类型,并将其分为不同的类别

 # 根据白色像素占比判断肤色
        if white_ratio > 0.9:
            skin_color = '冷白皮:使用(#00)'
        elif white_ratio > 0.86:
            skin_color = '粉一白:使用(p01)'
        elif white_ratio > 0.83:
            skin_color = '粉二白:使用(p02)'
        elif white_ratio > 0.78:
            skin_color = '黄一白:使用(w01)'
        elif white_ratio > 0.75:
            skin_color = '黄二白:使用(w02)'
        elif white_ratio > 0.73:
            skin_color = '黄黑皮'
        else:
            skin_color = '黑皮'

识别结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

299KMG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值