التعلم العميقالمزيد من مقالات التعلم العميق......مقالات التعلم العميق

التعرف على خط الأطباء في الوصفات الطبية باستخدام التعلم العميق

فك رموز الكتابة اليدوية للأطباء باستخدام التعلم العميق

التعرف على الأدوية الموجودة في الوصفات الطبية

يستخدم هذا المشروع التعرف على خط اليد للتعرف على أسماء الأدوية من وصفة الطبيب. ويتم ذلك باستخدام الشبكة العصبية التلافيفية Convolutional Neural Network (CNN) التي تم تطويرها باستخدام Tensorflow Framework وOpenCV.

ويمكن تقسيم المشروع إلى قسمين متميزين على النحو التالي: –

  • خط أنابيب التعرف على الكتابة اليدوية Handwriting Recognition Pipeline.
  • تطبيق نظام الوصفات الطبية للطبيب Doctor’s Prescription System App.

نظام الوصفات الطبية للطبيب

يعد خط أنابيب التعرف على خط اليد المكون الأساسي لهذا المشروع. يأخذ خط الأنابيب بشكل أساسي صورة إدخال ويستخرج “الكلمات المكتوبة بخط اليد handwritten words” من هذه الصورة. يمكن استخدام هذه الكلمات لاحقًا للتحقق من وجود أي تطابقات في قاعدة بيانات الأدوية.

التقنيات المستخدمة

الاسم الوصف
TensorFlow TensorFlow هي مكتبة برمجيات مجانية ومفتوحة المصدر للتعلم الآلي.
Keras Keras هي مكتبة برمجيات مفتوحة المصدر توفر واجهة بايثون للشبكات العصبية الاصطناعية artificial neural networks.
OpenCV OpenCV هي مكتبة لدوال البرمجة تهدف بشكل أساسي إلى الرؤية الحاسوبية computer vision في الوقت الفعلي.

مجموعة البيانات

تم تدريب نموذج التعرف على الحروف المكتوبة بخط اليد على مجموعة بيانات EMNIST. تمت قراءة البيانات من ملف CSV وتحويلها إلى مصفوفات numpy دون أي معالجة مسبقة أو زيادة البيانات. خصائص مجموعة بيانات EMNIST هي كما يلي:-

  • عدد الفئات (Number of classes): 47.
  • جميع الفئات (All Classes):

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghnqrt

  • حجم الصورة (Image Size) 28x28x1 (صورة بتدرج رمادي مقاس 28 × 28 بكسل).
  • عدد صور التدريب Number of training images: 112800.
  • عدد صور الاختبار Number of testing images: 18800.

تدريب النموذج

تم تطوير نموذج التعرف على الحروف المكتوبة بخط اليد باستخدام Tensorflow وKeras. إنها شبكة CNN متعددة الطبقات (شبكة عصبية تلافيفية) حققت دقة تحقق بنسبة 86% بعد التدريب لمدة 20 حقبة (epochs). كان أداء النموذج إيجابيًا في مجموعة الاختبار ولم يفشل إلا في بعض الظروف الخارجية حيث تبدو بعض الأحرف مثل أحرف أخرى (على سبيل المثال: 4 تبدو مثل 9، وI يبدو مثل l، وما إلى ذلك). بنية النموذج هي كما يلي: –

  • 2 X Conv2D → Batch Normalization → ReLU → MaxPooling2D
  • Dropout
  • 1 X Conv2D → Batch Normalization → ReLU → MaxPooling2D
  • Dropout
  • 1 X Conv2D → Batch Normalization → ReLU → MaxPooling2D
  • Dropout
  • 1 X Cond2D → Batch Normalization → ReLU
  • Flatten
  • Dense
  • Dropout
  • Dense (Output Layer)

نشر النموذج

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

الخطوة 1: التحميل وتغيير الحجم

يتم تحميل الصورة باستخدام دالة imread الخاصة بـ OpenCV ثم يتم تغيير حجمها باستخدام دالة resize لإنشاء صورة بأبعاد 300 × 300 بكسل.

وهنا كيف تبدو الصورة بعد التحميل وتغيير الحجم loading and resizing.

