כיצד שילבתי סמנים ביולוגיים (Biomarkers) עם AWS Lambda וראייה ממוחשבת כדי ליצור מערכת אישית לניטור בריאות.
הקדמה: כשהמתוק הופך למלוח
המונח הרפואי לסוכרת הוא Diabetes Mellitus. בתרגום חופשי לעברית משמעותו היא "זרימה מתוקה", ואכן, חולי סוכרת מפרישים בשתן סוכר רב עד כדי כך שהוא הופך למתוק. חולי סוכרת לא רק מפרישים סוכר רב, אלא גם מייצרים שתן בכמויות גדולות וחשים צמא תמידי, גם אם הם שותים מספיק מים. מדוע זה קורה?
הכל מתחיל ונגמר בכליות. בפוסט זה נלמד על תפקידן של הכליות, על המבנה שלהן וכיצד הוא תומך בתפקודן השוטף. בנוסף, נציג מנגנון לזיהוי תמונה המבוסס ענן, שנועד להעריך את תפקוד הכליות באמצעים ביתיים.
תפקידן של הכליות
הומאוסטזיס הוא המצב שבו הגוף שומר על סביבה פנימית יציבה בטווחים תקינים, למשל בטמפרטורת הגוף. אם מדד מסוים חורג מהטווח המותר, הגוף פועל כדי להחזירו לאיזון: כשחם לנו מדי אנחנו מזיעים, וכשקר לנו מדי אנחנו רועדים כדי לייצר חום. אחד המדדים הקריטיים שהגוף מווסת הוא נפח והרכב הנוזלים, ובמיוחד בדם. הגוף צריך לאזן ללא הרף בין הנוזלים והמומסים שהוא מקבל ממקורות חיצוניים ופנימיים לבין אלו שהוא מאבד במהלך הפעילות השוטפת.

תפקידן המרכזי של הכליות הוא לווסת את כמות המים בגוף: להפריש עודפים כשצריך, או לשמר מים כשהכמות יורדת. ויסות זה משפיע ישירות על לחץ הדם. אחת הדרכים שבהן המוח מאותת לכליות להגביר את ספיגת המים היא באמצעות ההורמון ADH.
מעבר לוויסות נוזלים, הכליות אחראיות על סינון פסולת מטבולית - חומרים המיוצרים כתוצר לוואי של פעילות הגוף התקינה (כמו פחמן דו-חמצני שמפונה על ידי הראות). אחת הפסולות המשמעותיות ביותר היא האמוניה.
אמוניה נוצרת מפירוק חלבונים והיא רעילה מאוד לגוף. כדי לסלק אותה בבטחה, הכבד הופך אותה לחומר מסיס במים שנקרא אוריאה (Urea) - מושג שבוודאי פגשתם בבדיקות הדם שלכם. האוריאה נודדת בזרם הדם ומפונה דרך הכליות. פסולת נוספת המפונה באופן דומה היא הקריאטינין, תוצר לוואי של פירוק קריאטין המשמש ליצירת אנרגיה בשרירים.
נוסף על כל אלו, הכליות ממלאות תפקיד חיוני בשמירה על מאזן חומציות תקין בנוזלי הגוף.

הארכיטקטורה של מערכת הסינון
הכליות הן איברים בגודל אגרוף הממוקמים בצידי הגוף בחלקו התחתון. ברמת המאקרו, הכליה מורכבת מארבעה חלקים עיקריים:
קפסולה: רקמה קשיחה המעניקה לכליה את צורת השעועית שלה ומגנה עליה מפני פגיעות פיזיות ופתוגנים.
קליפה (Cortex): האזור שבו מתבצע הסינון הראשוני של פלזמת הדם (הנוזל המכיל מים, סוכרים ומלחים ללא תאי הדם).
ליבה (Medulla): אזור האחראי על ספיגה חוזרת של חומרים חיוניים שסוננו בטעות בקליפה, כמו מים.
אגן הכליה: המקום שבו מתרכז השתן לפני שהוא עובר לשלפוחית.

הנפרונים - סוס העבודה
פעולת הסינון עצמה מתרחשת ביחידות מבניות זעירות שנקראות נפרונים. בכל כליה ישנם מאות אלפי נפרונים, והם ה"פועלים" האמיתיים של המערכת.


