前不久,身边一朋友要送女朋友生日礼物,送完就被女朋友吐槽了一顿。
什么???今年又送了死亡芭比粉???情人节也是???
如果说彩妆中最受女生欢迎的是哪一个,相信所有人都会脱口而出:口红。尤其是有女朋友的男孩子更能明白,有了口红就不要男票的心痛吧。所以,你们给女朋友买口红,就选择死亡芭比粉是吗?
对于广大“钢铁直男”的程序员来说,送什么礼物给女朋友一直是个世纪难题
其实哄女朋友开心最深的套路就是花式送口红,就问谁抵挡得住啊啊啊啊…
“没有什么问题是一支口红解决不了的,如果有,那就两支。”于是,直男们纷纷开始各种买口红、送口红……
毕竟李佳琦一句"OMG买它”,女朋友披头散发抢购,钱包就空了一半。
但是,口红色号千千万,选对了牌子才成功了一半。
快乐橙、伤心紫,姨妈红,鸡屎绿…直男眼里没什么区别的颜色,在女生眼里各种色调、质地细微的区别都能分析一清二楚。
那么,对于直男来说,怎么才能搞清楚如此多的口红色号呢?
我耗费一毫米发际线,琢磨了一下,做出了一个口红色号识别器,希望能帮大家在关键时刻把深刻的革命友谊再升华一下。
先来看看效果。让我们假设,小姐姐发来了一张美妆博主的美照,并暗示你,“人家也喜欢这个颜色。”
这个时候,用我们的口红色号识别器,就能定位嘴唇,并迅速给出它的颜色隶属哪家品牌的哪个色号。
OMG!简直比李佳琦还准确!
好啦,废话不多说,马上开始教学时间!
要想识别口红色号,先得让机器知道到底都有哪些颜色。
听柜姐介绍,红色系有:“草莓红、铁锈红、枫叶红…”,其他还有“豆沙色、吃土色、番茄色…
世界观还未建立完全就要开始土崩瓦解,这看着有区别吗?“豆沙色最为百搭,橘调的番茄色比较显白…”眼前的黑不是黑,你说的红是什么红?
还好,在万能的 Github 上找到了一个宝藏数据库“口红颜色可视化”,这个数据库堪比口红的色号宇宙,不仅囊括了当前最主流品牌的各种系列色号,还很良心的在色盘上排列了出来。
这个数据集是一个嵌套的字典数据结构,存为 json 串的形式,里面记录了每个口红品牌系列下不同口红色号的颜色 id、名称、和 16 进制颜色值。
直!男!救!星!有木有!
不过看着这密密麻麻的颜色,真心佩服各大口红品牌的文案高手,是怎么样区别每一个看不出区别的颜色,并且还要分别取名字的。
傻傻分不清的我对 5 个品牌的不同系列做了一下统计和色号录入,于是,剩下的就交给计算机啦。
先用番茄做个实验?
既然有了如此完备的色号数据库,那么文摘菌就有了一个讨巧的方法:要想找到合适的色号,可以直接截取颜色,然后在数据库中进行比对。
这个方法非常好操作,在上唇色之前,我们不如先拿别的红色物品来练手。
比如,这里有一只番茄图片,你看这个番茄它又大又圆:
在其中截取了成色均匀、无高亮的矩形图片:
提取这张纯色图片的 RGB 值在技术上是可行的,getcolor.py 代码如下:
import colorsys
import PIL.Image as Image
def get_dominant_color(image):
max_score = 0.0001
dominant_color = None
for count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):
# 转为HSV标准
saturation = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)[1]
y = min(abs(r*2104+g*4130+b*802+4096+131072)>>13,235)
y = (y-16.0)/(235-16)
#忽略高亮色
if y > 0.9:
continue
score = (saturation+0.1)*count
if score > max_score:
max_score = score
dominant_color = (r,g,b)
return dominant_color
为了减少误差,需要裁剪多个不同位置的图片,保存在本地的一个文件夹中,读取文件,提取颜色,求平均值,得到的番茄最终的 RGB 颜色,代码如下: