日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]遇到的問題:sudo?apt-get?install?python-imaging?安裝過程中提示cache size空間不足。解決:sudo apt-get clean ,然后sudo apt-ge

遇到的問題:sudo?apt-get?install?python-imaging?

安裝過程中提示cache size空間不足。

解決:sudo apt-get clean ,然后sudo apt-get update,再次使用sudo apt-get install “需要安裝的文件”

@author:wepon

@blog:http://blog.csdn.net/u012162613/article/details/43523507


做人臉識(shí)別,首先要檢測出圖片/視頻中的人臉,今天就研究了一下OpenCV的Python接口,把常用的一些功能模塊寫成函數(shù)?;赑ython-OpenCV以及PIL,實(shí)現(xiàn)圖片中人臉的檢測以及截取保存、眼睛檢測、笑臉檢測。下面簡單總結(jié)一下。


一、軟件安裝

安裝Python-OpenCV以及其依賴庫、PIL,通過軟件包管理器安裝即可(Ubuntu系統(tǒng)):


[python]?view plain?copy sudo?apt-get?install?libopencv-*?? sudo?apt-get?install?python-opencv?? sudo?apt-get?install?python-imaging??


安裝完后,在”/usr/share/opencv/haarcascades/”目錄下,可以看到很多的xml文件,如下圖。這些文件保存的就是訓(xùn)練好之后的haar特征,關(guān)于人臉檢測的haar分類器,推薦博文:《淺析人臉檢測之Haar分類器方法》、《目標(biāo)檢測的圖像特征提取之(三)Haar特征》。本文不闡述原理,只介紹怎么用這些xml文件來進(jìn)行人臉檢測。




二、python-opencv實(shí)現(xiàn)人臉檢測


人臉檢測


定義人臉檢測函數(shù)detectFaces(),檢測圖片中所有出現(xiàn)的人臉,并返回人臉的矩形坐標(biāo)(矩形左上、右下頂點(diǎn)坐標(biāo))。使用上面提到的xml文件(haar特征),haarcascades目錄下有好幾個(gè)是關(guān)于人臉檢測的文件,這里選擇haarcascade_frontalface_default.xml,當(dāng)然也可以使用其他的。另外需要注意的是,必須以灰度圖作為haar分類器的輸入。


def?detectFaces(image_name):
????img?=?cv2.imread(image_name)
????face_cascade?=?cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml")
????if?img.ndim?==?3:
????????gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
????else:
????????gray?=?img?#if語句:如果img維度為3,說明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖

????faces?=?face_cascade.detectMultiScale(gray,?1.2,?5)#1.3和5是特征的最小、最大檢測窗口,它改變檢測結(jié)果也會(huì)改變
????result?=?[]
????for?(x,y,width,height)?in?faces:
????????result.append((x,y,x+width,y+height))
????return?result





代碼很好理解,先加載xml文件生成級(jí)聯(lián)分類器face_cascade,然后用這個(gè)級(jí)聯(lián)分類器對(duì)灰度圖進(jìn)行檢測face_cascade.detectMultiScale(gray, 1.2, 5),返回值即圖片中所有人臉的坐標(biāo)(x,y,w,h),在上面的函數(shù)中,我們轉(zhuǎn)化了一下,使得函數(shù)返回的是人臉矩形的左上、右下頂點(diǎn)坐標(biāo)。(注:坐標(biāo)零點(diǎn)即原始圖像左上頂點(diǎn),往下y增加,往右x增加)。

?

截取保存人臉圖

上面的detectFaces函數(shù)我們獲得了圖片中所有人臉的坐標(biāo),在有些時(shí)候,我們希望把人臉截取出來,然后進(jìn)行下一步操作(比如做人臉身份識(shí)別、表情識(shí)別等),保存人臉圖的函數(shù)如下,使用了PIL的Image模塊:

def?saveFaces(image_name):
????faces?=?detectFaces(image_name)
????if?faces:
????????#將人臉保存在save_dir目錄下。
????????#Image模塊:Image.open獲取圖像句柄,crop剪切圖像(剪切的區(qū)域就是detectFaces返回的坐標(biāo)),save保存。
????????save_dir?=?image_name.split('.')[0]+"_faces"
????????os.mkdir(save_dir)
????????count?=?0
????????for?(x1,y1,x2,y2)?in?faces:
????????????file_name?=?os.path.join(save_dir,str(count)+".jpg")
????????????Image.open(image_name).crop((x1,y1,x2,y2)).save(file_name)
????????????count+=1

?

?

框出人臉

有些時(shí)候,為了展示或者方便觀察,需要在原始圖像上框出人臉,用矩形將人臉框出,這個(gè)功能的實(shí)現(xiàn)如下,主要用到PIL的ImageDraw模塊(另外,opencv也有畫矩形工具,也可以實(shí)現(xiàn)):