הנפרון הוא צינור דקיק המוקף בנימי דם. הסינון מתבצע באמצעות לחץ: הדם זורם בנימים דקיקים ומחוררים הנקראים פקעית (Glomerulus), הנמצאים בתוך מבנה דמוי קופסה שנקרא קופסית באומן. חלקיקים קטנים מספיק עוברים מהדם אל הקופסית, מסוננים החוצה וממשיכים לעבר אגן הכליה, בעוד שאר הדם ממשיך בדרכו בזרם הדם. אז מה בעצם מסונן החוצה?
פסולת מטבולית כגון אוריאה.
מים - בניגוד לפסולת המטבולית, אותם אנו רוצים חזרה.
מולקולות קטנות ויונים כגון סוכר, נתרן ואשלגן.
חשוב להבין שלא כל מה שסונן החוצה אמור לצאת מהגוף. חומרים חיוניים כמו סוכר, נתרן ומים צריכים לחזור לדם. לשם כך, קופסית באומן מחוברת לצינור ארוך שנקרא אבובית. לאורך האבובית פועלים מנגנונים השואבים באופן אקטיבי את חומרי ההזנה חזרה לנימי הדם המקיפים אותה, והמים חוזרים בעקבותיהם בתהליך של אוסמוזה.
נחזור לשאלת השתן המתוק: אם יש מנגנון ששואב סוכר חזרה לדם, מדוע הוא מופיע בשתן של חולי סוכרת? התשובה נעוצה בהספק של המשאבות. ממש כמו משאבה פיזית, גם למשאבות האקטיביות באבובית יש קיבולת מוגבלת. כאשר רמת הסוכר בדם גבוהה מאוד, המשאבות פשוט לא מצליחות לעמוד בעומס, וחלק מהסוכר נשאר בצינור ומפונה בשתן.
קיימות בעיות רבות שיכולות לפגוע בתפקוד הנפרונים. אחת הנפוצות שבהן היא פקעית מחוררת מדי. דמיינו מסננת שהחורים שלה גדלו, חומרים שלא אמורים לעבור, כמו חלבונים גדולים, מצליחים לחדר לאבובית ויוצאים מהגוף בשתן. מצבים כמו סוכרת ולחץ דם גבוה הם הגורמים העיקריים להרס נימי הדם העדינים הללו.
כיצד מזהים פגיעה בכליה
אחד החלבונים המרכזיים שדולפים בשלב מוקדם של פגיעה כליתית הוא האלבומין. לאלבומין, המיוצר בכבד, יש שני תפקידים עיקריים:
שינוע מולקולות: הוא משמש כנשא לחומרים שאינם מסיסים במים, כמו הורמונים ושומנים.
שמירה על נפח הדם: הוא מונע מנוזלים לזלוג מזרם הדם לרקמות (מניעת בצקות) על ידי שמירה על לחץ אוסמוטי גבוה בתוך הנימים.
במצב תקין, אלבומין אינו עובר דרך הפקעית בשל גודלו. הימצאותו בשתן היא אחד ה"ביו-מרקרים" הראשונים המעידים על פגיעה בכליות עוד לפני שהיא הופכת לאקוטית.
זיהוי אלבומין בשתן הוא אחד הביו מרקרים הראשונים המאפשרים לזהות פגיעה בכליה עוד לפני שהפגיעה הופכת לאקוטית. אם היינו מצליחים לזהות אלבומין בשתן הדבר היה מאפשר לנו לזהות פגיעה בכליות.
מדידה ברצועת שתן
הדרך הסטנדרטית לזיהוי אלבומין היא בדיקת מעבדה המודדת את היחס בין אלבומין לקריאטינין בשתן, מדד הנקרא ACR (Albumin Creatinine Ratio). ערך זה מעיד על איכות הסינון בנפרונים ומחולק לשלוש קטגוריות:
תקין: פחות מ-30 מ"ג אלבומין לגרם קריאטינין.
מיקרואלבומינוריה: 30-300 מ"ג. מעיד על ראשיתה של פגיעה כליתית.
מקרואלבומינוריה: מעל 300 מ"ג. מעיד על פגיעה משמעותית בכליות.
הצורך בהפניה רפואית והגעה למרפאה מקשים על מעקב צמוד. פתרון נגיש יותר הוא שימוש ברצועות שתן (סטיקים). מדובר ברצועות פלסטיק עם קצוות כימיים המשנים את צבעם בהתאם לריכוז החומרים. הבעיה? הערכה בעין אנושית אינה מדויקת ומספקת רק תוצאה של "בערך".

