في هذه المقالة، سوف آخذك إلى كشف التزييف العميق Deepfake Detection باستخدام بايثون والتعلم الآلي. لقد كتبت مؤخرًا مقالًا حول ما هو التزييف العميق Deepfake وكيف أنه خطير. إذا كنت لا تعرف ما هو Deepfake، فسأقترح عليك إلقاء نظرة سريعة على مقالتي السابقة هنا، قبل أن تتسخ يديك بمهمة اكتشاف التزييف العميق Deepfake باستخدام بايثون والتعلم الآلي.
كشف التزييف العميق باستخدام بايثون
كانت هناك العديد من التقارير عن مقاطع فيديو مزيفة لمشاهير أو سياسيين مشهورين. يصعب اكتشاف مقاطع الفيديو المزيفة هذه بالعين المجردة وأصبحت مشكلة رئيسية في المجتمع.
لقد تمت تجربة حتى الآن أن مقاطع فيديو Deepfake تنتشر بسهولة على منصات مثل Facebook وtwitter وyoutube وما إلى ذلك. نظرًا لأن هذه المنصات تعمل على حل هذه المشكلة، فإن Facebook يقوم باستثمار كبير (10 ملايين دولار) لإصلاح هذه المشكلة، وتعمل منصات أخرى مثل Twitter وGoogle أيضًا على حل هذه المشكلة.
وبالتالي، فإن اكتشاف التزييف العميق ليس بالمهمة السهلة. في هذه المقالة، سنرى كيفية التعرف على المنتجات المقلدة من الحقيقية. يتضمن تحليل مقاطع الفيديو في إطار، واكتشاف الوجوه من مقاطع الفيديو الحقيقية والمزيفة، واقتصاص الوجوه وتحليلها.
كشف التزييف العميق أثناء العمل
دعنا الآن نرى كيف يمكننا كشف محتوى التزييف العميق Deepfake باستخدام بايثون والتعلم الآلي. سأبدأ بهذه المهمة عن طريق استيراد المكتبات الضرورية:
import numpy as np
import matplotlib.pyplot as plt
import cv2
import pandas as pd
import glob2
import os, fnmatch
from pathlib import Path
# import mtcnn
from mtcnn.mtcnn import MTCNN
الآن، لنفترض أن لدينا نوعين من مقاطع الفيديو، أحدهما حقيقي والآخر مزيف نريد اكتشافه أيهما مزيف من بين الاثنين، ربما هذا هو ما نحتاج إلى القيام به في مهمة اكتشاف التزييف العميق Deepfake.
الآن، سوف أقوم بإنشاء دالة لمعالجة كلا مقاطع الفيديو:
def extract_multiple_videos(intput_filenames, image_path_infile):
"""Extract video files into sequence of images."""
i = 1 # Counter of first video
# Iterate file names:
cap = cv2.VideoCapture('your_video_file_path.avi' or intput_filenames)
if (cap.isOpened()== False):
print("Error opening file")
# Keep iterating break
while True:
ret, frame = cap.read() # Read frame from first video
if ret:
cv2.imwrite(os.path.join(image_path_infile , str(i) + '.jpg'), frame) # Write frame to JPEG file (1.jpg, 2.jpg, ...)
# you can uncomment this line if you want to view them.
# cv2.imshow('frame', frame) # Display frame for testing
i += 1 # Advance file counter
else:
# Break the interal loop when res status is False.
break
cv2.waitKey(50) #Wait 50msec
cap.release()
extract_multiple_videos(fake_video_name, fake_image_path_for_frame)
extract_multiple_videos(real_video_name, real_image_path_for_frame)
الآن بعد تشغيل الدالة، سنتمكن من قراءة مقاطع الفيديو ومعالجتها لمهمة اكتشاف التزييف العميق Deepfake. دعنا الآن نرى كيف يمكننا تحديد التزييف العميق من خلال مقارنة كل من مقاطع الفيديو:
from skimage import measure
def mse(imageA, imageB):
# the 'Mean Squared Error' between the two images is the
# sum of the squared difference between the two images;
# NOTE: the two images must have the same dimension
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
# return the MSE, the lower the error, the more "similar"
# the two images are
return err
def compare_images(imageA, imageB, title):
# compute the mean squared error and structural similarity
# index for the images
m = mse(imageA, imageB)
s = measure.compare_ssim(imageA, imageB)
# setup the figure
fig = plt.figure(title)
plt.suptitle("MSE: %.2f, SSIM: %.2f" % (m, s))
# show first image
ax = fig.add_subplot(1, 2, 1)
plt.imshow(imageA, cmap = plt.cm.gray)
plt.axis("off")
# show the second image
ax = fig.add_subplot(1, 2, 2)
plt.imshow(imageB, cmap = plt.cm.gray)
plt.axis("off")
# show the images
plt.show()
في الكود أعلاه، نقارن الصور المستخرجة من الفيديو الأصلي والصورة المقابلة من مقاطع الفيديو المزيفة. في القسم الأخير من الكود، تحققت من وجود أي اختلافات بين الصورتين.
المخرجات:
هذه هي الطريقة التي يمكننا بها الكشف عن ملفات التزييف العميق من خلال مقارنة الملفات الأصلية والمزيفة. أتمنى أن تكون قد أحببت هذه المقالة حول التزييف العميق Deepfake باستخدام بايثون والتعلم العميق.
Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.