ecegny commited on
Commit
9aa8cad
·
unverified ·
1 Parent(s): d992b03

Add files via upload

Browse files
Files changed (1) hide show
  1. tumor_detection_app.py +303 -0
tumor_detection_app.py ADDED
@@ -0,0 +1,303 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ from PIL import Image
4
+ import numpy as np
5
+ import pandas as pd
6
+ import base64
7
+ import os
8
+ import h5py
9
+ import matplotlib.pyplot as plt
10
+
11
+ # Streamlit ile HTML ve CSS ekleme
12
+ st.markdown(f"""
13
+ <style>
14
+ .body {{
15
+ background-color: #f0f0f0; /* Açık gri arka plan */
16
+ /* veya */
17
+ background-image: url('/static/images/background.jpg');
18
+ background-size: cover;
19
+ }}
20
+ .main {{
21
+ background-color: rgba(255, 255, 255, 0.8); /* Beyaz renk, %80 şeffaflık */
22
+ padding: 20px;
23
+ border-radius: 10px;
24
+ background-image: url("/Users/eceguney/Desktop/background.PNG"); /* Arka plan resminin yolu */
25
+ background-position: center;
26
+ background-repeat: no-repeat;
27
+ background-size: cover;
28
+ height: 100vh; /* Sayfa yüksekliği */
29
+ }}
30
+ .header {{
31
+ color: white;
32
+ background-color: #4CAF50;
33
+ padding: 10px;
34
+ text-align: center;
35
+ border-radius: 5px;
36
+ }}
37
+
38
+ .section-title {{
39
+ color: #4CAF50;
40
+ font-size: 30px;
41
+ text-align: center;
42
+ margin: 20px 0;
43
+ border-bottom: 2px solid #4CAF50;
44
+ padding-bottom: 5px;
45
+ }}
46
+
47
+ .sidebar .sidebar-content {{
48
+ background-color: #f4f4f9;
49
+ }}
50
+ .section-title {{
51
+ color: #4CAF50;
52
+ font-size: 30px;
53
+ text-align: center;
54
+ margin: 20px 0;
55
+ border-bottom: 2px solid #4CAF50;
56
+ padding-bottom: 5px;
57
+ }}
58
+
59
+ .content-box {{
60
+ border: 2px solid #4CAF50;
61
+ padding: 20px;
62
+ border-radius: 5px;
63
+ margin-bottom: 20px;
64
+ }}
65
+
66
+ .form-container {{
67
+ border: 2px solid #4CAF50;
68
+ padding: 15px;
69
+ border-radius: 5px;
70
+ background-color: #f9f9f9;
71
+ }}
72
+
73
+ .table-container {{
74
+ border: 2px solid #4CAF50;
75
+ padding: 15px;
76
+ border-radius: 5px;
77
+ background-color: #f9f9f9;
78
+ }}
79
+
80
+ .footer {{
81
+ text-align: center;
82
+ font-size: 12px;
83
+ color: gray;
84
+ margin-top: 20px;
85
+ }}
86
+ </style>
87
+ """, unsafe_allow_html=True)
88
+
89
+ # Ana başlık
90
+ st.title("Tümör Tespit Sistemi")
91
+
92
+ # Menü çubuğu oluştur, her seçenek için benzersiz key parametresi ekle
93
+ # Sidebar menu
94
+ menu = st.sidebar.selectbox("Menü", ["Anasayfa", "Hakkımızda", "Tümör Tespiti","Örnek Hasta Analizlerimiz", "Hasta Yorumları", "Bize Ulaşın"], key="menu_selectbox")
95
+
96
+ # Menüye göre sayfaların içeriğini değiştir
97
+ if menu == "Anasayfa":
98
+ st.markdown('<div class="header"><h2>Hoş Geldiniz!</h2></div>', unsafe_allow_html=True)
99
+ st.write("Bu uygulama, MR görüntüleri üzerinden tümör tespiti ve analiz yapmaktadır.")
100
+ # Resmi yükleyin
101
+ image = Image.open("/Users/eceguney/Desktop/veri bilimi/kod calismalarim/mri/index.jpeg")
102
+ st.image(image, caption="Beyin Tümörü Tespiti", use_container_width=True)
103
+
104
+ elif menu == "Hakkımızda":
105
+ st.markdown('<div class="header"><h2>Hakkımızda</h2></div>', unsafe_allow_html=True)
106
+ st.write("""
107
+ Tümör Tespit Sistemi olarak, sağlık alanında teknolojiyi kullanarak insanların hayatlarını daha sağlıklı ve güvenli hale getirmeyi amaçlıyoruz. Ekibimiz, yapay zeka ve derin öğrenme teknikleriyle gelişmiş sağlık çözümleri üretmeye odaklanmış bir grup uzman profesyonelden oluşmaktadır. Yenilikçi yaklaşımlar ve sağlam bilimsel temellerle, kanser ve diğer hastalıkların erken teşhisini mümkün kılacak teknolojiler geliştirmekteyiz.
108
+
109
+ Misyonumuz, tıbbi görüntüleme verilerini kullanarak tümörleri erken aşamalarda tespit etmek ve doğru teşhis konulmasına yardımcı olmaktır. Bu, hastaların tedaviye daha erken başlamasını ve sonuçların daha başarılı olmasını sağlar. Tümör Tespit Sistemi, doktorların tanı koyma sürecini hızlandırarak, zamanında ve doğru müdahaleler yapılmasına olanak tanır.
110
+
111
+ Yapay zeka destekli sistemimiz, sürekli olarak öğrenen ve gelişen bir yapıya sahiptir. Sistemimiz, MR, röntgen ve diğer tıbbi görüntüleri analiz ederek, tümör varlığını yüksek doğrulukla tespit eder ve görsel işaretlemeler yaparak doktorlara kolaylık sağlar. Bu sayede, sağlık profesyonelleri daha verimli çalışabilir, hastalar ise doğru ve hızlı bir şekilde tedavi süreçlerine dahil olabilirler.
112
+
113
+ Her adımda güvenlik ve gizliliğe büyük önem veriyor, hasta verilerini korumak için en yüksek güvenlik standartlarını uyguluyoruz. Kullanıcı dostu arayüzümüz sayesinde, sistemimiz her türlü sağlık kuruluşunda kolayca kullanılabilir. Sürekli olarak güncellenen ve geliştirilen bu sistem, sağlık sektöründe önemli bir devrim yaratmayı hedeflemektedir.
114
+
115
+ Vizyonumuz ise, yapay zeka teknolojileriyle sağlık hizmetlerini dönüştürerek, daha hızlı, daha doğru ve daha erişilebilir bir sağlık altyapısı oluşturmaktır. Bu sayede, her bireyin sağlık durumunun daha yakından takip edilebilmesi ve sağlık hizmetlerine erişimin daha kolay hale gelmesi için çalışıyoruz.
116
+
117
+ Sağlıklı günler dileriz.
118
+ """)
119
+
120
+ # "Örnek Analizlerimiz" sekmesi
121
+ elif menu == "Örnek Hasta Analizlerimiz":
122
+ st.markdown('<div class="header"><h2>Örnek Analizlerimiz</h2></div>', unsafe_allow_html=True)
123
+ folder_path = "/Users/eceguney/Desktop/veri bilimi/kod calismalarim/mri/dataset/data/"
124
+
125
+ # Dizin içindeki .mat dosyalarını listeleme
126
+ mat_files = [f for f in os.listdir(folder_path) if f.endswith('.mat')]
127
+
128
+ # İlk 20 görüntü ile sınırlama
129
+ mat_files = mat_files[:20]
130
+
131
+ # Görüntülerde tümör olup olmadığını kontrol etmek için sayaç
132
+ tumor_found_count = 0
133
+ non_tumor_count = 0
134
+
135
+ # Her bir .mat dosyasını işlemek için döngü
136
+ for mat_file in mat_files:
137
+ file_path = os.path.join(folder_path, mat_file)
138
+
139
+ # Dosyayı açma
140
+ with h5py.File(file_path, 'r') as data:
141
+ cjdata = data['cjdata']
142
+
143
+ # Görüntü verisini alma
144
+ image = np.array(cjdata['image']) # Görüntü
145
+
146
+ # 'tumorBorder' verisini alma
147
+ tumor_border = None
148
+ if 'tumorBorder' in cjdata:
149
+ tumor_border = np.array(cjdata['tumorBorder'])
150
+ tumor_found_count += 1 # Tümör bulunan görüntü sayısını artır
151
+
152
+ # 'tumorMask' verisini alma (Tümör maskesi var mı?)
153
+ tumor_mask = None
154
+ if 'tumorMask' in cjdata:
155
+ tumor_mask = np.array(cjdata['tumorMask'])
156
+
157
+ # Görüntüyü matplotlib ile hazırlama
158
+ fig, ax = plt.subplots()
159
+ ax.imshow(image, cmap='gray') # Siyah-beyaz görüntü
160
+
161
+ # Eğer tümör sınırı varsa, bunu kırmızı renkte çizme
162
+ if tumor_border is not None:
163
+ ax.plot(tumor_border[:, 0], tumor_border[:, 1], color='red', label="Tümör Sınırları", linewidth=2)
164
+ else:
165
+ non_tumor_count += 1 # Tümör olmayan görüntü sayısını artır
166
+
167
+ # Maskeyi kırmızı olarak ekleme (şeffaflık ile)
168
+ if tumor_mask is not None:
169
+ ax.imshow(tumor_mask, cmap='Reds', alpha=0.5) # Kırmızı tonlarında ve şeffaf olarak eklenmiş
170
+
171
+ # Tümörün boyutunu hesaplama (maskedeki piksel sayısı)
172
+ tumor_area = np.sum(tumor_mask) # Tümör maskesindeki beyaz piksel sayısı (tümör alanı)
173
+
174
+ # Risk analizi
175
+ if tumor_area < 500:
176
+ risk_message = "Düşük risk: Küçük tümör. Düzenli takip gereklidir."
177
+ elif tumor_area < 2000:
178
+ risk_message = "Orta risk: Orta büyüklükte tümör. Hekiminizle görüşün."
179
+ else:
180
+ risk_message = "Yüksek risk: Büyük tümör. Acil müdahale gerekebilir."
181
+
182
+ # Mesaj kutusunda tümör durumu ve risk bilgisini gösterme
183
+ message = f"Tümör Alanı: {tumor_area} piksel\n{risk_message}"
184
+ else:
185
+ # Tümör bulunmayan görüntüler için mesaj
186
+ message = "Tümör bulunmamaktadır.\nSağlıklı günler dileriz."
187
+
188
+ # Başlık ve etiket ekleme
189
+ ax.set_title(f"MR Görüntüsü ve Tümör Sınırları ({mat_file})")
190
+ ax.legend()
191
+
192
+ # Görüntüyü Streamlit'te gösterme
193
+ st.pyplot(fig)
194
+ st.markdown(f"**{message}**")
195
+
196
+ # Açıklama metnini ekleyelim
197
+ st.markdown(f"### Açıklama: {mat_file}")
198
+ st.write("""
199
+ Bu görüntü, beyin MR'ı üzerinde yapılan tümör tespiti analizinin bir örneğidir.
200
+ Görüntüdeki tümör sınırları (eğer varsa) kırmızı renkte gösterilmektedir.
201
+ Ayrıca, tümör alanı hesaplanarak risk analizi yapılmaktadır.
202
+ Eğer tümör alanı küçükse, düşük risk kategorisinde değerlendirilir;
203
+ orta büyüklükte ise orta risk, büyük bir tümör var ise yüksek risk kategorisinde yer alır.
204
+ Eğer görüntüde tümör yoksa, bu da açıkça belirtilir.
205
+ """)
206
+
207
+ # Sonuçları yazdırma
208
+ st.write(f"Tümör Bulunan Görüntüler: {tumor_found_count}")
209
+ st.write(f"Tümör Olmayan Görüntüler: {non_tumor_count}")
210
+
211
+ elif menu == "Tümör Tespiti":
212
+ st.markdown('<div class="header"><h2>Tümör Tespiti</h2></div>', unsafe_allow_html=True)
213
+ # Hasta Bilgilerini Almak İçin Form
214
+ with st.form(key='patient_form'):
215
+ st.markdown('<div class="section-title">Hasta Bilgileri</div>', unsafe_allow_html=True)
216
+ name = st.text_input("Ad Soyad")
217
+ age = st.number_input("Yaş", min_value=0, max_value=120)
218
+ gender = st.selectbox("Cinsiyet", ["Erkek", "Kadın"], key="gender_selectbox")
219
+ uploaded_file = st.file_uploader("MR Görüntüsünü Yükleyin", type=["jpg", "png", "jpeg"], key="file_uploader")
220
+ submit_button = st.form_submit_button("Tümör Analizini Başlat")
221
+ if submit_button:
222
+ if uploaded_file is not None:
223
+ image = Image.open(uploaded_file)
224
+ st.image(image, caption="Yüklenen MR Görüntüsü", use_container_width=True)
225
+
226
+ # Görüntü üzerinde basit bir analiz yapalım (örneğin, renk tonlarıyla basit bir tümör varlığı kontrolü)
227
+ image_array = np.array(image)
228
+
229
+ # Örnek basit analiz: Görüntünün ortalama parlaklık değerini alalım
230
+ average_brightness = np.mean(image_array)
231
+
232
+ # Tümör var mı yok mu tahmini (basit bir yaklaşım)
233
+ if average_brightness < 100: # Bu eşik değeri tamamen örnektir, daha gelişmiş bir analiz için değiştirilmelidir.
234
+ tumor_status = "Tümör Tespit Edildi"
235
+ explanation = "Görüntüde yüksek kontrastlı alanlar tespit edildi, bu da tümör olasılığını artırıyor."
236
+ else:
237
+ tumor_status = "Tümör Yok"
238
+ explanation = "Görüntüde belirgin bir kontrast farkı bulunmamaktadır, bu da tümör olmadığına işaret edebilir."
239
+
240
+ # Sonuçları göster
241
+ st.markdown(f"**Sonuç: {tumor_status}**")
242
+ st.write(explanation)
243
+
244
+ elif menu == "Hasta Yorumları":
245
+ st.markdown('<div class="header"><h2>Hasta Yorumları</h2></div>', unsafe_allow_html=True)
246
+ # Yorumları Listeleme
247
+ st.markdown('<div class="table-container">', unsafe_allow_html=True)
248
+ st.write("""
249
+ - Hasta 1: "Bu sistem hayatımı kurtardı, teşekkürler!"
250
+ - Hasta 2: "Çok kolay ve kullanışlı."
251
+ - Hasta 3: "Hızlı sonuç ve güvenilir analiz."
252
+ """)
253
+ st.markdown('</div>', unsafe_allow_html=True)
254
+
255
+ # Yorum eklemek için form
256
+ with st.form(key='comment_form'):
257
+ st.markdown('<div class="section-title">Yeni Yorum Ekleyin</div>', unsafe_allow_html=True)
258
+
259
+ new_comment = st.text_area("Yorumunuzu Buraya Yazın", key="new_comment_area")
260
+ submit_button = st.form_submit_button("Yorum Gönder")
261
+
262
+ if submit_button and new_comment:
263
+ st.write(f"Yeni Yorum: {new_comment}")
264
+ st.write("Yorum başarıyla eklendi.")
265
+
266
+ elif menu == "Bize Ulaşın":
267
+ # Bize Ulaşın sayfası içeriği
268
+ st.markdown('<div class="header"><h2>Bize Ulaşın</h2></div>', unsafe_allow_html=True)
269
+
270
+ # İletişim bilgilerini tablo şeklinde yazdırma
271
+ contact_info = {
272
+ "Bilgi": ["Email", "Telefon", "Adres"],
273
+ "Değer": ["info@tumordetection.com", "+90 555 555 55 55", "İstanbul, Türkiye"]
274
+ }
275
+
276
+ # DataFrame oluşturuluyor
277
+ contact_df = pd.DataFrame(contact_info)
278
+
279
+ # Tabloyu Streamlit üzerinde gösterme
280
+ st.markdown('<div class="table-container">', unsafe_allow_html=True)
281
+ st.table(contact_df) # Tabloyu göster
282
+ st.markdown('</div>', unsafe_allow_html=True)
283
+
284
+ # Doldurulabilir iletişim formu
285
+ with st.form(key="contact_form"):
286
+ st.subheader("İletişim Formu")
287
+
288
+ # Kullanıcıdan veri alınması
289
+ name = st.text_input("Adınız Soyadınız")
290
+ email = st.text_input("E-posta Adresiniz")
291
+ subject = st.text_input("Konu")
292
+ message = st.text_area("Mesajınız")
293
+
294
+ # Gönder butonu
295
+ submit_button = st.form_submit_button("Gönder")
296
+
297
+ if submit_button:
298
+ # Form gönderildiğinde kullanıcıya onay mesajı gösterme
299
+ st.success(f"Teşekkür ederiz {name}, mesajınız başarıyla gönderildi!")
300
+ # Burada form verilerini bir veritabanına veya e-posta sistemine yönlendirebilirsiniz
301
+
302
+ # Footer
303
+ st.markdown('<div class="footer">© 2024 Tümör Tespit Sistemi. Tüm haklar saklıdır. </div>', unsafe_allow_html=True)