模式识别与机器学习(1) 皮肤检测

简介: 基于贝叶斯判决皮肤检测的简单实现

导入数据

import cv2
import numpy as np
img = cv2.imread("./Pratheepan_Dataset/FacePhoto/03.jpg")
#显示图像
#cv2.imshow("06Apr03Face",img)
#cv2.waitKey(0)
print("YCbCr-RGB Skin Model")
rows,cols,channels = img.shape
# convert color space from rgb to ycbcr
imgYcc = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#转换为YCBCR图像
imgCBCR = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)
YCbCr-RGB Skin Model

批量的读取图片

import os
picture  = []
for filename in os.listdir(r"./Pratheepan_Dataset/FacePhoto/"):              #listdir的参数是文件夹的路径
    filenames = './Pratheepan_Dataset/FacePhoto/'+filename
    #print(filenames)
    img = cv2.imread(filenames,1)
    imgCBCR = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)
    #print(imgCBCR.shape)
    picture.append(imgCBCR)
Y = np.array([])
CB = np.array([])
CR = np.array([])
for i in range(len(picture)):
    a = picture[i][:,:,0].flatten()
    b = picture[i][:,:,1].flatten()
    c = picture[i][:,:,2].flatten()
    Y = np.hstack((Y,a))
    CR = np.hstack((CR,b))
    CB = np.hstack((CB,c))
print(Y[:10],CB[:10],CR[:10])
[204. 188. 193. 192. 194. 198. 196. 194. 198. 198.] [113. 112. 112. 112. 112. 112. 113. 114. 114. 114.] [136. 136. 136. 136. 136. 136. 135. 135. 136. 136.]
import os
picture  = []
for filename in os.listdir(r"./Ground_Truth/GroundT_FacePhoto/"):              #listdir的参数是文件夹的路径
    filenames = './Ground_Truth/GroundT_FacePhoto/'+filename
    #print(filenames)
    img = cv2.imread(filenames,cv2.IMREAD_GRAYSCALE)
    #print(img.shape)
    picture.append(img)
lable = np.array([])
for i in range(len(picture)):
    a = picture[i][:,:].flatten()
    lable = np.hstack((lable,a))
print(lable.shape)
(5029741,)

在立体空间绘制散点分布

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
i = 10000
j = 200000
Y1 = Y[i:j]
CB1 = CB[i:j]
CR1 = CR[i:j]
fig = plt.figure(figsize=(9,9))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(CR1[lable[i:j]==255.0],CB1[lable[i:j]==255.0],Y1[lable[i:j]==255.0], marker="o")
#ax.scatter(CB1[lable[i:j]==0.0],CR1[lable[i:j]==0.0],Y1[lable[i:j]==0.0], marker="o")
ax.set_xlabel('CR Label')
ax.set_ylabel('CB Label')
ax.set_zlabel('Y Label')
plt.show()

将所有的数据拼成一个矩阵(n,3)

Y_1 = Y.reshape(len(Y),-1)
CB_1 = Y.reshape(len(CB),-1)
CR_1 = Y.reshape(len(CR),-1)
X = np.hstack((np.hstack((Y_1,CB_1)),CR_1))
y = lable

利用贝叶斯分类器进行决策

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y/255., test_size=0.1, random_state=42)
#建立模型
clf = GaussianNB()
#使用训练集对模型进行训练
clf.fit(X_train,y_train)
#使用测试集数据检验模型准确率
print("tsst_data1的准确率",clf.score(X_test,y_test))
tsst_data1的准确率 0.7102877876634027

预测

import cv2
import numpy as np
img = cv2.imread("./11.jpg")
#显示
#cv2.imshow("06Apr03Face",img)
#cv2.waitKey(0)
#转化为imgCBCR
imgCBCR = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)
Y_pre = imgCBCR[:,:,0].flatten()
CR_pre = imgCBCR[:,:,1].flatten()
CB_pre = imgCBCR[:,:,2].flatten()
Y_2 = Y_pre.reshape(len(Y_pre),-1)
CB_2 =CB_pre.reshape(len(CB_pre),-1)
CR_2 =CR_pre.reshape(len(CR_pre),-1)
X_2 = np.hstack((np.hstack((Y_2,CB_2)),CR_2))
c = clf.predict(X_2)
img1 = c.reshape(img[:,:,0].shape)
cv2.imshow("06Apr03Face",img1)
cv2.waitKey(0)

