`
varsoft
  • 浏览: 2508514 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

(已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二

阅读更多

10 行代码判定色*情*图片——Python 也可以系列之二

作者:赖勇浩(http://blog.csdn.net/lanphaday

致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术贴!

声明:本文因科学研究需要,包含部分色*情*图片,不可作为传播色*情*信息的证据。

今天先是在 CSDN 看到《大学生发明依据皮肤比例过滤色*情*图片软件》(http://news.csdn.net/n/20081028/120298.html),后来发现这条新闻竟然已经上了网易新闻频道了(http://news.163.com/08/1028/05/4PAORMQB00011229.html),着实令人吃惊。

来自网易新闻的图片

根据作者的话说:“这个软件的原理在于通过计算面部、四肢图像区域,与整个肤色区域的面积比例和具体的分布,来判断网站中是否含有色*情*图片。”我估计他用的就是普通的肤色模型对图片的像素进行检测和统计,最多加上一些色块的分布、形状等数据进行一些条件过滤。于是我就写了段代码来分析图像,把图像中非肤色的像素去除,效果如下(声明:程序计算的数据是根据未打马赛克的图片计算的,因为保持 CSDN 博客的需要,故打上马赛克再发表):

xclip_image001clip_image002clip_image003

相应的图片处理后的结果是:

clip_image004clip_image005clip_image006

可见简单的肤色模型已经能够工作得很好。

接下来就可以写统计肤色像素的代码了,很短,只有 10 行,充实体现了 Python 语言的强大,以及李济民同学的研究并不深入:

import sys, Image

img = Image.open(sys.argv[1]).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 %s a porn image.'%(sys.argv[1], 'is' if cnt > w * h * 0.3 else 'is not')

下面简单讲解一下代码:

1) Image 是 PIL 库,我曾经写过一篇《用Python做图像处理》(http://blog.csdn.net/lanphaday/archive/2007/10/28/1852726.aspx),基本用法可以参考此文。

2) img = Image.open(fn).convert('YCbCr'),这一行打开从命令行传入的文件名,然后转换到 YCbCr 色彩空间,关于 YCbCr 的理论知识,可以参考http://baike.baidu.com/view/564370.htm

3) data = img.getdata(),这一句是为了方便快速操作像素而获取图像数据

4) if 86 <= cb <= 117 and 140 <= cr <= 168:,这一句最为重要,是本文的精髓所在。根据 YCbCr 肤色模型,许多论文推荐用 86 <= cb <= 127,130 <= cr < 168,但经实验,这个数值并不好,所以我把 cb 的上限改为 117,cr 的下限改为 140,过滤掉太白和太黑的部分。

最后本程序的执行结果是这样的:

E:\>c:\python25\python test_skin.py 114.jpeg

114.jpeg is a porn image.

其中 114.jpeg 就是上例中的第三幅图片。

综上所述,重庆邮电大学的大四学生李济民,只不过是利用了一个非常成熟的理论(肤色检测是人脸识别等计算机视觉学科的基础知识),写了一点点代码(也许他用 C++ 写的代码比我用 python 写的多一些,但最多也就多三两百行),并没有实质性的科研突破,产品也不够成熟(按他的话就是比*基*尼美女都识别不了),记者和网站对他进行宣传,实为棒杀。

另,许多 CSDN 的网友对他用的“嵌入浏览器内,很难删除”的说法很好奇,在这里顺便提一下李同学应该是用 Browser Helper Object,又称 BHO 技术来完成这件事的,这是一个很简单的技术,查查 MSDN,用 VC/VB/C# 都能很方便地写出来,当然,也可以很方便地删除。哈哈。

分享到:
评论

相关推荐

    Python图片打码代码 图片马赛克 opencv示例代码

    # Python图片打码代码 图片马赛克 opencv示例代码 1. 读入图片,拷贝图片,对指定区域进行马赛克操作; 2. 方法1:使用opencv将指定区域进行两次resize线性插值,实现像素化马赛克效果; 3. 方法2:使用opencv的box...

    照片马赛克Python代码

    换言之,如果从远处看照片马赛克,会看到目 标图像;但如果走近,会看到该图像实际上包含许多较小的图像。 低分辨率块状图像,靠近了很难识别,但如果从远处看,就知道它代表什么,因为看到的细节较少,就使得边缘越...

    人脸检测并打马赛克源码

    人脸检测和打马赛克是图像处理中的常见任务,尤其在隐私保护和视频监控领域有广泛应用。本项目基于Python和OpenCV库实现,提供了一种简单有效的方法来检测图像或视频流中的人脸并自动打上马赛克。以下是关于这个项目...

    Python+OpenCV 实现的人脸检测并打马赛克源码

    在本项目中,我们主要探讨的是如何利用Python和OpenCV库来实现人脸检测,并对检测到的人脸区域进行马赛克处理。OpenCV是一个强大的计算机视觉库,它提供了丰富的功能,包括图像处理、特征检测、人脸识别等。在这个...

    Python-Mosaicer一个简单的马赛克生成程序

    Python-Mosaicer是一个用于生成马赛克效果的简单程序,主要针对图像处理。这个程序是用Python编程语言编写的,利用了Python强大的图像处理库,如PIL(Python Imaging Library)或其更新版本Pillow。马赛克效果通常...

    简单的加马赛克代码

    在本文中,我们将深入探讨如何使用Pascal编程语言,特别是Delphi集成开发环境,来实现一个简单的马赛克效果。马赛克是一种图像处理技术,常用于保护个人隐私或为艺术创作添加特殊视觉效果。在Delphi中实现马赛克功能...

    易语言图片加马赛克

    在这个“易语言图片加马赛克”项目中,我们将探讨如何使用易语言来实现对图片进行马赛克处理的功能。 马赛克是一种常见的图像处理技术,用于遮盖或模糊图片中的某些区域,常用于保护隐私或创建艺术效果。在编程领域...

    偏振图像分析工具。去马赛克、斯托克斯向量、穆勒矩阵_python_代码_下载

    用户可以通过阅读源码了解工具的工作原理,通过运行示例了解如何使用,并可以根据自己的需求进行二次开发或定制功能。 总之,"Polanalyser"是一个基于Python的偏振图像分析工具,具备去马赛克、计算斯托克斯向量和...

    Python-imcollage一个实现马赛克拼贴图像的算法

    Python-imcollage是一个用于创建马赛克拼贴图像的库,它允许用户通过编程方式将多张图片组合成一张具有马赛克效果的拼贴画。这个库是Python开发的一个图像处理工具,非常适合那些对图像编辑和艺术创作有兴趣的人。在...

    jQuery马赛克图片还原动画代码.zip

    本资源"jQuery马赛克图片还原动画代码.zip"提供了使用jQuery实现的一种独特视觉效果——马赛克图片还原动画。这个功能在网页设计中常用于图片展示或相册应用,可以增加用户体验的趣味性。 首先,我们来理解“马赛克...

    为视频加马赛克处理源代码

    "为视频加马赛克处理源代码"是一个专为VC++开发环境设计的项目,旨在帮助开发者实现将马赛克效果应用到视频帧上的功能。下面我们将深入探讨这个主题,解析相关知识点。 首先,马赛克是一种广泛使用的视觉效果,常...

    怎么给图片打马赛克的源码

    总的来说,"怎么给图片打马赛克的源码"是一个很好的起点,可以帮助初学者踏入图像处理和编程的领域。通过实践和理解这个项目,不仅可以掌握基本的马赛克技术,还能为今后更复杂的图像处理任务打下基础。

    IOS应用源码——自定义的马赛克时间风格.zip

    "IOS应用源码——自定义的马赛克时间风格.zip"这个压缩包包含了一种独特的马赛克时间显示风格的源代码,适合那些希望在自己的iOS应用中添加个性化时间显示功能的开发者。以下是关于这个主题的详细知识点: 1. **...

    * * * *去马赛克

    *********看电影是有马赛克时候可以用它来去马赛克来观看*******************************************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...

    图像加马赛克源代码(delphi)

    在IT领域,图像处理是一项非常重要的技术,而“图像加马赛克”是其中一种常见的操作,用于保护隐私或...通过学习和理解这段源代码,开发者不仅可以掌握图像加马赛克的实现方法,还能提升在Delphi中进行图像处理的能力。

    qt 简单图片马赛克demo

    在描述中提到的"输入图片然后鼠标滑动进行马赛克处理",表明了这个程序具有交互性,用户可以通过鼠标直观地控制马赛克效果。在"screenShotDemo(maskDemo)"这个文件名中,我们可以推测这是对程序截图的演示,其中可能...

    图片加马赛克.rar

    在"图片加马赛克"的项目中,易语言被用来编写源代码,实现将图片添加马赛克的效果。 首先,我们需要理解如何在编程中实现马赛克效果。通常,这涉及到对图片的像素级操作。以下是一个基本的步骤: 1. **读取图片**...

    简单快速图片打马赛克

    在提供的"ImageMosaic"文件中,很可能包含实现这些功能的源代码、配置文件或示例图片,通过对这些文件的研究,我们可以深入理解图片打马赛克的具体实现方式。总的来说,从用户角度,这是一个便捷的工具;从开发角度...

    C#马赛克代码(已修改过的)

    在描述中提到的"已修改过的"可能意味着原始代码已经过优化或调整,比如提高了处理速度,优化了内存使用,或者添加了额外的功能,如调整马赛克强度的参数。 对于提供的压缩包文件"C#马赛克(已修改成功)",可能包含了...

    photomosaic.js-基于Canvas的纯JS图片马赛克插件

    而今天我们要探讨的主角——`photomosaic.js`,就是一款利用Canvas实现的纯JavaScript图片马赛克插件,它为网页设计师和开发者提供了一种创新的方式来展示和处理图片。 1. **什么是photomosaic.js?** `...

Global site tag (gtag.js) - Google Analytics