V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
slysly759
V2EX  ›  Python

鉴黄师专用 Python 轮子之 PornDetective

  •  
  •   slysly759 · 2017-01-03 22:03:30 +08:00 · 8614 次点击
    这是一个创建于 2885 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    这两天跨年,就想将自己的 Python 组织和表达能力再提高一下,当然最好的方式自然是读大师的源码,我也就看到实验楼上面的那篇关于色情图片识别的文章,因此依葫芦画瓢才建了这个库。

    0x01 色情识别算法介绍

    检测色情或者说判定是否是色情的关键是通过皮肤的裸露程度判别,也就是说色情识别算法的核心就是识别皮肤。

    那么现今主要识别皮肤的是通过三个步骤:首先选择合适的颜色空间来表征图像像素;然后使用适当的皮肤模型来建模皮肤和非皮肤部分像素;最后依据此建模来分割出正确的皮肤部分。而识别皮肤的关键在于寻找到合适的像素区间,因为肤色 种族 光照 等等因素都会影响到皮肤的识别。

    从 2015 年的厦大陈丽一篇《一种融合方法的皮肤检测技术》上我们了解到 在图片预处理 降噪 resize 后 将二维直方图 高斯模型 动态阈值 三个处理模型进行混合的综合皮肤检测技术,能达到识别率 90+的程度,比其他三种模型高出一到五个百分点。

    那么实验楼这位作者是如何去识别一张图片的皮肤部分呢?

    • 皮肤确认的像素公式采用 stack 上的采用的是网上的 YCbcr 的公式 当然他也写了其他的公式,效果不如这个好
    • 确认为皮肤像素后进行归类。新发现的皮肤像素定位新的一块,如果皮肤像素周边有其他的像素就 merge 当然 我在测试的过程中,这个 merge 算法仍然可以优化,如果有小伙伴的话~
    • 归类后,判定是否为色情图片的 rules 他写了四条 当然这个判别不能和机器训练相比 但是已经比较准确了

    0x02 我在此基础上做了什么?

    • 完善 showskinorigin 方法,使其能够将被判定为皮肤的像素进行涂白 方便进行对比
    • 修改某些不是很 python 的方法,剔除单通道图片。
    • 新加入 LoadWay 文件,可以方便的扫描目录 图片 url 列表并检查是否为色情图片
    • 增加容错模块,单元测试后,打包然后共享给大家~

    0x03 未来将会准备做什么?

    • 根据论文的算法 在 python 上进行部分实现,方便优化算法
    • 修复多线程效率过低 占用内存过多的问题
    • 希望能够建立 server 返回 API

    试验效果图属不可描述范围~附上 Gayhub 地址~

    当然我不会说那个 HeiHeiHei 函数是干嘛的==
    

    github 地址 ![]( http://www.songluyi.com/wp-content/uploads/2017/01/QQ 截图 20170103220111.png)

    36 条回复    2017-07-21 18:09:37 +08:00
    riaqn
        1
    riaqn  
       2017-01-03 22:31:27 +08:00   ❤️ 1
    只是识别皮肤裸露有问题吧? 那肚皮舞也变 porn 了。

    很明显需要更高端的算法。之前我看到有程序,能做到识别并且”标识敏感区域“(就是标识乳头和 XX )
    Yinz
        2
    Yinz  
       2017-01-03 22:40:06 +08:00   ❤️ 1
    总觉得人工硬编写识别逻辑的做法会被深度学习完全替代掉。。。
    sobigfish
        3
    sobigfish  
       2017-01-03 22:48:03 +08:00
    非洲同胞的皮肤能识别不-。-
    techmoe
        4
    techmoe  
       2017-01-03 22:56:15 +08:00 via Android
    同意一楼看法
    ericgui
        5
    ericgui  
       2017-01-03 22:58:14 +08:00
    你让微博上那些网红情何以堪?
    RqPS6rhmP3Nyn3Tm
        6
    RqPS6rhmP3Nyn3Tm  
       2017-01-03 23:00:14 +08:00 via iPhone
    反向使用,黄的留下?
    murmur
        7
    murmur  
       2017-01-03 23:00:31 +08:00
    还以为是自动上车
    ericgui
        8
    ericgui  
       2017-01-03 23:04:50 +08:00
    @Yinz 同意。
    ericgui
        9
    ericgui  
       2017-01-03 23:06:35 +08:00
    @BXIA
    @murmur 向老司机致敬
    Yinz
        10
    Yinz  
       2017-01-03 23:07:53 +08:00
    当然这个轮子出于学习目的还是很棒的!学习了:D
    Kilerd
        11
    Kilerd  
       2017-01-03 23:07:55 +08:00
    @Yinz 不是大型云商的话,哪来那么多训练集??

    又不是某某云。
    ihciah
        12
    ihciah  
       2017-01-03 23:26:36 +08:00
    Yahoo 似乎以前放出来过一个 porn-detect 的 network 和 model...
    Mac
        13
    Mac  
       2017-01-03 23:27:54 +08:00
    对鉴黄程序没兴趣,我只对他们的内容数据库敢兴趣
    guyskk
        14
    guyskk  
       2017-01-03 23:29:31 +08:00 via Android
    @BXIA PornDetective - find porn img easilly
    northisland
        15
    northisland  
       2017-01-03 23:30:45 +08:00
    弟弟 妹妹 咪咪的目标识别比较靠谱,
    roist
        16
    roist  
       2017-01-03 23:44:01 +08:00
    很常见的一个案例,一个穿泳装类的,站姿和蹲姿(你懂的那个姿势)的皮肤裸露程度有太大不同?但这两者是色情程度一个天上一个地下
    slysly759
        17
    slysly759  
    OP
       2017-01-03 23:53:48 +08:00 via Android
    @riaqn 我简单解释一下。
    1. 色情图片是分级别的 有皮肤暴露 卡通色情 成人色情 的区分 退一万步来说大数据分析得到所有三点特征匹配的也是成人色情。
    2. 皮肤算法不是说识别大块皮肤 或者加个权重就行,具体的识别多少区块 占比多少 像素值多少才能算 这个规则是通过样本采集来的。
    3. 判定的 rules 在程序中的确预先写好,后续将会加入训练模型, rules 是可以优化的。
    j5shi
        18
    j5shi  
       2017-01-03 23:56:00 +08:00 via iPhone
    建立 Server 用来返回 API 调用…于是 Server 上就会有看不完的 porn 照了…嘿嘿嘿
    slysly759
        19
    slysly759  
    OP
       2017-01-03 23:56:00 +08:00 via Android
    @roist 额 穿泳装蹲下你从哪里看啊喂→_→上面喵
    DoraJDJ
        20
    DoraJDJ  
       2017-01-04 00:26:32 +08:00 via Android
    @ihciah 然后有人利用这个玩意弄了个能够生成黄图的玩意😂
    lostvincent
        21
    lostvincent  
       2017-01-04 00:29:08 +08:00 via iPhone
    我感觉通过分析音频来鉴黄比较简单...
    SlipStupig
        22
    SlipStupig  
       2017-01-04 00:52:55 +08:00
    @lostvincent 色情图片,用音频识别,在下佩服佩服
    lostvincent
        23
    lostvincent  
       2017-01-04 01:03:07 +08:00 via iPhone
    @SlipStupig 就关注鉴黄没在意是图片了,尴尬(逃
    nbndco
        24
    nbndco  
       2017-01-04 07:25:35 +08:00 via iPhone
    基本上都是深度学习了,检测皮肤不靠谱的
    kankana
        25
    kankana  
       2017-01-04 07:53:23 +08:00 via iPhone
    试了腾讯万象,这东西还是得用深度学习,现有算法准确率没那么高
    EIlenZe
        26
    EIlenZe  
       2017-01-04 10:01:15 +08:00 via iPhone
    @DoraJDJ 233333333
    dobest
        27
    dobest  
       2017-01-04 10:23:01 +08:00
    一点看法:

    1. 基于像素+人工规则 的方法鲁棒性存在问题,像其他同学说的那样,深度学习更靠谱。
    2. 为什么不用 scikit-image 或 opencv 等基于 numpy 的库呢? 这样性能不是更好吗?
    3. 楼主的代码和 nude.py 的代码有些类似,但没看到说有参考 nude.py ,或者楼主是参考的实验楼该项目作者的代码?

    https://github.com/hhatto/nude.py/blob/master/nude.py
    https://github.com/songluyi/PornDetective/blob/master/porndetective/__init__.py
    slysly759
        28
    slysly759  
    OP
       2017-01-04 10:57:57 +08:00 via Android
    @dobest 的确借鉴他的,我也在文中说明了我改了那些 新加了那些东西。 看起来诸位都看好深度学习的| ू•ૅω•́)ᵎᵎᵎ我还是默默去看文献了⊙▽⊙
    dsphper
        29
    dsphper  
       2017-01-04 12:36:25 +08:00
    求原始训练集高清五码图片。
    iamnuomi
        30
    iamnuomi  
       2017-01-04 13:10:29 +08:00
    yahoo 的鉴黄开源项目在这里 https://github.com/yahoo/open_nsfw
    另外,还有人根据 yahoo 的模型反向制作了图片生成器,在这里: https://open_nsfw.gitlab.io/, 其中有大量算法生成的图片,怎么说呢,还是值得一看的

    anyway ,请大家搭配服用
    ericgui
        31
    ericgui  
       2017-01-04 13:23:28 +08:00
    其实微博上很多网红露太多了,都不穿衣服,但都利用手势或者其他姿势恰好遮住了三点,虽然也是几乎没遮住。。。这种情况啊,连微博管理员都不知道到底该删不该删。
    figofuture
        32
    figofuture  
       2017-01-04 15:41:49 +08:00
    mark
    winglight2016
        33
    winglight2016  
       2017-01-05 15:13:15 +08:00
    @lostvincent 正如前人所说:你叫那些直播网红怎么办啊?
    hjq98765
        34
    hjq98765  
       2017-01-06 11:55:19 +08:00
    胶衣丝袜控有福了→_→
    Pythonwanted001
        35
    Pythonwanted001  
       2017-01-12 16:28:57 +08:00
    大项目,有兴趣合作吗?可加 QQ 1005367713 私聊。
    saintatgod
        36
    saintatgod  
       2017-07-21 18:09:37 +08:00
    挖个坟,已经被机器学习甩掉几条街了。准确度太低
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3534 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:44 · PVG 08:44 · LAX 16:44 · JFK 19:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.