0

我对使用brain.js 很感兴趣:https ://github.com/harthur/brain

提供了一个演示,展示了如何训练神经网络识别颜色对比度,但是我如何设置它以便它可以从输入中学习哪种颜色的文本(白色或黑色)在不同的背景图像上看起来更好?

这是那个演示:http ://harthur.github.io/brain/

我有一组要训练的背景图像。然后我想保存该训练数据并能够将其添加到使用这些背景图像的站点,这样就能够确定在它们之上使用哪种颜色的文本。

4

2 回答 2

2

看起来就像这样简单:

net.train([{input: { r: 0.03, g: 0.7, b: 0.5 }, output: { black: 1 }},
           {input: { r: 0.16, g: 0.09, b: 0.2 }, output: { white: 1 }},
           {input: { r: 0.5, g: 0.5, b: 1.0 }, output: { white: 1 }}]);

因此,要从输入中执行此操作,只需更改以下值:

var input = {};
input.r = hexToRgb($('#rgbTextField').r;
input.g = hexToRgb($('#rgbTextField').g;
input.b = hexToRgb($('#rgbTextField').b;

var output = {};
output.black = 1;

// finally...
net.train([ input, output ]);

var hexToRgb = function(hex) {
    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
    return result ? {
        r: parseInt(result[1], 16),
        g: parseInt(result[2], 16),
        b: parseInt(result[3], 16)
    } : null;
}

或者大意的东西。我没有测试过这段代码。

参考。RGB 转十六进制和十六进制转 RGB

于 2014-05-29T17:22:36.163 回答
1

鉴于您的评论中的澄清,您有几个选择:

  1. 分配( 以其他方式 识别)图像的主要颜色,然后使用该颜色而不是整个图像来从本质上将您的问题减少到与链接示例完全相同。
  2. 将图像颜色逐个像素地输入神经网络并针对这些值进行训练。本质上,这归结为让 NN 确定主色而不是使用其他算法,但在某些情况下,它可能更准确地满足您的目的。

重要的是要记住,神经网络不知道颜色是什么,也不知道像素是什么,它只知道输入和输出。所以只需输入你的(任意复杂的)输入,看看它是如何处理它的。我不知道您链接的 NN 的功能,但总的来说,认为它可以满足您的需求是合理的。我不知道性能......你必须确保它在现场场景中实际上对你来说足够快。

但我会认真思考你想要完​​成的事情是否真的对你的目标如此核心,以至于值得付出努力,无论是在设置还是持续资源方面。

于 2014-06-02T14:08:49.443 回答