2013-10-26 54 views
2

裸体检测算法的裸体检测算法

  • 正常化
  • 区划
  • 特征提取
  • 使用SVM

以下方法使用的分类特征提取后使用SVM

1.标准化:将第一张图像转换成.jpg格式,大小为256X256。然后将其转换为YCbCr色彩空间,为此我使用OpenCV python.Here是代码

2.Zoning:归一化图像然后分为三个区域。这是因为假设是“裸露的图像主要发现在中央区域”。

3.Feature提取:在该模块中的图像是在的YCbCr,皮肤像素由阈值在范围(0,133,77),(255173127)过滤并分为三个zones.and然后针对每个区域的特征计算2个颜色特征(连接的皮肤像素的数量和皮肤像素与总像素的比例)和2个纹理特征(均匀性和相关性)。使用glcm(skimage.features模块)计算纹理特征。其中代码

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] 

现在我已经检索了各种fe如代码中所示。如何从python列表中为svm制作特征向量。如何使用SVM进行训练,使用裸体和非裸体图像(我有5000张图像),然后进行检测。任何机构都可以暗示我。

+0

您可能要减少大小的问题。我觉得你有一个合法的问题,但现在这里有很多不相关的信息。 – Simon

+0

您需要提供脸部图像作为否定例子,或者您可以使用脸部检测器来消除脸部误报。 – Bull

回答

1

交叉验证策略之后,C = 100.00和γ= 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) 
1
  1. 您创建了一个SVM对象。
  2. 训练您的SVM,使用适合您的训练图片的方法。
  3. 使用预测方法来预测您的测试/数据。

代码:

from sklearn import svm 
clf = svm.SVC() 
clf.fit(X,y) 
clf.predict(X_test) 

为特征向量x简单地合并功能集成到一个NP阵列的每列火车的数据。

+0

我必须在web应用程序中使用这个分类器,怎么做? – user1234567

+0

取决于您的网络应用程序。如果它已经存在那里可能会调用你的python脚本内部的PHP(例如),如果你写一个新的Web应用程序,你可能想看看例如Django或烧瓶。 – user1059617