成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)功能

Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)功能

熱門標(biāo)簽:無(wú)錫智能外呼系統(tǒng)好用嗎 成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 西青語(yǔ)音電銷機(jī)器人哪家好 宿州電話機(jī)器人哪家好 百應(yīng)電話機(jī)器人總部 電梯新時(shí)達(dá)系統(tǒng)外呼顯示e 旅游廁所地圖標(biāo)注怎么弄 地圖標(biāo)注與注銷 南昌地圖標(biāo)注

一、人臉圖像特征提取方法

https://www.jb51.net/article/219446.htm

二、對(duì)笑臉數(shù)據(jù)集genki4k進(jìn)行訓(xùn)練和測(cè)試(包括SVM、CNN),輸出模型訓(xùn)練精度和測(cè)試精度(F1-score和ROC),實(shí)現(xiàn)檢測(cè)圖片笑臉和實(shí)時(shí)視頻笑臉檢測(cè)

(一)環(huán)境、數(shù)據(jù)集準(zhǔn)備

本文操作在Jupyter notebook平臺(tái)進(jìn)行,需要安裝tensorflow、Keras庫(kù)、Dlib庫(kù)、和opencv-python等。
1、安裝tensorflow、Keras庫(kù)
https://www.jb51.net/article/219425.htm

2、win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟詳解
https://www.jb51.net/article/171039.htm
3、笑臉數(shù)據(jù)集下載
笑臉數(shù)據(jù)集下載鏈接: http://xiazai.jb51.net/202108/yuanma/smils_jb51.rar

(二)訓(xùn)練笑臉數(shù)據(jù)集genki4k

1、首先導(dǎo)入Keras庫(kù)

import keras
keras.__version__


2、讀取笑臉數(shù)據(jù)集,然后將訓(xùn)練的數(shù)據(jù)和測(cè)試數(shù)據(jù)放入對(duì)應(yīng)的文件夾

import os, shutil
# The path to the directory where the original
# dataset was uncompressed
original_dataset_dir = 'C:\\Users\\asus\\Desktop\\test\\genki4k'

# The directory where we will
# store our smaller dataset
base_dir = 'C:\\Users\\asus\\Desktop\\test\\smile_and_nosmile'
os.mkdir(base_dir)

# Directories for our training,
# validation and test splits
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)

# Directory with our training smile pictures
train_smile_dir = os.path.join(train_dir, 'smile')
os.mkdir(train_smile_dir)

# Directory with our training nosmile pictures
train_nosmile_dir = os.path.join(train_dir, 'nosmile')
os.mkdir(train_nosmile_dir)

# Directory with our validation smile pictures
validation_smile_dir = os.path.join(validation_dir, 'smile')
os.mkdir(validation_smile_dir)

# Directory with our validation nosmile pictures
validation_nosmile_dir = os.path.join(validation_dir, 'nosmile')
os.mkdir(validation_nosmile_dir)

# Directory with our validation smile pictures
test_smile_dir = os.path.join(test_dir, 'smile')
os.mkdir(test_smile_dir)

# Directory with our validation nosmile pictures
test_nosmile_dir = os.path.join(test_dir, 'nosmile')
os.mkdir(test_nosmile_dir)


3、將笑臉圖片和非笑臉圖片放入對(duì)應(yīng)文件夾
在上面程序中生成了一個(gè)名為smile_and_nosmile的文件夾,里面有三個(gè)子文件,分別存放訓(xùn)練、測(cè)試、驗(yàn)證數(shù)據(jù),在這三個(gè)文件夾下還有smile和nosmile文件夾,我們需要將笑臉圖片放入smile文件夾,將非笑臉圖片放入nosmile文件夾。



3、打印每個(gè)數(shù)據(jù)集文件中的笑臉和非笑臉圖片數(shù)

print('total training smile images:', len(os.listdir(train_smile_dir)))
print('total training nosmile images:', len(os.listdir(train_nosmile_dir)))
print('total validation smile images:', len(os.listdir(validation_smile_dir)))
print('total validation nosmile images:', len(os.listdir(validation_nosmile_dir)))
print('total test smile images:', len(os.listdir(test_smile_dir)))
print('total test nosmile images:', len(os.listdir(test_nosmile_dir)))

