最新消息:

计算机如何识别色情图片?

开源项目 admin 3615浏览 0评论

为了保护小朋友的纯洁心灵,不让他们过早地接触不和谐的内容,程序员们开发了很多自动识别色情图片和AV影片的电脑软件来过滤这些信息。那么,你知道这些“绿坝娘”们都是怎么工作的吗?

是不是色情作品,一般人扫一眼心里就有数了。但对电脑来说,它们可不会自己分辨屏幕上那对男女是在谈情说爱,还是在宽衣解带。想让电脑知道哪些东 西 是不和谐的,还得靠程序员们的调教。不过,想教会电脑看AV并不是一件很容易的事情,因为机器没有七情六欲,没有感情,没有性冲动,唯一能接受的只有各种 数据,程序员们要做的,就是让电脑识别色情作品特有的数据特征。

识色、辨形、听声

我们知道,每张图片里的任何一个点都包括亮度值、色相值、饱和度值,通过这三个值的大小的范围,电脑就能识别出“肉色”,进而猜测出图片里裸露 的人 体皮肤区域。 而那些“色图”相比于正常图片,最明显的特点就是画面像素中人体皮肤的颜色所占的比例比较大,整张图片比较“黄”,确切地说,研究者发现虽然不同肤色的主 角在光线明暗不同环境下拍出来的皮肤颜色不尽相同,但是画面里人体皮肤的颜色总是在一定的范围内。另外,研究人员还发现暴露的区域图片一般纹理值比较小, 颜色比较平滑,这也可以作为判断人体皮肤的依据之一。

03160859_aUUy

电脑自动识别出图片里的人体皮肤区域。(图片来自原研究 )

03160900_Y0bz

计算肤色区域的几何关系。 (图片来自原研究 )

当电脑“看到了”图片上有类似于人体皮肤颜色的一些区域之后,需要进一步确定这些区域的来源,看看它们是没穿衣服的女主角,还是来源于正常物 体。假 设两块黄色区域分别是两条腿或两只胳膊,另外一块区域是人的身体,这些区域的长度值、宽度值必须符合人体的大小比例,之间的位置必须满足一定的几何关系, 这些都可以依靠电脑的计算得出结果。如果这些区域之间大小和位置不像是人的身体,就可以排除掉色情图片的嫌疑了。

把肤色和人体构造比例这两招教给电脑是研究者最先想到的解决方案,也是应用得最多的图片自动扫黄方法。凭借这两个简单而有效的主意,美国爱荷华大学和加州伯克利大学的研究人员在1996年发表了一篇名为《找到裸露的身体》( Finding Naked People )的论文(有点标题党的嫌疑)。

后来,世界各国对于此领域情有独钟的研究人员又想出了各种各样提高识别AV图片准确率的方法。

例如斯坦福大学的研究者通过对图片进行“小波分析”(编者按:这只是一个数学方法的名称)可以把色情图片里的人体轮廓提取出来,由于同一个女主 角可 以被摄像机从不同的角度拍摄,研究者还对提取出的轮廓进行了平移、转动、伸缩的数学变换。接下来,比对被测试的画面提取出的数据和几百张真正色情图片数学 变换提取出的信息,两者越接近就说明被测试的图片越可能是色情图片。这样就能让电脑来判定被测试的图片里,不和谐内容出现的概率大小。

03160900_ZfZN

提取图片里的人体轮廓。(图片来自原研究 )

而中科院自动化研究所的研究人员提出的方法里,为了识别电影里是否有限制级片段,可以先分析一下电影里是否含有限制级的声音。他们收集了592 段 “声优”的声音片段,然后分析了这些声音信号的十几项参数。根据需要被测试的声音片段的各项参数与这些例子的接近程度,可以计算出一个声音片段是“限制级 声音”的概率,如果概率足够大,就要检查声音对应的视频画面有没有问题了。

错杀与漏放

在此类研究中,各个研究论文里都提到了作者测试了大量的样本,收集了包括几百部、上千部高清无码的片子和正常的片子(看来这一类研究做起来还是 蛮有 意思的,工作之余还可以欣赏一下影片),有的研究识别准确率可以达到90%以上,不过电脑的人工智能还是经常有失手的时候,把正常的画面冤枉成AV画面, 或者让真正的“咸湿图片”漏网,市面上此类的软件也都不免有“看走眼”的问题。

