|
|
|
import numpy as np |
|
import os |
|
import glob |
|
import cv2 |
|
import matplotlib.pyplot as plt |
|
import insightface |
|
from insightface.app import FaceAnalysis |
|
from insightface.data import get_image as ins_get_image |
|
|
|
|
|
app = FaceAnalysis(name='buffalo_l') |
|
app.prepare(ctx_id=0, det_size=(640,640)) |
|
|
|
|
|
swapper = insightface.model_zoo.get_model('inswapper_128.onnx ', download=False,download_zip=False) |
|
|
|
|
|
def swap_n_show(img1_fn, img2_fn, app, swapper, plot_before=True, plot_after=True): |
|
|
|
|
|
img1 = cv2.imread(img1_fn) |
|
img2 = cv2.imread(img2_fn) |
|
|
|
|
|
if plot_before: |
|
fig, axs = plt.subplots(1, 2, figsize=(10, 5)) |
|
axs[0].imshow(img1[:, :, ::-1]) |
|
axs[0].axis('off') |
|
axs[1].imshow(img2[:, :, ::-1]) |
|
axs[1].axis('off') |
|
plt.show() |
|
|
|
|
|
face1 = app.get(img1)[0] |
|
face2 = app.get(img2)[0] |
|
|
|
|
|
img1_ = img1.copy() |
|
img2_ = img2.copy() |
|
|
|
|
|
img1 = swapper.get(img1_, face1, face2, paste_back=True) |
|
img2 = swapper.get(img2_, face2, face1, paste_back=True) |
|
|
|
|
|
if plot_after: |
|
fig, axs = plt.subplots(1, 2, figsize=(10, 5)) |
|
axs[0].imshow(img1[:, :, ::-1]) |
|
axs[0].axis('off') |
|
axs[1].imshow(img2[:, :, ::-1]) |
|
axs[1].axis('off') |
|
plt.show() |
|
|
|
|
|
return img1_, img2_ |
|
|
|
|
|
_ = swap_n_show('ruta/imagen1.jpg', 'ruta/imagen2.jpg', app, swapper) |
|
|