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