إضافة علامة مائّية Watermark للصور الرقميّة باستخدام المكتبة المفتوحة للرؤية الحاسوبيّة OpenCV في البايثون Python

المقدمة

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

ما هي العلامة المائيّة الرّقميّة Digital Watermark

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

متى تستخدم العلامة المائيّة الرّقميّة

توجد عدّة أماكن تُطبَّق فيها العلامة المائيّة، سواء كانت مرئيّة أو غير مرئيّة، حيث يمكن إضافتها كعلامة مميزة إلى الصور والتصاميم.

وعلى الرّغم من كونها توفر حلًّا لضمان حقوق النشر، إلا أنها قد تحمل عيوبًا في حال ساء استخدامها، فقد تتسبب في تشتيت الانتباه.

أنواع العلامة المائيّة الرّقميّة Digital Watermark Types

تُقسم إلى نوعين، مرئيّة وغير مرئيّة، المرئيّة يمكن رؤيتها بسهولة وتُعرف بإسم العلامة المائيّة العلنيّة، أما غير المرئيّة فتُعرف بالعلامة المرئيّة السريّة.

العلامة المائيّة المرئيّة Visible Watermark

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

العلامة المائيّة غير المرئيّة Invisible Watermark

بالنسبة للعلامة المائيّة غير المرئيّة (السريّة)، فهي مُضمَّنة في الصورة وتبقى غير مرئيّة من خلال المشاهدة المنتظمة. يمكنك مشاهدتها فقط من خلال البرامج المتخصصة، و لديها عدّة أنواع منها:

  • قد تأتي العلامة المائيّة داخل الصورة ولكن بنسبة شفافيّة عالية جدًا قد لا تكون ملحوظة.
  • العلامة المائيّة المكانيّة (spatial watermark)، وتلك التي تظهر فقط عند الطباعة بسبب طيف الألوان المحدّد.
  • لعلامة المائيّة المخصصة للتردّد (Dedicated Watermark for Frequency)، يتمّ تطبيقها على تردّد محدّد ولا يمكن رؤيتها إلا عند فصل هذا التردّد.

استخدامات العلامات المائيّة المرئيّة Use of Visible Watermark

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

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

استخدامات العلامات المائيّة غير المرئيّة Use of invisible Watermark

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

ماهي مكتبة OpenCV

هي مكتبة مفتوحة المصدر مخصصة لوظائف معالجة الرؤيّة الحاسوبيّة. تمّ إنشاؤها لتوفير بنية تحتيّة مشتركة لجميع برامج الرؤية الحاسوبيّة لتسريع نموّ الاستخدام التجاريّ.