4、構(gòu)建小型卷積網(wǎng)絡(luò)

我們已經(jīng)為MNIST構(gòu)建了一個(gè)小型卷積網(wǎng),所以您應(yīng)該熟悉它們。我們將重用相同的通用結(jié)構(gòu):我們的卷積網(wǎng)將是一個(gè)交替的Conv2D(激活relu)和MaxPooling2D層的堆棧。然而,由于我們處理的是更大的圖像和更復(fù)雜的問(wèn)題,因此我們將使我們的網(wǎng)絡(luò)相應(yīng)地更大:它將有一個(gè)更多的Conv2D + MaxPooling2D階段。這樣既可以擴(kuò)大網(wǎng)絡(luò)的容量,又可以進(jìn)一步縮小特征圖的大小,這樣當(dāng)我們到達(dá)平坦層時(shí),特征圖就不會(huì)太大。在這里,由于我們從大小為150x150的輸入開始(有點(diǎn)隨意的選擇),我們?cè)贔latten層之前得到大小為7x7的feature map。

注意:feature map的深度在網(wǎng)絡(luò)中逐漸增加(從32到128),而feature map的大小在減少(從148x148到7x7)。這是你會(huì)在幾乎所有convnets中看到的模式。由于我們解決的是一個(gè)二元分類問(wèn)題,我們用一個(gè)單一單元(一個(gè)大小為1的稠密層)和一個(gè)s型激活來(lái)結(jié)束網(wǎng)絡(luò)。這個(gè)單元將對(duì)網(wǎng)絡(luò)正在查看一個(gè)類或另一個(gè)類的概率進(jìn)行編碼。

from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
                        input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

讓我們來(lái)看看要素地圖的尺寸是如何隨每個(gè)連續(xù)圖層而變化的

model.summary()

讓我們來(lái)看看特征地圖的尺寸是如何隨著每一個(gè)連續(xù)的層:為我們編譯步驟,我們將一如既往地使用RMSprop優(yōu)化器。由于我們用一個(gè)單一的乙狀結(jié)腸單元結(jié)束我們的網(wǎng)絡(luò),我們將使用二進(jìn)制交叉熵作為我們的損失

from keras import optimizers

model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=['acc'])

5、數(shù)據(jù)預(yù)處理

在將數(shù)據(jù)輸入到我們的網(wǎng)絡(luò)之前,應(yīng)該將數(shù)據(jù)格式化為經(jīng)過(guò)適當(dāng)預(yù)處理的浮點(diǎn)張量。目前,我們的數(shù)據(jù)以JPEG文件的形式保存在硬盤上,因此將其導(dǎo)入網(wǎng)絡(luò)的步驟大致如下:

  • 讀取圖片文件
  • 解碼JPEG內(nèi)容到RBG像素網(wǎng)格
  • 把它們轉(zhuǎn)換成浮點(diǎn)張量
  • 將像素值(從0到255)縮放到[0,1]區(qū)間
from keras.preprocessing.image import ImageDataGenerator

# All images will be rescaled by 1./255
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        # This is the target directory
        train_dir,
        # All images will be resized to 150x150
        target_size=(150, 150),
        batch_size=20,
        # Since we use binary_crossentropy loss, we need binary labels
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        validation_dir,
        target_size=(150, 150),
        batch_size=20,
        class_mode='binary')

讓我們看看其中一個(gè)生成器的輸出:它生成150×150 RGB圖像的批次(Shape(20,150,150,3))和二進(jìn)制標(biāo)簽(Shape(20,))。20是每批樣品的數(shù)量(批次大小)。注意,生成器無(wú)限期地生成這些批:它只是無(wú)休止地循環(huán)目標(biāo)文件夾中的圖像。因此,我們需要在某個(gè)點(diǎn)中斷迭代循環(huán)。

