القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

يمكنك استخدام تشويش وضوح الوجه لإخفاء وجه شخص ما في مقطع فيديو أو صورة لعدة أسباب. قضايا الخصوصية والأمان هي الأكثر شيوعًا. تحتوي معظم منصات مشاركة الفيديو وبرامج تحرير الفيديو على وظيفة تشويش وضوح الوجه.

يمكنك إنشاء برنامج تشويش الوجه الخاص بك من البداية باستخدام Python ومكتبات OpenCV و NumPy.

إعداد بيئتك

لمتابعة هذه المقالة ، يجب أن تكون على دراية بـ أساسيات لغة بايثون ولديهم فهم أساسي لـ باستخدام مكتبة NumPy.

افتح أي Python IDE تشعر بالراحة معه. قم بإنشاء بيئة افتراضية تقوم فيها بتثبيت المكتبات المطلوبة. قم بإنشاء ملف Python جديد. انتقل إلى المحطة وقم بتشغيل الأمر التالي لتثبيت المكتبات المطلوبة. قم بتمرير المكتبات كقائمة محددة بمسافات.

نقطة تثبيت OpenCV-python NumPy

ستستخدم OpenCV لأخذ إدخال الفيديو ومعالجته مسبقًا و NumPy للعمل مع المصفوفات.

بمجرد تثبيت المكتبات ، انتظر حتى يقوم IDE بتحديث الهياكل العظمية للمشروع. عندما يكتمل التحديث وتكون البيئة جاهزة ، لك مطلق الحرية في بدء الترميز.

instagram viewer

كود المصدر الكامل متاح في ملف مستودع جيثب.

استيراد المكتبات المطلوبة

ابدأ باستيراد مكتبات OpenCV و NumPy. سيمكنك هذا من الاتصال واستخدام أي وظائف يدعمونها. استيراد OpenCV-python كـ cv2.

يستورد السيرة الذاتية 2
يستورد حبيبي مثل np

تستخدم وحدات OpenCV-python الاسم cv2 كمعيار أنشأه مجتمع OpenCV. OpenCV-python هو غلاف Python لمكتبة OpenCV وهو مكتوب بلغة C ++.

أخذ المدخلات الخاصة بك

إنشاء متغير وتهيئة التقاط الفيديو هدف. مرر الصفر كمتغير إذا كنت تريد استخدام الكاميرا الأساسية للكمبيوتر كمصدر إدخال. لاستخدام كاميرا خارجية متصلة بجهاز الكمبيوتر الخاص بك ، قم بتمرير واحدة. لإجراء تشويش وضوح الوجه على مقطع فيديو مسجل مسبقًا ، مرر مسار الفيديو بدلاً من ذلك. ل استخدم كاميرا عن بعد، قم بتمرير عنوان URL الخاص بالكاميرا الذي يحتوي على عنوان IP ورقم المنفذ.

cap = cv2.VideoCapture (0)

لتنفيذ تشويش وضوح الوجه على الإدخال ، ستحتاج إلى ثلاث وظائف:

  • وظيفة من شأنها معالجة الإدخال مسبقًا.
  • وظيفة من شأنها طمس الوجه في الإدخال.
  • وظيفة رئيسية تتحكم في تدفق البرنامج وتعرض الإخراج.

المعالجة المسبقة لإدخال الفيديو

قم بإنشاء وظيفة معالجة الإدخال التي ستأخذ كل إطار من إطار فيديو الإدخال كمدخلات لها. قم بتهيئة فئة CascadeClassifier التي ستستخدمها لاكتشاف الوجه. قم بتغيير حجم الإطار إلى 640 × 640 بكسل. قم بتحويل الإطار الذي تم تغيير حجمه إلى التدرج الرمادي لتسهيل المعالجة ، واكتشف أخيرًا الوجوه في الإدخال واربطها بالمستطيلات.

defمعالجة_الصورة(إطار):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ "haarcascade_frontalface_default.xml")

resized_image = cv2.resize (إطار ، (640, 640))

