最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

結合OpenCV與TensorFlow進行人臉識別的實現(xiàn)

 更新時間:2019年10月10日 15:43:38   作者:奮斗小鵬  
這篇文章主要介紹了結合OpenCV與TensorFlow進行人臉識別的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

作為新手來說,這是一個最簡單的人臉識別模型,難度不大,代碼量也不算多,下面就逐一來講解,數(shù)據(jù)集的準備就不多說了,因人而異。

一. 獲取數(shù)據(jù)集的所有路徑

利用os模塊來生成一個包含所有數(shù)據(jù)路徑的list

def my_face():
  path = os.listdir("./my_faces")
  image_path = [os.path.join("./my_faces/",img) for img in path]
  return image_path
def other_face():
  path = os.listdir("./other_faces")
  image_path = [os.path.join("./other_faces/",img) for img in path]
  return image_path
image_path = my_face().__add__(other_face())  #將兩個list合并成為一個list

二. 構造標簽

標簽的構造較為簡單,1表示本人,0表示其他人。

label_my= [1 for i in my_face()]
 label_other = [0 for i in other_face()]
 label = label_my.__add__(label_other)       #合并兩個list

三.構造數(shù)據(jù)集

利用tf.data.Dataset.from_tensor_slices()構造數(shù)據(jù)集,

def preprocess(x,y):
  x = tf.io.read_file(x)  #讀取數(shù)據(jù)
  x = tf.image.decode_jpeg(x,channels=3) #解碼成jpg格式的數(shù)據(jù)
  x = tf.cast(x,tf.float32) / 255.0   #歸一化
  y = tf.convert_to_tensor(y)				#轉成tensor
  return x,y

data = tf.data.Dataset.from_tensor_slices((image_path,label))
data_loader = data.repeat().shuffle(5000).map(preprocess).batch(128).prefetch(1)

四.構造模型

class CNN_WORK(Model):
  def __init__(self):
    super(CNN_WORK,self).__init__()
    self.conv1 = layers.Conv2D(32,kernel_size=5,activation=tf.nn.relu)
    self.maxpool1 = layers.MaxPool2D(2,strides=2)
    
    self.conv2 = layers.Conv2D(64,kernel_size=3,activation=tf.nn.relu)
    self.maxpool2 = layers.MaxPool2D(2,strides=2)
    
    self.flatten = layers.Flatten()
    self.fc1 = layers.Dense(1024)
    self.dropout = layers.Dropout(rate=0.5)
    self.out = layers.Dense(2)
  
  def call(self,x,is_training=False):
    x = self.conv1(x)
    x = self.maxpool1(x)
    x = self.conv2(x)
    x = self.maxpool2(x)
    
    x = self.flatten(x)
    x = self.fc1(x)
    x = self.dropout(x,training=is_training)
    x = self.out(x)
  
    
    if not is_training:
      x = tf.nn.softmax(x)
    return x
model = CNN_WORK()

在這里插入圖片描述

五.定義損失函數(shù),精度函數(shù),優(yōu)化函數(shù)

def cross_entropy_loss(x,y):
  y = tf.cast(y,tf.int64)
  loss = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,logits=x)
  return tf.reduce_mean(loss)

def accuracy(y_pred,y_true):
  correct_pred = tf.equal(tf.argmax(y_pred,1),tf.cast(y_true,tf.int64))
  return tf.reduce_mean(tf.cast(correct_pred,tf.float32),axis=-1)
optimizer = tf.optimizers.SGD(0.002)  

六.開始跑步我們的模型

def run_optimizer(x,y):
  with tf.GradientTape() as g:
    pred = model(x,is_training=True)
    loss = cross_entropy_loss(pred,y)
  training_variabel = model.trainable_variables
  gradient = g.gradient(loss,training_variabel)
  optimizer.apply_gradients(zip(gradient,training_variabel))
model.save_weights("face_weight") #保存模型  

最后跑的準確率還是挺高的。

在這里插入圖片描述

七.openCV登場

最后利用OpenCV的人臉檢測模塊,將檢測到的人臉送入到我們訓練好了的模型中進行預測根據(jù)預測的結果進行標識。

cap = cv2.VideoCapture(0)

face_cascade = cv2.CascadeClassifier('C:\\Users\Wuhuipeng\AppData\Local\Programs\Python\Python36\Lib\site-packages\cv2\data/haarcascade_frontalface_alt.xml')