تحتوي مكتبة OpenCV على أكثر من 2500 خوارزميّة مختلفة، تتراوح من خوارزميّات التعلُّم الآليّ العاديّة إلى أحدث الخوارزميّات. يمكن استخدام جميع الخوارزميّات للتعرّف على الوجوه واكتشافها، وتصنيف الأفعال البشريّة، وتحديد الكائنات في مقاطع الفيديو المختلفة. يمكن استخدامه أيضًا لتتبع حركات الكاميرا، واستخراج النماذج ثلاثيّة الأبعاد لأيّ كائن، وتتبع الكائنات المتحرّكة، وإنشاء نقاط سحابة ثلاثيّة الأبعاد من كاميرا ستيريو. يمكنها الجمع بين الصور الفرديّة لإنتاج صورة عالية الدّقة للمشهد بأكمله، وفهم مشهد الخلفيّة، وغيرها من الاستخدامات. ونظرًا لأنّ المزيد من الأشخاص يستخدمون التعلُّم الآليّ لحلّ مشكلاتهم، فإنّ استخدام OpenCV يتزايد أيضًا إذ يقوم الأشخاص بإنشاء مشاريع متعدّدة، مثل روبوتات استشعار الإيماءات (Gesture Sensing Robots) أو استخدام الهاتف فقط عن طريق الإيماءات، وغير ذلك الكثير. (عزيزي القارئ يمكنك زيارة موقع الويب الخاصّ بهم على https://opencv.org).

الآن بعد أن أصبح مفهوم العلامة المائيّة الرقميّة واضحًا دعونا ننتقل إلى التطبيق العمليّ.

التطبيق العمليّ

بدايةً يجب أن نقوم بتجهيز الصورة المراد إضافة العلامة المائيّة لها، كما هو موضح في الشكل 1 وأيضاً تجهيز العلامة المائيّة المراد إضافتها للصورة الأصليّة، كما هو موضح في الشكل 2.

الشكل 1. الصورة الأصليّة
الشكل 2. العلامة المائيّة

خطوات إنشاء علامة باستخدام الصورة:

  • الخطوة الأولى: تقوم الشيفرة البرمجيّة التالية باستيراد المكتبةُ المفتوحةُ للرُّؤيةِ الحاسُوبيَّةِ opencv اللازمة لإنشاء العلامة المائيّة.
import cv2
  • الخطوة الثانية: تقوم الشيفرة البرمجيّة التالية بقراءة (تحميل) الصورة الأصليّة وصورة العلامة المائيّة.
img = cv2.imread('diego-jimenez-A-NVHPka9Rk-unsplash.JPG')
watermark = cv2.imread("Watermark.JPG")
  • الخطوة الثالثة: تقوم الشيفرة البرمجيّة التالية بتعديل حجم الصور.
percent_of_scaling = 20
new_width = int(img.shape[1] * percent_of_scaling/100)
new_height = int(img.shape[0] * percent_of_scaling/100)
new_dim = (new_width, new_height)
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)

wm_scale = 40
wm_width = int(watermark.shape[1] * wm_scale/100)
wm_height = int(watermark.shape[0] * wm_scale/100)
wm_dim = (wm_width, wm_height)
resized_wm = cv2.resize(watermark, wm_dim, interpolation=cv2.INTER_AREA)
  • الخطوة الرّابعة: تقوم الشيفرة البرمجيّة التالية بإنشاء العلامة المائيّة. 
h_img, w_img, _ = resized_img.shape
center_y = int(h_img/2)
center_x = int(w_img/2)
h_wm, w_wm, _ = resized_wm.shape
top_y = center_y - int(h_wm/2)
left_x = center_x - int(w_wm/2)
bottom_y = top_y + h_wm
right_x = left_x + w_wm

roi = resized_img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(roi, 1, resized_wm, 0.3, 0)
resized_img[top_y:bottom_y, left_x:right_x] = result
  • الخطوة الخامسة: تقوم الشيفرة البرمجيّة التالية بعرض الصورة على نافذة الإخراج.
filename = 'Watermakred_Image.jpg'
cv2.imwrite(filename, resized_img)
cv2.imshow("Resized Input Image", resized_img)

يُبيّن الشكل 3 صورة الخرج النهائيّ بعد تنفيذ الشيفرة البرمجيّة كاملةً.

الشكل 3. الصورة النهائيّة بعد إضافة العلامة المائيّة

عزيزي القارئ للحصول على الشفرة البرمجية code  كاملاً يمكنك العودة إلى مستودع الغيت هب GitHUB.

الخاتـــــمة

تعرّفنا في هذا المقال على مفهوم العلامة المائيّة الرّقميّة و أنواعها، وأهميّة استخدامها في ضمان حقوق الملكيّة، أيضًا تعرّفنا على أهمّ المكتبات المفتوحة في الرؤية الحاسوبيّة وهي مكتبة OpenCV، حيث أصبح بإمكانك عزيزي القارئ إضافة أيّ علامة مائيّة إلى صورةٍ ما، وأيضًا إضافة صورة مخصصة إلى صورتك الشخصيّة باستخدام OpenCV بلغة بايثون .

المراجع

  1. Add watermark on Images using Opencv in Python.
0 Shares:
تعليق واحد
اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

You May Also Like