أتمتة معالجة الصور باستخدام Jupyter و Python

ربما لن ترغب في فهم معالجة الصور في برامج تحرير الرسومات إذا كنت تعرف كيفية القيام بذلك باستخدام مكتبات مفتوحة المصدر لـ Python.







في الآونة الأخيرة ، أراد طفلي عمل تلوين لشخصية من الرسوم المتحركة المفضلة لديه. كان الحل الواضح هو استخدام نوع من المحرر الرسومي لنظام Linux (لأنني أحد مستخدمي Linux) ، ولكن بعد ذلك تذكرت أنني شخص كسول.



لحسن الحظ ، أنا على دراية ب Python و JupyterLab. دعونا نرى كيف يجعل Jupyter المهمة أسهل.



بادئ ذي بدء ، سنحتاج بالطبع إلى إصدار حديث من Python (إذا كنت من مستخدمي macOS ، فيمكنك اتباع هذا البرنامج التعليمي ). ثم تحتاج إلى تثبيت وفتح JupyterLab and Pillow - شوكة مكتبة Python Imaging Library (PIL):



$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


في هذه الحالة ، نريد أن نرسم بصورة غزال. أولاً ، لنقم بتنزيل الصورة وحفظها محليًا. من الأفضل استخدام صور من Creative Commons أو تراخيص أخرى مفتوحة المصدر حتى لا تتورط في حقوق النشر. في هذا المثال ، استخدمت صورة مفتوحة المصدر من Unsplash وسميتها deer.jpg.



لنبدأ بالاستيراد:



from PIL import Image


لنفتح الصورة ونتحقق من حجمها:



pic = Image.open("deer.jpg")
pic.size
(3561, 5342)


ربما يكون هذا كثيرًا جدًا بالنسبة لمهمتنا. هذه الصور عالية الدقة مفيدة للكتب وليست لصفحات التلوين. تقليل حجم الصورة:



x, y = pic.size

x //= 10

y //= 10

smaller = pic.resize((x, y))


أصبح الحجم أصغر 10 مرات.



smaller






تماما. المضي قدما.



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



from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)

edges






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




bands = edges.split()
bands[0]






أصبحت الخطوط الآن واضحة ، لكن اللوحة نفسها ليست مناسبة للطباعة بعد ، لأن حبر الطابعة سينفد ، ولن يرغب طفلك في رسم صورة على خلفية سوداء. لذلك نقوم بقلب الألوان. عيّن عتبات x إلى max-black و max-white لجعل الخطوط أكثر وضوحًا:




outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline






الآن دعنا ننتبه إلى أن هناك الكثير من المساحات الفارغة في الصورة ، لذلك سنقوم بقصها:



outline.crop((10, 200, 300, 400))






حسنا هذا كل شيء. لنحفظ الصورة بصيغة PDF (للطباعة):



outline.save("deer.pdf")


هذه هي الطريقة التي يمكنك بها بسهولة إنشاء صفحات التلوين الخاصة بك لأطفالك: الحد الأدنى من الروتين ، والحد الأقصى من البرمجة!






إعلان



خوادم Epic هي Linux أو Windows VPSs مع معالجات AMD EPYC قوية ومحركات Intel NVMe سريعة جدًا. تفريق مثل الكعك الساخن!






All Articles