الخطوة 2: تحويل التدرج الرمادي

يتم تحويل الصورة إلى صورة ذات تدرج رمادي grayscale image باستخدام دالة cvtColor مع كود تحويل مساحة اللون COLOR_RGB2GRAY.يتم تحويل الصورة إلى صورة بتدرج رمادي بشكل أساسي لأن مجموعة البيانات تتكون من صور بتدرج رمادي وأيضًا لأن تحويل النسخة الأصلية إلى صورة بتدرج رمادي سيؤدي إلى زيادة التباين بين الحبر والورق.

إليك الشكل الذي تبدو عليه الصورة بعد تحويل التدرج الرمادي grayscale conversion.

الخطوة 3: معالجة الصور

يتم تطبيق دوال معالجة الصور image processing المتعددة من أجل تعزيز التباين contrast وفصل النص المكتوب بخط اليد عن الخلفية. سلسلة عمليات معالجة الصور المطبقة هي كما يلي –

  • absdiff: تحسب هذه الدالة الفرق بين كل زوج من العناصر المتناظرة في المصفوفات المحددة. لتطبيق هذه الدالة، يتم إنشاء نسخة من الصورة ذات التدرج الرمادي وتطبيق التمويه المتوسط median blur عليها. يأخذ التمويه المتوسط متوسط جميع وحدات البكسل الموجودة أسفل منطقة kernel ويتم استبدال العنصر المركزي بهذه القيمة المتوسطة. تقوم الدالة absdiff بعد ذلك بحساب الفرق بين الصورة ذات التدرج الرمادي والصورة مع تطبيق التمويه المتوسط. تساعد هذه العملية على إزالة أي تشويش من الصورة.
  • normalize: تعمل دالة التسوية normalize function على تسوية الصورة بحيث تكون القيمة الدنيا لأي بكسل هي 0 والقيمة القصوى هي 255. تم تحديد NORM_MINMAX normType لتنفيذ هذه العملية.
  • morphologyEx: يتم تطبيق morphologyEx مع عامل التشغيل الافتتاحي opening operator. يساعد هذا في تقليل أي تشويش قد يكون موجودًا في الصورة.
  • clahe: CLAHE أو معادلة الرسم البياني التكيفي المحدودة للتباين Contrast Limited Adaptive Histogram Equalization هي آخر عامل معالجة للصور يتم تطبيقه على الصورة. يساعد على زيادة تباين الصورة المحددة. وهذا يساعد على جعل تحديد الكونتور contour أكثر دقة.

وإليك ما تبدو عليه الصورة بعد تطبيق كافة عمليات معالجة الصور على الصورة. يمكننا أن نرى أن التباين قد تم تعزيزه وتمت إزالة أي ظلال موجودة إلى حد ما.

الخطوة 4: العتبة

يتم استخدام دالة العتبة threshold function لتطبيق العتبة. لكل بكسل، يتم تطبيق نفس قيمة العتبة. إذا كانت قيمة البكسل أصغر من العتبة، يتم تعيينها على 0، وإلا يتم تعيينها على القيمة القصوى. يؤدي هذا إلى إنشاء صورة لقيم البكسل الثنائية.

إليك ما تبدو عليه الصورة بعد تطبيق عملية العتبة. يمكننا أن نرى أنه تم فصل الخلفية والمقدمة (النص) بشكل واضح.

الخطوة 5: الكشف عن الكونتور

يمكن تفسير الكونتور Contours ببساطة على أنها منحنى يربط جميع النقاط المستمرة (على طول الحدود)، ولها نفس اللون أو الشدة. تعتبر الخطوط الكونتورية أداة مفيدة لتحليل الشكل واكتشاف الكائنات والتعرف عليها. يمكننا استخدام هذه التقنية للعثور على الأحرف الفردية في الصورة. يمكن بعد ذلك اقتصاص هذه الأحرف وإرسالها إلى النموذج لأداء مهمة تصنيف الأحرف.

توضح الصورة أدناه كيفية اكتشاف الكونتور من صورة العتبة ونحصل على مربعات الاحاطة bounding boxes لكل حرف.

