人臉定位程式及結果
人臉定位理論方法,參考馮偉興的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)
定位結果:
為什麼每階段選擇的是穎寶不同的照片?
因為儲存了很多穎寶的圖片作為實驗用,雖然不是粉絲,但是做實驗用看著不會心煩,比較可愛。用此圖片,不用上一張,是因為上一張的定位效果並不能很好用在此圖片上。導致臉圈的太長。
別的穎寶的臉在定位的時候,甚至與出現定位到飾品上,因為裸露胳膊、以及木色背景,導致整張圖片定位到整幅圖片,出現定位失敗。
相關文章
- 人臉識別幾個很有用的連結
- 主題:人臉檢測原理及示例(OpenCV+Python)OpenCVPython
- 小程式--人臉識別功能(百度ai)AI
- 人臉表情識別系統介紹——上篇(python實現,含UI介面及完整程式碼)PythonUI
- python ubuntu dlib人臉識別3-人臉對齊PythonUbuntu
- 人臉活體檢測人臉識別:眨眼+張口
- 人臉檢測識別,人臉檢測,人臉識別,離線檢測,C#原始碼C#原始碼
- 人臉識別與人體動作識別技術及應用pdf
- 人臉識別之特徵臉方法(Eigenface)特徵
- 隧道、高架、電離層干擾衛星定位結果?千尋位置展開高精度定位路測
- 人臉識別技術及應用,瞭解一下
- java 百度人臉識別 介面程式碼Java
- opencv 人臉識別OpenCV
- 人臉檢測 二
- 前端人臉識別--兩張臉相似度前端
- 閒來無事,做了個抽紙條的小程式,結果沒人用、、、、、
- 保障人臉安全!頂象釋出《人臉識別安全白皮書》
- 人臉檢測技術發展及百度“框”實踐
- AI+慈善 ▏人臉識別+人臉模擬助力失散親人找到回家的路AI
- 乾貨 | AI人臉識別之人臉搜尋AI
- [轉] 無伺服器開發人臉識別小程式伺服器
- 64行程式碼實現簡單人臉識別行程
- 刪除十億人臉資料,Facebook關閉人臉識別系統
- 從零玩轉人臉識別之RGB人臉活體檢測
- 小程式定位
- 前端人臉檢測指南前端
- 人臉活體檢測
- 人臉融合簡單demo
- Linux系統下ifconfig命令使用及結果分析Linux
- 需求分析問卷調查及反饋結果
- 遞迴求填空結果的python程式遞迴Python
- 人臉識別之人臉檢測的重要性
- 虹軟人臉識別 - faceId及IR活體檢測的介紹
- OpenCv人臉檢測技術-(實現抖音特效-給人臉戴上墨鏡)OpenCV特效
- C#人臉識別入門篇-STEP BY STEP人臉識別--入門篇C#
- 人臉美化和人臉識別在美顏SDK中的具體應用
- 智慧人臉識別門禁系統開發,人臉識別開鎖流程
- python—呼叫API人臉識別PythonAPI
- opencv視訊人臉檢測OpenCV