شغّلنا محرّكنا على فيديو حقيقي، وقارنّا الناتج بتقرير المعمل الحقيقي لنفس العينة — بداية سلسلة تحقّق هنكبّرها بحالات أكتر عشان نعاير المحرّك ونقيس دقته.
الفيديو والتقرير ده بيانات حقيقية متطابقة من معمل حقيقي — الفيديو هو فعلاً عينة التقرير. بنستخدمها لمعايرة والتحقّق من محرّكنا مقابل نتيجة فني بشري. دي الحالة رقم ١ — والمستخدم هيبعت حالات أكتر فنبني مقارنة أوسع. (ملاحظة: بيانات معمل خارجي مش إنتاج مون، والمحرّك prototype للإثبات لا للاستخدام العيادي بعد.)
صورة المسارات من محرّكنا: أخضر = تقدمي · برتقالي = غير تقدمي · أحمر = ساكن. المسارات الخضرا = حيوانات متحركة حقيقية اتتبّعت صح.
| البارامتر | معمل خارجي (مرجع تقريبي) | محرّكنا (الفيديو) | الحالة |
|---|---|---|---|
| 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 |
| Concentration | 17 مليون/مل | — | مستحيل من الفيديو |
| Volume | 3 مل | — | عياني (ماصة) |
| Morphology (Normal) | 15% | — | يحتاج صبغة 1000x |
| Vitality | 45% | — | يحتاج صبغة eosin |
| WBC / RBC | 0–1 / HPF | — | يحتاج وحدة منفصلة |
* الحالة ١ من سلسلة تحقّق — كل ما تيجي حالات أكتر نكبّر المقارنة ونعاير المحرّك أدق.
عملنا تشغيلتين بمحرّك Python على الفيديو، وحاولنا OpenCASA الحقيقي، وقارنّاهم بالتقرير الخارجي:
| البارامتر | التقرير الخارجي | Python — تشغيلة 1 | Python — تشغيلة 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 / 24 | 34 / 23 | |
| عدد المسارات / كشف-بالفريم | — | 707 / 79 | 240 / 50 |
نزّلنا OpenCASA_.jar الحقيقي (1.6MB) + ImageJ على السيرفر، ولما شغّلناه طلع java.awt.HeadlessException — لأنه برنامج رسومي (GUI/Swing) محتاج شاشة ونقر بشري، ومفيش virtual display على السيرفر. يعني OpenCASA مينفعش يدّينا أرقام آلياً على السيرفر — لازم يتشغّل على جهاز ويندوز ويدخّل الفني الفيديو بإيده. فالأرقام الوحيدة اللي طلعت من الفيديو هي بتاعة محرّكنا (Python).
المحرّك اتتبّع الحيوانات المتحركة فعلاً وطلّع حركة تقدمية في نفس النطاق التقريبي للتقرير. الحركة الاتجاهية الواضحة هي أسهل وأوثق حاجة يقيسها محرّك فيديو. ده يثبت إن الفكرة شغّالة — مع إن دي مش نفس العينة بالضرورة، فاعتبره مؤشّر مبدئي مش تطابق مؤكّد.
المحرّك بيعدّ نقط ساكنة كتير زيادة (شوائب/ضوضاء brightfield بيحسبها حيوانات ساكنة) → بيكبّر مقام النسبة → الساكنة تطلع أعلى والكلية أقل. الفني البشري بيفرّق بسهولة بين حيوان منوي حقيقي وشائبة — المحرّك في الفيديو ده (تباين منخفض + 30fps) لسه مش بيفرّق كويس. الحل: phase-contrast + كشف أدق + معايرة.
الحجم (عياني بالماصة)، التركيز (محتاج شريحة عدّ معايَرة بعمق معروف)، الشكل (محتاج مسحة مصبوغة 1000x زيت)، الحيوية (محتاج صبغة eosin) — دي طرق تحضير مختلفة تماماً، مش ممكن تطلع من فيديو حركة. لازم تيجي يدوي أو بوحدات/أجهزة منفصلة.
• الحركة (Motility) ونِسبها
• الحركة التقدمية ✓
• السرعات (VCL/VSL/VAP…) — بعد معايرة µm/px
• تتبّع المسارات وتوثيقها بصرياً
• الحجم (عياني)
• التركيز الدقيق (محتاج شريحة عدّ معايَرة)
• الشكل (Morphology — صبغة)
• الحيوية (Vitality — صبغة)
المحرّك أثبت إنه يشتغل على عينة حقيقية وطابق المعمل في الحركة التقدمية — وهي جوهر CASA. باقي الفروق سببها جودة الفيديو والضبط، مش الفكرة. مع كاميرا أحسن + معايرة + ضبط كشف، نقدر نطلّع الحركة + الـkinematics آلياً ونملأ بيها البنل، وناخد التركيز/الشكل/الحيوية يدوي أو بوحدات منفصلة.