中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python+OpenCV的人臉特征定位程序

發布時間:2020-09-23 11:04:39 來源:億速云 閱讀:295 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Python+OpenCV的人臉特征定位程序,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

在最近刷今日頭條以及其他媒體軟件時,經常會發現一些AI換臉的視頻,于是我想,可不可以自己實現一個可以進行人臉識別的軟件程序。我的具體流程是先配合python網絡爬蟲先進行萬張PubFig人臉公共圖片的爬取,分析出圖片具體特征,然后再配合機器學習的OpenCV視覺庫進行軟件的構建。有一篇Github的文章講得很詳細,大家可以參考:https://github.com/Hironsan/BossSensor。

本篇用一些動漫人臉圖片,向大家展示基本的opencv庫的操作,以及用一些公共人臉數據進行簡單的人臉識別技術學習。

1.OpenCV簡介

OpenCV是一個開源的跨平臺計算機視覺庫,提供的有python接口,并實現了圖像處理和計算機視覺方面的很多通用算法。

2.需要安裝的包

本篇先安裝Opencv和numpy,pandas等數據分析包即可,如果感覺麻煩的話,可以直接安裝Anaconda科學包(數據分析,挖掘,機器學習庫合集),安裝與不同編譯器配置環境過程這里就不講解了。

下載地址(官網太慢了,推薦下面的地址):https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/。python3.5以上的需要下載opencv_python-4.0之類的版本,這里用到的是opencv_python-4.0.0.21-cp37-cp37m-win_amd64.whl這個文件。

安裝完后,我們先用下面的代碼輸出一個圖片:

import cv2
img = cv2.imread("1.jpg", 1)
cv2.imshow("1", img)
cv2.waitKey()

3.初步人臉識別

由于本篇文章是第一篇,因此這里先簡單的展示一下opencv的一些機器視覺的基礎方法,下面就進行介紹。

(1)導入人臉圖片,這里用一張動漫圖

Python+OpenCV的人臉特征定位程序

代碼和上面的類似,更改圖片即可:

import cv2
img = cv2.imread("firstPer.jpg", 1)
cv2.imshow("1", img)
cv2.waitKey()
cv2.destroyAllWindows()

這里我們把這段代碼封裝成一個函數:

def viewImage(image, name_of_window):
    '''
    image:圖像對象
    name_of_window:圖像窗口名稱
    '''
    cv2.namedWindow(name_of_window, cv2.WINDOW_NORMAL)
    cv2.imshow(name_of_window, image)
    cv2.waitKey()
    cv2.destroyAllWindows()

(2)一些基礎圖像處理的方法

cropped:cropped = image[y:y+h, x:x+w],就是以(y, x)為起點,裁剪大小為(h, w)的圖像,以左上角為起點,豎直向下的方向為y軸,橫向為x軸。

resized:dim = (width, height)

     resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

調整圖像的大小。

用下面的代碼分別進行這兩種圖像的處理:

img = cv2.imread("firstPer.jpg", 1)
# 裁剪圖片大小,裁剪100范圍的圖片
cropped = img[0:100, 0:100]
viewImage(cropped,"firstPer")

Python+OpenCV的人臉特征定位程序

img = cv2.imread("firstPer.jpg", 1)
scale_percent = 30    #調整30%的大小
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
viewImage(resized,"firstPer")

Python+OpenCV的人臉特征定位程序

還有一一些用的操作方法,就是旋轉,調節亮度,變模糊/平滑,繪制邊框,繪制線段等,在這里并不是進行圖像處理,因此就先不先向大家講解。哈哈。

(3)圖像灰度處理

在進行人臉識別時,好多地方都先進行圖像變灰度的操作,這里也給大家介紹一下:

這里有一個閾值函數,gray_image,將所有圖像變為比127更暗直至0或者增加亮度到255,將圖像的彩色邊框的內容略過。

灰度處理代碼:

gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
viewImage(gray_image,"gray Image")

結果:

Python+OpenCV的人臉特征定位程序

亮度彩色閾值處理代碼:

one,threshold_image = cv2.threshold(img, 127, 255, 0)
viewImage(threshold_image,"firstPer")

結果:

Python+OpenCV的人臉特征定位程序

主要是有后面的三個參數控制,大家有興趣可以自行學習。

(4)人臉識別初講

如果我們需要進行人臉識別,需要下載一些opencv配置文件,地址為:https://github.com/opencv/opencv/tree/master/data/haarcascades,這里我們用到的是haarcascade_frontalface_default.xml文件。用下面的代碼進行檢測:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
img = cv2.imread("firstPer.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
gray,           # 灰度圖
scaleFactor= 1.1,   # 縮放比例
minNeighbors= 2,    # 識別出一個人臉之前在當前物體周圍需要檢測的物體數目
minSize=(50, 50)    #窗口的大小
)
firstPer = format(len(faces)) + "faces detected!"
print(firstPer)# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 255, 0), 2)
viewImage(img,firstPer)

detectMultiScale函數是一個檢測物體的通用函數。當我們把它用于人臉檢測時,它就會從圖像中檢測出人臉。

但是我們卻發現,根本沒有檢測出我們可愛的小櫻的臉,這是為什么呢?不急,我們先用其他圖片檢測:Python+OpenCV的人臉特征定位程序Python+OpenCV的人臉特征定位程序

Python+OpenCV的人臉特征定位程序Python+OpenCV的人臉特征定位程序

Python+OpenCV的人臉特征定位程序

再來一張最美的圖片:

Python+OpenCV的人臉特征定位程序

這時我們發現,識別程序識別的時候會有兩個要注意的地方,第一個是動漫圖片線條簡單,有時候并不能識別出;而且識別的能力和圖片的清晰度也有關系。

關于Python+OpenCV的人臉特征定位程序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贡山| 郁南县| 平塘县| 林西县| 杭锦后旗| 手机| 含山县| 莱阳市| 合水县| 新建县| 富平县| 木兰县| 鹿邑县| 勐海县| 翁牛特旗| 师宗县| 昌平区| 霍邱县| 商丘市| 三台县| 雷州市| 雷波县| 云浮市| 桃源县| 宁阳县| 星子县| 大同市| 高雄市| 罗定市| 正镶白旗| 赤峰市| 拉孜县| 饶阳县| 赫章县| 台湾省| 磐安县| 罗平县| 辽中县| 郧西县| 手机| 慈溪市|