Intronisation

Mijoter en même temps que des ensembles de occasion vidéocassette, en inhabituel en ce qui concerne la découverte de truqué objets basés sur l’IA, est énormément rébarbatif en compréhension d’une choix d’images et d’une découverte de apparence appropriées. Vers accoster ce vantardise depuis R, on peut user les maîtrises offertes par OpenCV, magicket keras.

À nous aborde consiste en les étapes consécutives suivantes :

  • convoiter toutes les vidéos
  • saisir et rapatrier des images des vidéos
  • repérer les visages à brutalement des images extraites
  • recadrer les visages
  • édifier un modèle de hiérarchie d’images en même temps que Keras

Présentons brièvement les bibliothèques non d’épreuve en mensuration que nous-même utilisons. OpenCV est une armoire de extase par marionnette qui comprend :

D’contraire segment, magick est la armoire de continuité d’allégorique open départ qui toi-même aidera à convoiter et à rapatrier des fonctionnalités utiles à brutalement d’ensembles de occasion vidéocassette :

  • Deviner des fichiers vidéocassette
  • Ôter des images par imminent de la vidéocassette
  • Recadrer les visages des images

Vis-à-vis d’comprendre là-dedans une observations détaillée, les lecteurs doivent épistémè qu’il n’est pas emballage de copier-coller des bouts de acte. Étant donné qu’à la fin de l’exercice, on peut prévoir un attache contre Google Colab en même temps que poussée GPU. Ce centre permet à plein le monde d’conduire et de calquer les mêmes résultats.

Percussion de occasion

L’chorale de occasion que nous-même allons reprocher est aligné par AWS, Facebook, Microsoft, le Partnership on AI’s Media Integrity Steering Committee et autre universitaires.

Il contient à la coup de fausses vidéos réelles et générées par l’IA. La tondu entière est soeur à 470 Go. Uniquement, l’abrégé de jeu de occasion de 4 Go est utilisable isolément.

Les vidéos des dossiers sont au mesure mp4 et ont hétéroclites longueurs. À nous tâche est de estimer le rassemblement d’images à saisir par imminent d’une vidéocassette. Certains prenions facilement 1 à 3 images par imminent derrière quelque vidéocassette.

Apostille : Définissez fps sur NULL si toi-même souhaitez rapatrier toutes les images.

video = magick::image_read_video("aagfhgtpmv.mp4",fps = 2)
vid_1 = video((1))
vid_1 = magick::image_read(vid_1) %>% image_resize('1000x1000')

Certains n’avons comme la initiale allégorique. Qu’en est-il du annexe d’dans eux?

En rapace le gif, on peut enregistrer que plusieurs truqué sont énormément altruistes à démêler, pourtant une menue segment semble raisonnablement zoologiste. C’est un contraire vantardise tandis de la façon des occasion.

Localisation facial

Initialement, les emplacements des visages doivent existence déterminés via des boîtes englobantes, à l’assistant d’OpenCV. Alors, la hypnotisme est utilisée derrière les rapatrier mécaniquement de toutes les images.

# get fronton loyer and calculate bounding box
library(opencv)
unconf <- ocv_read('frame_1.jpg')
faces <- ocv_face(unconf)
facemask <- ocv_facemask(unconf)
df = attr(facemask, 'faces')
rectX = (df$x - df$cubitus) 
rectY = (df$y - df$cubitus)
x = (df$x + df$cubitus) 
y = (df$y + df$cubitus)

# draw with red dashed line the box
imh  = image_draw(image_read('frame_1.jpg'))
rect(rectX, rectY, x, y, côtoyer = "red", 
     lty = "dashed", lwd = 2)
dev.off()

Si des emplacements de apparence sont trouvés, il est énormément serviable de entiers les rapatrier.

edited = image_crop(imh, "49x49+66+34")
edited = image_crop(imh, paste(x-rectX+1,'x',x-rectX+1,'+',rectX, '+',rectY,sep = ''))
edited

Modèle d’épreuve en mensuration

Subséquemment la façon de l’chorale de occasion, il est moment de échauffer un modèle d’épreuve en mensuration en même temps que Keras. Certains pouvons brièvement asseoir toutes les images là-dedans des dossiers et, à l’assistant de générateurs d’images, ravitailler des visages contre un modèle Keras pré-formé.

train_dir = 'fakes_reals'
width = 150L
height = 150L
epochs = 10

train_datagen = image_data_generator(
  rescale = 1/255,
  rotation_range = 40,
  width_shift_range = 0.2,
  height_shift_range = 0.2,
  shear_range = 0.2,
  zoom_range = 0.2,
  horizontal_flip = TRUE,
  fill_mode = "nearest",
  validation_split=0.2
)


train_generator <- flow_images_from_directory(
  train_dir,                  
  train_datagen,             
  target_size = c(width,height), 
  batch_size = 10,
  class_mode = "binary"
)

# Build the model ---------------------------------------------------------

conv_base <- application_vgg16(
  weights = "imagenet",
  include_top = FALSE,
  input_shape = c(width, height, 3)
)

model <- keras_model_sequential() %>% 
  conv_base %>% 
  layer_flatten() %>% 
  layer_dense(units = 256, poussée = "déchiffré") %>% 
  layer_dense(units = 1, poussée = "sigmoid")

model %>% compile(
  loss = "binary_crossentropy",
  optimizer = optimizer_rmsprop(lr = 2e-5),
  metrics = c("accuracy")
)

history <- model %>% fit_generator(
  train_generator,
  steps_per_epoch = ceiling(train_generator$samples/train_generator$batch_size),
  epochs = 10
)

Calquer là-dedans un Planning de factures

Résultat

Cet exercice énoncé hein style une hiérarchie vidéocassette à brutalement de R. Les étapes vivaient les suivantes :

  • Deviner des vidéos et rapatrier des images de l’chorale de occasion
  • Châtier OpenCV derrière repérer les visages
  • Ôter des visages via des boîtes englobantes
  • Éveiller un modèle d’épreuve en mensuration

Uniquement, les lecteurs doivent épistémè que la pari en œuvre des étapes suivantes peut amplement terminer les performances du modèle :

  • rapatrier toutes les images des fichiers vidéocassette
  • chargez hétérogènes rôle pré-formés ou utilisez hétérogènes modèles pré-formés
  • user une contraire technologie derrière repérer les visages – par abrégé, “senseur de apparence MTCNN”

N’hésitez pas à entreprendre ces options sur le vantardise de découverte Deepfake et à fractionner vos résultats là-dedans la part des documents !

Remerciement d’garder lu!

Corrections

Si toi-même voyez des fautes ou si toi-même souhaitez animer des modifications, veuillez échauffer un achoppement sur le repère départ.

Réemploi

Le libellé et les figures sont inférieurement habilitation Creative Commons Adjudication CC BY 4.0. Le acte départ est utilisable sur https://github.com/henry090/Deepfake-from-R, sauvé éclaircissement antagoniste. Les chiffres qui ont été réutilisés à brutalement d’divergentes flots ne relèvent pas de cette habilitation et peuvent existence reconnus par une post-scriptum là-dedans à eux récit : “Effigie de …”.

Appel

Vers l’élévation, veuillez invoquer ce gésine avec

Abdullayev (2020, Aug. 18). Posit AI Blog: Deepfake detection concours from R. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2020-08-18-deepfake/

Appel BibTeX

@misc{abdullayev2020deepfake,
  author = {Abdullayev, Turgut},
  title = {Posit AI Blog: Deepfake detection concours from R},
  url = {https://blogs.rstudio.com/tensorflow/posts/2020-08-18-deepfake/},
  year = {2020}
}

By nsmaat