for data_batch, labels_batch in train_generator:
    print('data batch shape:', data_batch.shape)
    print('labels batch shape:', labels_batch.shape)
    break

使用生成器使我們的模型適合于數(shù)據(jù)

history = model.fit_generator(
      train_generator,
      steps_per_epoch=100,
      epochs=30,
      validation_data=validation_generator,
      validation_steps=50)

這里使用fit_generator方法來(lái)完成此操作,對(duì)于我們這樣的數(shù)據(jù)生成器,它相當(dāng)于fit方法。它期望Python生成器作為第一個(gè)參數(shù),它將無(wú)限期地生成成批的輸入和目標(biāo),就像我們的示例一樣。因?yàn)閿?shù)據(jù)是不斷生成的,所以在宣告一個(gè)紀(jì)元結(jié)束之前,生成器需要知道示例從生成器中抽取多少樣本。這就是steps_per_epoch參數(shù)的作用:在從生成器中繪制完steps_per_epoch批處理之后,即在運(yùn)行完steps_per_epoch梯度下降步驟之后,擬合過(guò)程將轉(zhuǎn)到下一個(gè)epoch。在我們的例子中,批次是20個(gè)樣本大,所以在我們看到2000個(gè)樣本的目標(biāo)之前將需要100個(gè)批次。

在使用fit_generator時(shí),可以傳遞validation_data參數(shù),就像fit方法一樣。重要的是,允許這個(gè)參數(shù)本身是一個(gè)數(shù)據(jù)生成器,但是它也可以是Numpy數(shù)組的元組。如果您傳遞一個(gè)生成器作為validation_data,那么這個(gè)生成器將會(huì)不斷生成成批的驗(yàn)證數(shù)據(jù),因此您還應(yīng)該指定validation_steps參數(shù),它告訴流程從驗(yàn)證生成器提取多少批來(lái)進(jìn)行評(píng)估。

保存模型

model.save('C:\\Users\\asus\\Desktop\\test\\smile_and_nosmile.h5')

在訓(xùn)練和驗(yàn)證數(shù)據(jù)上繪制模型的損失和準(zhǔn)確性

import matplotlib.pyplot as plt

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()

plt.figure()

plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

這些圖具有過(guò)擬合的特點(diǎn)。我們的訓(xùn)練精度隨著時(shí)間線性增長(zhǎng),直到接近100%,而我們的驗(yàn)證精度停留在70-72%。我們的驗(yàn)證損失在5個(gè)epoch后達(dá)到最小,然后停止,而訓(xùn)練損失繼續(xù)線性下降,直到接近0。
6、數(shù)據(jù)增強(qiáng)
過(guò)度擬合是由于可供學(xué)習(xí)的樣本太少,使我們無(wú)法訓(xùn)練一個(gè)模型來(lái)泛化到新的數(shù)據(jù)。給定無(wú)限的數(shù)據(jù),我們的模型將暴露于手頭數(shù)據(jù)分布的每一個(gè)可能方面:我們永遠(yuǎn)不會(huì)過(guò)度擬合。數(shù)據(jù)增強(qiáng)采用的方法是從現(xiàn)有的訓(xùn)練樣本中生成更多的訓(xùn)練數(shù)據(jù),方法是通過(guò)一系列隨機(jī)變換來(lái)“增強(qiáng)”樣本,從而產(chǎn)生看上去可信的圖像。我們的目標(biāo)是在訓(xùn)練時(shí),我們的模型不會(huì)兩次看到完全相同的圖像。這有助于將模型暴露于數(shù)據(jù)的更多方面,并更好地泛化。

