當前位置:首頁 » 編程語言 » opencvpython人臉

opencvpython人臉

發布時間: 2022-07-23 22:38:23

『壹』 人臉識別為什麼用python開發

可以使用OpenCV,OpenCV的人臉檢測功能在一般場合還是不錯的。而ubuntu正好提供了python-opencv這個包,用它可以方便地實現人臉檢測的代碼。

寫代碼之前應該先安裝python-opencv:

#!/usr/bin/python
#-*-coding:UTF-8-*-

#face_detect.py

#FaceDetectionusingOpenCV.Basedonsamplecodefrom:
#http://python.pastebin.com/m76db1d6b

#Usage:pythonface_detect.py<image_file>

importsys,os
fromopencv.cvimport*
fromopencv.highguiimport*
fromPILimportImage,ImageDraw
frommathimportsqrt

defdetectObjects(image):
""""""
grayscale=cvCreateImage(cvSize(image.width,image.height),8,1)
cvCvtColor(image,grayscale,CV_BGR2GRAY)

storage=cvCreateMemStorage(0)
cvClearMemStorage(storage)
cvEqualizeHist(grayscale,grayscale)

cascade=cvLoadHaarClassifierCascade(
'/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml',
cvSize(1,1))
faces=cvHaarDetectObjects(grayscale,cascade,storage,1.1,2,
CV_HAAR_DO_CANNY_PRUNING,cvSize(20,20))

result=[]
forfinfaces:
result.append((f.x,f.y,f.x+f.width,f.y+f.height))

returnresult

defgrayscale(r,g,b):
returnint(r*.3+g*.59+b*.11)

defprocess(infile,outfile):

image=cvLoadImage(infile);
ifimage:
faces=detectObjects(image)

im=Image.open(infile)

iffaces:
draw=ImageDraw.Draw(im)
forfinfaces:
draw.rectangle(f,outline=(255,0,255))

im.save(outfile,"JPEG",quality=100)
else:
print"Error:cannotdetectfaceson%s"%infile

if__name__=="__main__":
process('input.jpg','output.jpg')

『貳』 python opencv怎麼通過step函數實現人臉檢測

0.下載安裝Opencv,當前版本為249.1.下載Python,當前OPencv版本為249,不過其支持的最新版本的Python為2.7,所以可以下載276版本。2.下載numpy,下載最新的1.8.1版本。3.將Opencv安裝目錄下opencv\build\python\2.7\x86中的cv2.pyd復制到python安裝目錄Lib\site-packages下。4.找到opencv源文件內的draw.py運行。~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕~~手機提問的朋友在客戶端右上角評價點【滿意】即可。~你的採納是我前進的動力~~O(∩_∩)O,記得好評和採納,互相幫助,謝謝。

『叄』 如何用Python實現簡單人臉識別

你可以使用opencv庫提供的人臉識別模塊,這樣子會比較快

『肆』 opencv python是否有人臉

源碼如下:

#!/usr/bin/env python
#coding=utf-8
import os
from PIL import Image, ImageDraw
import cv

def detect_object(image):
'''檢測圖片,獲取人臉在圖片中的坐標'''
grayscale = cv.CreateImage((image.width, image.height), 8, 1)
cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)

cascade = cv.Load("/opt/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml")
rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2,
cv.CV_HAAR_DO_CANNY_PRUNING, (20,20))

result = []
for r in rect:
result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3]))

return result

def process(infile):
'''在原圖上框出頭像並且截取每個頭像到單獨文件夾'''
image = cv.LoadImage(infile);
if image:
faces = detect_object(image)

im = Image.open(infile)
path = os.path.abspath(infile)
save_path = os.path.splitext(path)[0]+"_face"
try:
os.mkdir(save_path)
except:
pass
if faces:
draw = ImageDraw.Draw(im)
count = 0
for f in faces:
count += 1
draw.rectangle(f, outline=(255, 0, 0))

drow_save_path = os.path.join(save_path,"out.jpg")
im.save(drow_save_path, "JPEG", quality=80)
else:
print "Error: cannot detect faces on %s" % infile

if __name__ == "__main__":
process("/Users/zhangdebin/Documents/checkFace2.jpg")

『伍』 python opencv 怎麼利用csv文件訓練人臉識別模型代碼

