Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理
利用Python+opencv實(shí)現(xiàn)從攝像頭捕獲圖像,識(shí)別其中的人眼/人臉,并打上馬賽克。
系統(tǒng)環(huán)境:Windows 7 + Python 3.6.3 + opencv 3.4.2
一、系統(tǒng)、資源準(zhǔn)備
要想達(dá)成該目標(biāo),需要滿足一下幾個(gè)條件:
- 找一臺(tái)帶有攝像頭的電腦,一般筆記本即可;
- 需配有Python3,并安裝NumPy包、opencv;
- 需要有已經(jīng)訓(xùn)練好的分類器,用于識(shí)別視頻中的人臉、人眼等,如無(wú)分類器,可以點(diǎn)擊這里下載:haarcascades分類器
二、動(dòng)手做
1、導(dǎo)入相關(guān)包、設(shè)置視頻格式、調(diào)用攝像頭、指定分類器
import numpy as np import cv2 fourcc = cv2.VideoWriter_fourcc("D", "I", "B", " ") out = cv2.VideoWriter('frame_mosic.MP4',fourcc, 20.0, (640,480)) cv2.namedWindow("CaptureFace") #調(diào)用攝像頭 cap=cv2.VideoCapture(0) #人眼識(shí)別器分類器 classfier=cv2.CascadeClassifier("../haarcascades/haarcascade_eye_tree_eyeglasses.xml")
2、逐幀調(diào)用圖像,并實(shí)時(shí)處理
從攝像頭讀取一幀圖像后,先轉(zhuǎn)化為灰度圖像,然后利用指定的分類器識(shí)別出我們需要的內(nèi)容,接著對(duì)該部分內(nèi)容利用高斯噪聲進(jìn)行覆蓋,以達(dá)成馬賽克的目的。
代碼如下:
while cap.isOpened(): read,frame=cap.read() if not read: break #灰度轉(zhuǎn)換 grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #人臉檢測(cè) Rects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32)) if len(Rects) > 0: for Rect in Rects: x, y, w, h = Rect # 打碼:使用高斯噪聲替換識(shí)別出來(lái)的人眼所對(duì)應(yīng)的像素值 frame[y+10:y+h-10,x:x+w,0]=np.random.normal(size=(h-20,w)) frame[y+10:y+h-10,x:x+w,1]=np.random.normal(size=(h-20,w)) frame[y+10:y+h-10,x:x+w,2]=np.random.normal(size=(h-20,w)) cv2.imshow("CaptureFace",frame) if cv2.waitKey(5)&0xFF==ord('q'): break # 保存視頻 out.write(frame) #釋放相關(guān)資源 cap.release() out.release() cv2.destroyAllWindows()
3、觀察效果
代碼調(diào)用攝像頭并在窗口進(jìn)行了顯示,可以實(shí)時(shí)觀察到圖像處理的效果,如圖:
并將結(jié)果保存為視頻,方便隨時(shí)查看:
完整代碼如下:
# -*- coding: utf-8 -*- import numpy as np import cv2 fourcc = cv2.VideoWriter_fourcc("D", "I", "B", " ") out = cv2.VideoWriter('frame_mosic.MP4',fourcc, 20.0, (640,480)) cv2.namedWindow("CaptureFace") #調(diào)用攝像頭 cap=cv2.VideoCapture(0) #人眼識(shí)別器分類器 classfier=cv2.CascadeClassifier("../haarcascades/haarcascade_eye_tree_eyeglasses.xml") while cap.isOpened(): read,frame=cap.read() if not read: break #灰度轉(zhuǎn)換 grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #人臉檢測(cè) Rects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32)) if len(Rects) > 0: for Rect in Rects: x, y, w, h = Rect # 打碼:使用高斯噪聲替換識(shí)別出來(lái)的人眼所對(duì)應(yīng)的像素值 frame[y+10:y+h-10,x:x+w,0]=np.random.normal(size=(h-20,w)) frame[y+10:y+h-10,x:x+w,1]=np.random.normal(size=(h-20,w)) frame[y+10:y+h-10,x:x+w,2]=np.random.normal(size=(h-20,w)) cv2.imshow("CaptureFace",frame) if cv2.waitKey(5)&0xFF==ord('q'): break # 保存視頻 out.write(frame) #釋放相關(guān)資源 cap.release() out.release() cv2.destroyAllWindows()
利用opencv提供Python接口,可以很方便的進(jìn)行圖像、視頻處理方面的學(xué)習(xí)研究,實(shí)在是很方便。這里把近期所學(xué)做個(gè)簡(jiǎn)單應(yīng)用,后續(xù)再學(xué)習(xí)更深入的知識(shí)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python基于opencv實(shí)現(xiàn)的人臉識(shí)別(適合初學(xué)者)
- python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼
- python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)
- Python基于Opencv來(lái)快速實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解(完整版)
- Python基于OpenCV庫(kù)Adaboost實(shí)現(xiàn)人臉識(shí)別功能詳解
- python調(diào)用OpenCV實(shí)現(xiàn)人臉識(shí)別功能
- python opencv3實(shí)現(xiàn)人臉識(shí)別(windows)
- 基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別
- 使用 Python 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別功能
相關(guān)文章
Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法分析
這篇文章主要介紹了Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python3針對(duì)列表排序的常見(jiàn)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12pycharm中下載的包但是import還是無(wú)法使用/報(bào)紅的解決方法
用pycharm開(kāi)發(fā)時(shí),在導(dǎo)入自己寫(xiě)的python文件時(shí)出現(xiàn)模塊名爆紅的情況,下面這篇文章主要給大家介紹了關(guān)于pycharm中下載包但是import還是無(wú)法使用/報(bào)紅的解決方法,需要的朋友可以參考下2023-02-02python 使用MyQR和qrcode來(lái)制作二維碼
這篇文章主要介紹了python 如何使用MyQR和qrcode來(lái)制作二維碼,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05Python 使用 consul 做服務(wù)發(fā)現(xiàn)示例詳解
這篇文章主要介紹了Python 使用 consul 做服務(wù)發(fā)現(xiàn)示例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Win10系統(tǒng)下安裝編輯器之神(The?God?of?Editor)Vim并且構(gòu)建Python生態(tài)開(kāi)發(fā)環(huán)境過(guò)程(2
這篇文章主要介紹了Win10系統(tǒng)下安裝編輯器之神(The?God?of?Editor)Vim并且構(gòu)建Python生態(tài)開(kāi)發(fā)環(huán)境(2020年最新攻略),本次我們?cè)赪in10平臺(tái)構(gòu)建一套以Vim為核心的Python開(kāi)發(fā)環(huán)境,需要的朋友可以參考下2023-01-01Python實(shí)現(xiàn)串口通信(pyserial)過(guò)程解析
這篇文章主要介紹了Python實(shí)現(xiàn)串口通信(pyserial)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python函數(shù)any()和all()的用法及區(qū)別介紹
any函數(shù):any(x),只要x中有一個(gè)不為空,0,false就返回True,否則返回False。all(x)函數(shù)必須x中的所有元素均不為空,0,false才會(huì)返回True,否則返回False。接下來(lái)通過(guò)本文給大家介紹Python函數(shù)any()和all()的用法及區(qū)別介紹,需要的朋友參考下吧2018-09-09