人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

global navigation menu page top

Pythonと画像処理を用いてまち吉あいみーなの超絶雑コラして見た!笑

今回はpythonopencvを用いた画像処理で

まち吉あいみーな(声優の仲良しグループ)の顔を入れ替えて見ました!笑

(個人的に好きなため)

 

※まち吉あいみーなとは、アイドルマスターミリオンライブで仲の良いMachico山崎はるか、愛美、高橋未奈美の4人のことを指す。

 

 

方法は、

1. opencvのカスケード分類器で顔認証を行う

2. 抽出した顔を当てはめ先の顔と同じサイズにリサイズする。

3. リサイズした顔を当てはめ先に入れ替える

以上が今回の実験の流れです。

 

では、早速やって見ます!

 

 

ソースコード 


import cv2
import matplotlib.pyplot as plt
import sys
from PIL import Image

def resize(filename, w, h):

    imageName = "mkamn/"+filename+".jpg"

    img = Image.open(imageName)
    img_resize_lanczos = img.resize((w, h), Image.LANCZOS)

    savepath = 'mkamn/'+filename+'_resize'+'.jpg'
    img_resize_lanczos.save(savepath)

    img_resize = cv2.imread(savepath)

    return img_resize


imagePath = 'mkamn3.jpg'
savepath = 'mknmnFaceReplase.jpg'
face_cascade_path = '/usr/local/opt/opencv/share/'\
                     'OpenCV/haarcascades/haarcascade_frontalface_default.xml'

face_cascade = cv2.CascadeClassifier(face_cascade_path)


img = cv2.imread(imagePath)
# グレースケール化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#顔を検知
faces = face_cascade.detectMultiScale(img_gray)
print (faces)

faceList = []
a = 0
### 今回は顔以外の認識もあったので無理やり取り除きました for (x,y,w,h) in faces: if a!=0: print(x,y) cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_color = img[y:y+h, x:x+w] faceList.append(roi_color) a+=1 # cv2.imwrite('a'+imageName, faceList[2]) # sys.exit() ### machico→minami, minami→pyon, pyon→aimi, aimi→machicoと入れ替え # resize machico = resize("machico", faceList[1].shape[0], faceList[1].shape[1]) minami = resize("minami", faceList[2].shape[0], faceList[2].shape[1]) pyon = resize("pyon", faceList[3].shape[0], faceList[3].shape[1]) aimi = resize("aimi", faceList[0].shape[0], faceList[0].shape[1]) print(machico.shape) # print (machico[0]) print(faces[1][0]) print (faces[1][1]) # sys.exit() for i in range(machico.shape[2]): for y in range(machico.shape[1]): for x in range(machico.shape[0]): img[faces[2][1]+y][faces[2][0]+x][i] = machico[y][x][i] for i in range(minami.shape[2]): for y in range(minami.shape[1]): for x in range(minami.shape[0]): img[faces[3][1]+y][faces[3][0]+x][i] = minami[y][x][i] for i in range(pyon.shape[2]): for y in range(pyon.shape[1]): for x in range(pyon.shape[0]): img[faces[4][1]+y][faces[4][0]+x][i] = pyon[y][x][i] for i in range(aimi.shape[2]): for y in range(aimi.shape[1]): for x in range(aimi.shape[0]): img[faces[1][1]+y][faces[1][0]+x][i] = aimi[y][x][i] cv2.imwrite(savepath, img) sys.exit()

 

 

今回は次の画像のように顔以外の部分も認識してしまったため、

1つ目の認識範囲をif文で無理やり取り除きました。

(下記コード部)

for (x,y,w,h) in faces:

 if a!=0:

  print(x,y) cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

  roi_color = img[y:y+h, x:x+w] faceList.append(roi_color)

 a+=1

f:id:hiro-htm877:20190205222050j:plain

 

取り除いた結果

f:id:hiro-htm877:20190205222257j:plain

 

 

 

実験結果

ちょうぜつ雑コラの結果です!

 

f:id:hiro-htm877:20190205222631j:plain

 

 

 

今回はpythontとopencvを用いて雑コラを作って見ました。

この様にプログラミングを覚えれば簡単に自分の作りたいものが作れます。

しかも、今はプログラミングが簡単にできる様にopencvの様なパッケージがたくさんあります。また、プログラミングを覚えていくとこの雑コラを綺麗なコラ画像に変身させることもできます。 

プログラミングの楽しさが皆さんに少しでも伝わればと思います。

 

最後まで読んでくださりありがとうございました。