datagen = ImageDataGenerator(
      rotation_range=40,
      width_shift_range=0.2,
      height_shift_range=0.2,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True,
      fill_mode='nearest')
  • rotation_range是一個(gè)角度值(0-180),在這個(gè)范圍內(nèi)可以隨機(jī)旋轉(zhuǎn)圖片
  • width_shift和height_shift是范圍(作為總寬度或高度的一部分),在其中可以隨機(jī)地垂直或水平地轉(zhuǎn)換圖片
  • shear_range用于隨機(jī)應(yīng)用剪切轉(zhuǎn)換
  • zoom_range用于在圖片內(nèi)部隨機(jī)縮放
  • horizontal_flip是用于水平隨機(jī)翻轉(zhuǎn)一半的圖像——當(dāng)沒有假設(shè)水平不對(duì)稱時(shí)(例如真實(shí)世界的圖片)
  • fill_mode是用于填充新創(chuàng)建像素的策略,它可以在旋轉(zhuǎn)或?qū)挾?高度移動(dòng)之后出現(xiàn)。

查看增強(qiáng)后的圖像

# This is module with image preprocessing utilities
from keras.preprocessing import image

fnames = [os.path.join(train_smile_dir, fname) for fname in os.listdir(train_smile_dir)]

# We pick one image to "augment"
img_path = fnames[3]

# Read the image and resize it
img = image.load_img(img_path, target_size=(150, 150))

# Convert it to a Numpy array with shape (150, 150, 3)
x = image.img_to_array(img)

# Reshape it to (1, 150, 150, 3)
x = x.reshape((1,) + x.shape)

# The .flow() command below generates batches of randomly transformed images.
# It will loop indefinitely, so we need to `break` the loop at some point!
i = 0
for batch in datagen.flow(x, batch_size=1):
    plt.figure(i)
    imgplot = plt.imshow(image.array_to_img(batch[0]))
    i += 1
    if i % 4 == 0:
        break

plt.show()

如果我們使用這種數(shù)據(jù)增加配置訓(xùn)練一個(gè)新的網(wǎng)絡(luò),我們的網(wǎng)絡(luò)將永遠(yuǎn)不會(huì)看到兩次相同的輸入。然而,它看到的輸入仍然是高度相關(guān)的,因?yàn)樗鼈儊?lái)自少量的原始圖像——我們不能產(chǎn)生新的信息,我們只能混合現(xiàn)有的信息。因此,這可能還不足以完全消除過(guò)度擬合。

為了進(jìn)一步對(duì)抗過(guò)擬合,我們還將在我們的模型中增加一個(gè)Dropout層,就在密集連接分類器之前:

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
                        input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=['acc'])

用數(shù)據(jù)增強(qiáng)和退出來(lái)訓(xùn)練我們的網(wǎng)絡(luò):

train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,)

# Note that the validation data should not be augmented!
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        # This is the target directory
        train_dir,
        # All images will be resized to 150x150
        target_size=(150, 150),
        batch_size=32,
        # Since we use binary_crossentropy loss, we need binary labels
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        validation_dir,
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

history = model.fit_generator(
      train_generator,
      steps_per_epoch=100,
      epochs=100,
      validation_data=validation_generator,
      validation_steps=50)

這里程序會(huì)跑很久,我跑了幾個(gè)小時(shí),用GPU跑會(huì)快很多很多。

保存模型在convnet可視化部分使用:

model.save('C:\\Users\\asus\\Desktop\\test\\smile_and_nosmile_1.h5')

再看一次結(jié)果

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()

plt.figure()

plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

由于數(shù)據(jù)的增加和遺漏,我們不再過(guò)度擬合:訓(xùn)練曲線相當(dāng)緊密地跟蹤驗(yàn)證曲線。我們現(xiàn)在能夠達(dá)到82%的精度,相對(duì)于非正則化模型有15%的改進(jìn)。通過(guò)進(jìn)一步利用正則化技術(shù)和調(diào)整網(wǎng)絡(luò)參數(shù)(比如每個(gè)卷積層的濾波器數(shù)量,或者網(wǎng)絡(luò)中的層數(shù)),我們可能能夠獲得更好的精度,可能達(dá)到86-87%。

7、優(yōu)化提高笑臉圖像分類模型精度
構(gòu)建卷積網(wǎng)絡(luò)

from keras import layers
from keras import models
from keras import optimizers
model = models.Sequential()
#輸入圖片大小是150*150 3表示圖片像素用(R,G,B)表示
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(150 , 150, 3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=optimizers.RMSprop(lr=1e-4),
             metrics=['acc'])
