裸体检测算法
- 正常化
- 分区制
- 特征提取
- 使用 SVM 进行分类
使用以下方法
1.标准化:将第一张图片转换为.jpg格式和大小为256X256。然后它被转换为YCbCr色彩空间,为此我使用OpenCV python。这是代码。
2.分区:然后将规范化图像划分为三个区域。这是因为假设是"图像的裸体主要在中心区域发现"。
3.特征提取:在该模块中,图像在YCbCr中,皮肤像素通过范围(0,133,77),(255,173,127)的阈值过滤并划分为三个区域,然后为每个区域计算2个颜色特征(连接的外观像素数和皮肤像素占总像素的比例)和2个纹理特征(均匀性和相关性)。
import os
import numpy as np
import cv2
from cv2 import cv
import skimage.feature as sf
total_pixels=256.0*256.0
class normalize:
def __init__(self,src,dst):
self.src=src
self.dst=dst+"_1.jpg"
def resize(self):
x,y=256,256
src=cv2.imread(self.src,1)
src=cv2.resize(src,(x,y))
cv2.imwrite(self.dst,src)
dst=cv2.imread(self.dst,1)
return dst
"""Segmentation module is used to segment out skin pixels in YCrCb color space"""
def segmentation(src):
img=src.copy()
img=cv2.cvtColor(src,cv.CV_BGR2YCrCb)
dst=cv2.inRange(img,(0,133,77),(255,173,127))
return dst
"""Image Zoning and feature extraction module"""
class features:
def __init__(self,src):
self.zone1=src
self.zone2=src[30:226,30:226]
self.zone3=src[60:196,60:196]
def createglcm(self,zone):
return sf.greycomatrix(zone,[1],[0,np.pi/4,np.pi/2,-np.pi/2,-np.pi/4,np.pi*25/12],normed=True)
def getCorrelation(self,glcm):
return sf.greycoprops(glcm,'correlation')
def getHomogeneity(self,glcm):
return sf.greycoprops(glcm,'homogeneity')
def getcolorfeatures(self,zone):
contours, hierarchy = cv2.findContours(zone,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
skin_pixel_connected=0
for i in range(len(contours)):
skin_pixel_connected=skin_pixel_connected+cv2.contourArea(contours[i])
return [skin_pixel_connected,skin_pixel_connected/total_pixels]
现在我已经检索了代码中给出的各种功能的列表。如何从 python 列表中为 svm 制作特征向量。如何使用SVM通过使用裸体和非裸体图像(我有5000张图像)进行训练,然后进行检测。?任何人都可以建议我。
- 您创建一个 SVM 对象。 训练
- 您的 SVM,将拟合方法与您的训练图片一起使用。
- 使用预测方法对测试/数据进行预测。
法典:
from sklearn import svm
clf = svm.SVC()
clf.fit(X,y)
clf.predict(X_test)
对于特征向量 X,只需将每个训练数据的特征合并到一个 np 数组中即可。
经过交叉验证策略,C=100.00 和 gamma=0.07
这是我的代码看起来的样子:
from sklearn.svm import SVC
classifier=SVC(kernel='rbf',C=100.0,gamma=0.07,cache_size=800)
classifier.fit(np.array(featurespace),np.array(classes))
classifier.predict(X_test)