Python + OpenCV로 얼굴 사진 자르기
PC가 마음대로 해주지 않을까라고 생각하면서, 여러가지 검색해, 해 보면 할 수 있었으므로, 비망록적으로 써 보려고 한다.
환경은 Windows10입니다. 사용하는 것은 'Python'입니다만, 이름을 들은 적이 있는 정도의 지식. 'OpenCV'라는 것을 사용하여 얼굴 인식시킬 수 있다는 것을 알았다.
그래서 환경 준비에서.
먼저 OpenCV 을 다운로드합니다.
여기에서 Windows 버전의 OpenCV를 얻을 수 있습니다. 다운로드한 아카이브를 더블 클릭하면 자동으로 압축을 풀 수 있으므로 압축이 풀린 'opencv' 폴더를 C 드라이브 바로 아래로 이동합니다.
그런 다음 환경 변수를 만져서 path를 통과시킵니다.
구체적으로 제어판 > 시스템 및 보안 > 시스템 > 고급 시스템 설정 > 환경 변수 > path > 신규
'C:\opencv\build\x64\vc15\bin'을 추가합니다.
그런 다음 Visual Studio을 설치했습니다.
물론 무료 녀석.
Python을 처리할 수 있도록 설치합니다.
설치가 끝나면 Python 응용 프로그램을 적절한 이름으로 만듭니다.
작성한 후에는 Python 패키지 관리에서 OpenCV 환경을 처리할 수 있습니다.
검색에서 opencv라고 넣으면 후보에 opencv-python(버전 번호)이 나타난다고 생각하기 때문에 그것을 넣습니다.
이제 준비는 괜찮습니다.
그럼, 코드를 써 갑니다.
#リソースのインポート
import cv2
import glob
import os
#trimフォルダの作成
os.makedirs('trim', exist_ok=True)
#カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み
HAAR_FILE = "C:\opencv\sources\data\haarcascades\haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(HAAR_FILE)
#ファイルリストの取得
files = glob.glob("*.jpg")
for file in files:
#取得したファイル名の表示
print(file)
#画像ファイルの読み込み
img = cv2.imread(file)
#グレースケールに変換
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#カスケード型分類器を使用して画像ファイルから顔部分を検出する
face = cascade.detectMultiScale(img2,scaleFactor=1.07,minNeighbors=7,minSize=(300,300))
#顔部分を切り取り、リサイズする。
for x,y,w,h in face:
#横幅のエリアを1.6倍にし、縦幅のエリアを2.23倍にすることで、4:3の比率でカット
face_cut = img[y-int(h*0.6):y+int(h*1.53), x-int(w*0.3):x+int(w*1.3)]
#カットした画像を450*600のサイズにする。
resize_img = cv2.resize(face_cut , dsize=(450, 600))
#画像の出力
cv2.imwrite('trim\\' + file , resize_img )
이제 이 소스와 같은 폴더에 있는 복수의 jpg 파일에서 얼굴 부분만 4:3의 비율로 트리밍하고, 450*600으로 리사이즈하고, trim이라는 이름의 하위 폴더를 만들고, 같은 이름으로 저장 하는 작업을 해주게 되었습니다.
실행은 Python 소스 파일을 작업하는 폴더에 복사하여
더블 클릭으로 실행할 수 있었습니다.
참고가 된 페이지는 많이 있었지만, 자신이 기사를 쓴다고는 생각하지 않았기 때문에, 쫓지 않았습니다.
나와 같은 일을 하고 있는 분의 도움이 되면 다행입니다.
Reference
이 문제에 관하여(Python + OpenCV로 얼굴 사진 자르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/northarant/items/246b7a6b9ce8c0a375ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)