model.summary()

(三)圖片笑臉檢測(cè)

# 單張圖片進(jìn)行判斷  是笑臉還是非笑臉
import cv2
from keras.preprocessing import image
from keras.models import load_model
import numpy as np

model = load_model('smile_and_nosmile_1.h5')

img_path='C:\\Users\\asus\\Desktop\\test\\genki4k\\file2227.jpg'

img = image.load_img(img_path, target_size=(150, 150))
#img1 = cv2.imread(img_path,cv2.IMREAD_GRAYSCALE)
#cv2.imshow('wname',img1)
#cv2.waitKey(0)

#print(img.size)
img_tensor = image.img_to_array(img)/255.0
img_tensor = np.expand_dims(img_tensor, axis=0)

prediction =model.predict(img_tensor)  
print(prediction)
if prediction[0][0]>0.5:
    result='smile'
else:
    result='nosmile'
print(result)



結(jié)果正確,錯(cuò)誤率在0.0883181左右,反復(fù)找圖片嘗試,結(jié)果都是正確的。

(四)實(shí)時(shí)視頻笑臉檢測(cè)

import cv2
from keras.preprocessing import image
from keras.models import load_model
import numpy as np
import dlib
from PIL import Image
model = load_model('smile_and_nosmile_1.h5')
detector = dlib.get_frontal_face_detector()
video=cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
def rec(img):
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dets=detector(gray,1)
    if dets is not None:
        for face in dets:
            left=face.left()
            top=face.top()
            right=face.right()
            bottom=face.bottom()
            cv2.rectangle(img,(left,top),(right,bottom),(0,255,0),2)
            img1=cv2.resize(img[top:bottom,left:right],dsize=(150,150))
            img1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
            img1 = np.array(img1)/255.
            img_tensor = img1.reshape(-1,150,150,3)
            prediction =model.predict(img_tensor)    
            print(prediction)
            if prediction[0][0]0.5:
                result='nosmile'
            else:
                result='smile'
            cv2.putText(img, result, (left,top), font, 2, (0, 255, 0), 2, cv2.LINE_AA)
        cv2.imshow('smile detector', img)
while video.isOpened():
    res, img_rd = video.read()
    if not res:
        break
    rec(img_rd)
    if cv2.waitKey(1)  0xFF == ord('q'):
        break
video.release()
cv2.destroyAllWindows()


視頻檢測(cè)正確,就是背景太黑了…

三、將笑臉數(shù)據(jù)集換成人臉口罩?jǐn)?shù)據(jù)集,并對(duì)口罩?jǐn)?shù)據(jù)集進(jìn)行訓(xùn)練,編寫程序?qū)崿F(xiàn)人臉口罩檢測(cè)

(一)訓(xùn)練人臉口罩?jǐn)?shù)據(jù)集

人臉口罩?jǐn)?shù)據(jù)集下載鏈接:

http://xiazai.jb51.net/202108/yuanma/mask_jb51.rar

訓(xùn)練人臉口罩?jǐn)?shù)據(jù)集和訓(xùn)練笑臉數(shù)據(jù)集一樣,只需改一下和相應(yīng)的變量名和數(shù)據(jù)集。

(二)編程實(shí)現(xiàn)人臉口罩檢測(cè)

import cv2
from keras.preprocessing import image
from keras.models import load_model
import numpy as np
import dlib
from PIL import Image
model = load_model('mask_and_nomask.h5')
detector = dlib.get_frontal_face_detector()
video=cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
def rec(img):
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dets=detector(gray,1)
    if dets is not None:
        for face in dets:
            left=face.left()
            top=face.top()
            right=face.right()
            bottom=face.bottom()
            cv2.rectangle(img,(left,top),(right,bottom),(0,255,0),2)
            img1=cv2.resize(img[top:bottom,left:right],dsize=(150,150))
            img1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
            img1 = np.array(img1)/255.
            img_tensor = img1.reshape(-1,150,150,3)
            prediction =model.predict(img_tensor)    
            print(prediction)
            if prediction[0][0]>0.5:
                result='nomask'
            else:
                result='mask'
            cv2.putText(img, result, (left,top), font, 2, (0, 255, 0), 2, cv2.LINE_AA)
        cv2.imshow('mask detector', img)
