思路:
一、打开图片,转换为YCbCr 格式,
二、根据 cb 、 cr 值判断当前像素是否为皮肤
三、计算图片中皮肤所占的像素数量。如果该数量超过图片总像素的30%,则判断为色情图片
结论:
1、算法比较简单,容易实现。
2、如果是纯色情图片,这个算法识别率较高
3、如果穿有一定数量的衣服干扰,或者人物在图片中占比较小,误判率较高
4、大头照容易误判
5、没有判断图片是否是人还是动物
6、图片像素大于10万时速度较慢,最好先缩放一下
1 #如果你需要一份系统的学习资料,那么你可以考虑Python学习交流群:548377875。 2 ##coding=utf-8 3 #根据肤色数量判断 4 from PIL import Image 5 basedir=r'D:\Python\PycharmProjects\nudedetection\imag2' 6 import os 7 for filename in os.listdir(basedir): 8 full_filename=os.path.join(basedir,filename) 9 img = Image.open(full_filename).convert('YCbCr') 10 w, h = img.size 11 data = img.getdata() 12 cnt = 0 13 for i, ycbcr in enumerate(data): 14 y, cb, cr = ycbcr 15 if 86 <= cb <= 117 and 140 <= cr <= 168: 16 cnt += 1 17 print '%s is a porn image?:%s.'%(filename, 'Yes' if cnt > w * h * 0.3 else 'No')