الخطوة 6: الاقتصاص والتعرف على الأحرف

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

إليك ما تبدو عليه الأحرف بعد أن نقوم بقصها وتجميعها/ترتيبها وفقًا لإحداثيات x وy لمربعات الاحاطة بها.

الخطوة 7: النتيجة

بعد إجراء جميع التنبؤات، يتم دمج المجموعات من أجل الحصول على الكلمات. بعد أن نحصل على الكلمات المتوقعة (اسم الدواء)، يتم تمرير النتيجة من خلال خوارزمية المطابقة. يتم ذلك لإزالة أي أخطاء في التنبؤ. (على سبيل المثال: في بعض الأحيان قد يتم توقع اسم الدواء ‘crocin’ على أنه ‘crocim’) بعد إزالة هذه الأخطاء، نحصل على الاسم الكامل للدواء ويمكننا استخدامه للبحث عن مزيد من المعلومات حول الدواء في قاعدة البيانات.

تطبيق الاندرويد

تم إنشاء تطبيق Android للمشروع باستخدام Flutter. يقوم التطبيق بتخزين معلومات المستخدم في قاعدة بيانات Cloud Firestore ويتم تحميل أي صور يقوم المستخدم بمسحها ضوئيًا إلى Firebase Storage. يوفر هذا التطبيق بشكل أساسي واجهة لنموذج التعرف على الكتابة اليدوية.

التقنيات المستخدمة

الاسم الوصف
Flutter  Flutter عبارة عن مجموعة أدوات تطوير برامج واجهة مستخدم مفتوحة المصدر تم إنشاؤها بواسطة Google. يتم استخدامه لتطوير تطبيقات Android وiOS وLinux وMac وWindows وGoogle Fuchsia والويب من قاعدة تعليمات برمجية واحدة.
Cloud Firestore Cloud Firestore هي قاعدة بيانات مرنة وقابلة للتطوير لتطوير الأجهزة المحمولة والويب والخوادم من Firebase وGoogle Cloud.
Firebase Storage Cloud Storage for Firebase عبارة عن خدمة تخزين كائنات قوية وبسيطة وفعالة من حيث التكلفة مصممة لتناسب نطاق Google.
TF Lite Android TensorFlow Lite عبارة عن مجموعة من الأدوات التي تتيح التعلم الآلي على الجهاز من خلال مساعدة المطورين على تشغيل نماذجهم على الأجهزة المحمولة والمضمنة وأجهزة إنترنت الأشياء.

صفحة تسجيل الدخول

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

صفحة التسجيل

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

صفحة لوحة تحكم الطبيب

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

صفحة لوحة تحكم المريض

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

مسح الوصفة الطبية

عندما ينقر المريض على زر مسح الوصفة الطبية scan prescription أو زر الإجراء action الموجود على لوحة معلومات المريض، يتم توجيهه إلى صفحة مسح الوصفة الطبية. تعرض صفحة المسح للمريض معاينة الكاميرا. يمكن للمريض استخدام هذا لالتقاط صورة لوصفته الطبية. بمجرد أن يلتقط المريض صورة للوصفة الطبية، يتم عرض شاشة اقتصاص تتيح له اقتصاص الصورة لإزالة أي كائنات في الخلفية. عندما يشعر المريض بالرضا عن الصورة التي تم اقتصاصها، يمكنه النقر فوق الزر “تم”. تظهر للمريض بعد ذلك صفحة تأكيد حيث يتم عرض الصورة. يجب على المريض التأكد من أن الصورة واضحة وأن الوصفة الطبية مرئية حتى تتم عملية التعرف بكفاءة ودقة. يمكن للمريض النقر على زر إعادة المحاولة retry للنقر على صورة أخرى another image أو النقر على زر المتابعة continue لمتابعة عملية التعرف.

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

المصدر
A doctor's prescription system with handwriting recognition

د. علاء طعيمة

كلية علوم الحاسوب وتكنولوجيا المعلومات / جامعة القادسية / العراق

مقالات ذات صلة

اترك تعليقاً

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

زر الذهاب إلى الأعلى