while video.isOpened():
    res, img_rd = video.read()
    if not res:
        break
    rec(img_rd)
    if cv2.waitKey(1)  0xFF == ord('q'):
        break
video.release()
cv2.destroyAllWindows()

運(yùn)行結(jié)果:
不戴口罩

戴口罩

人臉口罩檢測(cè)正確!

雖然人臉口罩檢測(cè)正確,但是精度還是不高,因?yàn)槲业臄?shù)據(jù)集里面戴口罩得的圖像太少了,朋友們可以多找一些戴口罩的圖片以提高精度,后續(xù)我也會(huì)不斷完善~

到此這篇關(guān)于Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)的文章就介紹到這了,更多相關(guān)Python人臉口罩檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python基于Opencv實(shí)現(xiàn)人臉口罩檢測(cè)
  • python使用pygame實(shí)現(xiàn)笑臉乒乓球彈珠球游戲
  • python 利用turtle庫(kù)繪制笑臉和哭臉的例子

標(biāo)簽:贛州 雅安 辛集 七臺(tái)河 渭南 西安 許昌 濰坊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)功能》,本文關(guān)鍵詞  Python,實(shí)現(xiàn),笑臉,檢測(cè),人臉,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)功能》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python實(shí)現(xiàn)笑臉檢測(cè)+人臉口罩檢測(cè)功能的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    free性欧美1819hd| 老太脱裤让老头玩ⅹxxxx| 亚洲韩国日本中文字幕| 色综合小说天天综合网| 免费视频二区| 日韩国产成人无码av毛片| 国产精品日本| 俄罗斯性欧美| 91成人app| 亚洲一区二区三区不卡国产欧美| 美女网站免费观看视频| 国产精品视频免费播放| www.久草.com| 免费网站永久免费观看| 五月国产精品| 精品久久久久久一区| 精品久久久久中文字幕小说| 久热国产视频| 国产福利免费视频| 久久精品男人的天堂| 精品成人久久av| 久操视频在线观看| 2021亚洲天堂| 精品亚洲一区二区三区四区五区高| 欧美激情第一页在线观看| 欧洲视频一区二区三区| 日韩欧美午夜| 亚洲天堂免费av| 日本福利片高清在线观看| 国产素人视频在线观看| 亚洲欧洲在线播放| 亚洲人妻一区二区三区| 国产福利一区二区三区在线视频| 韩日精品视频一区| 樱桃视频免费看| 欧美久久久久久久久| 捆绑裸体绳奴bdsm亚洲| 99在线精品视频| 成人在线视频电影| 欧美国产精品v| 亚洲成人在线视频网站| 日韩有码中文字幕在线| 欧美性生交xxxxxdddd| 亚洲国产综合人成综合网站| 91午夜视频| 欧洲av在线播放| 日韩a一级欧美一级| 一区二区三区精品久久久| 日韩免费电影在线观看| 任我爽在线视频精品一| 久久久久久国产精品mv| 一区二区视频网| 亚欧视频在线观看| 国产精品2018| 夜夜躁日日躁狠狠久久av| 日本熟女一区二区| 国内毛片毛片毛片毛片毛片| 久久久久国产精品免费| 国产又色又爽又黄的| 国产精品1000| 国产精品一区二区不卡视频| 91精品久久久久久蜜臀| 亚洲在线观看视频| 日本在线小视频| 国产精品成人午夜| 欧美插插视频| 亚洲天堂av一区二区| 国产精品二区二区三区| 五月天激情综合网| 不卡一区在线观看| 精品免费一区二区三区蜜桃| 国产高清亚洲一区| av黄色免费在线观看| 亚洲一区www| 九九热在线精品视频| 人成免费在线视频| 在线免费一区| 欧美wwwsss9999| 在线免费观看日韩欧美| 视频一区国产视频| 欧美激情 亚洲| 在线免费视频一区二区| 国产精品一色哟哟哟| 神马午夜伦理不卡| 日本成人中文字幕在线视频| 一区二区三区免费在线视频| www.日韩大片| 亚洲高清在线不卡| 欧美日韩在线成人| 免费人成视频在线播放| 国产女人高潮毛片| 久久精品一偷一偷国产| 亚洲精品免费在线视频| 国产一级淫片a| 性欧美18一19性猛交| 欧美视频在线播放| 欧美大胆a级| 狠狠色噜噜狠狠狠狠色吗综合| 国产日韩一区二区三区| 欧美一级全黄| 亚洲人成网亚洲欧洲无码| 亚洲成人午夜在线| 99精品欧美一区二区蜜桃免费| 日本在线免费观看视频| 久久精品人人| 国产综合精品视频| 欧美高清性猛交| 波多野结衣视频在线播放| 亚洲国产精品无码久久久| 伊人久久精品视频| 性色av一区二区三区在线观看| 香蕉自在线视频| 国产黄a三级三级三级| 久久久久久久一区| 国产精品入口麻豆免费| 日本毛片在线免费观看| 男男视频亚洲欧美| 伊人精品综合| 爱爱免费视频网站| 亚洲精品第五页| 糖心vlog免费在线观看| 日本www高清| 午夜精品美女自拍福到在线| 欧美mv和日韩mv国产网站| 男的插女的下面视频| 成人羞羞动漫| 久久久久久国产精品日本| 亚洲 欧美 激情 另类| av色影在线看免费| 久草视频免费在线播放| 亚洲国产精品一区二区久久| 亚洲国产精品久久久久久6q| 亚洲欧洲日韩一区二区三区| 亚欧洲精品在线视频免费观看| 欧美日韩中文字幕在线视频| 日本wwwwww| 亚洲超碰精品一区二区| 二区三区在线播放| 久久久综合香蕉尹人综合网| 麻豆成人在线看| www.xxx国产| 亚洲激情黄色| 久久人人爽人人人人片| a在线视频播放观看免费观看| 制服.丝袜.亚洲.中文.综合| 欲色天天网综合久久| 欧美激情视频一区二区| 欧美韩日一区二区三区| 91久久久一线二线三线品牌| 亚洲综合色噜噜狠狠| 国内精品二区| 波多野结衣在线中文| 97福利一区二区| 欧美人与性动交α欧美精品济南到| 午夜精品在线| 无套内谢大学处破女www小说| 欧美一区二区三区人| 欧美亚洲日本一区| 国产一区二区三区四区尤物| 伊人久久精品| 天天干 夜夜操| 不卡中文字幕在线| dj大片免费在线观看| 丰满湿润大白屁股bbw按摩| 久久综合色天天久久综合图片| 国产欧美一区视频| 一区二区三区在线视频111| 欧美在线观看天堂一区二区三区| 欧美另类高清videos的特点| 亚洲综合不卡| 亚洲精品第一国产综合野| 国产在线精彩视频| 久久99精品久久久野外观看| 亚洲国产精品热久久| 七七成人影院| ccyy激情综合| 日韩人妻精品无码一区二区三区| 国产麻豆视频一区二区| 久久久久久久久久久9不雅视频| 国产高潮失禁喷水爽到抽搐| 亚洲欧美色图| 亚洲三区在线观看无套内射| 婷婷六月天丁香| 欧美sm精品调教视频| 国产免费美女视频| jizz一区二区| 久久精品国产亚洲高清剧情介绍| 欧美亚洲网站| 亚洲动漫在线观看| 91免费版在线观看| 一二美女精品欧洲| 综合久久国产九一剧情麻豆| 久久女人天堂| 久久99欧美| 国v精品久久久网| 日韩av一级电影| 日韩电影在线免费观看| 国产肉体ⅹxxx137大胆| 日本黄色激情视频| 国产噜噜噜噜噜久久久久久久久| 国产精品视频久久一区| 亚洲国产黄色片| 亚洲欧美日韩中文在线制服| 在线播放日韩导航| 色综合天天色| 欧美一级视频精品观看| 91国内精品久久久| 久久伊人免费视频| 色影视在线观看| 国产一级二级在线| 91精品国产综合久久香蕉最新版| 能看毛片的网站| 久久五月激情| www.com在线观看| 男人操女人免费| 国产成人毛毛毛片| 51精品视频一区二区三区| 成人av在线网| 国产美女视频一区| 成年人网站免费观看| 三级黄色片在线观看| 欧美一级片网址| 国产精品久久国产精麻豆99网站| 最近中文字幕一区二区三区| 中文日韩在线观看| 国产欧美日韩精品专区| 亚洲综合色丁香婷婷六月图片| 最新亚洲人成网站在线观看| 欧美r级电影在线观看| 欧美高清性hdvideosex| 青青草手机在线| 蜜桃久久久久久| 人人做人人草| 四虎av在线| 九色在线观看视频| 精品裸体bbb| 暖暖视频日本免费| 91欧美激情一区二区三区成人| 五月婷婷综合网| 亚洲丝袜一区| 朝桐光av一区二区三区| 欧美成人第一页| 欧美又大又硬又粗bbbbb| 麻豆蜜桃91| 亚洲国产日韩综合久久精品| 2018狠狠干| 鲁丝一区二区三区免费| www视频免费| 九一国产精品| 国产精品激情自拍| 欧美日韩一本到| 狠狠操精品视频| 免费黄色在线视频网站| 爱福利视频一区| av日韩在线网站| 亚洲校园欧美国产另类| 欧美三级午夜理伦三级小说| 天天色图综合网| 成人三级视频在线观看一区二区| 中文字幕一区久| 91精品国产色综合久久ai换脸| 77777少妇光屁股久久一区| 国外色69视频在线观看| 精品孕妇一区二区三区| 亚洲精品91美女久久久久久久| 中文字幕日韩国产| 久久综合婷婷| 亚洲一区二区av| 国产精品免费一区二区三区在线观看| 女人公敌韩国| 亚洲精品视频二区| 精品在线视频一区| 欧美视频中文一区二区三区在线观看| 亚州成人在线电影| 美女免费黄色| 老师我好爽再深一点的视频| ijzzijzzij亚洲大全| 亚洲高清免费| 男人的天堂色| 天天躁日日躁狠狠躁av麻豆男男| 免费网站在线观看黄| 一区二区在线免费观看视频| 91精品免费| 99热在线这里只有精品| 91啪国产在线| 97超碰资源站在线观看| 国产精品成人av| 欧美一级爽aaaaa大片| 国产福利短视频| 国产99久久久国产精品成人免费| 中文字幕视频精品一区二区三区| 国产伦理一区| 久久亚洲综合国产精品99麻豆精品福利| 青青青视频在线| 在线天堂一区av电影| www.成人在线视频| 国产极品精品在线观看| xxxxxx在线观看| 国产成人福利av| av黄色在线观看| 欧美一区在线看| 欧美成人三级| 精品入口麻豆88视频| 不卡的免费av| 麻豆视频传媒入口| 蜜桃传媒视频麻豆第一区免费观看| 国产精品天天狠天天看| 岛国最新视频免费在线观看| 免费网站在线观看黄| 国产一区国产二区国产三区| 国产成人精品三级高清久久91| 欧美精品videossex88| 久久久精品综合| 国产寡妇亲子伦一区二区三区四区| 国产激情一区二区三区在线观看| 久久99久久精品| 国产精品∨欧美精品v日韩精品| 国产黄色av网站| 欧美一区二区三区图| 亚洲精品aaa| 日韩伦理在线电影| 欧美老熟妇一区二区三区| 一区二区三区视频在线播放| 久久综合九色综合97_久久久| 欧美a级片一区| 亚洲午夜激情在线| 欧美成人国产精品高潮| 日韩免费福利视频|