成人图片识别算法

在网上看到一个由Bakr Alsharif开发的可以帮助开发者基于皮肤像素点来检测成人图片的PHP程序,觉得蛮有意思的就下载回来研究下。

由于原作者只写了PHP版本的程序,所以我按照此算法分别写了JAVA和C#版本。

程序中有一部分不清楚作者在RGB取值上的具体含义,但是并不影响对于程序的理解。

JAVA的是网页版的,C#是桌面版。

下面是用一张风景图进行测试的。

QQ拼音截图未命名2 QQ拼音截图未命名4

再用一张成人图片进行测试。

QQ拼音截图未命名3 QQ拼音截图未命名5

识别率还不错,但是却有一个很奇怪的问题,同样一个算法,同一张图片,PHP,JAVA,C#三种程序最终的结果均不一样。测试几张图片实际差距为0.1~0.4之间。不清楚是什么问题导致的。

程序原理就是扫描像素点,并判断是否属于人类肤色范围。最后的结果是返回一个反应皮肤裸露程度的可能性分值。

贴出来核心部分的代码吧,JAVA的,为了方便用了下struts2。C#的就不贴出来的,类似。而且可以下载自己看。程序是临时写的,比较粗糙。

public static double getScore(BufferedImage image,
			int colorA, int colorB, int[] arA, int[] arB)
	{
		int x = 0;
		int y = 0;
		double score = 0;
		x = image.getWidth() - 1;
		y = image.getHeight() - 1;
		double[] xPoints = new double[]
		{ x / 8, x / 4, (x / 8 + x / 4),
				x - (x / 8 + x / 4), x - (x / 4),
				x - (x / 8) };
		double[] yPoints = new double[]
		{ y / 8, y / 4, (y / 8 + y / 4),
				y - (y / 8 + y / 4), y - (y / 4),
				y - (y / 8) };
		double[] zPoints = new double[]
		{ xPoints[2], yPoints[1], xPoints[3], y };
		for (int i = 1; i <= x; i++)
		{
			for (int j = 1; j <= y; j++)
			{
				int color = getColor(image, i, j);
				// /System.out.println(color);
				if (color >= colorA && color <= colorB)
				{
					int[] colorAr = getRGB(color);
					if (colorAr[1] >= arA[1]
							&& colorAr[1] <= arB[1]
							&& colorAr[2] >= arA[2]
							&& colorAr[2] <= arB[2])
					{
						if (i >= zPoints[0]
								&& j >= zPoints[1]
								&& i <= zPoints[2]
								&& j <= zPoints[3])
						{
							score += 3;
						} else if (i <= xPoints[0]
								|| i >= xPoints[5]
								|| j <= yPoints[0]
								|| j >= yPoints[5])
						{
							score += 0.1;
						} else if (i <= xPoints[0]
								|| i >= xPoints[4]
								|| j <= yPoints[0]
								|| j >= yPoints[4])
						{
							score += 0.4;
						} else
						{
							score += 1.5;
						}
					}
				}
			}
		}
		score = (score * 100) / (x * y);
		if (score > 100)
			score = 100;
		DecimalFormat df = new DecimalFormat("#.00");		
		return Double.valueOf(df.format(score));
	}

转载请注明出处

下载地址:链接: http://pan.baidu.com/s/1mguSSyc 密码: gdge