grey_image = cv2.cvtColor (بحجم_صورة ،
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale (
صورة_رمادية 1.04, 5، minSize = (20, 20))

يعود resized_image ، تصحيحات الوجه

تقوم هذه الوظيفة بإرجاع مجموعة تحتوي على الصورة التي تم تغيير حجمها وقائمة بالمستطيلات التي تمثل الوجوه المكتشفة.

طمس الوجه

قم بإنشاء وظيفة تشويش من شأنها تشويش الوجوه في مدخلاتك. تأخذ الوظيفة الإطار الذي تم تغيير حجمه وقائمة المستطيلات التي تحيط بالوجوه التي يتم إرجاعها بواسطة وظيفة المعالجة المسبقة كمدخلات. حلقات فوق كل مستطيل للوجه. تحسب مركز كل مستطيل ونصف قطر دائرة التعتيم. ينشئ صورة سوداء لها نفس أبعاد الإطار الذي تم تغيير حجمه عن طريق تهيئة كل وحدات البكسل إلى الصفر. يرسم دائرة بيضاء على الصورة السوداء التي يكون مركزها على مستطيل الوجه باستخدام نصف القطر المحسوب. أخيرًا ، يطمس الصورة على الدائرة البيضاء.

defطمس الوجه(حجم_إطار_ ، تصحيحات_وجه):
ل (س ، ص ، ث ، ح) في تصحيحات الوجه:
# تحديد المركز ونصف القطر
# من دائرة التعتيم
centre_x = x + w // 3
center_y = y + h // 3
نصف القطر = h // 1

# إنشاء صورة سوداء لها نفس الشيء
# أبعاد كإطار
قناع = np.zeros ((resized_frame.shape [:3]) ، np.uint8)

# ارسم دائرة بيضاء في منطقة وجه الإطار
cv2.circle (قناع ، (center_x ، center_y) ، نصف القطر ،
(255, 255, 255), -1)

# طمس الإطار بأكمله
blurred_image = cv2.medianBlur (resized_frame ، 99)

# إعادة بناء الإطار:
# - وحدات البكسل من الإطار غير الواضح إذا كان القناع> 0
# - خلاف ذلك ، خذ وحدات البكسل من الإطار الأصلي
resized_frame = np. حيث (قناع> 0، blurred_image ،
تغيير حجم الإطار)

يعود تغيير حجم الإطار

تستخدم الوظيفة NumPy أين() لإعادة بناء الإطار أثناء التعتيم.

التحكم في تدفق برنامجك

قم بإنشاء وظيفة رئيسية تعمل كنقطة دخول لبرنامجك. سوف يتحكم بعد ذلك في تدفق البرنامج. ستبدأ الوظيفة حلقة لا نهائية لالتقاط إطارات إدخال الفيديو بشكل مستمر. اتصل بطريقة قراءة كائن الغطاء لقراءة إطار من الكاميرا.

ستقوم الوظيفة بعد ذلك بتمرير الإطار إلى وظيفة المعالجة المسبقة وتمرير قيم الإرجاع إلى وظيفة أخرى ، face_blur ، للحصول على صورة غير واضحة. ثم يقوم بتغيير حجم الإطار الذي يتم إرجاعه بواسطة وظيفة التمويه ويعرض الإخراج.

defرئيسي():
بينماحقيقي:
النجاح ، الإطار = الحد الأقصى للقراءة ()
resized_input ، face_rects = image_preprocess (إطار)
blurred_image = face_blur (resized_input، face_rects)

# دبلوماسية الصورة غير الواضحة
cv2.imshow ("صورة غير واضحة"، cv2.resize (blurred_image، (500, 500)))

لو cv2.waitKey (1) == أمر ("ف"):
استراحة

تقوم الوظيفة أيضًا بإنهاء عرض الإخراج عندما يضغط المستخدم على المفتاح q.

تشغيل البرنامج

تأكد من تشغيل الوظيفة الرئيسية أولاً عند تشغيل البرنامج النصي. سيكون هذا الشرط خطأ إذا قمت باستيراد البرنامج النصي كوحدة نمطية في برنامج آخر.

لو __name__ == "__رئيسي__":
رئيسي()

يتيح لك هذا استخدام البرنامج النصي كوحدة نمطية أو تشغيله كبرنامج مستقل. عند تشغيل البرنامج ، يجب أن ترى إخراجًا مشابهًا لهذا:

الوجه غير واضح ولا يمكن التعرف عليه.

تطبيقات العالم الحقيقي لتشويش وضوح الوجه

يمكنك تطبيق تشويش وضوح الوجه في العديد من أنواع التطبيقات لحماية خصوصية الأشخاص. تستخدم خدمات التجوّل الافتراضي ورسم الخرائط التعتيم لتعتيم وجوه الأشخاص في الصور التي يلتقطونها. يستخدم تطبيق القانون تشويش وضوح الوجه لحماية هوية الشهود.

قامت العديد من منصات مشاركة الفيديو أيضًا بدمج ميزة تشويش وضوح الوجه لمستخدميها. ستساعدك مقارنة استخدام تشويش وضوح الوجه في هذه المناطق على ملاحظة كيفية دمج الأنظمة الأساسية الأخرى مع التكنولوجيا.