כאן נכנסת לתמונה הראייה הממוחשבת. מה אם נוכל לצלם את הרצועה בטלפון ולקבל ניתוח מדויק תוך שניות? מערכת peeCV שבניתי נועדה לעשות בדיוק את זה: לתרגם את הצבע למספר מדויק ולשמור את ההיסטוריה בענן לצורך מעקב מגמות.
הרחבה - קריאטינין ואלבומין ומה שביניהם
מדוע אנו זקוקים לקריאטינין כדי להעריך אלבומין? ריכוז האלבומין בשתן מושפע מאוד מכמות המים ששתינו. אם שתינו הרבה, השתן יהיה דליל והריכוז ירד, גם אם כמות האלבומין המוחלטת גבוהה. הקריאטינין מופרש בקצב קבוע יחסית לאורך היממה וסובל מאותה בעיית דילול. לכן, חלוקת האלבומין בקריאטינין מבטלת את השפעת כמות המים ומעניקה לנו מדד אמין באמת.
עצם החלוקה והעבודה שאנו יודעים כמה קריאטינין מופרש מגוף עבור אדם ממוצע מאפשרת לנו לתת ערכים לערך ACR, קרי עד 30, 30 עד 300 ומעל 300.
מערכת peeCV
מערכת peeCV מאפשרת למשתמש לצלם את הרצועה לאחר הטבילה ולקבל קריאה מידית של המדדים. התהליך מתבצע בשני מסלולים מקבילים: אלגוריתם ראייה ממוחשבת (CV) דטרמיניסטי, וניסיון זיהוי מבוסס מודלי שפה גדולים (LLM).


ניתן באמצעות המערכת לראות את היסטוריית הבדיקות.

ארכיטקטורה

המערכת בנויה על בסיס Lambda Durable Functions או LDF, שאמון על על הניצוח של הכל. LDF הוצג ב-ReInvent האחרון ואחד החוזקות שלו הוא האפשרות לייצר מכונת מצבים בקוד קריא ולא כ-DSL כפי ש-AWS Step Functions דורש, יש לו יתרונות נוספים כגון כתיבת טסטים קלה יותר.
התהליך מתחיל בהעלאת תמונה ל-S3 Bucket. משם, LDF מפעיל במקביל אלגוריתם CV, מודל Sonnet דרך Bedrock ומודל Gemini. מודלי ה-LLM מנתחים את התמונה כ"קופסה שחורה" על בסיס תיאור הבעיה, בעוד שאלגוריתם ה-CV פועל בצורה דטרמיניסטית מוגדרת מראש.
בשלב הסופי, המערכת אוספת את כל התוצאות, מחשבת ציון ACR משוקלל ושומרת אותו ב-DynamoDB. הגישה למשתמשים מנוהלת באמצעות Lambda Authorizer והפרונט-אנד מוגש דרך CloudFront.
זיהוי תמונה
צילום ביתי הוא אתגר - התאורה, הזווית והפוקוס משתנים מתמונה לתמונה. כדי להתגבר על ה"ג׳ונגל" הזה, השתמשתי בכרטיס ייחוס פיזי עם סמנים קבועים המאפשרים למערכת ליישר את התמונה ולבצע כיול צבעים (קליברציה) מדויק.

סימני ArUco לתיקון פרספקטיבה ומיקום במרחב.
פלטת צבעים לקליברציית צבעים.
מיקום הרצועה.
תהליך הזיהוי
זיהוי סימנים ויישור פרספקטיבה
ArUco הם סמנים ריבועיים שחורים (דמויי QR Code). ספריית OpenCV מזהה אותם גם בזוויות קשות, ועל בסיסם ניתן לבצע טרנספורמציה מתמטית המיישרת את התמונה כאילו צולמה מלמעלה בפרספקטיבה מושלמת.

מכיוון שמיקום הסמנים יודע, ברגע שמזהים אותם, ניתן לבצע טרנספורמציה מתמטית על מנת לתקן את הפרספקטיבה, תחשבו על מנגנון שמאפשר ליישר את התמונה כאילו צילמו אותה מלמעלה.

שלב דגימת הצבעים
לאחר שהתמונה מיושרת, המערכת ניגשת למיקומים הידועים של פדי הבדיקה על הרצועה ודוגמת את ערך החציון של הפיקסלים. שימוש בחציון (Median) הופך את המערכת לעמידה יותר בפני לכלוכים או רעשים בצילום.

שלב קליברציית הצבע
צבע הפד משתנה תחת סוגי תאורה שונים (תאורה חמה צהובה מול תאורה קרה לבנה). לכן, הכרטיס כולל ריבועי צבע עם ערכים ידועים. המערכת מודדת את הסטייה של צבעי הייחוס מהערך המקורי ומחילה את אותו תיקון על צבעי הפדים של הבדיקה.
שלב מיפוי צבע לערך
הצבע המתוקן מתורגם לערך מספרי על בסיס השוואה לקובץ ערכים שהופק ממפרטי היצרן. בסיום התהליך, המערכת מחשבת את ה-ACR באמצעות חלוקה פשוטה.
ערכי הצבעים שמורים בקובץ והאלגוריתם מנסה למצוא את הצבע הקרוב ביותר.

