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

python+opencv最簡單的人臉識別入門

這篇具有很好參考價值的文章主要介紹了python+opencv最簡單的人臉識別入門。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

0前置操作

  1. 安裝python(最新3.10即可)
  2. 安裝pycharm(社區(qū)版即可)
  3. 安裝opencv-python(cmd輸入pip install opencv-python即可,嫌慢用國內(nèi)鏡像也可以)
  4. 后續(xù)也需要安裝opencv-contrib-python

1讀取圖片

# 導入cv2模塊,別名為cv
import cv2 as cv

# 讀取圖片
img = cv.imread("face1.jpg")

# 顯示窗口到窗口上,窗口名就是read_img
cv.imshow("read_img", img)

# 窗口等待 0為不自動關(guān)閉 其他數(shù)值為等待時間,單位為毫秒,返回為按鍵的ASCII
key = cv.waitKey(0)  # 此代碼不寫會閃現(xiàn)窗口

# 釋放內(nèi)存,銷毀窗口
cv.destroyAllWindows()

結(jié)果是直接在窗口直接顯示圖片

2灰度轉(zhuǎn)換

# 導入cv模塊
import cv2 as cv

# 讀取圖片
img = cv.imread("face1.jpg")
# 灰度轉(zhuǎn)換
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 窗口顯示灰度圖
cv.imshow("gray", gray_img)
# 保存灰度圖
cv.imwrite("face1_gray.jpg", gray_img)
# 顯示原圖
cv.imshow("img", img)
# 等待
cv.waitKey(0)
# 銷毀
cv.destroyAllWindows()

python+opencv最簡單的人臉識別入門

灰度圖與原始圖比較

3修改尺寸

import cv2 as cv

# 讀取原圖
img = cv.imread("face1.jpg")

# 修改尺寸
resize_img = cv.resize(img, dsize=(200, 200))
# 顯示原圖
cv.imshow("img", img)
# 顯示修改圖,最大化也是修改后的圖
cv.imshow("resize_img", resize_img)

# 打印修改前后的圖片尺寸信息
print("未修改", img.shape)
print("修改后", resize_img.shape)

# 按鍵為q時退出窗口等待
while True:
    if ord('q') == cv.waitKey(0):
        break

# 釋放內(nèi)存,銷毀窗口
cv.destroyAllWindows()

4繪制矩形或圓形(涉及人臉框使用)

import cv2 as cv

img = cv.imread("face1.jpg")

x, y, w, h = 100, 100, 100, 100
# 坐標軸以橫向右為x軸正方向,以縱向下為y軸正方向
# 畫矩形框(2個點可以確定一個邊與x軸y軸垂直或平行的矩形) color(b,g,r)  thickness厚度
cv.rectangle(img, (x, y, x + w, y + h), color=(0, 0, 255), thickness=1)

# 畫圓形(圓點+半徑即可畫一個圓)
cv.circle(img, center=(x + w, y + h), radius=100, color=(0, 255, 0), thickness=1)

# 顯示
cv.imshow("img", img)

while True:
    if ord('q') == cv.waitKey(0):
        break

cv.destroyAllWindows()

python+opencv最簡單的人臉識別入門

5人臉識別

import cv2 as cv


# 檢測函數(shù) 檢索
def face_detect_demo():
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 轉(zhuǎn)為灰度圖片
    #電腦本地路徑為E:/2022soft/py310/Lib/site-packages/cv2/data
    face_detect = cv.CascadeClassifier("haarcascade/haarcascade_frontalface_alt2.xml")  # 級聯(lián)分類器
    # gray表示傳入的灰度圖(快速查詢) 1.1表示每次搜索窗口依次擴大10% 5表示構(gòu)成檢測目標的相鄰矩形的最小個數(shù)(默認為3個) (100,100)表示最小人臉大小 (300,300)表示最大人臉大小
    face = face_detect.detectMultiScale(gray, 1.1, 5, cv.CASCADE_SCALE_IMAGE, (30, 30), (200, 200))
    # 遍歷所有人臉的位置信息,包括人臉位置及大小
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=1)  # 畫出識別出來的人臉框
    cv.imshow("result", img)


# 讀取圖片
img = cv.imread("p4.jpg")
# 檢測圖片
face_detect_demo()

