OpenCV에서 얼굴 인식 · 잘라내기
소개
이미지 안의 얼굴을 인식시켜 사각형의 테두리로 둘러싸는 코드를 개조해, 파일로서 잘라내는 코드를 작성해 보았습니다.
라이브러리 가져오기
OpenCV, Pillow 등의 라이브러리를 가져옵니다.
import os
import subprocess
from PIL import Image
import cv2 as cv
dir0 = 'org'
dir1 = 'png'
dir2 = 'png_resize'
dir3 = 'face'
이미지 준비
원본 이미지(jpg, 크기 500×334px)를 org 폴더에 놓습니다. 이것을 png 파일로 변환하고 크기 너비를 600px로 조정한 다음 png_resize 폴더에 저장합니다.
files0 = os.listdir(dir0)
files0.sort()
for file in files0:
if '.jpg' in file:
command = 'sips --setProperty format png ' + dir0 +'/' + file + ' --out ' + dir1 +'/' + file.replace('.jpg','.png')
subprocess.call(command, shell=True)
print(file)
files1 = os.listdir(dir1)
files1.sort()
# aaa.jpg
for file in files1:
if '.png' in file:
img0 = os.path.join(dir1, file)
img0_img = Image.open(img0)
h = img0_img.height
w = img0_img.width
img1_img = img0_img.resize((600,round(600*h/w)))
img1 = os.path.join(dir2, file)
img1_img.save(img1)
print(file)
# aaa.png
files2 = os.listdir(dir2)
files2.sort()
얼굴 식별기 설치
얼굴 식별자는 여기에 공개되어 있습니다.
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
#face_cascade = cv.CascadeClassifier('haarcascade_profileface.xml')
얼굴 식별자 실행, 얼굴 이미지 잘라내기
얼굴 이미지를 잘라냅니다. 잘라내기 범위를 검출 범위보다 상하 좌우 10px 넓게하고 있습니다.
for file in files2:
if '.png' in file:
dirfile = os.path.join(dir2, file)
img = cv.imread(dirfile)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
face = img[y-10:y+h+10, x-10:x+w+10]
face_name = str(file.strip('.png'))+'_'+str(x)+'_'+str(y)+'.png'
dirface = os.path.join(dir3,face_name)
facefile = cv.imwrite(dirface, face)
#cv.rectangle(img,(x-10,y-10),(x+w+10,y+h+10),(255,0,0),2)
print(face_name)
# aaa_152_22.png
# aaa_11_70.png
# aaa_438_41.png
# aaa_79_106.png
# aaa_385_140.png
# aaa_190_175.png
# aaa_269_171.png
# aaa_76_206.png
# aaa_527_257.png
# aaa_91_277.png
# aaa_254_330.png
# aaa_446_348.png
위 이미지에서 총 12장의 얼굴 이미지가 잘립니다. 얼굴의 대부분이 찍혀 있으면 잘라내기에 성공하고 있는 것을 알 수 있습니다.
끝에
집합 사진으로부터 사진 첨부로 명부를 만드는 경우등으로 사용할 수 있을 것 같습니다. 훈련 된 식별자가 캐스케이드 파일로 공개되면 누구나 사용할 수있어 편리합니다.
참고
htps : // / cs. 오펜 cv. rg/4.1.0/d7/d8b/단순히 l_py_휴식_에서 c치온. HTML
htps : // 기주 b. 코 m / 오렌지 cv / 오페인 cv / t 레에 / 마 s r / data /
Reference
이 문제에 관하여(OpenCV에서 얼굴 인식 · 잘라내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/stpete_ishii/items/c4030ab664fab23313b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)