تحقّق محرّك CASA بتاعنا مقابل تقرير معمل حقيقي — الحالة ١

شغّلنا محرّكنا على فيديو حقيقي، وقارنّا الناتج بتقرير المعمل الحقيقي لنفس العينة — بداية سلسلة تحقّق هنكبّرها بحالات أكتر عشان نعاير المحرّك ونقيس دقته.

الفيديو: 800×600 · 30fps · 75s · brightfield  •  المحرّك: Python (numpy/scipy) — prototype  •  بيانات اختبار خارجية

ℹ️ طبيعة البيانات

الفيديو والتقرير ده بيانات حقيقية متطابقة من معمل حقيقي — الفيديو هو فعلاً عينة التقرير. بنستخدمها لمعايرة والتحقّق من محرّكنا مقابل نتيجة فني بشري. دي الحالة رقم ١ — والمستخدم هيبعت حالات أكتر فنبني مقارنة أوسع. (ملاحظة: بيانات معمل خارجي مش إنتاج مون، والمحرّك prototype للإثبات لا للاستخدام العيادي بعد.)

1 ظروف التجربة (مهمة لفهم النتيجة)

مسارات الحركة

صورة المسارات من محرّكنا: أخضر = تقدمي · برتقالي = غير تقدمي · أحمر = ساكن. المسارات الخضرا = حيوانات متحركة حقيقية اتتبّعت صح.

2 جدول المقارنة الكامل

البارامترمعمل خارجي (مرجع تقريبي)محرّكنا (الفيديو)الحالة
Progressive motility (PR)5%4%✓ قريب جداً*
Total motility (PR+NP)30%25%≈ قريب
Non-progressive (NP)25%21%≈ قريب
Immotile (IM)40%75%✗ مبالغ فيه
VCL / VSL (سرعات)— (المعمل مابيقيسهاش)34 / 23 px/sيحتاج معايرة µm/px
Concentration17 مليون/ملمستحيل من الفيديو
Volume3 ملعياني (ماصة)
Morphology (Normal)15%يحتاج صبغة 1000x
Vitality45%يحتاج صبغة eosin
WBC / RBC0–1 / HPFيحتاج وحدة منفصلة

* الحالة ١ من سلسلة تحقّق — كل ما تيجي حالات أكتر نكبّر المقارنة ونعاير المحرّك أدق.

المقارنة الثلاثية: Python (تشغيلتين) vs OpenCASA vs التقرير

عملنا تشغيلتين بمحرّك Python على الفيديو، وحاولنا OpenCASA الحقيقي، وقارنّاهم بالتقرير الخارجي:

البارامترالتقرير الخارجيPython — تشغيلة 1Python — تشغيلة 2 (أدق)OpenCASA
Progressive (PR)5%4%4%لم يُنتج أرقام
HeadlessException
(برنامج GUI)
Total motile (PR+NP)30%24%25%
Non-progressive (NP)25%20%21%
Immotile (IM)40%76%75%
VCL / VSL (px/s)38 / 2434 / 23
عدد المسارات / كشف-بالفريم707 / 79240 / 50

❌ OpenCASA: نزّلناه وشغّلناه فعلاً — لكنه ما اشتغلش على السيرفر

نزّلنا OpenCASA_.jar الحقيقي (1.6MB) + ImageJ على السيرفر، ولما شغّلناه طلع java.awt.HeadlessException — لأنه برنامج رسومي (GUI/Swing) محتاج شاشة ونقر بشري، ومفيش virtual display على السيرفر. يعني OpenCASA مينفعش يدّينا أرقام آلياً على السيرفر — لازم يتشغّل على جهاز ويندوز ويدخّل الفني الفيديو بإيده. فالأرقام الوحيدة اللي طلعت من الفيديو هي بتاعة محرّكنا (Python).

قراءة المقارنة

  • التشغيلتين متقاربتين جداً → النتيجة ثابتة مش صدفة. التشغيلة 2 (كشف أدق) قلّلت الكشف الزائد (من 79 لـ50 كشف/فريم) بس النِّسب تقريباً زيها.
  • Progressive ثابت 4% في التشغيلتين وقريب من التقرير (5%) → ده الرقم الموثوق.
  • Immotile مرتفع (75–76%) في الاتنين → مشكلة كشف ثابتة (ضوضاء brightfield) مش عشوائية → الحل phase-contrast + ضبط، مش إعادة تشغيل.
  • OpenCASA = صفر أرقام على السيرفر → لو عايزينه، لازم ويندوز؛ ولو عايزين أتمتة على سيرفر، محرّكنا هو الطريق.

3 نفهم النتيجة: إيه اللي طابق وإيه اللي اختلف وليه

✅ مؤشّر مبدئي جيد: الحركة التقدمية (4% عندنا vs 5% المعمل الخارجي)

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

✗ الفرق: الساكنة (75% عندنا vs 40% المعمل)

المحرّك بيعدّ نقط ساكنة كتير زيادة (شوائب/ضوضاء brightfield بيحسبها حيوانات ساكنة) → بيكبّر مقام النسبة → الساكنة تطلع أعلى والكلية أقل. الفني البشري بيفرّق بسهولة بين حيوان منوي حقيقي وشائبة — المحرّك في الفيديو ده (تباين منخفض + 30fps) لسه مش بيفرّق كويس. الحل: phase-contrast + كشف أدق + معايرة.

⚠️ غير قابل للقياس من الفيديو ده أصلاً

الحجم (عياني بالماصة)، التركيز (محتاج شريحة عدّ معايَرة بعمق معروف)، الشكل (محتاج مسحة مصبوغة 1000x زيت)، الحيوية (محتاج صبغة eosin) — دي طرق تحضير مختلفة تماماً، مش ممكن تطلع من فيديو حركة. لازم تيجي يدوي أو بوحدات/أجهزة منفصلة.

4 الخلاصة: محرّك الفيديو بيصلح لإيه بالظبط

👍 بيعمله كويس (بعد ضبط)

• الحركة (Motility) ونِسبها
• الحركة التقدمية ✓
• السرعات (VCL/VSL/VAP…) — بعد معايرة µm/px
• تتبّع المسارات وتوثيقها بصرياً

👎 مش بيعمله من الفيديو

• الحجم (عياني)
• التركيز الدقيق (محتاج شريحة عدّ معايَرة)
• الشكل (Morphology — صبغة)
• الحيوية (Vitality — صبغة)

عشان نوصل لدقة عيادية، محتاجين:

  • كاميرا 50–60fps + ميكروسكوب phase-contrast + منصة 37°م.
  • معايرة µm/pixel (تكبير معلوم) → نحوّل px/s لـµm/s.
  • شريحة عدّ معايَرة (Leja/Makler) → نحسب التركيز الحقيقي.
  • ضبط الكشف (يميّز الحيوان من الشائبة) — أهم تحسين لتصحيح نسبة الساكنة.
  • للشكل/الحيوية: وحدات منفصلة (صور مصبوغة) — مش نفس الفيديو.

الحكم النهائي

المحرّك أثبت إنه يشتغل على عينة حقيقية وطابق المعمل في الحركة التقدمية — وهي جوهر CASA. باقي الفروق سببها جودة الفيديو والضبط، مش الفكرة. مع كاميرا أحسن + معايرة + ضبط كشف، نقدر نطلّع الحركة + الـkinematics آلياً ونملأ بيها البنل، وناخد التركيز/الشكل/الحيوية يدوي أو بوحدات منفصلة.