一、实验简介
本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图像处理库,会编写算法来划分图像的皮肤区域
1.1. 知识点
Python 3 的模块的安装
Python 3 基础知识
肤色像素检测与皮肤区域划分算法
Pillow 模块的使用
argparse 模块的使用
1.2. 效果展示
二、实验步骤
2.1. 安装包
PIL 2009年之后就没有更新了,也不支持 Python3 ,于是有了 Alex Clark 领导的公益项目 Pillow,Pillow 是一个对 PIL 友好的分支,支持 Python3,所以我们这里安装的是 Pillow,其官方文档
安装前更新源
$ sudo apt-get update
首先我们需要处理一个问题:当前实验楼的环境中 python3 命令使用的 python 版本为 3.5,但源中却没有 python3.5-dev,这会导致安装 Pillow 出错。所以我们必须将 python3 命令使用的 python 版本切换为 3.4,然后再安装 python3-dev 和 python3-setuptools。
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 70 --slave /usr/bin/python3m python3m /usr/bin/python3.4m$ sudo apt-get install python3-dev python3-setuptools
然后安装 Pillow 依赖包
$ sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev / libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
安装 pip3,pip 是 Python2 的软件包管理系统,使用它来安装 Python2 的模块非常简便,而 pip3 则是对应于 Python3 的版本
$ sudo apt-get install python3-pip
最后安装 Pillow:
$ sudo pip3 install Pillow
2.2. 程序原理
本程序根据颜色(肤色)找出图片中皮肤的区域,然后通过一些条件判断是否为色情图片
程序的关键步骤如下
遍历每个像素,检测像素颜色是否为肤色
将相邻的肤色像素归为一个皮肤区域,得到若干个皮肤区域
剔除像素数量极少的皮肤区域
我们定义非色情图片的判定规则如下(满足任意一个判定为真):
皮肤区域的个数小于 3 个
皮肤区域的像素与图像所有像素的比值小于 15%
最大皮肤区域小于总皮肤面积的 45%
皮肤区域数量超过60个
这些规则你可以尝试更改,直到程序效果让你满意为止
关于像素肤色判定这方面,公式可以在网上找到很多,但世界上不可能有正确率 100% 的公式
新闻热点
疑难解答