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 소스 파일을 작업하는 폴더에 복사하여

더블 클릭으로 실행할 수 있었습니다.

참고가 된 페이지는 많이 있었지만, 자신이 기사를 쓴다고는 생각하지 않았기 때문에, 쫓지 않았습니다.

나와 같은 일을 하고 있는 분의 도움이 되면 다행입니다.

좋은 웹페이지 즐겨찾기