这是简单的实现没有考虑背景色,导致查准率比较低,下一步作业朝向这方面更改,努力中

相关文章
|
7月前
|
机器学习/深度学习 运维 算法
基于机器学习的网络安全威胁检测系统优化策略
【4月更文挑战第21天】 随着网络环境的日趋复杂,传统的安全防御机制在应对日益狡猾的网络攻击时显得力不从心。本文提出了一种结合深度学习与行为分析的网络安全威胁检测系统的优化策略,旨在提高对先进持续威胁(APT)和零日攻击的识别能力。通过构建一个多层次特征提取框架,并引入自适应学习算法,该系统能够实时学习网络行为模式,有效区分正常行为与潜在威胁。同时,文中探讨了模型训练过程中的数据增强、对抗性样本生成以及模型蒸馏等技术的应用,以提升模型的泛化能力和鲁棒性。
|
7月前
|
机器学习/深度学习 数据采集 监控
探索机器学习在金融欺诈检测中的应用
【5月更文挑战第30天】在金融交易的复杂网络中,欺诈行为日益猖獗,传统的检测方法逐渐显得力不从心。随着人工智能技术的飞速发展,机器学习因其强大的数据分析和模式识别能力成为打击金融欺诈的新利器。本文将深入探讨机器学习在金融欺诈检测领域的应用情况,分析其优势与挑战,并展望其在未来的发展前景。
|
3月前
|
机器学习/深度学习 安全 网络安全
利用机器学习优化网络安全威胁检测
【9月更文挑战第20天】在数字时代,网络安全成为企业和个人面临的重大挑战。传统的安全措施往往无法有效应对日益复杂的网络攻击手段。本文将探讨如何通过机器学习技术来提升威胁检测的效率和准确性,旨在为读者提供一种创新的视角,以理解和实施机器学习在网络安全中的应用,从而更好地保护数据和系统免受侵害。
|
3月前
|
机器学习/深度学习 算法 数据可视化
如何在机器学习中检测异常值
如何在机器学习中检测异常值
|
6月前
|
机器学习/深度学习 算法 网络安全
机器学习在网络安全威胁检测与防御中有广泛的应用
机器学习在网络安全威胁检测与防御中有广泛的应用
44 1
|
6月前
|
机器学习/深度学习 数据采集 安全
【机器学习】安全领域:突破威胁检测的边界
【机器学习】安全领域:突破威胁检测的边界
91 1
|
6月前
|
机器学习/深度学习 数据采集 运维
构建基于机器学习的异常检测系统
【6月更文挑战第7天】构建基于机器学习的异常检测系统,通过收集和预处理数据,进行特征提取和选择,然后选择SVM、随机森林等算法训练模型。评估指标包括准确率、召回率、F1值,旨在识别安全威胁、系统故障等异常,保障系统稳定。未来将持续优化性能并探索新技术。
|
7月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】怎样检测到线性回归模型中的过拟合?
【5月更文挑战第17天】【机器学习】怎样检测到线性回归模型中的过拟合?
|
7月前
|
机器学习/深度学习 运维 算法
利用机器学习进行异常检测的技术实践
【5月更文挑战第16天】本文探讨了利用机器学习进行异常检测的技术实践,强调了在大数据时代异常检测的重要性。机器学习通过无监督、有监督和半监督学习方法自动识别异常,常见算法包括KNN、LOF、K-means和GMM等。异常检测流程包括数据准备、特征工程、选择算法、训练模型、评估优化及部署。机器学习为异常检测提供了灵活性和准确性,但需结合具体问题选择合适方法。
|
6月前
|
机器学习/深度学习 算法 Windows
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机