#在原圖像上畫矩形,框出所有人臉。
#調(diào)用Image模塊的draw方法,Image.open獲取圖像句柄,ImageDraw.Draw獲取該圖像的draw實(shí)例,然后調(diào)用該draw實(shí)例的rectangle方法畫矩形(矩形的坐標(biāo)即
#detectFaces返回的坐標(biāo)),outline是矩形線條顏色(B,G,R)。
#注:原始圖像如果是灰度圖,則去掉outline,因?yàn)榛叶葓D沒有RGB可言。drawEyes、detectSmiles也一樣。
def?drawFaces(image_name):
????faces?=?detectFaces(image_name)
????if?faces:
????????img?=?Image.open(image_name)
????????draw_instance?=?ImageDraw.Draw(img)
????????for?(x1,y1,x2,y2)?in?faces:
????????????draw_instance.rectangle((x1,y1,x2,y2),?outline=(255,?0,0))
????????img.save('drawfaces_'+image_name)

好了,先看一下效果,運(yùn)行drawFaces(‘obama.jpg’),得到右圖:

運(yùn)行saveFaces(‘obama.jpg’),將在當(dāng)前目錄下生成一個(gè)文件夾,并保存上面框出來的人臉,當(dāng)然,有一些人臉沒被檢測出來,有些不是人臉被誤認(rèn)為人臉。

?

?

眼睛檢測

在haarcascades目錄下,也有一些關(guān)于眼睛檢測的xml文件??梢韵窈瘮?shù)detectFaces()那樣,將檢測face的xml文件換成檢測eyes的xml文件即可。但是,由于眼睛在人臉上,我們往往是先檢測出人臉,再細(xì)入地檢測眼睛。故detectEyes可在detectFaces基礎(chǔ)上來進(jìn)行,代碼中需要注意“相對(duì)坐標(biāo)”。detectEyes()函數(shù)同樣返回所有eyes在原圖中的坐標(biāo)。

def?detectEyes(image_name):
????eye_cascade?=?cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_eye.xml')
????faces?=?detectFaces(image_name)

????img?=?cv2.imread(image_name)
????gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
????result?=?[]
????for?(x1,y1,x2,y2)?in?faces:
????????roi_gray?=?gray[y1:y2,?x1:x2]
????????eyes?=?eye_cascade.detectMultiScale(roi_gray,1.3,2)
????????for?(ex,ey,ew,eh)?in?eyes:
????????????result.append((x1+ex,y1+ey,x1+ex+ew,y1+ey+eh))
????return?result

?

?

框出眼睛

def?drawEyes(image_name):
????eyes?=?detectEyes(image_name)
????if?eyes:
????????img?=?Image.open(image_name)
????????draw_instance?=?ImageDraw.Draw(img)
????????for?(x1,y1,x2,y2)?in?eyes:
????????????draw_instance.rectangle((x1,y1,x2,y2),?outline=(0,?0,255))
????????img.save('draweyes_'+image_name)

運(yùn)行drawEyes(‘obama.jpg’),看下效果,非常差:

?

?

?

笑臉檢測

def?detectSmiles(image_name):
????img?=?cv2.imread(image_name)
????smiles_cascade?=?cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_smile.xml")
????if?img.ndim?==?3:
????????gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
????else:
????????gray?=?img?#if語句:如果img維度為3,說明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖

????smiles?=?smiles_cascade.detectMultiScale(gray,4,5)
????result?=?[]
????for?(x,y,width,height)?in?smiles:
????????result.append((x,y,x+width,y+height))
????return?result

?

?

框出笑臉

def?drawSmiles(image_name):
????smiles?=?detectSmiles(image_name)
????if?smiles:
????????img?=?Image.open(image_name)
????????draw_instance?=?ImageDraw.Draw(img)
????????for?(x1,y1,x2,y2)?in?smiles:
????????????draw_instance.rectangle((x1,y1,x2,y2),?outline=(100,?100,0))
????????img.save('drawsmiles_'+image_name)

運(yùn)行drawSmiles(‘obama.jpg’),看下效果,奧巴馬的眼睛會(huì)笑了:

?

?總之,利用opencv里訓(xùn)練好的haar特征的xml文件,在圖片上檢測出人臉(眼睛、鼻子、笑臉…)的坐標(biāo),利用這個(gè)坐標(biāo),我們可以將人臉區(qū)域剪切保存,也可以在原圖上將人臉框出。剪切保存人臉以及用矩形工具框出人臉,本程序使用的是PIL里的Image、ImageDraw模塊。此外也可以用opencv里的畫圖工具畫矩形。

?

代碼文件放在我的github上:wepe/OpenCV-demo/FaceDetection_python-opencv

參考:

1、OpenCV-Python Tutorials ? Object Detection ??Face Detection using Haar Cascades

2、?Python Imaging Library Handbook

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