1.1.介紹Introction
從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進行人臉識別實驗。本文既介紹代碼使用,又介紹演算法原理。(他寫的源代碼,我們可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,當然也可以在他的github中找到,如果你想研究源碼,自然可以去看看,不復雜)

目前支持的演算法有
Eigenfaces特徵臉createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary Patterns Histograms局部二值直方圖 createLBPHFaceRecognizer()
下面所有的例子中的代碼在OpenCV安裝目錄下的samples/cpp下面都能找到,所有的代碼商用或者學習都是免費的。

1.2.人臉識別Face Recognition
對人類來說,人臉識別很容易。文獻[Tu06]告訴我們,僅僅是才三天的嬰兒已經可以區分周圍熟悉的人臉了。那麼對於計算機來說,到底有多難?其實,迄今為止,我們對於人類自己為何可以區分不同的人所知甚少。是人臉內部特徵(眼睛、鼻子、嘴巴)還是外部特徵(頭型、發際線)對於人類識別更有效?我們怎麼分析一張圖像,大腦是如何對它編碼的?David Hubel和TorstenWiesel向我們展示,我們的大腦針對不同的場景,如線、邊、角或者運動這些局部特徵有專門的神經細胞作出反應。顯然我們沒有把世界看成零散的塊塊,我們的視覺皮層必須以某種方式把不同的信息來源轉化成有用的模式。自動人臉識別就是如何從一幅圖像中提取有意義的特徵,把它們放入一種有用的表示方式,然後對他們進行一些分類。基於幾何特徵的人臉的人臉識別可能是最直觀的方法來識別人臉。第一個自動人臉識別系統在[Kanade73]中又描述:標記點(眼睛、耳朵、鼻子等的位置)用來構造一個特徵向量(點與點之間的距離、角度等)。通過計算測試和訓練圖像的特徵向量的歐氏距離來進行識別。這樣的方法對於光照變化很穩健,但也有巨大的缺點:標記點的確定是很復雜的,即使是使用最先進的演算法。一些幾何特徵人臉識別近期工作在文獻[Bru92]中有描述。一個22維的特徵向量被用在一個大資料庫上,單靠幾何特徵不能提供足夠的信息用於人臉識別。

