340 likes | 607 Views
מערכת לביצוע בדיקות רפואיות. מנחים: ירון חונן, יוג'ין קוניוחוב סטודנטים: אנה אופליאנד, סרגיי יוסופוב. כללי.
E N D
מערכת לביצוע בדיקות רפואיות מנחים: ירון חונן, יוג'ין קוניוחוב סטודנטים: אנה אופליאנד, סרגיי יוסופוב
כללי המטרה העיקרית של הפרויקט היתה פיתוח מערכת אשר תהיה מסוגלת להתתממשק עם מכשיר לבדיקות רפואיות, אשר פותח בפקולטה להנדסה ביו-רפואית, לקרוא ולהציג את הנתונים מהמכשיר הנ"ל בצורה נוחה, יעילה וכך שיהיה ניתן לגשת לנתונים האלא ממכשירים שונים. כאחד הקריטריונים החשובים עבורינו היה לפתח מערכת אשר תאפשר גמישות מירבית. למכשיר ביו-רפואי יכולות להיות הרבה קונפיגורציות שונות, זו בעצם פלטפורמה המאפשרת הרכבת חיישנים שונים לביצוע בדיקות שונות. היה לנו חשוב להתייחס לכך ולפתח מערכת אשר לא תגביל את סוג וכמות החיישנים אשר בעזרתם מבצעים בדיקות.
מטרות • כחלק מי הפרויקט היה עלינו להגדיר פרוטוקול תקשורת בין מכשיר ביו-רפואי למכשיר אשר מנסה לקרוא נתוני בדיקה . היה עלינו גם להגדיר מבנה של חבילות מידע המועברות בין המכשירים. • במהלך העבודה על הפרויקט לא עבדנו עם המכשיר עצמו אלא בנינו סימולטור שלו. • פיתוח האפליקציה לטאבלט אשר מריץ מערכת הפעלה Android , אשר מטרתה לקרוא נתונים מהמכשיר הביו-רפואי, להציג אותם, ולשמור אותם ב web server. • פיתוח web application אשר תשמור את נתוני הבדיקה ותציג אותם למשתמשים
סימולטור private void startServer() throws IOException{ UUID uuid = new UUID("1101", true); String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server"; StreamConnectionNotifierstreamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString ); StreamConnection connection=streamConnNotifier.acceptAndOpen(); OutputStreamoutStream=connection.openOutputStream(); PrintWriterpWriter=new PrintWriter(new OutputStreamWriter(outStream),true); ArrayList<String> arr = getXMLMessages(numberOfValues,numberOfDiscreteChannels, numberOfContinuousChannels); for(String s : arr){ startToSendNewPackage = (new Date()).getTime(); System.out.println("Package #"+counter+" Size "+s.getBytes().length+ " was sent at " +startToSendNewPackage + ":"+ s); pWriter.write(s); counter++; myWait(waitForMilliseconds); } pWriter.close(); streamConnNotifier.close(); } Strings
חבילות מידע המכשיר הרפואי שפותח בפקולטה להנדסה ביו-רפואית משדר שני סוגים של מידע. • נתונים מחושבים - המידע שעבר עיבוד בתוך מכשיר רפואי ובכל חבילת מידע יש ערך בודד בכל ערוץ. • נתונים רציפים - רצף של דגימות שלא עברו עיבוד בכל חבילה יש מספר ערכים בכל ערוץ. על מנת שלרכיבים שונים במערכת תהיה שפה משותפת, כחלק מהפרויקט היה עלינו להגדיר פורמט אחיד להעברת נתונים בין חלקים שונים במערכת.
חבילות מידע היינו צריכים לשמור על שני העיקרונות הבאים: • לשמור על גודל חבילה, כלומר לאוסיף כמות metadata מינימלי הדרוש על מנת לא לנפח גודל החבילות. שמירת על גודל חבילה קטן הוא אילוץ חשוב כי קיימות מגבלות פיזיות למהירות העברת נתונים דרך Bluetooth. • לאפשר ניתוח נוח ומהיר של המידע.
TechnionBioMedicalApp כאחד הקריטריונים החשובים עבורינו היה לפתח מערכת אשר תאפשר גמישות מירבית. למכשיר הרפואי יכולות להיות הרבה קונפיגורציות שונות, זו בעצם פלטפורמה המאפשרת הרכבת חיישנים שונים וביצועה בדיקות שונות. היה לנו חשוב להתייחס לכך ולפתח אפליקציה אשר לא תגביל את סוג וכמות החיישנים אשר בעזרתם מבצעים בדיקות. לכן פיתחנו אפליקציה אשר מאפשרת להתאים את עצמה להרכבי חיישנים שונים של מכשיר רפואי. משימה אחרת לא פחות חשובה היתה לספק למשתמש אפשרות להגדיר את מסך תצוגת הבדיקות בצורה שנוחה לו.
Physical Channels על מנת לתאר כל ערך בחבילת מידע בנינו ישות בשם physical channel לחץ דם
Schema אחרי שכל החיישנים שמותקנים בקונפיגורציה הנוכחית של החומרה הוגדרו במערכת בעזרת physical channels, עלינו לתאר את פורמט הנתונים שמכשיר ביו-רפואי משדר בשפה המובנת לאפליקציה שלנו, כך שהיא תוכל לפענח את החבילות בצורה נכונה, ותדע לייחס את הערכים למדידות המתאימות. בשביל מטרה זו אנו מגדירים ישות בשם schema.
Virtual Channels על מנת לתת לכל Physical channel כמה אפשרויות תצוגה שונות אנחנו מגדירים ישות בשם virtual channel
Screens • על מנת להגדיר מסך תצוגה ראשי של הבדיקה הגדרנו ישות בשם Screen. זה כלי עזר אשר מאפשר לנו למקם את כל האלמנטים של תצוגה בצורה שנוחה לנו, להגדיר את אורך הזמן של הגרף, קצב עדכונים וכו'
BioMedicalWebApp על מנת לתת גישה לתוצאות בדיקה לכלל המעוניינים ולהקטין את כמות צריכת הזיכרון של הטאבלטים שבהם הוא משאב מוגבל מאוד פיתחנו web applicataion אשר עונה על הצרכים האלה.
BioMedicalWebApp • web services מתקשרים עם העולם בפורמט JSON objects. • רשימת web services (כל הכתובות נתונות ביחס ל web_application_url/service) : • /getAllTests - מחזירה את JSONArray של כל הבדיקות אשר נשמרו במערכת. • /test/{id}/{type}/{channelNumber}- מחזירה את JSONArray של כל הנקודות של ערוץ מספר{channelNumber} טיפוס הערוץ {type} ומספר בדיקה {id} בפורמט זמן , ערך.
BioMedicalWebApp • /addNewPackage- עונה רק על POST HTTP Method ומוסיפה את חבילת המידע אשר מצורפת ל request ל web application. • /createTest- עונה רק על POST HTTP Method ומוסיפה את הבדיקה החדשה ב web application. בהתאם להגדרות אשר היו מצורפים ב POST Request. אחרי שטסט נוצר ב web application נשלח כתגובה ל request response עם מספר סידורי של הבדיקה הזאת בחזרה ל client. אם ברצונו של ה client להוסיף חבילות מידע עבור הבדיקה הנ"ל עליו להשתמש במספר הסידורי הזה. • /tests/{id}- מחזיר את ה JSONObject אשר מתאר את הטסט עם testId = {id}. • /{testId}/{channelType}/{channelNumber}/{startTime}/{endTime}- מוחזרים כל הנקודות בין הזמנים startTime and endTime של ערוץ מספר channelNumber מטיפוס channelType של הטסט עם מספר סידורי testId. • /{testId}/{channelType}/{channelNumber}/{startTime}/{endTime}/{limit}- כמו web service למעלה רק כשכמות נקודות בטווח הזה מוגבלת ב limit.
עקרונות המימוש BluetoothService • ה service מתחיל לרוץ עם לחיצה על כפתור תחילת ביצוע בדיקה רפואית ועובד לפי תרשים הבא: • בודק האם Bluetooth adapter עובד, אם לא רושם הודעת שגיאה ועובר לשלב 4 • מנסה להתחבר למכשיר Bluetooth אשר נבחר באפליקציה כמכשיר שממנו אפליקציה מקבלת הודעות אם לא מצליח מודיע על כישלון ועובר לשלב 4 • כל עוד ה socket פתוח משני הצדדים תקרא את החבילה (שנשלחת כי שורה) • תפענח את החבילה אם פינוח חבילה הצליח תעבור לשלב 3a2 אחרת 3a1 • תודיע שהחבילה שהתקבלה אינה מתאימה ל schema נוכחית ותעבור לשלב 4 • תוסיף את החבילה למבנה הנתונים של האפליקציה אשר תפקידו לנהל את החבילות ותחזור על שלב 3. • תודיע על סיום עבודה של ה service ותסגור אותו.
Create new test /addTest
WebUploader Service • ה service מתחיל לרוץ עם תחילת הריצה של מערכת ההפעלה, כל פעם שמשתמש מתחבר לאינטרנט, או אחרי לחיצה על הכפתור סיום בדיקה הנוכחית. חשוב לציין ש ה service לא ירוץ בו זמנית עם ה MyBluetoothService על מנת לא לצרוך משאבים בזמן ביצוע בדיקה. ה serviceעובד לפי תרשים הבא: • האם יש חבילות שמורות במסד נתונים, אם כן עובר לשלב 2 אחרת לשלב 4 • תבדוק האם קיים חיבור אינטרנט אם כן המשך לשלב 3 • תודיע למשתמש על אי יכולת שליחת חבילות ל web server וברגע שמשמתמש יתחבר לאינטרנט השליחה תתחיל באופן אוטומטי. • כל עוד יש חבילות במסד נתונים • שלח חבילה לשרת אם השליחה לא הצליחה תחזור לשלב 3a אם הוא לא מצליח לשלוח אותה תוך 10 נסיונות תודיע למשמש ו תעבור לשלב 4. • תמחק את החבילה אשר נשלחה ממסד נתונים לוקלי ותחזור אל שלב 3. • תסגור את ה Service ותודיע על כך.
WebApplication Cache = Priority Queue getTest()
Tools and platforms: • Simulator: • Eclipse Java EE IDE for Web Developers. Version: Kepler Service Release 1. Build id: 20130919-0819 • https://www.eclipse.org/downloads/ • working with bluetooth library: • bluecove-2.1.1 http://bluecove.org/ • Android application: • Android Developer Tools • http://developer.android.com/tools/sdk/eclipse-adt.html • graph open source project: • http://jjoe64.github.io/GraphView/ • web application: • Eclipse Java EE IDE for Web Developers. Version: Kepler Service Release 2 Build id: 20140224-0627 • MySql 5.5 http://dev.mysql.com/downloads/mysql/ • Tomcat7 Server http://tomcat.apache.org/download-70.cgi • Highchartsjavascript graph library - highcharts.com/ • BoneCp - Java database connection pool http://jolbox.com/ • Restlet - for webservices http://restlet.com/ • Amazon web services: • http://aws.amazon.com/console/ • Putty - http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html • WinSCP - http://winscp.net/eng/index.php • Programming languages and technology : • Java , xml, javascript, JQuery, html, css, sql, JSP.
Future Work • אפשרות יצירת רכיבי הגדרות של האפליקציה כגון :physical channels schemas, virtual channels and screens ב web ושיתופם בין כל המכשירים אשר מריצים android application. • פיתוח אלגוריתם ב android application אשר יסנן נקודות לא חיונית ליצוג. כך נוכל להציג טווחים יותר גדולים של הזמן. • דחיסה של נתונים לפני שליחה ל web application. • הוספת מנגנון של בקרת כניסה ושימוש במערכת, ופיתוח מנגנון אבטחת נתונים. • פיתוח cache יותר מתקדם כדי שנוכל להסיר את ההגבלה על משך זמן הבדיקה.