天天看點

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

對于廣大“鋼鐵直男”的程式員來說,送什麼禮物給女朋友一直是個世紀難題。

其實哄女朋友開心最深的套路就是花式送口紅,就問誰抵擋得住啊啊啊啊......

“沒有什麼問題是一支口紅解決不了的,如果有,那就兩支。”于是,直男們紛紛開始各種買口紅、送口紅……

畢竟李佳琦一句"OMG買它”,女朋友披頭散發搶購,錢包就空了一半。

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

但是,口紅色号千千萬,選對了牌子才成功了一半。

快樂橙、傷心紫,姨媽紅,雞屎綠…直男眼裡沒什麼差別的顔色,在女生眼裡各種色調、質地細微的差別都能分析一清二楚。

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

那麼,對于直男來說,怎麼才能搞清楚如此多的口紅色号呢?

我耗費一毫米發際線,琢磨了一下,做出了一個口紅色号識别器,希望能幫大家在關鍵時刻把深刻的革命友誼再升華一下。

先來看看效果。讓我們假設,小姐姐發來了一張美妝部落客的美照,并暗示你,“人家也喜歡這個顔色。”

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

圖檔來自網絡

這個時候,用我們的口紅色号識别器,就能定位嘴唇,并迅速給出它的顔色隸屬哪家品牌的哪個色号。

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

OMG!簡直比李佳琦還準确!

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

好啦,廢話不多說,馬上開始教學時間!

來自 Github 的口紅色号宇宙

要想識别口紅色号,先得讓機器知道到底都有哪些顔色。

聽櫃姐介紹,紅色系有:“草莓紅、鐵鏽紅、楓葉紅...”,其他還有“豆沙色、吃土色、番茄色...”

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

世界觀還未建立完全就要開始土崩瓦解,這看着有差別嗎?“豆沙色最為百搭,橘調的番茄色比較顯白...”眼前的黑不是黑,你說的紅是什麼紅?

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

還好,在萬能的 Github 上找到了一個寶藏資料庫“口紅顔色可視化”,這個資料庫堪比口紅的色号宇宙,不僅囊括了目前最主流品牌的各種系列色号,還很良心的在色盤上排列了出來。

這個資料集是一個嵌套的字典資料結構,存為 json 串的形式,裡面記錄了每個口紅品牌系列下不同口紅色号的顔色 id、名稱、和 16 進制顔色值。

直!男!救!星!有木有!

口紅色号可視化連結:

https://github.com/Ovilia/lipstick
           

不過看着這密密麻麻的顔色,真心佩服各大口紅品牌的文案高手,是怎麼樣差別每一個看不出差別的顔色,并且還要分别取名字的。

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

傻傻分不清的我對 5 個品牌的不同系列做了一下統計和色号錄入,于是,剩下的就交給計算機啦。

先用番茄做個實驗?

既然有了如此完備的色号資料庫,那麼文摘菌就有了一個讨巧的方法:要想找到合适的色号,可以直接截取顔色,然後在資料庫中進行比對。

這個方法非常好操作,在上唇色之前,我們不如先拿别的紅色物品來練手。

比如,這裡有一隻番茄圖檔,你看這個番茄它又大又圓:

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

在其中截取了成色均勻、無高亮的矩形圖檔:

紅頭檔案rgb紅色值_拿下抖音小姐姐,我寫了個口紅色号識别器

提取這張純色圖檔的 RGB 值在技術上是可行的,getcolor.py 代碼如下:

import colorsysimport PIL.Image as Imagedef 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 顔色,代碼如下:

import osimport getcolorfrom os.path import join as pjoinfrom scipy import miscdef load_color(color_dir,list):  count = 0 for dir in os.listdir(color_dir):  img_dir = pjoin(color_dir, dir)  image = getcolor.Image.open(img_dir) image = image.convert('RGB') get=getcolor.get_dominant_color(image) list.append(get) count = count+1 #print(person_dir) #print(count) return countdef Mean_color(count,list): Mean_R=Mean_G=Mean_B=0 for i in range(count): tuple=list[i] Mean_R+=tuple[0] Mean_G+=tuple[1] Mean_B+=tuple[2] MeanC=((int)(Mean_R/count),(int)(Mean_G/count),(int)(Mean_B/count)) return Me
           

番茄的顔色提取到了,那麼和什麼做比對呢?

當然是口紅的資料,文摘菌這兒用到了 5 個品牌,分别是聖羅蘭、香奈兒可可小姐、迪奧、美寶蓮、紀梵希,共 17 個系列,271 個口紅色号。

資料集是一個嵌套的字典資料結構,存為 json 串的形式,裡面記錄了每個口紅品牌系列下不同口紅色号的顔色 id、名稱、和 16 進制顔色值。

lipstick.json部分資料集展示如下:

{"brands":[{"name":"聖羅蘭