while True:
    if ord('q') == cv.waitKey(0):
        break

cv.destroyAllWindows()

運行如下(疑似歪頭馬斯克沒被識別出來)

python+opencv最簡單的人臉識別入門

6多人臉檢測

import cv2 as cv


# 檢測函數(shù) 檢索
def face_detect_demo():
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 轉(zhuǎn)為灰度圖片
    face_detect = cv.CascadeClassifier("haarcascade/haarcascade_frontalface_default.xml")  # 級聯(lián)分類器
    face = face_detect.detectMultiScale(gray, minSize=(30, 30))  # 檢索人臉
    # 遍歷所有人臉的位置信息,包括人臉位置及大小
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=1)  # 畫出識別出來的人臉框
    cv.imshow("result", img)


# 讀取圖片
img = cv.imread("p3.jpg")
# 檢測圖片
face_detect_demo()

while True:
    if ord('q') == cv.waitKey(0):
        break

cv.destroyAllWindows()

7視頻檢測

import cv2 as cv


# 檢測函數(shù) 檢索 畫框
def face_detect_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 轉(zhuǎn)為灰度圖片
    face_detect = cv.CascadeClassifier("haarcascade/haarcascade_frontalface_default.xml")  # 級聯(lián)分類器
    face = face_detect.detectMultiScale(gray, minSize=(30, 30))  # 檢索人臉
    # 遍歷所有人臉的位置信息,包括人臉位置及大小
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=1)  # 畫出識別出來的人臉框
    cv.imshow("result", img)


# cap =cv.VideoCapture(0)#攝像頭取數(shù)據(jù)
cap = cv.VideoCapture("2.mp4")

while True:
    flag, frame = cap.read()  # 得到狀態(tài)和幀數(shù)據(jù)
    if not flag:
        break
    face_detect_demo(frame)  # 幀數(shù)據(jù)檢索人數(shù)并畫框
    cv.waitKey(1)

cv.destroyAllWindows()
cap.release()

更換了檢測數(shù)據(jù)源,從單張圖片導攝像頭 或視頻文件,本質(zhì)不變,依舊是檢測每一幀的人臉,受限于初始模型的能力,誤識率還是比較高的。文章來源地址http://www.zghlxwxcb.cn/news/detail-439488.html

8拍照保存

import cv2 as cv

# 打開攝像頭
cap = cv.VideoCapture(0)

count = 1

while (cap.isOpened()):  # 檢測攝像頭是否開啟
    ret_flag, Vshow = cap.read()  # 得到每幀數(shù)據(jù)
    cv.imshow("Capture", Vshow)  # 顯示預覽

    k = cv.waitKey(1) & 0xFF  # 按鍵判斷
    if (k == ord('s')):
        cv.imwrite(str(count) + "_camera.jpg", Vshow)  # 保存
        print("Success to save " + str(count) + "_camera.jpg\n")
        count += 1
    elif k == ord(" "):  # 退出
        break
# 釋放攝像頭
cap.release()
# 釋放窗口內(nèi)存
cv.destroyAllWindows()

9訓練人臉(提取人臉特征)

import os
import cv2 as cv
from PIL import Image

import numpy as np


def getImageAndLabels(path):
    # 儲存人臉數(shù)據(jù)
    facesSamples = []
    # 儲存姓名數(shù)據(jù)
    ids = []
    # 儲存圖片信息
    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
    # 加載分類器
    face_detector = cv.CascadeClassifier("haarcascade/haarcascade_frontalface_alt2.xml");
    # 遍歷列表中的圖片
    for imagePath in imagePaths:
        # 打開圖片,灰度化,PIL有9種模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F
        PIL_img = Image.open(imagePath).convert('L')
        # 將圖像轉(zhuǎn)為數(shù)組,以黑白深淺
        img_numpy = np.array(PIL_img, 'uint8')
        # 獲取圖片人臉特征
        faces = face_detector.detectMultiScale(img_numpy)
        # 獲取每張圖片的id和姓名
        id = int(os.path.split(imagePath)[1].split('-')[0])
        # 預防無面容照片
        for x, y, w, h in faces:
            ids.append(id)
            facesSamples.append(img_numpy[y:y + h, x: x + w])

        print('id=', id)
    # 打印面部特征和id
    print('fs=', facesSamples)

    return facesSamples, ids


