利用python判断之前爬取的图片是否为少儿不宜。
参考博客:
https://blog.csdn.net/gzlaiyonghao/article/details/3166735
https://blog.csdn.net/dawnstar_hoo/article/details/4043837
https://blog.csdn.net/oxuzhenyi/article/details/55000520
思路:
一、打开图片,转换为YCbCr 格式,
二、根据 cb 、 cr 值判断当前像素是否为皮肤
三、计算图片中皮肤所占的像素数量。如果该数量超过图片总像素的30%,则判断为色情图片
结论:
1、算法比较简单,容易实现。
2、如果是纯色情图片,这个算法识别率较高
3、如果穿有一定数量的衣服干扰,或者人物在图片中占比较小,误判率较高
4、大头照容易误判
5、没有判断图片是否是人还是动物
6、图片像素大于10万时速度较慢,最好先缩放一下
##coding=utf-8
#根据肤色数量判断
from PIL import Image
basedir=r'D:\Python\PycharmProjects\nudedetection\imag2'
import os
for filename in os.listdir(basedir):
full_filename=os.path.join(basedir,filename)
img = Image.open(full_filename).convert('YCbCr')
w, h = img.size
data = img.getdata()
cnt = 0
for i, ycbcr in enumerate(data):
y, cb, cr = ycbcr
if 86 <= cb <= 117 and 140 <= cr <= 168:
cnt += 1
print '%s is a porn image?:%s.'%(filename, 'Yes' if cnt > w * h * 0.3 else 'No')