国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python+OpenCV 簡單實(shí)現(xiàn)人臉檢測多個(gè)和人臉識別 2(附代碼)

這篇具有很好參考價(jià)值的文章主要介紹了Python+OpenCV 簡單實(shí)現(xiàn)人臉檢測多個(gè)和人臉識別 2(附代碼)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

如果dilb和face_recognition第三方包安裝失敗,請移步到Python 解決dilb和face_recognition第三方包安裝失敗_水w的博客-CSDN博客

上篇請移步到Python+dilb 簡單實(shí)現(xiàn)人臉檢測(附代碼)_水w的博客-CSDN博客

本篇是在上篇的工作基礎(chǔ)上進(jìn)行的。

目錄

6 人臉檢測多個(gè)

7 視頻檢測

8 拍照保存

9 訓(xùn)練數(shù)據(jù)

解決報(bào)錯(cuò)AttributeError: module 'cv2' has no attribute 'face'

10 人臉識別


6 人臉檢測多個(gè)

整個(gè)代碼如下:?

# 導(dǎo)入cv模塊
import cv2 as cv


# 檢測函數(shù)
def face_detect_demo():
    gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier(
        'D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_detect.detectMultiScale(gary)
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
    cv.imshow('result', img)


# 讀取圖像
img = cv.imread('face2.jpg')
# 檢測函數(shù)
face_detect_demo()
# 等待
while True:
    if ord('q') == cv.waitKey(0):
        break
# 釋放內(nèi)存
cv.destroyAllWindows()

效果如下:?

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

可以看到,大部分的人臉都被檢測出來了。在人數(shù)很多的情況下,有一個(gè)沒有被檢測到,但在簡單的場景下還是能基本完成要求的。

當(dāng)然,我們也可以改變調(diào)用的這個(gè)haarcascade_frontalface_alt2.xml文件,換成該路徑下的其他的,比如haarcascade_frontalface_default.xml,效果會(huì)稍有不同。

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

7 視頻檢測

整個(gè)代碼如下:?

# 導(dǎo)入cv模塊
import cv2 as cv


# 檢測函數(shù)
def face_detect_demo(img):
    gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
    face = face_detect.detectMultiScale(gary)
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
    cv.imshow('result', img)


# 讀取攝像頭
cap = cv.VideoCapture(0)
# 循環(huán)
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)
    if ord('q') == cv.waitKey(1):
        break
# 釋放內(nèi)存
cv.destroyAllWindows()
# 釋放攝像頭
cap.release()

此處就不展示效果了。

8 拍照保存

整個(gè)代碼如下:?

# 導(dǎo)入模塊
import cv2

# 攝像頭
cap = cv2.VideoCapture(0)

falg = 1
num = 1

while (cap.isOpened()):  # 檢測是否在開啟狀態(tài)
    ret_flag, Vshow = cap.read()  # 得到每幀圖像
    cv2.imshow("Capture_Test", Vshow)  # 顯示圖像
    k = cv2.waitKey(1) & 0xFF  # 按鍵判斷
    if k == ord('s'):  # 保存
        cv2.imwrite("D:/mycodetest/opencv/data/jm/" + str(num) + ".123" + ".jpg", Vshow)
        print("success to save" + str(num) + ".jpg")
        print("-------------------")
        num += 1
    elif k == ord(' '):  # 退出
        break
# 釋放攝像頭
cap.release()
# 釋放內(nèi)存
cv2.destroyAllWindows()

此處就不展示效果了。

9 訓(xùn)練數(shù)據(jù)

整個(gè)代碼如下:?

import os
import cv2
import sys
from PIL import Image
import numpy as np


def getImageAndLabels(path):
    facesSamples = []
    ids = []
    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
    # 檢測人臉
    face_detector = cv2.CascadeClassifier(
        'D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    # 打印數(shù)組imagePaths
    print('數(shù)據(jù)排列:', imagePaths)
    # 遍歷列表中的圖片
    for imagePath in imagePaths:
        # 打開圖片,黑白化
        PIL_img = Image.open(imagePath).convert('L')
        # 將圖像轉(zhuǎn)換為數(shù)組,以黑白深淺
        # PIL_img = cv2.resize(PIL_img, dsize=(400, 400))
        img_numpy = np.array(PIL_img, 'uint8')
        # 獲取圖片人臉特征
        faces = face_detector.detectMultiScale(img_numpy)
        # 獲取每張圖片的id和姓名
        id = int(os.path.split(imagePath)[1].split('.')[0])
        # 預(yù)防無面容照片
        for x, y, w, h in faces:
            ids.append(id)
            facesSamples.append(img_numpy[y:y + h, x:x + w])
        # 打印臉部特征和id
        # print('fs:', facesSamples)
        print('id:', id)
        # print('fs:', facesSamples[id])
    print('fs:', facesSamples)
    # print('臉部例子:',facesSamples[0])
    # print('身份信息:',ids[0])
    return facesSamples, ids


if __name__ == '__main__':
    # 圖片路徑
    path = './data/jm/'
    # 獲取圖像數(shù)組和id標(biāo)簽數(shù)組和姓名
    faces, ids = getImageAndLabels(path)
    # 獲取訓(xùn)練對象
    recognizer = cv2.face.LBPHFaceRecognizer_create()
    # recognizer.train(faces,names)#np.array(ids)
    recognizer.train(faces, np.array(ids))
    # 保存文件
    recognizer.write('trainer/trainer.yml')
    # save_to_file('names.txt',names)

效果如下: 會(huì)生成一個(gè)文件,文件的路徑為trainer/trainer.yml。

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

解決報(bào)錯(cuò)AttributeError: module 'cv2' has no attribute 'face'

場景:在使用cv2.face.LBPHFaceRecognizer_create()進(jìn)行人臉識別的操作時(shí),會(huì)出現(xiàn)這樣的提示。

recognizer = cv2.face.LBPHFaceRecognizer_create()

解決方法:之所以出現(xiàn)這種情況,是因?yàn)?strong>缺少了相關(guān)的包。