while True:
  ret,frame = cap.read()

  gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

  faces = face_cascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(5,5))

  for (x,y,z,t) in faces:
    img = frame[x:x+z,y:y+t]
    try:
      img = cv2.resize(img,(64,64))
      img = tf.cast(img,tf.float32) / 255.0
      img = tf.reshape(img,[-1,64,64,3])
    
      pred = model(img)
      pred = tf.argmax(pred,axis=1).numpy()
    except:
      pass
    if(pred[0]==1):
      cv2.putText(frame,"wuhuipeng",(x-10,y-10),cv2.FONT_HERSHEY_SIMPLEX,1.2,(255,255,0),2)
    
    cv2.rectangle(frame,(x,y),(x+z,y+t),(0,255,0),2)
  cv2.imshow('find faces',frame)
  if cv2.waitKey(1)&0xff ==ord('q'):
    break
cap.release()
cv2.destroyAllWindows()

完整代碼地址github.

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 淺談keras保存模型中的save()和save_weights()區(qū)別

    淺談keras保存模型中的save()和save_weights()區(qū)別

    這篇文章主要介紹了淺談keras保存模型中的save()和save_weights()區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python爬蟲智能翻頁批量下載文件的實例詳解

    python爬蟲智能翻頁批量下載文件的實例詳解

    在本篇文章里小編給大家整理的是一篇關于python爬蟲智能翻頁批量下載文件的實例詳解內(nèi)容,有興趣的朋友們可以學習下。
    2021-02-02
  • Flask?的路由Route詳情

    Flask?的路由Route詳情

    在上一篇Flask?入門Web?微框架Hello?Flask中,我們用?Flask?框架寫了一個?Hello?Flask?應用程序,我們了解到?Flask?框架簡潔高效、可以快速上手,接下來將對?Flask?框架的各項功能詳細的介紹一下,本篇文章介紹的是?Flask?的路由(Route),需要的朋友可以參考一下
    2021-11-11
  • 4行Python代碼生成圖像驗證碼(2種)

    4行Python代碼生成圖像驗證碼(2種)

    這篇文章主要介紹了4行Python代碼生成圖像驗證碼(2種),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python?虛擬環(huán)境的價值和常用命令詳解

    Python?虛擬環(huán)境的價值和常用命令詳解

    在實際項目開發(fā)中,我們通常會根據(jù)自己的需求去下載各種相應的框架庫,如Scrapy、Beautiful?Soup等,但是可能每個項目使用的框架庫并不一樣,或使用框架的版本不一樣,今天給大家分享下Python?虛擬環(huán)境的價值和常用命令,感興趣的朋友一起看看吧
    2022-05-05
  • Pandas中的空字符串(非缺失值)處理方式

    Pandas中的空字符串(非缺失值)處理方式

    這篇文章主要介紹了Pandas中的空字符串(非缺失值)處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 2.7.x 和 3.x 版本的重要區(qū)別小結

    Python 2.7.x 和 3.x 版本的重要區(qū)別小結

    這篇文章主要介紹了Python 2.7.x 和 3.x 版本的重要區(qū)別小結,需要的朋友可以參考下
    2014-11-11
  • python安裝以及IDE的配置教程

    python安裝以及IDE的配置教程

    Python在Linux、windows、Mac os等操作系統(tǒng)下都有相應的版本,不管在什么操作系統(tǒng)下,它都能夠正常工作。除非使用平臺相關功能,或特定平臺的程序庫,否則可以跨平臺使用。今天我們主要來探討下windows系統(tǒng)下的安裝與配置
    2015-04-04
  • Python處理超大規(guī)模數(shù)據(jù)的4大方法詳解

    Python處理超大規(guī)模數(shù)據(jù)的4大方法詳解

    在數(shù)據(jù)的奇妙世界里,數(shù)據(jù)量就像滾雪球一樣,越變越大,從最初的?GB?級別的小數(shù)據(jù)堆,逐漸演變成?TB?級別的數(shù)據(jù)大山,所以本文我們就來看看Python處理超大規(guī)模數(shù)據(jù)的4大武器吧
    2025-05-05
  • Python 識別12306圖片驗證碼物品的實現(xiàn)示例

    Python 識別12306圖片驗證碼物品的實現(xiàn)示例

    這篇文章主要介紹了Python 識別12306圖片驗證碼物品的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01

最新評論

枝江市| 吴堡县| 五河县| 旬邑县| 吴堡县| 枣庄市| 武功县| 富裕县| 新龙县| 宁德市| 定边县| 措勤县| 富顺县| 双柏县| 大邑县| 嵊州市| 涡阳县| 红原县| 新余市| 小金县| 仙桃市| 罗江县| 孝感市| 兴安县| 吴江市| 青海省| 林州市| 郁南县| 永泰县| 天全县| 化德县| 驻马店市| 大渡口区| 鄂托克前旗| 东方市| 永福县| 嫩江县| 兴隆县| 梁平县| 锦州市| 天长市|