使用brain.js(js中的神经网络)来学习元素背景图像的对比度

时间:2014-05-29 16:24:31

标签: javascript jquery neural-network brain.js

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

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

以下是该演示:http://harthur.github.io/brain/

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

2 个答案:

答案 0 :(得分: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 to Hex and Hex to RGB

答案 1 :(得分:1)

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

  1. 指定(or otherwise identify)图像的主色,然后使用该颜色代替整个图像,从根本上将问题降低到与您的问题完全相同链接的例子。
  2. 将图像逐个像素地输入神经网络并训练这些值。基本上,这归结为让NN确定主导颜色而不是使用其他算法,但在某些情况下,它可以更准确地用于您的目的。
  3. 重要的是要记住,神经网络不知道颜色是什么,它不知道像素是什么,它只知道输入和输出。所以只需输入你的(任意复杂的)输入,看看它是如何处理的。我不知道您链接的NN的功能,但总的来说,认为它可以满足您的需求是合理的。我不了解性能 ...您必须确保它在实时场景中实际上足够快。

    但我认真思考,你所要完成的事情是否真的如此核心,以至于它在设置和持续资源方面值得付出努力