if __name__ == '__main__':
    # 圖片路徑
    path = "data/face/"
    # 獲取圖像數(shù)組和id標簽數(shù)組和姓名
    faces, ids = getImageAndLabels(path)
    # 加載識別器 這里的face在opencv-contrib-python上,所以,你懂的
    recognizer = cv.face.LBPHFaceRecognizer_create()
    # 訓練
    recognizer.train(faces, np.array(ids))
    # 保存文件
    recognizer.write("trainer/trainer.yml")

10人臉識別

import cv2 as cv
import os


def face_detect_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    face_detector = cv.CascadeClassifier(
        "haarcascade/haarcascade_frontalface_default.xml")  # 級聯(lián)分類器
    # gray表示傳入的灰度圖(快速查詢) 1.1表示每次搜索窗口依次擴大10% 5表示構(gòu)成檢測目標的相鄰矩形的最小個數(shù)(默認為3個) (100,100)表示最小人臉大小 (300,300)表示最大人臉大小
    face = face_detector.detectMultiScale(gray, 1.1, 5, cv.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=1)
        ids, confidence = recognizer.predict(gray[y:y + h, x:x + w])
        if confidence > 80:#差別較大,當做不認識
            cv.putText(img, "unknow" + str(confidence), (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
        else:
            cv.putText(img, str(names[ids - 1]) + str(confidence), (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75,
                       (0, 255, 0), 1)
    cv.imshow("result", img)


def getName():
    path = 'data/face/'
    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)


names = []

getName()
recognizer = cv.face.LBPHFaceRecognizer_create()

recognizer.read('trainer/trainer.yml')#加載人臉特征值,之前訓練出來的

warningtime = 0

img = cv.imread("p6.jpg")#識別圖片
face_detect_demo(img)
cv.waitKey(0)

cap = cv.VideoCapture("2.mp4")
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)#視頻每一幀識別

    cv.waitKey(1)

11網(wǎng)絡視頻播放

import cv2


class CaptureVideo(object):
    def net_video(self):
        # 獲取網(wǎng)絡視頻流
        cam = cv2.VideoCapture("rtmp://media3.scctv.net/live/scctv_800")#好不容易找到一個可以播放的視頻源
        while cam.isOpened():
            sucess, frame = cam.read()
            cv2.imshow("Network", frame)
            cv2.waitKey(1)


if __name__ == "__main__":
    capture_video = CaptureVideo()
    capture_video.net_video()
整個流程就over了。
感謝嗶哩嗶哩UP主-會AI的哈利波特的視頻分享-https://www.bilibili.com/video/BV1dT4y1z7it,煩請多多三連。
UP主已貼了代碼,但我自己全手動敲了一遍,對小白來說,收益匪淺。
雖然識別的時候有一定(很大)的誤識率,甚至出現(xiàn)一些好笑(智障)的效果,但是,真的超級簡單,十分適合opencv+python的入門。
僅以此文開啟opencv的整體學習。
針對pycharm引入opencv-python后無法跳轉(zhuǎn)/自動提示等問題,問題在于高版本opencv-python與pycharm適配問題,使用低版本即可,如版本=4.5.5.64
本人github

到了這里,關(guān)于python+opencv最簡單的人臉識別入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 使用opencv實現(xiàn)簡單的人臉識別

    使用opencv實現(xiàn)簡單的人臉識別

    opencv-python是一個python綁定庫,旨在解決計算機視覺問題。使用opencv模塊,可以實現(xiàn)一些對圖片和視頻的操作。 安裝opencv之前需要先安裝numpy,?matplotlib。然后使用pip安裝opencv庫即可。 使用import cv2進行導入即可,需要注意的是cv2讀取圖片的顏色通道是BGR(藍綠紅)。 使用cv2.

    2023年04月19日
    瀏覽(21)
  • OpenCV--人臉識別入門

    OpenCV--人臉識別入門

    本次用的數(shù)據(jù)集是opencv給出的教程里面的第一個數(shù)據(jù)集:??The ATT Facedatabase??,又稱為ORL人臉數(shù)據(jù)庫,40個人,每人10張照片。照片在不同時間、不同光照、不同表情(睜眼閉眼、笑或者不笑)、不同人臉細節(jié)(戴眼鏡或者不戴眼鏡)下采集。所有的圖像都在一個黑暗均勻的背景

    2024年02月07日
    瀏覽(21)
  • OpenCV 入門教程:人臉識別和特征提取

    人臉識別是計算機視覺中的熱門研究領(lǐng)域,通過對人臉圖像或視頻進行分析和比對,實現(xiàn)對個體身份的自動識別。人臉特征提取是人臉識別中的重要步驟,它用于從人臉圖像中

    2024年02月13日
    瀏覽(24)
  • 人臉識別實戰(zhàn):使用Python OpenCV 和深度學習進行人臉識別

    人臉識別實戰(zhàn):使用Python OpenCV 和深度學習進行人臉識別

    首先簡要討論基于深度學習的面部識別的工作原理,包括“深度度量學習”的概念。 然后,我將幫助您安裝實際執(zhí)行人臉識別所需的庫。 最后,我們將為靜止圖像和視頻流實現(xiàn)人臉識別。 安裝人臉識別庫 ================================================================== 為了使用 Python 和

    2024年04月09日
    瀏覽(94)
  • 人臉識別(python+opencv)

    人臉識別(python+opencv)

    這里我使用的是pycharm(Python集成開發(fā)環(huán)境)2023.1.3版與opencv pycharm下載網(wǎng)址:PyCharm:JetBrains為專業(yè)開發(fā)者提供的Python IDE ?這里下載免費版的。 opencv下載網(wǎng)址:OpenCV - Open Computer Vision Library ?點擊Libray--Releases-- 4.5.2版本? ? ? ? 如圖先建立項目(如不懂如何操作的可以看一下

    2024年01月22日
    瀏覽(18)
  • 人工智能-OpenCV+Python實現(xiàn)人臉識別(人臉檢測)

    在OpenCV中使用Haar特征檢測人臉,那么需要使用OpenCV提供的xml文件(級聯(lián)表)在haarcascades目錄下。這張級聯(lián)表有一個訓練好的AdaBoost訓練集。首先要采用樣本的Haar特征訓練分類器,從而得到一個級聯(lián)的AdaBoost分類器。Haar特征值反映了圖像的灰度變化情況。例如:臉部的一些特征

    2024年02月06日
    瀏覽(91)
  • Python Opencv實踐 - 人臉識別CascadeClassifier

    Python Opencv實踐 - 人臉識別CascadeClassifier

    ? ? ? ? 參考資料: ????????【Python+OpenCV 人臉檢測—CascadeClassifier 級聯(lián)分類器實現(xiàn)】_LPY。的博客-CSDN博客 ? ? ? ?‘cv::CascadeClassifier::detectMultiScale‘_只要思想不滑坡辦法總比困難多--小魚干的博客-CSDN博客 ?

    2024年02月07日
    瀏覽(13)
  • 軟件杯 圖像識別-人臉識別與疲勞檢測 - python opencv

    軟件杯 圖像識別-人臉識別與疲勞檢測 - python opencv

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 ?? 基于圖像識別的人臉識別與疲勞檢測系統(tǒng) 該項目較為新穎,適合作為競賽課題方向,學長非常推薦! ??學長這里給一個題目綜合評分(每項滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:5分 ?? 更多資料, 項目分享: https://gitee.co

    2024年03月14日
    瀏覽(26)
  • python畢設(shè)選題 - 圖像識別-人臉識別與疲勞檢測 - python opencv

    python畢設(shè)選題 - 圖像識別-人臉識別與疲勞檢測 - python opencv

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學弟學妹告訴學長自己做的項目系統(tǒng)達不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2024年01月16日
    瀏覽(26)
  • 【opencv】python實現(xiàn)人臉檢測和識別訓練

    【opencv】python實現(xiàn)人臉檢測和識別訓練

    OpenCV 中的人臉識別通?;诠柼卣鞣诸惼鳎℉aar Cascade Classifier)進行。以下是 OpenCV 人臉識別的基本原理: Haar Cascade Classifier : 特征分類器 :Haar 特征是一種基于矩形區(qū)域的特征,可以用于圖像中的對象檢測。這些特征可以表示邊緣、線和區(qū)域的變化等。 級聯(lián)分類器 :

    2024年01月17日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包