比如下面三张图片就是此类软件算法出错的例子,让无辜的图片受冤屈。图片(a)(b)因为整张图片颜色“太黄”了,很像人皮肤的颜色,被电脑误判;图片(c)大老爷们光着膀子的画面让电脑来区分是否属于色情就颇有难度。此外,动物和雕像的图片也容易被错划入不健康图片。

03160900_Impf

让电脑迷惑的图片1(图片来自原研究 )

与此相反,以下三张应该被处理掉的图片却因为背景颜色纹理过多或者清晰度不够高而漏网

03160901_jEF9

让电脑迷惑的图片2(图片来自原研究 )

由此可见,要想给视频和图片来个靠谱的自动分级,还需要让电脑更聪明才行。

PS: 相信以后计算机会在这个领域取得新的进展,不过至少目前的常用方法,还是通过征募一些有牺牲精神的壮士,进行人工鉴定来实现的。

PPS:当绿坝娘擦枪走火…… 你懂的,有图有真相。

03160901_RonW参考资料:

  1. Fleck, Margaret M., David A. Forsyth, and Chris Bregler (1996) “Finding Naked People,” 1996 European Conference on Computer Vision

2. Haiqiang Zuo, Ou Wu, Weiming Hu, Bo Xu;RECOGNITION OF BLUE MOVIES BY FUSION OF AUDIO AND VIDEO 3.Wang, J. and Wiederhold, G. and Firschein, O;System for Screening Objectionable Images Using Daubechies’ Wavelets and Color Histograms

转自:http://www.oschina.net/news/29609/computer-sex-pic

Matlab色情图片识别的代码

% for u= 1:9 %连续读取图片
% img = imread(['' num2str(u) '.jpg']);%连续读取图片
% img = imresize(img,[20 20]);%统一图片大小
img1 = imread('11.jpg');%读取一张图片
img = imresize(img1,[20 20]);%统一图片大小
figure,imshow(img1)

%% 确定皮肤区域
hsv = rgb2hsv(img);%rgb空间转为hsv空间
% figure,imshow(hsv)
s = hsv(:,:,2);%figure,imshow(s)%s分量
% h = hsv(:,:,1);figure,imshow(h)%h分量
% v = hsv(:,:,3);figure,imshow(v)%v分量
lev = graythresh(s);%求最佳阈值 
bw = im2bw(s,lev);% 二值化
% figure,imshow(bw)
r = img(:,:,1);%得到图片r分量
g = img(:,:,2);%得到图片g分量
b = img(:,:,3);%得到图片b分量
rr =  immultiply(r,bw);%得到图片中皮肤区域的r分量,可运行figure,imshow(rr)看图片
gg =  immultiply(g,bw);%得到图片中皮肤区域的g分量,
bb =  immultiply(b,bw);%得到图片中皮肤区域的g分量
img2 = cat(3,rr,gg,bb);%%皮肤区域(合并r,g,b三个分量)
% figure,imshow(img2)
%% 计算参数(面积比;均值与方差)
area = find(bw==1);%找区域(皮肤)
area = length(area);%计算面积(皮肤)
[m,n,p] = size(img);%图片行,列,维数
ratio = area/(m*n); %面积比
Label=4;%高斯的相关参数
[mean1,variance1,afa]=gmm_em_estimation_parameter(img2,Label);%求均值,方差
load mean %载入纯皮肤的均值
load variance %载入纯皮肤的方差
z1 = distance (mean,mean1);%计算两均值的欧氏距离
z2 = distance (variance,variance1);%计算两方差的欧氏距离
% result1 = [result1 z1 ];
% result2 = [result2 z2 ];
if z1<300 || z2 <10e+003  ||  ratio>0.2 %判断
    msgbox('图片识别结果:是色情图片')%弹出显示框
else
    msgbox('图片识别结果:不是色情图片')%弹出显示框
end
   
% end

 

ps:色情图片的鉴别方法在github上有开源项目可以直接使用。在github上搜:porn image就会找到相应的开源项目。

转载请注明:jinglingshu的博客 » 计算机如何识别色情图片?

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址