從官網(wǎng)上我們看到,face模塊實(shí)際上并不是opencv圖書館的一部分。更確切地說,face是部分的的opencv-contrib庫。從自述文件:此存儲(chǔ)庫[ opencv-contrib]用于開發(fā)所謂的“額外”模塊,提供功能。新模塊通常沒有穩(wěn)定的API,并且它們沒有經(jīng)過良好測試。因此,它們不應(yīng)作為官方OpenCV發(fā)行版的一部分發(fā)布,因?yàn)樵搸毂3侄M(jìn)制兼容性,并試圖提供良好的性能和穩(wěn)定性。

(1)首先切換到你所在的環(huán)境(不建議在base環(huán)境中直接下載),接著就是下載我們需要的相關(guān)的包,用清華源下載快。

在pycharm的終端中,執(zhí)行下條命令,

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

安裝成功,看到successfully之后就可以重新運(yùn)行代碼了。

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharmok,問題解決。

10 人臉識別

整個(gè)代碼如下:?

import cv2, os
import numpy as np
# coding=utf-8
import urllib
import urllib.request
import hashlib

# 加載訓(xùn)練數(shù)據(jù)集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('trainer/trainer.yml')
names = []
warningtime = 0


def md5(str):
    import hashlib
    m = hashlib.md5()
    m.update(str.encode("utf8"))
    return m.hexdigest()


statusStr = {
    '0': '短信發(fā)送成功',
    '-1': '參數(shù)不全',
    '-2': '服務(wù)器空間不支持,請確認(rèn)支持curl或者fsocket,聯(lián)系您的空間商解決或者更換空間',
    '30': '密碼錯(cuò)誤',
    '40': '賬號不存在',
    '41': '余額不足',
    '42': '賬戶已過期',
    '43': 'IP地址限制',
    '50': '內(nèi)容含有敏感詞'
}


def warning():
    smsapi = "http://api.smsbao.com/"
    # 短信平臺賬號
    user = '13******10'
    # 短信平臺密碼
    password = md5('*******')
    # 要發(fā)送的短信內(nèi)容
    content = '【報(bào)警】\n原因:檢測到未知人員\n地點(diǎn):xxx'
    # 要發(fā)送短信的手機(jī)號碼
    phone = '*******'

    data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content})
    send_url = smsapi + 'sms?' + data
    response = urllib.request.urlopen(send_url)
    the_page = response.read().decode('utf-8')
    print(statusStr[the_page])


# 準(zhǔn)備識別的圖片
def face_detect_demo(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 轉(zhuǎn)換為灰度
    face_detector = cv2.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_detector.detectMultiScale(gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))
    # face=face_detector.detectMultiScale(gray)
    for x, y, w, h in face:
        cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
        cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
        # 人臉識別
        ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
        # print('標(biāo)簽id:',ids,'置信評分:', confidence)
        if confidence > 80:
            global warningtime
            warningtime += 1
            if warningtime > 100:
                warning()
                warningtime = 0
            cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
        else:
            cv2.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
    cv2.imshow('result', img)
    # print('bug:',ids)


def name():
    path = './data/jm/'
    # names = []
    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
    for imagePath in imagePaths:
        name = str(os.path.split(imagePath)[1].split('.', 2)[1])
        names.append(name)


cap = cv2.VideoCapture('1.mp4')
name()
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)
    if ord(' ') == cv2.waitKey(10):
        break
cv2.destroyAllWindows()
cap.release()
# print(names)

如果大家想要使用代碼中提到的報(bào)警功能,首先需要先去馬上使用更好的短信服務(wù)-短信寶官網(wǎng)這個(gè)網(wǎng)站去注冊登錄,才有賬號。

此處由于我代碼里寫的賬號信息不對,因此pycharm終端輸出的是“密碼錯(cuò)誤”,正常情況下會(huì)顯示發(fā)生短信成功。

效果如下:?

?人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

人臉識別名字標(biāo)簽代碼怎么寫def name():,# 計(jì)算機(jī)視覺cv,python,opencv,pycharm

由于我們數(shù)據(jù)訓(xùn)練只加入了路徑為./data/jm/1.lena.jpg一張圖片,因此當(dāng)執(zhí)行代碼建人臉識別時(shí),它只能識別出這個(gè)叫l(wèi)ena的女孩,其他人臉識別出來都是會(huì)標(biāo)注為“unknow”。文章來源地址http://www.zghlxwxcb.cn/news/detail-793303.html

到了這里,關(guān)于Python+OpenCV 簡單實(shí)現(xiàn)人臉檢測多個(gè)和人臉識別 2(附代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包