人臉定位程式及結果
人臉定位理論方法,參考馮偉興的Visual C++ 數字影像模式識別典型案例詳解
整個程式用python 寫成。因為初涉python和opencv ,不足之處,請看客多多提出,共同交流。
人臉定位建立在膚色相似度檢測的基礎上,將檢測後的圖片,進行二值化處理,閾值設定為整幅圖片的灰度均值,高於均值的設為255,相反則設為0.
人臉定位的關鍵在於找出人臉輪廓的邊界。因為二值化後的人臉圖片為白,因此利用水平和豎直投影計數的方法,閾值設為每行和每列的投影計數最大值的50%。這個閾值根據識別的人臉不同,需要有靈活的調整。
左右上用投影計數,為避免下部脖子影響定位,以1.2乘以臉寬,作為臉長。
用opencv的cv2.line(img1,(left,0),(left,h),(0,255,0),2) 和 cv2.rectangle(img2,(img_left,img_top),(img_right,img_bottom),(0,200,200),1,1,0) 函式確定邊界,並實現矩形輪廓定位。
# -*- coding: utf-8 -*-
# the location and split
import cv2
import numpy as np
img = cv2.imread("image/grayface.jpg")
img2 = cv2.imread("image/t4.jpg")
h = img.shape[0] #影像高寬
w = img.shape[1]
print(h)
print(w)
sum = 0
midle = 0
print(img[34,67])
for i in range(h):
for j in range(w):
sum += img[i,j][1]
midle = sum/(h*w) #影像的灰度均值
print(midle)
for i in range(h): #二值化
for j in range(w):
if img[i,j][1] > midle:
img[i,j] = 255
else:
img[i,j] = 0
cv2.imshow('split',img)
cv2.imwrite('image/split.jpg',img)
lwrite = np.zeros(h,np.int)
hwrite = lwrite
max = 0
print(img[34,67])
print(lwrite[34])
for j in range(w): #統計每列中白色畫素點個數
for i in range(h):
if img[i,j][1] == 255:
lwrite[j] +=1
if lwrite[j] > max:
max = lwrite[j]
print(max)
img1 = img.copy()
#畫出臉左側輪廓線
for left in range(w):
if lwrite[left + 1] > max/2:
#cv2.line(img1,(left,0),(left,h),(0,255,0),2)
img_left = left
break
#畫出臉右側輪廓線
for right in range(w-1,0,-1):
if lwrite[right - 1] > max/2:
#cv2.line(img1,(right,0),(right,h),(0,255,0),2)
img_right = right
break
ww = img_right - img_left
print(ww)
for i in range(h): #統計每行中白色畫素點個數
for j in range(w):
if img[i,j][1] == 255:
hwrite[i] +=1
if lwrite[i] > max:
max = hwrite[i]
#畫出臉上側輪廓線
for top in range(h):
if hwrite[top + 1] > max/3:
# cv2.line(img1,(0,top),(w,top),(0,255,0),2)
img_top = top
break
#畫出臉下側輪廓
img_bottom = int(1.3*ww + img_top)
print(img_bottom)
#cv2.line(img1,(0,img_bottom),(w,img_bottom),(0,255,0),2)
#在二值化圖上畫出臉輪廓
cv2.rectangle(img1,(img_left,img_top),(img_right,img_bottom),(0,0,255),1,1,0)
cv2.imshow('img1',img1)
cv2.imwrite('image/location1.jpg',img1)
#在原圖上畫出臉輪廓
cv2.rectangle(img2,(img_left,img_top),(img_right,img_bottom),(0,200,200),1,1,0)
cv2.imwrite('image/location2.jpg',img2)
定位結果:
為什麼每階段選擇的是穎寶不同的照片?
因為儲存了很多穎寶的圖片作為實驗用,雖然不是粉絲,但是做實驗用看著不會心煩,比較可愛。用此圖片,不用上一張,是因為上一張的定位效果並不能很好用在此圖片上。導致臉圈的太長。
別的穎寶的臉在定位的時候,甚至與出現定位到飾品上,因為裸露胳膊、以及木色背景,導致整張圖片定位到整幅圖片,出現定位失敗。
相關文章
- Haar、pico、npd、dlib等多種人臉檢測特徵及演算法結果比較特徵演算法
- 讓人崩潰的程式碼,無法預測的結果
- 人臉檢測(detection)與人臉校準(alignment)
- 人臉活體檢測人臉識別:眨眼+張口
- 人臉檢測識別,人臉檢測,人臉識別,離線檢測,C#原始碼C#原始碼
- 論資訊系統的定位--業務活動結果的記錄工具
- 閒來無事,做了個抽紙條的小程式,結果沒人用、、、、、
- 使用Python結合Face++ API識別人臉PythonAPI
- 主題:人臉檢測原理及示例(OpenCV+Python)OpenCVPython
- 人臉及指紋雙重識別門禁系統
- 人臉識別與人體動作識別技術及應用pdf
- 隧道、高架、電離層干擾衛星定位結果?千尋位置展開高精度定位路測
- 小程式--人臉識別功能(百度ai)AI
- opencv 人臉識別OpenCV
- 人臉檢測 二
- OpenCV — 人臉識別OpenCV
- 人臉識別之特徵臉方法(Eigenface)特徵
- 前端人臉識別--兩張臉相似度前端
- python ubuntu dlib人臉識別3-人臉對齊PythonUbuntu
- 保障人臉安全!頂象釋出《人臉識別安全白皮書》
- IOS人臉識別開發入門教程--人臉檢測篇iOS
- 需求分析問卷調查及反饋結果
- 人臉識別技術及應用,瞭解一下
- 物件導向-程式碼塊看程式寫結果物件
- AI+慈善 ▏人臉識別+人臉模擬助力失散親人找到回家的路AI
- java 百度人臉識別 介面程式碼Java
- 刪除十億人臉資料,Facebook關閉人臉識別系統
- 乾貨 | AI人臉識別之人臉搜尋AI
- 人臉表情識別系統介紹——上篇(python實現,含UI介面及完整程式碼)PythonUI
- 人臉活體檢測
- 前端人臉檢測指南前端
- 2013年JavaScript開發人員調查結果JavaScript
- 人臉識別技術大總結(1):Face Detection & Alignment
- 人臉檢測技術發展及百度“框”實踐
- Linux系統ifconfig使用及結果分析Linux
- 從零玩轉人臉識別之RGB人臉活體檢測
- OpenCv人臉檢測技術-(實現抖音特效-給人臉戴上墨鏡)OpenCV特效
- 人臉識別之人臉檢測的重要性