特徵臉方法在文獻[TP91]中有描述,他描述了一個全面的方法來識別人臉:面部圖像是一個點,這個點是從高維圖像空間找到它在低維空間的表示,這樣分類變得很簡單。低維子空間低維是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找擁有最大方差的那個軸。雖然這樣的轉換是從最佳重建角度考慮的,但是他沒有把標簽問題考慮進去。[gm:讀懂這段需要一些機器學習知識]。想像一個情況,如果變化是基於外部來源,比如光照。軸的最大方差不一定包含任何有鑒別性的信息,因此此時的分類是不可能的。因此,一個使用線性鑒別(Linear Discriminant Analysis,LDA)的特定類投影方法被提出來解決人臉識別問題[BHK97]。其中一個基本的想法就是,使類內方差最小的同時,使類外方差最大。
近年來,各種局部特徵提取方法出現。為了避免輸入的圖像的高維數據,僅僅使用的局部特徵描述圖像的方法被提出,提取的特徵(很有希望的)對於局部遮擋、光照變化、小樣本等情況更強健。有關局部特徵提取的方法有蓋伯小波(Gabor Waelets)([Wiskott97]),離散傅立葉變換(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什麼方法來提取時域空間的局部特徵依舊是一個開放性的研究問題,因為空間信息是潛在有用的信息。
1.3.人臉庫Face Database
我們先獲取一些數據來進行實驗吧。我不想在這里做一個幼稚的例子。我們在研究人臉識別,所以我們需要一個真的人臉圖像!你可以自己創建自己的數據集,也可以從這里(http://face-rec.org/databases/)下載一個。
AT&TFacedatabase又稱ORL人臉資料庫,40個人,每人10張照片。照片在不同時間、不同光照、不同表情(睜眼閉眼、笑或者不笑)、不同人臉細節(戴眼鏡或者不戴眼鏡)下採集。所有的圖像都在一個黑暗均勻的背景下採集的,正面豎直人臉(有些有有輕微旋轉)。

『陸』 python opencv怎麼計算人臉識別的准確度

需要opencv,opencv是一個封裝好了的計算機視覺的函數庫,官網就可以下載。
就是下載有點苦難,我就是在下載上面廢了好多時間,主要是網站有問題,裡面沒有合適的鏡像文件,關鍵時刻還是要問大神,一個好人給了我一個鏡像,很快就下載完了。

『柒』 如何使用Python,基於OpenCV與Face++實現人臉解鎖的功能

近幾天微軟的發布會上講到了不少認臉解鎖的內容,經過探索,其實利用手頭的資源我們完全自己也可以完成這樣一個過程。

本文講解了如何使用Python,基於OpenCV與Face++實現人臉解鎖的功能。

本文基於Python 2.7.11,Windows 8.1 系統。

主要內容

  • Windows 8.1上配置OpenCV

  • OpenCV的人臉檢測應用

  • 使用Face++完成人臉辨識(如果你想自己實現這部分的功能,可以借鑒例如這個項目)

  • Windows 8.1上配置OpenCV

    入門的時候配置環境總是一個非常麻煩的事情,在Windows上配置OpenCV更是如此。

    既然寫了這個推廣的科普教程,總不能讓讀者卡在環境配置上吧。

    下面用到的文件都可以在這里(提取碼:b6ec)下載,但是注意,目前OpenCV僅支持Python2.7。

    將cv2加入site-packages

    將下載下來的cv2.pyd文件放入Python安裝的文件夾下的Libsite-packages目錄。

    就我的電腦而言,這個目錄就是C:/Python27/Lib/site-packages/。

    記得不要直接使用pip安裝,將文件拖過去即可。

    安裝numpy組件

    在命令行下進入到下載下來的文件所在的目錄(按住Shift右鍵有在該目錄打開命令行的選項)

    鍵入命令:

    1

  • pip install numpy-1.11.0rc2-cp27-cp27m-win32.whl

  • 如果你的系統或者Python不適配,可以在這里下載別的輪子。

    測試OpenCV安裝

    在命令行鍵入命令:

    1

  • python -c "import cv2"

  • 如果沒有出現錯誤提示,那麼cv2就已經安裝好了。

    OpenCV的人臉檢測應用

    人臉檢測應用,簡而言之就是一個在照片里找到人臉,然後用方框框起來的過程(我們的相機經常做這件事情)

    那麼具體而言就是這樣一個過程:

  • 獲取攝像頭的圖片

  • 在圖片中檢測到人臉的區域

  • 在人臉的區域周圍繪制方框

  • 獲取攝像頭的圖片

    這里簡單的講解一下OpenCV的基本操作。

    以下操作是打開攝像頭的基本操作:

    1

    2

    3

    4

    5

    6

    7

  • #coding=utf8

    import cv2

    # 一般筆記本的默認攝像頭都是0

    capInput = cv2.VideoCapture(0)

    # 我們可以用這條命令檢測攝像頭是否可以讀取數據

    if not capInput.isOpened(): print('Capture failed because of camera')

  • 那麼怎麼從攝像頭讀取數據呢?

    1

    2

    3

    4

    5

    6

    7

    8

  • # 接上段程序

    # 現在攝像頭已經打開了,我們可以使用這條命令讀取圖像

    # img就是我們讀取到的圖像,就和我們使用open('pic.jpg', 'rb').read()讀取到的數據是一樣的

    ret, img = capInput.read()

    # 你可以使用open的方式存儲,也可以使用cv2提供的方式存儲

    cv2.imwrite('pic.jpg', img)

    # 同樣,你可以使用open的方式讀取,也可以使用cv2提供的方式讀取

    img = cv2.imread('pic.jpg')

  • 為了方便顯示圖片,cv2也提供了顯示圖片的方法:

    1

    2

    3

    4

    5

    6

  • # 接上段程序

    # 定義一個窗口,當然也可以不定義

    imgWindowName = 'ImageCaptured'

    imgWindow = cv2.namedWindow(imgWindowName, cv2.WINDOW_NORMAL)

    # 在窗口中顯示圖片

    cv2.imshow(imgWindowName, img)

  • 當然在完成所有操作以後需要把攝像頭和窗口都做一個釋放:

    1

    2

    3

    4

    5

  • # 接上段程序

    # 釋放攝像頭

    capInput.release()

    # 釋放所有窗口

    cv2.destroyAllWindows()

  • 在圖片中檢測到人臉的區域

    OpenCV給我們提供了已經訓練好的人臉的xml模板,我們只需要載入然後比對即可。

    1

    2

    3

    4

    5

    6

    7

    8

  • # 接上段程序

    # 載入xml模板

    faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

    # 將圖形存儲的方式進行轉換

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 使用模板匹配圖形

    faces = faceCascade.detectMultiScale(gray, 1.3, 5)

    print(faces)

  • 在人臉的區域周圍繪制方框

    在上一個步驟中,faces中的四個量分別為左上角的橫坐標、縱坐標、寬度、長度。

    所以我們根據這四個量很容易的就可以繪制出方框。

    1

    2

    3

  • # 接上段程序

    # 函數的參數分別為:圖像,左上角坐標,右下角坐標,顏色,寬度

    img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

  • 成果

    根據上面講述的內容,我們現在已經可以完成一個簡單的人臉辨認了:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

  • #coding=utf8

    import cv2

    print('Press Esc to exit')

    faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

    imgWindow = cv2.namedWindow('FaceDetect', cv2.WINDOW_NORMAL)

    def detect_face():

    capInput = cv2.VideoCapture(0)

    # 避免處理時間過長造成畫面卡頓

    nextCaptureTime = time.time()

    faces = []

    if not capInput.isOpened(): print('Capture failed because of camera')

    while 1:

    ret, img = capInput.read()

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    if nextCaptureTime < time.time():

    nextCaptureTime = time.time() + 0.1

    faces = faceCascade.detectMultiScale(gray, 1.3, 5)

    if faces:

    for x, y, w, h in faces:

    img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    cv2.imshow('FaceDetect', img)

    # 這是簡單的讀取鍵盤輸入,27即Esc的acsii碼

    if cv2.waitKey(1) & 0xFF == 27: break

    capInput.release()

    cv2.destroyAllWindows()

    if __name__ == '__main__':

    detect_face()

  • 使用Face++完成人臉辨識

    第一次認識Face++還是因為支付寶的人臉支付,響應速度還是非常讓人滿意的。

    現在只需要免費注冊一個賬號然後新建一個應用就可以使用了,非常方便。

    他的官方網址是這個,注冊好之後在這里的我的應用中創建應用即可。

    創建好應用之後你會獲得API Key與API Secret。

    Face++的API調用邏輯簡單來說是這樣的:

  • 上傳圖片獲取讀取到的人的face_id

  • 創建Person,獲取person_id(Person中的圖片可以增加、刪除)

  • 比較兩個face_id,判斷是否是一個人

  • 比較face_id與person_id,判斷是否是一個人

  • 上傳圖片獲取face_id

    在將圖片通過post方法上傳到特定的地址後將返回一個json的值。

    如果api_key, api_secret沒有問題,且在上傳的圖片中有識別到人臉,那麼會存儲在json的face鍵值下。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

  • #coding=utf8

    import requests

    # 這里填寫你的應用的API Key與API Secret

    API_KEY = ''

    API_SECRET = ''

    # 目前的API網址是這個,你可以在API文檔里找到這些

    BASE_URL = 'httlus.com/v2'

    # 使用Requests上傳圖片

    url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(

    BASE_URL, API_KEY, API_SECRET)

    files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),

    mimetypes.guess_type(fileDir)[0]), }

    r = requests.post(url, files = files)

    # 如果讀取到圖片中的頭像則輸出他們,其中的'face_id'就是我們所需要的值

    faces = r.json().get('face')

    print faces

  • 創建Person

    這個操作沒有什麼可以講的內容,可以對照這段程序和官方的API介紹。

    官方的API介紹可以見這里,相信看完這一段程序以後你就可以自己完成其餘的API了。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

  • # 上接上一段程序

    # 讀取face_id

    if not faces is None: faceIdList = [face['face_id'] for face in faces]

    # 使用Requests創建Person

    url = '%s/person/create'%BASE_URL

    params = {

    'api_key': API_KEY,

    'api_secret': API_SECRET,

    'person_name': 'LittleCoder',

    'face_id': ','.join(faceIdList), }

    r = requests.get(url, params = params)

    # 獲取person_id

    print r.json.()['person_id']

  • 進度確認

    到目前為止,你應該已經可以就給定的兩張圖片比對是否是同一個人了。

    那麼讓我們來試著寫一下這個程序吧,兩張圖片分別為』pic1.jpg』, 『pic2.jpg』好了。

    下面我給出了我的代碼:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

  • def upload_img(fileDir, oneface = True):

    url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(

    BASE_URL, API_KEY, API_SECRET)

    if oneface: url += '&mode=oneface'

    files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),

    mimetypes.guess_type(fileDir)[0]), }

    r = requests.post(url, files = files)

    faces = r.json().get('face')

    if faces is None:

    print('There is no face found in %s'%fileDir)

    else:

    return faces[0]['face_id']

    def compare(faceId1, faceId2):

    url = '%s/recognition/compare'%BASE_URL

    params = BASE_PARAMS

    params['face_id1'] = faceId1

    params['face_id2'] = faceId2

    r = requests.get(url, params)

    return r.json()

    faceId1 = upload_img('pic1.jpg')

    faceId2 = upload_img('pic2.jpg')

    if face_id1 and face_id2:

    print(compare(faceId1, faceId2))

    else:

    print('Please change two pictures')

  • 成品

    到此,所有的知識介紹都結束了,相比大致如何完成這個項目各位讀者也已經有想法了吧。

    下面我們需要構思一下人臉解鎖的思路,大致而言是這樣的:

  • 使用一個程序設置賬戶(包括向賬戶中存儲解鎖用的圖片)

  • 使用另一個程序登陸(根據輸入的用戶名測試解鎖)

  • 這里會有很多重復的代碼,就不再贅述了,你可以在這里或者這里(提取碼:c073)下載源代碼測試使用。

    這里是設置賬戶的截圖:

    登陸

    結束語

    希望讀完這篇文章能對你有幫助,有什麼不足之處萬望指正(鞠躬)。