חישוב ACR
ברגע שיש לנו את ערכי קריאטינין והאלבומין, אנו נחשב את ה-ACR באמצעות חלוקה פשוטה.
שימוש ב-LLM לזיהוי ACR
במקור חשבתי לבנות תהליך זיהוי על טהרת ה-LLM: לתת למספר מודלים שונים להסתכל על התמונה ולנסות להעניק לקריאטינין ולאלבומין מספר.
דוגמא לפרומפט:
You are a medical colorimetry expert analysing a MicroalbuPHAN urine test strip photo. The strip has two coloured pads: 1. **Albumin pad** (top) – colours range from pale yellow-green (low) to deep teal/green (high). 2. **Creatinine pad** (bottom) – colours range from yellow-orange (low) to dark orange-brown (high). A Calibrite ColorChecker Classic card may or may not be visible in the image. Concentration levels: - Albumin: 10, 30, 80, or 150 mg/L - Creatinine: 10, 50, 100, 200, or 300 mg/dL Your task: 1. Identify the albumin and creatinine pads. 2. Match each pad colour to the closest concentration level from the lists above. Do NOT compute the ACR or classify it — only return the two concentrations. Respond ONLY with valid JSON (no markdown fences, no extra text): { "albumin_mg_l": <int>, "creatinine_mg_dl": <int>, "reasoning": "<brief explanation of how you matched the pad colours>" }הניסוי עם מודלי ה-LLM הראה תוצאות מעורבות. Sonnet התקשה לעיתים בזיהוי הרצועה ו-Gemini Flash לא היה מספיק מדויק. הפער המרכזי היה במהירות ובעלות: אלגוריתם ה-CV מהיר באלפי מונים וזול משמעותית מהרצת מודל ענן כבד לכל בדיקה.
לדוגמא, עבור הצילום הבא (שנערך ע״י Nano Banana)

לסונט 4.6 לקח כ34 שניות והעלות היתה כ-$0.023997 מול חצי שנייה באלגוריתם הדטרמיניסטי ועלות של $0.000011 (ריצת למדה). ולכן עצרתי את הניסויים מול המודלים, אני מניח שאת העלויות ומהירות החישוב ניתן לשפר במעבר למודלים מקומיים, אם כי לא ברור אם זה יעלה את איכות הזיהוי, כנראה שלא.
היתה אופרציה שבהם LLM היווה פתרון מושלם והוא ייצור תמונות לבדיקה.
נתונים
אחד האתגרים הגדולים היה איסוף נתונים (Data) לבדיקת המערכת. הייתי זקוק למאות תמונות בתנאי תאורה וזוויות שונות. כאן מצאתי שימוש מושלם ל-LLM ולמודלים מחוללי תמונות: יצרתי סקריפט המייצר פרומפטים מפורטים לגרפיקה ממוחשבת, המדמים סצנות ריאליסטיות של צילום הכרטיס עם הצללות וטשטושים מכוונים.
יצרתי באמצעות גרפיקה ממוחשבת את הכרטיס שעליו מונחת הרצועה.

יצרתי סקריפט שמבצע קריאות API כנגד Nano Banana והפרומפט שמניח את הכרטיס והרצועה משתנה ומייצר סצנות שונות, כגון הסתרה של חלק מה-ArUco, שינויי פרספקטיבה, תאורה וכדומה.
דוגמא לפרומפט:
Using this image as a reference, create a photorealistic photograph of this exact card placed on {surface}, shot {angle_desc} with a smartphone camera. Keep all elements exactly as shown: - The grey card background, strip outline, and both rows of color reference patches must match the reference precisely - The white test strip must stay in the same position inside the outline, with its upper pad (albumin) colored {alb_desc} and its lower pad (creatinine) colored {cre_desc} Degradation conditions (apply realistically): - {one randomly chosen from: motion blur / underexposure / hand shadow} The card should fill roughly {frame_fill}. {lighting_desc}. {extra_detail} Photorealistic, no illustration style.כך יצרתי מאות תמונות בוריאציות שונות.

סיכום
בפוסט זה ראינו איך הבנה ביולוגית של מבנה הכליה והכרת הביו-מרקרים (אלבומין וקריאטינין) יכולות להפוך לפתרון טכנולוגי מתקדם. שילוב של ראייה ממוחשבת ושימוש חכם בענן מאפשרים לעקוב אחר הבריאות שלנו בצורה מדויקת ופשוטה יותר.
תגובות