原文:如何辨别颜色名称 - 2018.02.07

作者:gakki_Yuibo

学习,记录,备忘.

颜色一共有1600多万种,人类能够分辨的颜色大概有7000多种,但是精确地分辨出每一个颜色,挑战依然很大.

目前市面上的颜色方案都分的很细,对于实际的应用场景来说其实用处不大. 因为人们并不关心这个颜色的专业名称是什么,只关心它们属于哪个色系,叫什么.
目前还没有找到关于颜色识别很好的方案,这里开源一下自己的颜色解决方案,就当是抛砖引玉. 希望有大牛能够指导一下颜色的问题要怎么解决,目前颜色的识别的准确率大约是80%左右,因为数据集中缺少灰色系的数据,所以会把灰色识别为其他颜色.

解决方案如下:

有一份20万种颜色的数据集,里面的20万种颜色被分别命名为 27种颜色,将这些颜色的名称和数值送到 knn 分类器中进行训练,然后输入新的数值进行预测.

数据集:颜色名称数据集

包含有20万种颜色的名称的颜色数据集,来自于人工标注.

27 种颜色色系如:

'black', 黑色
'blue', 蓝色
'brown', 棕色
'cyan', 青色
'dark blue', 深蓝色
'dark brown', 深棕色
'dark green', 深绿色
'dark purple', 深紫色
'dark red', 深红色
'dark teal', 深青色
'gold', 金色
'green', 绿色
'light blue', 浅蓝色
'light green', 浅绿色
'lime green', 柠檬绿
'magenta', 洋红色
'maroon', 酱紫色,褐红色
'mustard', 芥菜色
'navy blue', 海军蓝
'olive', 橄榄色
'orange', 橙色
'pink', 粉色
'purple', 紫色
'red', 红色
'sky blue', 天空蓝
'teal', 水鸭色,水鸭蓝 
'yellow', 黄色

RGB 颜色可视化:http://www.kqiqi.com/tools/RGB216/

#!/usr/bin/python3 
import os,sys 
from sklearn.neighbors import KNeighborsClassifier 

color_name_file = "color_name.txt" 
datas = open(color_name_file).readlines()
print("[INFO] Num of color-names pair - {}".format(len(datas)))
# 196600

list_color=[] 
x=[] 
y=[] 
neigh = KNeighborsClassifier(n_neighbors=27) 

for idx in range(len(datas)): 
    color = []
    str1=datas[idx].split("]")[-1].strip()
    if str1 not in list_color: 
        list_color.append(str1)
        print(str1) 
    str2=datas[idx].split(",")[0].split("[")[-1]  
    str3=datas[idx].split(",")[1]
    str4=datas[idx].split("]")[0].split()[-1]  
    color.append(int(str2))  
    color.append(int(str3))  
    color.append(int(str4))  
    x.append(color)  
    y.append(str1)

color_name=[] 
neigh.fit(x, y) 
predict = neigh.predict([[50,20,20]]) 
print(predict)
# ['maroon']
Last modification:January 17th, 2019 at 02:13 pm