『捌』 關於Python中 人臉檢測中的問題

打錯了,前面是face後面是faces

『玖』 python opencv怎麼計算人臉檢測的准確性

操作在上述選擇操作的基礎上直接賦值即可。
例a.loc[:,['a','c']]=9 即將a和c列的所有行中的值設置為9
a.iloc[:,[1,3]]=9 也表示將a和c列的所有行中的值設置為9
同時也依然可以用條件來直接賦值
a[a>0]=-a 表示將a中所有大於0的數轉化為負值!

『拾』 如何使用python和opencv實現人眼識別

程序實現思路如下:

利用級聯分類器檢測出人臉區域,再在人臉區域中檢測出眼睛的區域,檢測出眼睛的區域之後,用跟蹤演算法咔嚓眼睛降低運算量,避免每一幀都去檢測眼睛。

代碼如下:

代碼中用到的級聯分類器初始化XML下載:

[cpp]view plain

  • //OpenCV版本3.0.0

  • //交流QQ2487872782

  • 2016-8-4註:很報歉,此代碼目前不能公開發表在博客上,已經刪除,希望大家能理解!

  • 代碼運行結果如下圖所示:


    上圖是無眼鏡的情況!

    說明一下:這段代碼只實現了一隻眼睛的檢測,如果要實現兩隻眼睛也不能,說下思路吧,上面代碼中的eyes[0]代表檢測到的第一隻眼睛,其實eyes[1]中還存儲了第二隻眼睛的區域哦!

    -------------------------------------------
    歡迎大家加入圖像識別技術交流群:271891601,另外,特別歡迎成都從事圖像識別工作的朋友交流,我的QQ號2487872782

熱點內容
微信圖案如何取消密碼 發布:2025-02-24 02:42:02 瀏覽:319
陌陌訪問次數 發布:2025-02-24 02:34:57 瀏覽:860
如何在安卓下做一個簡易事例 發布:2025-02-24 02:31:17 瀏覽:700
密碼鎖屏怎麼解除 發布:2025-02-24 02:25:34 瀏覽:445
存儲ibmv7000 發布:2025-02-24 02:21:15 瀏覽:146
安卓如何讓游戲沒廣告 發布:2025-02-24 02:16:27 瀏覽:468
java多線 發布:2025-02-24 01:57:09 瀏覽:358
自搭建公司伺服器 發布:2025-02-24 01:37:24 瀏覽:187
sql查詢返回 發布:2025-02-24 01:36:05 瀏覽:414
電腦沒有網路訪問許可權 發布:2025-02-24 01:29:30 瀏覽:663