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 博客的需要,故打上马赛克再发表):

x

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

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

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

[python] view plain copy
  1. import sys, Image
  2. img = Image.open(sys.argv[1]).convert('YCbCr')
  3. w, h = img.size
  4. data = img.getdata()
  5. cnt = 0
  6. for i, ycbcr in enumerate(data):
  7. y, cb, cr = ycbcr
  8. if 86 <= cb <= 117 and 140 <= cr <= 168:
  9. cnt += 1
  10. 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,过滤掉太白和太黑的部分。

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

[plain] view plain copy
  1. E:/>c:/python25/python test_skin.py 114.jpeg
  2. 114.jpeg is a porn image.

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

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

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

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

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

    10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...

  2. 5分钟,10行代码!带你用Python做个电脑文件清道夫!

    "菜鸟学Python",第"508"篇原创 大家好,我是菜鸟哥!新的一周来啦,Python学起来! 大家在日常的工作和学习中,会面临到许多文件的处理,包括各种o ...

  3. Python3,区区10行代码,批量把图片插入Excel指定单元格中,省下时间去烫头发。

    这里写目录标题 1.引言 2.代码实战 2.1 代码示例 2.2 遇到问题及处理方案 2.2.1 遇到问题 2.2.2 解决方案 3.总结 1.引言 小屌丝:鱼哥, 想请教你个问题. 小鱼:啥问题呢? ...

  4. 10行代码实现目标检测,请收下这份教程

     翻译 | 林椿眄 编辑 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领 ...

  5. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...

    萧箫 编辑整理 量子位 报道 | 公众号 QbitAI 最近,来自哈佛大学等机构的研究人员,开发出了一个AI"药神"工具包,为加速新冠疫情下的新药研发助力. 这款名为DeepPur ...

  6. 10行代码带你搞定目标检测(附代码)

    来源:大数据文摘 本文约2700字,建议阅读5分钟. 本文介绍采用代码搞定目标检测的技术. 计算机视觉是人工智能的一个重要领域,是关于计算机和软件系统的科学,可以对图像和场景进行识别.理解.计算机视觉 ...

  7. 10行代码实现目标检测

    2019独角兽企业重金招聘Python工程师标准>>> 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领域主要包括图像识别,目标检测, ...

  8. 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题

    不引入标准库和第三方库,不用分号将多行代码写在一行,再10行代码之类求出八皇后问题的所有解. ----------------------------------------------------- ...

  9. 10行代码让你轻松搞定对象检测

    摘要:  十行代码轻松搞定对象检测?快来看看如何使用ImageAI. 计算机视觉是人工智能领域中最重要的一个分支.计算机视觉是一门能够识别和理解图像及其场景的计算机软件系统的科学.计算机视觉包括图像识 ...

最新文章

  1. 4-类和结构体和可选类型
  2. C#GDI画圆及填充
  3. [唐胡璐]VBS技巧 - Adding Quotes(为字符串加双引号)
  4. 高通qusb bulk驱动_1999元!Redmi新机发布:首发高通全新SoC
  5. Boost和STL学习资料大全
  6. 3D打印软件推荐|常用3D打印软件有哪些?
  7. SpringBoot整合Docker实现一次构建到处运行
  8. 个人二维码实时收款源码 商业解决方案
  9. 《黑马》——C++基础入门
  10. 计算机excel实验总结,计算机概论excel实验报告.doc
  11. 写在冬日的第一天--一个女程序员第十六年工作总结
  12. AutoSAR系列讲解(入门篇)2.2-SWC的类型
  13. 将图片放大不失真,保持清晰度不变的方法
  14. postman 测试webservice接口
  15. 【Code pratice】—— 四平方和
  16. dw网页插入java小程序_DW网页设计100例35:构建Java插入模块
  17. CNC精雕机的应用:玻璃精雕机可以加工什么呢?
  18. 试着使用SDL2复刻曹操传(三)
  19. 实验报告: 人脸识别方法回顾与实验分析 【OpenCV测试方法源码】
  20. TensorFlow学习系列之六:测试TensorFlow是否安装成功

热门文章

  1. 一文了解P2P的前世今生
  2. Python-爬取自己博客文章的URL
  3. Oracle-SYSAUX表空间解读
  4. Python 变量类型
  5. android tools ignore,android 中tools:ignore=UselessParent这个属性的含义是什么?
  6. qtiplot编译失败linux,在macOS上安装 qtiplot 免费版
  7. localdate获取几个月前_关于近期使用java8中LocalDateTime的总结
  8. Redis中的自动过期机制
  9. python判断能否形成等差数列
  10. 图像处理:Hough变换原理分析