一、實驗簡介
本實驗將使用 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% 的公式
新聞熱點
疑難解答