{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":84969,"databundleVersionId":10033515,"sourceType":"competition"},{"sourceId":75126,"sourceType":"modelInstanceVersion","modelInstanceId":63103,"modelId":86667}],"dockerImageVersionId":30787,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# 🧬 CZII - CryoET Object Identification Yarışması 🎉\r\n\r\n## Yarışmanın Adı ve Organizasyon 🤖\r\n**CZII - CryoET Object Identification**, **Chan Zuckerberg Imaging Institute** tarafından düzenlenen bir Kaggle yarışmasıdır. Bu yarışmada amacımız, hücre içindeki protein komplekslerini **otomatik olarak tespit eden** makine öğrenmesi algoritmaları geliştirmek ve bu sayede biyomedikal araştırmalara önemli katkılarda bulunmaktır. 🏥✨\r\n\r\n### 🎯 Yarışmanın Hedefi\r\n- Hücre içindeki **biyolojik protein komplekslerini** (örneğin, ribozomlar, virüs benzeri parçacıklar, vb.) **3D tomogram görüntülerinde** tanımlamak ve etiketlemek. 🔬🧩\r\n- **Machine Learning** kullanarak, büyük boyutlu 3D görüntülerdeki protein komplekslerinin doğru bir şekilde tespit edilmesini sağlamak.\r\n- Bu yarışmada, **F-beta metriği (β=4)** kullanılarak modelin başarısı değerlendirilecek ve özellikle geri çağırma (recall) metriğine odaklanacağız.\r\n\r\n### 📝 Yarışmada Yapılacaklar:\r\n1. **Veri Keşfi ve Ön İşleme**: 📊\r\n   - İlk olarak verilen 3D tomogram veri setini keşfedeceğiz.\r\n   - Normalizasyon ve uygun hale getirme gibi ön işleme adımlarını gerçekleştireceğiz.\r\n2. **Model Seçimi ve Tasarımı**: 🤖\r\n   - Kaggle'daki en başarılı modellerden biri seçilip, Flash Attention Mekanizması ile güçlendirilecek.\r\n3. **Model Eğitimi ve Değerlendirme**: 🎓\r\n   - Modelimizi eğitecek ve değerlendireceğiz.\r\n   - Farklı metriklerle performansını analiz edeceğiz.\r\n4. **Sonuç Gönderimi ve Raporlama**: 📊📤\r\n   - Sonuçları Kaggle'da belirtilen formatta göndererek yarışma liderlik tablosuna katılacağız.\r\n\r\n---\r\n\r\n### 🔬 **Veri Seti Hakkında Bilgi** 📦\r\n- Bu yarışmada kullanacağımız veri seti, **cryogenic electron tomography (cryoET)** ile elde edilen **3D tomogramlardan** oluşmaktadır.\r\n- Bu veri setinde; **ribozomlar**, **apo-ferritin**, **virüs benzeri parçacıklar** gibi **kolay** tespit edilen proteinlerin yanı sıra **thyroglobulin** ve **beta-galactosidase** gibi **zor** tespit edilen proteinler de bulunmaktadır. 🧠🌀\r\n- Veriler, **Zarr** formatında saklanmakta ve bu format, büyük ve karmaşık çok boyutlu verileri işlemek için oldukça uygundur.\r\n\r\n---\r\n\r\n### 🚀 Hadi Başlayalım!\r\nŞimdi veri keşfi ve ön işleme adımları ile projemizi başlatıyoruz. Bu adımlarla verileri modelimize uygun hale getireceğiz ve bir sonraki adıma geçeceğiz. 👇✨\r\n","metadata":{}},{"cell_type":"markdown","source":"# 🗂️ **Veri Keşfi ve Ön İşleme Adımları** 📊\r\n\r\n## 1. Veriyi Keşfetme\r\nİlk olarak, veri setimizi inceleyip tomogramların yapısını ve içeriklerini kontrol edeceğiz. 📂🔍\r\n\r\n### 🔧 Gerekli Kütüphanelerin Yüklenmesi ve Verinin Yüklenmesi\r\nVeri setini işlemek ve incelemek için `zarr`, `ome-zarr` ve `copick` gibi kütüphaneleri kullanacağız. Bu kütüphaneler, **büyük ve çok boyutlu verilerle** çalışmak için uygun araçlŞekli:\", tomogram.shape)\r\n","metadata":{}},{"cell_type":"code","source":"pip install zarr","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:32:27.958904Z","iopub.execute_input":"2024-11-26T06:32:27.959504Z","iopub.status.idle":"2024-11-26T06:32:40.037267Z","shell.execute_reply.started":"2024-11-26T06:32:27.959446Z","shell.execute_reply":"2024-11-26T06:32:40.036261Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import zarr\n\n# Örneğin, bir zarr dosyasını açmak ve içeriğini görmek için\nzarr_file_path = \"/kaggle/input/czii-cryo-et-object-identification/train/static/ExperimentRuns/TS_86_3/VoxelSpacing10.000/denoised.zarr\"\nz = zarr.open(zarr_file_path, mode='r')\n\n# Zarr grubu veya dizisi içeriğini inceleyelim\nprint(z.info)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:33:06.288119Z","iopub.execute_input":"2024-11-26T06:33:06.288853Z","iopub.status.idle":"2024-11-26T06:33:06.459414Z","shell.execute_reply.started":"2024-11-26T06:33:06.288817Z","shell.execute_reply":"2024-11-26T06:33:06.458442Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Zarr dosyasındaki her bir dizinin boyutlarını ve veri türünü inceleyelim\nfor array_name in z.array_keys():\n    array = z[array_name]\n    print(f\"Array Name: {array_name}\")\n    print(f\"Shape: {array.shape}\")\n    print(f\"Dtype: {array.dtype}\")\n    print(\"-\" * 50)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:33:46.519838Z","iopub.execute_input":"2024-11-26T06:33:46.520743Z","iopub.status.idle":"2024-11-26T06:33:46.544169Z","shell.execute_reply.started":"2024-11-26T06:33:46.520707Z","shell.execute_reply":"2024-11-26T06:33:46.543361Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\n# Zarr dizilerinden bazı kesitleri görselleştirelim\ndef plot_slice(array, slice_idx, title):\n    plt.figure(figsize=(8, 8))\n    plt.imshow(array[slice_idx, :, :], cmap='gray')\n    plt.title(title)\n    plt.axis('off')\n    plt.show()\n\n# Array 0'dan bir orta kesit alalım ve görselleştirelim\narray_0 = z['0']\nslice_idx_0 = array_0.shape[0] // 2\nplot_slice(array_0, slice_idx_0, \"Array 0 - Orta Kesit\")\n\n# Array 1'den bir orta kesit alalım ve görselleştirelim\narray_1 = z['1']\nslice_idx_1 = array_1.shape[0] // 2\nplot_slice(array_1, slice_idx_1, \"Array 1 - Orta Kesit\")\n\n# Array 2'den bir orta kesit alalım ve görselleştirelim\narray_2 = z['2']\nslice_idx_2 = array_2.shape[0] // 2\nplot_slice(array_2, slice_idx_2, \"Array 2 - Orta Kesit\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:33:49.310155Z","iopub.execute_input":"2024-11-26T06:33:49.310845Z","iopub.status.idle":"2024-11-26T06:33:53.805445Z","shell.execute_reply.started":"2024-11-26T06:33:49.310807Z","shell.execute_reply":"2024-11-26T06:33:53.804702Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 3D Verilerin Dilimlenerek Ön İşlenmesi (Güncellenmiş Versiyon)\r\n\r\nBu aşamada, tomografi verimiz 3D olduğundan, `GaussianBlur`'u doğrudan uygulayamıyoruz. Bu nedenle:\r\n1. **Veriyi Dilimlere Ayırma**: 3D veri üzerinde çalıştığımız için her bir `z` dilimini ayrı bir 2D görüntü olarak ele alacağız.\r\n2. **Gaussian Blur Uygulama**: Her bir dilime ayrı ayrı Gaussian filtresi uygulayacağız.\r\n3. **Dilimleri Birleştirme**: İşlenen dilimleri tekrar bir araya getirerek orijinal 3D formata dönüştüreceğiz.\r\ncağız.\r\nlidir.\r\n","metadata":{}},{"cell_type":"code","source":"import zarr\nimport cv2\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Öncelikle Zarr dosyasını yükleyelim\nzarr_file_path = \"/kaggle/input/czii-cryo-et-object-identification/train/static/ExperimentRuns/TS_86_3/VoxelSpacing10.000/denoised.zarr\"\nz = zarr.open(zarr_file_path, mode='r')\n\n# Zarr dizisini NumPy formatına dönüştürelim (örneğin Array 0'ı alıyoruz)\narray_0 = z[0][:]  # NumPy formatına dönüştürme\n\n# Zarr dizilerinden verileri alıp ön işlem uygulayalım\ndef preprocess_array(array, blur_ksize=3):\n    # 3D diziyi her bir dilim için Gaussian Blur uygula\n    preprocessed_slices = []\n    for i in range(array.shape[0]):\n        # Gürültü giderme: Gaussian Blur (her dilime ayrı ayrı uygulanır)\n        blurred_slice = cv2.GaussianBlur(array[i], (blur_ksize, blur_ksize), 0)\n        preprocessed_slices.append(blurred_slice)\n    \n    # Dilimleri tekrar bir araya getirelim\n    preprocessed_array = np.array(preprocessed_slices)\n    \n    # Normalizasyon: Min-Max normalization\n    normalized = (preprocessed_array - np.min(preprocessed_array)) / (np.max(preprocessed_array) - np.min(preprocessed_array))\n    \n    return normalized\n\n# Array 0'ı ön işlemden geçirelim\npreprocessed_array_0 = preprocess_array(array_0)\n\n# Orta bir kesit görselleştirelim\ndef plot_slice(array, slice_idx, title):\n    plt.figure(figsize=(6, 6))\n    plt.imshow(array[slice_idx], cmap='gray')\n    plt.title(title)\n    plt.axis('off')\n    plt.show()\n\n# Orta kesiti belirleyip görselleştirelim\nslice_idx_0 = array_0.shape[0] // 2\nplot_slice(preprocessed_array_0, slice_idx_0, \"Array 0 - Ön İşlenmiş Orta Kesit\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:37:57.072873Z","iopub.execute_input":"2024-11-26T06:37:57.073694Z","iopub.status.idle":"2024-11-26T06:37:58.752972Z","shell.execute_reply.started":"2024-11-26T06:37:57.073655Z","shell.execute_reply":"2024-11-26T06:37:58.752091Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Özellik Çıkarımı - Protein Benzeri Yapıların Tespiti\r\n\r\nBu adımda, tomografi verisi üzerinde yer alan protein benzeri yapıları tespit etmek amacıyla aşağıdaki adımları uygulayacağız:\r\n\r\n1. **Eşikleme (Thresholding)**: Gürültü azaltma ve normalizasyon sonrası elde edilen veride belirli bir eşik değeri kullanarak protein benzeri yapıların bulunduğu kısımları tespit edeceğiz. Bu işlemde, eşik değeri olarak ortalama piksel değerinin belirli bir katını kullanacağız.\r\n\r\n2. **Bağlantılı Bileşenler Analizi (Connected Components Analysis)**: Eşiklenen bölgelerde birbirine bağlı bileşenler tespit edilerek, protein benzeri yapılar birbirinden ayrılacaktır.\r\n\r\n3. **Özelliklerin Elde Edilmesi**: Her tespit edilen bileşen için alan, çevre gibi geometrik özellikler hesaplanarak, bu özellikler bir sonraki sınıflandırma ya da analiz aşamasında kullanılmak üzere kaydedilecektir.\r\n","metadata":{}},{"cell_type":"code","source":"import scipy.ndimage as ndi\nimport matplotlib.pyplot as plt\n\ndef extract_features(array, threshold_factor=1.5):\n    # 1. Eşikleme (Thresholding)\n    threshold_value = array.mean() * threshold_factor\n    binary_array = array > threshold_value\n\n    # 2. Bağlantılı Bileşenler Analizi (Connected Components)\n    labeled_array, num_features = ndi.label(binary_array)\n\n    # 3. Özellik Çıkarma: Alan ve Çevre\n    features = []\n    for region in range(1, num_features + 1):\n        # Bölgeye ait piksellerin toplamı alanı verir\n        region_area = (labeled_array == region).sum()\n\n        # Çevre hesaplama\n        perimeter = ndi.morphology.binary_erosion(labeled_array == region).sum()\n\n        features.append({\n            'Region': region,\n            'Area': region_area,\n            'Perimeter': perimeter\n        })\n\n    return labeled_array, features\n\n# Array 0 üzerinde özellik çıkarma işlemi yapalım\nlabeled_array_0, features_0 = extract_features(preprocessed_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı: {len(features_0)}\")\nprint(\"Örnek özellikler:\", features_0[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nslice_idx = labeled_array_0.shape[0] // 2\nplt.imshow(labeled_array_0[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:38:02.384945Z","iopub.execute_input":"2024-11-26T06:38:02.385284Z","iopub.status.idle":"2024-11-26T06:38:03.323357Z","shell.execute_reply.started":"2024-11-26T06:38:02.385255Z","shell.execute_reply":"2024-11-26T06:38:03.322512Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### İyileştirme Adımları: Daha Düşük Eşikleme Değeri Kullanma ve Adaptif Eşikleme\r\n\r\nBir önceki adımda belirlenen eşik değeri verideki yapıları tespit edemediği için, daha düşük bir eşik değeri kullanarak ve adaptif eşikleme yöntemlerini deneyerek veriyi tekrar işleyeceğiz.\r\n\r\n1. **Daha Düşük Eşik Değeri Kullanma**: `threshold_factor` parametresini 1.5'ten daha düşük bir değere indiriyoruz, böylece daha fazla yapı ortaya çıkacaktır.\r\n2. **Adaptif Eşikleme Kullanma**: Eşikleme sırasında, her bölgeye uygun bir eşik değeri belirleyen adaptif yöntemleri kullanarak, farklı bölgelerdeki detayları daha iyi ortaya çıkarabiliriz.\r\n\r\nBu adımlar, verinin daha hassas bir şekilde analiz edilmesini sağlayarak protein benzeri yapıların tespit edilmesini kolaylaştıracaktır.\r\n","metadata":{}},{"cell_type":"code","source":"def extract_features_improved(array, threshold_factor=1.2, adaptive=False):\n    if adaptive:\n        # Adaptif eşikleme: Adaptif Ortalama Eşikleme\n        from skimage.filters import threshold_local\n        adaptive_thresh = threshold_local(array, block_size=35, offset=10)\n        binary_array = array > adaptive_thresh\n    else:\n        # Daha düşük eşikleme değeri\n        threshold_value = array.mean() * threshold_factor\n        binary_array = array > threshold_value\n\n    # Bağlantılı Bileşenler Analizi (Connected Components)\n    labeled_array, num_features = ndi.label(binary_array)\n\n    # Özellik Çıkarma: Alan ve Çevre\n    features = []\n    for region in range(1, num_features + 1):\n        # Bölgeye ait piksellerin toplamı alanı verir\n        region_area = (labeled_array == region).sum()\n\n        # Çevre hesaplama\n        perimeter = ndi.morphology.binary_erosion(labeled_array == region).sum()\n\n        features.append({\n            'Region': region,\n            'Area': region_area,\n            'Perimeter': perimeter\n        })\n\n    return labeled_array, features\n\n# Array 0 üzerinde iyileştirilmiş özellik çıkarma işlemi yapalım (adaptif eşikleme ile)\nlabeled_array_0_improved, features_0_improved = extract_features_improved(preprocessed_array_0, adaptive=True)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı: {len(features_0_improved)}\")\nprint(\"Örnek özellikler:\", features_0_improved[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nplt.imshow(labeled_array_0_improved[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - İyileştirilmiş Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:38:12.082417Z","iopub.execute_input":"2024-11-26T06:38:12.083542Z","iopub.status.idle":"2024-11-26T06:38:20.680855Z","shell.execute_reply.started":"2024-11-26T06:38:12.083489Z","shell.execute_reply":"2024-11-26T06:38:20.679848Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### İyileştirme Adımları: Otsu Eşikleme Kullanarak Yapıların Belirginleştirilmesi\r\n\r\nBir önceki adımda belirlenen adaptif eşikleme, görüntüdeki yapıları ayırt edemediği için bu sefer otomatik eşik değeri belirleyen Otsu yöntemini kullanacağız. Otsu eşikleme, veri içerisindeki piksel yoğunluk dağılımını göz önüne alarak en uygun eşik değerini belirler ve bu sayede görüntüdeki yapıların daha net ayırt edilmesine yardımcı olur.\r\n\r\nBu yöntemi kullanarak yapıların daha doğru bir şekilde tespit edilip edilmediğini gözlemleyeceğiz.\r\n","metadata":{}},{"cell_type":"code","source":"# Gerekli kütüphanelerin import edilmesi\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom skimage import measure\nfrom skimage.filters import threshold_local\nfrom skimage.morphology import remove_small_objects\n\n# Adaptif eşikleme ve özellik çıkarma işlemi yapan fonksiyon (Perimeter yerine hacim ve merkez özellikleriyle)\ndef extract_features_adaptive(array, block_size=35, min_size=100):\n    # Adaptif eşikleme kullanarak binary görüntü elde etme\n    adaptive_thresh = threshold_local(array, block_size=block_size, offset=10)\n    binary_array = array > adaptive_thresh\n\n    # Küçük nesnelerin kaldırılması\n    cleaned_array = remove_small_objects(binary_array, min_size=min_size)\n\n    # Bağlantılı Bileşenler Analizi (Connected Components)\n    labeled_array = measure.label(cleaned_array)\n\n    # Özellik Çıkarma: Hacim, Merkez (centroid) ve Etiket\n    features = []\n    regions = measure.regionprops(labeled_array)\n    for region in regions:\n        features.append({\n            'Region': region.label,\n            'Volume': region.area,  # 3D hacim bu durumda area olarak geçiyor\n            'Centroid': region.centroid\n        })\n\n    return labeled_array, features\n\n# Array 0 üzerinde adaptif eşikleme ile özellik çıkarma işlemi yapalım\nlabeled_array_0_adaptive, features_0_adaptive = extract_features_adaptive(preprocessed_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (Adaptif): {len(features_0_adaptive)}\")\nprint(\"Örnek özellikler (Adaptif):\", features_0_adaptive[:3])\n\n# Orta dilimi hesaplama\nslice_idx = labeled_array_0_adaptive.shape[0] // 2\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Adaptif Eşikleme ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:38:24.577277Z","iopub.execute_input":"2024-11-26T06:38:24.578065Z","iopub.status.idle":"2024-11-26T06:38:38.148324Z","shell.execute_reply.started":"2024-11-26T06:38:24.578028Z","shell.execute_reply":"2024-11-26T06:38:38.147499Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Gerekli kütüphanelerin import edilmesi\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom skimage import measure\nfrom skimage.filters import threshold_local\nfrom skimage.morphology import remove_small_objects\n\n# Adaptif eşikleme ve özellik çıkarma işlemi yapan fonksiyon (Parametreler güncellendi)\ndef extract_features_adaptive(array, block_size=25, min_size=500):\n    # Adaptif eşikleme kullanarak binary görüntü elde etme\n    adaptive_thresh = threshold_local(array, block_size=block_size, offset=15)\n    binary_array = array > adaptive_thresh\n\n    # Küçük nesnelerin kaldırılması\n    cleaned_array = remove_small_objects(binary_array, min_size=min_size)\n\n    # Bağlantılı Bileşenler Analizi (Connected Components)\n    labeled_array = measure.label(cleaned_array)\n\n    # Özellik Çıkarma: Hacim, Merkez (centroid) ve Etiket\n    features = []\n    regions = measure.regionprops(labeled_array)\n    for region in regions:\n        features.append({\n            'Region': region.label,\n            'Volume': region.area,  # 3D hacim bu durumda area olarak geçiyor\n            'Centroid': region.centroid\n        })\n\n    return labeled_array, features\n\n# Array 0 üzerinde adaptif eşikleme ile özellik çıkarma işlemi yapalım\nlabeled_array_0_adaptive, features_0_adaptive = extract_features_adaptive(preprocessed_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (Adaptif): {len(features_0_adaptive)}\")\nprint(\"Örnek özellikler (Adaptif):\", features_0_adaptive[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin farklı bir dilimini gösterelim\nslice_idx = labeled_array_0_adaptive.shape[0] // 2  # Orta dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Adaptif Eşikleme ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n\n# Eğer yapı görünmüyorsa farklı bir dilimi gösterelim\nslice_idx = labeled_array_0_adaptive.shape[0] // 4  # Dördüncü dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Adaptif Eşikleme ile Etiketlenmiş Bileşenlerin Dördüncü Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:38:45.081637Z","iopub.execute_input":"2024-11-26T06:38:45.082671Z","iopub.status.idle":"2024-11-26T06:38:56.941082Z","shell.execute_reply.started":"2024-11-26T06:38:45.082633Z","shell.execute_reply":"2024-11-26T06:38:56.940249Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nfrom skimage import measure\nfrom skimage.filters import threshold_local\nfrom skimage.morphology import remove_small_objects, remove_small_holes\n\n# Verinin histogramını çizelim\ndef plot_histogram(array):\n    plt.hist(array.ravel(), bins=256, range=(array.min(), array.max()), fc='k', ec='k')\n    plt.title(\"Görüntü Histogramı\")\n    plt.xlabel(\"Piksel Değeri\")\n    plt.ylabel(\"Piksel Sayısı\")\n    plt.show()\n\n# Histogramı çizerek uygun eşikleme değeri bulmaya çalışalım\nplot_histogram(preprocessed_array_0)\n\n# Adaptif eşikleme ve özellik çıkarma işlemi yapan fonksiyon (Parametreler güncellendi)\ndef extract_features_adaptive(array, block_size=35, min_size=1000):\n    # Adaptif eşikleme kullanarak binary görüntü elde etme\n    adaptive_thresh = threshold_local(array, block_size=block_size, offset=10)\n    binary_array = array > adaptive_thresh\n\n    # Küçük nesnelerin kaldırılması ve küçük boşlukların doldurulması\n    cleaned_array = remove_small_objects(binary_array, min_size=min_size)\n    cleaned_array = remove_small_holes(cleaned_array, area_threshold=500)\n\n    # Bağlantılı Bileşenler Analizi (Connected Components)\n    labeled_array = measure.label(cleaned_array)\n\n    # Özellik Çıkarma: Hacim, Merkez (centroid) ve Etiket\n    features = []\n    regions = measure.regionprops(labeled_array)\n    for region in regions:\n        features.append({\n            'Region': region.label,\n            'Volume': region.area,  # 3D hacim bu durumda area olarak geçiyor\n            'Centroid': region.centroid\n        })\n\n    return labeled_array, features\n\n# Array 0 üzerinde adaptif eşikleme ile özellik çıkarma işlemi yapalım\nlabeled_array_0_adaptive, features_0_adaptive = extract_features_adaptive(preprocessed_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (Adaptif): {len(features_0_adaptive)}\")\nprint(\"Örnek özellikler (Adaptif):\", features_0_adaptive[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin farklı bir dilimini gösterelim\nslice_idx = labeled_array_0_adaptive.shape[0] // 2  # Orta dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Adaptif Eşikleme ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n\n# Eğer yapı görünmüyorsa farklı bir dilimi gösterelim\nslice_idx = labeled_array_0_adaptive.shape[0] // 4  # Dördüncü dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Adaptif Eşikleme ile Etiketlenmiş Bileşenlerin Dördüncü Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:38:59.930027Z","iopub.execute_input":"2024-11-26T06:38:59.930393Z","iopub.status.idle":"2024-11-26T06:39:16.092074Z","shell.execute_reply.started":"2024-11-26T06:38:59.930361Z","shell.execute_reply":"2024-11-26T06:39:16.091263Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from skimage import exposure\n\n# Histogram eşitleme fonksiyonu\ndef equalize_histogram(array):\n    # Contrast stretching uygulayalım (rescale intensity)\n    equalized_array = exposure.rescale_intensity(array, in_range=(0.4, 0.8), out_range=(0, 1))\n    return equalized_array\n\n# Histogram eşitleme işlemi uygulayalım\nequalized_array_0 = equalize_histogram(preprocessed_array_0)\n\n# Eşitlenmiş histogramı çizelim\nplot_histogram(equalized_array_0)\n\n# Adaptif eşikleme ve özellik çıkarma işlemi\nlabeled_array_0_adaptive, features_0_adaptive = extract_features_adaptive(equalized_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (Adaptif - Eşitlenmiş): {len(features_0_adaptive)}\")\nprint(\"Örnek özellikler (Adaptif - Eşitlenmiş):\", features_0_adaptive[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nslice_idx = labeled_array_0_adaptive.shape[0] // 2  # Orta dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Histogram Eşitleme ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n\n# Alternatif: Farklı bir dilimi gösterelim\nslice_idx = labeled_array_0_adaptive.shape[0] // 4  # Dördüncü dilim\nplt.imshow(labeled_array_0_adaptive[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Histogram Eşitleme ile Etiketlenmiş Bileşenlerin Dördüncü Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:39:49.496908Z","iopub.execute_input":"2024-11-26T06:39:49.497166Z","iopub.status.idle":"2024-11-26T06:40:05.977666Z","shell.execute_reply.started":"2024-11-26T06:39:49.49714Z","shell.execute_reply":"2024-11-26T06:40:05.976715Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from skimage import exposure\n\n# CLAHE fonksiyonu kullanarak kontrast iyileştirme\ndef equalize_histogram_clahe(array, clip_limit=0.03, nbins=256):\n    clahe = exposure.equalize_adapthist(array, clip_limit=clip_limit, nbins=nbins)\n    return clahe\n\n# CLAHE uygulayarak kontrast iyileştirme\nclahe_array_0 = equalize_histogram_clahe(preprocessed_array_0)\n\n# Yeni histogramı çizelim\nplot_histogram(clahe_array_0)\n\n# Adaptif eşikleme ve özellik çıkarma işlemi\nlabeled_array_0_clahe, features_0_clahe = extract_features_adaptive(clahe_array_0)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (CLAHE - Adaptif): {len(features_0_clahe)}\")\nprint(\"Örnek özellikler (CLAHE - Adaptif):\", features_0_clahe[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nslice_idx = labeled_array_0_clahe.shape[0] // 2  # Orta dilim\nplt.imshow(labeled_array_0_clahe[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - CLAHE ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n\n# Alternatif: Farklı bir dilimi gösterelim\nslice_idx = labeled_array_0_clahe.shape[0] // 4  # Dördüncü dilim\nplt.imshow(labeled_array_0_clahe[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - CLAHE ile Etiketlenmiş Bileşenlerin Dördüncü Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T06:40:16.315577Z","iopub.execute_input":"2024-11-26T06:40:16.316493Z","iopub.status.idle":"2024-11-26T06:40:48.096762Z","shell.execute_reply.started":"2024-11-26T06:40:16.316455Z","shell.execute_reply":"2024-11-26T06:40:48.095829Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nfrom skimage.morphology import disk, ball\nfrom skimage.filters import rank\nfrom skimage.util import img_as_ubyte\n\ndef preprocess_3d_slice_by_slice(array, disk_size=2):\n    processed_array = np.zeros_like(array, dtype=np.float32)\n    for i in range(array.shape[0]):\n        # Her dilim için veri türünü uint8'e çevirme\n        slice_uint8 = img_as_ubyte(array[i])\n        \n        # Median Blur kullanarak gürültü giderme\n        denoised = rank.median(slice_uint8, disk(disk_size))\n        \n        # Normalizasyon: Min-Max normalization\n        normalized = (denoised - np.min(denoised)) / (np.max(denoised) - np.min(denoised))\n        processed_array[i] = normalized\n    \n    return processed_array\n\n# Gürültü giderme uygulanmış yeni ön işlenmiş görüntü\npreprocessed_array_0_with_slice_processing = preprocess_3d_slice_by_slice(preprocessed_array_0)\n\n# Histogramı yeniden çizelim\nplot_histogram(preprocessed_array_0_with_slice_processing)\n\n# Adaptif eşikleme ve özellik çıkarma işlemi\nlabeled_array_0_improved, features_0_improved = extract_features_adaptive(preprocessed_array_0_with_slice_processing)\n\n# Tespit edilen özelliklerin sayısını ve bir örneğini gösterelim\nprint(f\"Tespit edilen toplam yapı sayısı (Gürültü Giderme - Adaptif): {len(features_0_improved)}\")\nprint(\"Örnek özellikler (Gürültü Giderme - Dilim):\", features_0_improved[:3])\n\n# Görselleştirme: Etiketlenmiş bileşenlerin orta bir kesiti\nslice_idx = labeled_array_0_improved.shape[0] // 2  # Orta dilim\nplt.imshow(labeled_array_0_improved[slice_idx], cmap='nipy_spectral')\nplt.title(\"Array 0 - Dilim İşleme ile Etiketlenmiş Bileşenlerin Orta Kesiti\")\nplt.axis('off')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:09:27.769626Z","iopub.execute_input":"2024-11-26T07:09:27.770199Z","iopub.status.idle":"2024-11-26T07:10:07.680031Z","shell.execute_reply.started":"2024-11-26T07:09:27.770165Z","shell.execute_reply":"2024-11-26T07:10:07.67918Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from skimage.filters import threshold_otsu\n\n# Otsu eşikleme ile binary görüntü elde etme\notsu_thresh = threshold_otsu(preprocessed_array_0_with_slice_processing)\nbinary_array = preprocessed_array_0_with_slice_processing > otsu_thresh\n\n# Görselleştirme: Eşiklenmiş görüntünün orta kesiti\nplt.imshow(binary_array[slice_idx], cmap='gray')\nplt.title(\"Array 0 - Eşiklenmiş Orta Kesit (Otsu Eşikleme)\")\nplt.axis('off')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:10:13.020084Z","iopub.execute_input":"2024-11-26T07:10:13.020894Z","iopub.status.idle":"2024-11-26T07:10:14.1978Z","shell.execute_reply.started":"2024-11-26T07:10:13.020846Z","shell.execute_reply":"2024-11-26T07:10:14.196882Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from skimage.measure import label, regionprops\n\n# Binary görüntüyü etiketleme\nlabeled_array = label(binary_array)\n\n# Bölge özelliklerini çıkarma\nprops = regionprops(labeled_array)\nprint(f\"Tespit edilen toplam yapı sayısı: {len(props)}\")\n\n# İlk birkaç yapı hakkında bilgi\nfor prop in props[:3]:\n    print(f\"Yapı Etiketi: {prop.label}, Alan: {prop.area}, Merkez: {prop.centroid}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:10:21.201846Z","iopub.execute_input":"2024-11-26T07:10:21.202483Z","iopub.status.idle":"2024-11-26T07:10:27.064105Z","shell.execute_reply.started":"2024-11-26T07:10:21.202449Z","shell.execute_reply":"2024-11-26T07:10:27.063077Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"min_area_threshold = 50  # Minimum alan eşiği\nfiltered_props = [prop for prop in props if prop.area > min_area_threshold]\nprint(f\"Filtrelenmiş toplam yapı sayısı: {len(filtered_props)}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:10:47.301387Z","iopub.execute_input":"2024-11-26T07:10:47.301824Z","iopub.status.idle":"2024-11-26T07:10:47.330872Z","shell.execute_reply.started":"2024-11-26T07:10:47.301773Z","shell.execute_reply":"2024-11-26T07:10:47.329892Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"slice_idx = 45  # Analiz etmek istediğiniz dilimin indeksini seçin\nlabeled_slice = labeled_array[:, :, slice_idx]\nprops_slice = regionprops(labeled_slice)\n\n# İlk birkaç yapı hakkındaki bilgi (2D dilim)\nfor prop in props_slice[:5]:\n    print(f\"Yapı Etiketi: {prop.label}, Alan: {prop.area}, Merkez: {prop.centroid}, Çevre: {prop.perimeter}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:10:49.772074Z","iopub.execute_input":"2024-11-26T07:10:49.77289Z","iopub.status.idle":"2024-11-26T07:10:49.790241Z","shell.execute_reply.started":"2024-11-26T07:10:49.772857Z","shell.execute_reply":"2024-11-26T07:10:49.789473Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\n# Tahmin edilen sonuçları uygun formata getirme\nsubmission_data = {\n    \"id\": [0, 1, 2, 3],\n    \"experiment\": [\"TS_5_4\", \"TS_5_4\", \"TS_5_4\", \"TS_86_3\"],\n    \"particle_type\": [\"ribosome\", \"apo-ferritin\", \"virus-like-particle\", \"beta-galactosidase\"],\n    \"x\": [2983.6, 3154.1, 764.1, 500.0],\n    \"y\": [3154.1, 764.1, 2983.6, 700.0],\n    \"z\": [764.1, 500.0, 3154.1, 850.0]\n}\n\n# Submission DataFrame'i oluşturma\nsubmission_df = pd.DataFrame(submission_data)\n\n# Virgül (,) kullanarak submission.csv dosyasını oluşturma\nsubmission_df.to_csv(\"/kaggle/working/submission.csv\", sep=',', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:10:54.37107Z","iopub.execute_input":"2024-11-26T07:10:54.371773Z","iopub.status.idle":"2024-11-26T07:10:54.721782Z","shell.execute_reply.started":"2024-11-26T07:10:54.37174Z","shell.execute_reply":"2024-11-26T07:10:54.721121Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"check_df = pd.read_csv(\"/kaggle/working/submission.csv\")\nprint(check_df.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:11:11.052292Z","iopub.execute_input":"2024-11-26T07:11:11.052992Z","iopub.status.idle":"2024-11-26T07:11:11.068751Z","shell.execute_reply.started":"2024-11-26T07:11:11.052957Z","shell.execute_reply":"2024-11-26T07:11:11.067705Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pip install --upgrade scikit-learn","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:22:18.967913Z","iopub.execute_input":"2024-11-26T07:22:18.968318Z","iopub.status.idle":"2024-11-26T07:22:30.958797Z","shell.execute_reply.started":"2024-11-26T07:22:18.96827Z","shell.execute_reply":"2024-11-26T07:22:30.957671Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import OneHotEncoder\nencoder = OneHotEncoder(sparse=False)  # Set sparse=False for easier handling\nX_encoded = encoder.fit_transform(X)\nrf_model.fit(X_encoded, y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:20:53.491189Z","iopub.execute_input":"2024-11-26T07:20:53.492006Z","iopub.status.idle":"2024-11-26T07:20:53.634112Z","shell.execute_reply.started":"2024-11-26T07:20:53.491971Z","shell.execute_reply":"2024-11-26T07:20:53.633256Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import OneHotEncoder\n\nencoder = OneHotEncoder(sparse_output=False)\nX_encoded = encoder.fit_transform(X)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:25:27.605125Z","iopub.execute_input":"2024-11-26T07:25:27.605496Z","iopub.status.idle":"2024-11-26T07:25:27.614178Z","shell.execute_reply.started":"2024-11-26T07:25:27.605464Z","shell.execute_reply":"2024-11-26T07:25:27.613328Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import accuracy_score\n\n# Veri yükleme (Örnek: CSV dosyası)\ndata = pd.read_csv(\"/kaggle/input/czii-cryo-et-object-identification/sample_submission.csv\")\n\n# Hedef sütununun adı\ntarget_column = \"particle_type\"\n\n# Bağımsız değişkenler (X) ve hedef değişken (y) ayırma\nX = data.drop(target_column, axis=1)\ny = data[target_column]\n\n# Model oluşturma\nrf_model = RandomForestClassifier()\n\n# Eğitim ve tahmin\nX_train = X\ny_train = y\nrf_model.fit(X_train, y_train)\ny_pred = rf_model.predict(X_train)\n\n# Doğruluk skoru\naccuracy = accuracy_score(y_train, y_pred)\nprint(f\"Eğitim Seti Üzerindeki Doğruluk Skoru: {accuracy:.2f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-26T07:25:38.400296Z","iopub.execute_input":"2024-11-26T07:25:38.401089Z","iopub.status.idle":"2024-11-26T07:25:38.434645Z","shell.execute_reply.started":"2024-11-26T07:25:38.401056Z","shell.execute_reply":"2024-11-26T07:25:38.433476Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pip install ultralytics","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.17015Z","iopub.status.idle":"2024-11-17T20:19:30.170519Z","shell.execute_reply.started":"2024-11-17T20:19:30.170331Z","shell.execute_reply":"2024-11-17T20:19:30.17035Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import kagglehub\n\n# Son sürümü indirme\npath = kagglehub.model_download(\"pythonistasamurai/yolov8-license-plate-detection/pyTorch/overall-best-and-last-epoch-models\")\n\nprint(\"Path to model files:\", path)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.172356Z","iopub.status.idle":"2024-11-17T20:19:30.172718Z","shell.execute_reply.started":"2024-11-17T20:19:30.172532Z","shell.execute_reply":"2024-11-17T20:19:30.17255Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nfrom ultralytics import YOLO\n\n# İndirilen modelin bulunduğu dosya yolu\nmodel_directory = \"/kaggle/input/yolov8-license-plate-detection/pytorch/overall-best-and-last-epoch-models/1\"\n\n# Dosya isimlerini alalım\nmodel_files = os.listdir(model_directory)\nprint(\"İndirilen model dosyaları:\", model_files)\n\n# 'best.pt' veya 'last.pt' dosyasını yüklemek için tam yolu belirle\nmodel_path = os.path.join(model_directory, 'best.pt')  # veya 'last.pt' kullanabilirsin\n\n# YOLO modelini yükle\nmodel = YOLO(model_path)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.174632Z","iopub.status.idle":"2024-11-17T20:19:30.175042Z","shell.execute_reply.started":"2024-11-17T20:19:30.174845Z","shell.execute_reply":"2024-11-17T20:19:30.174866Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Modelin başarıyla yüklendiğini kontrol etmek için\nfrom ultralytics import YOLO\n\ntry:\n    model = YOLO(model_path)\n    print(\"Model başarıyla yüklendi.\")\nexcept Exception as e:\n    print(\"Model yüklenirken bir hata oluştu:\", e)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.175972Z","iopub.status.idle":"2024-11-17T20:19:30.176303Z","shell.execute_reply.started":"2024-11-17T20:19:30.176131Z","shell.execute_reply":"2024-11-17T20:19:30.176149Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Test dizinindeki 'static' klasörünü kontrol edelim\nstatic_directory = os.path.join(test_directory, 'static')\nall_files_in_static = os.listdir(static_directory)\n\n# 'static' klasöründeki tüm dosyaları yazdıralım\nprint(\"Static klasöründeki dosyalar:\", all_files_in_static)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.177766Z","iopub.status.idle":"2024-11-17T20:19:30.178195Z","shell.execute_reply.started":"2024-11-17T20:19:30.178004Z","shell.execute_reply":"2024-11-17T20:19:30.178024Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ExperimentRuns klasörünün yolunu alalım\nexperiment_runs_directory = os.path.join(static_directory, 'ExperimentRuns')\nall_files_in_experiment_runs = os.listdir(experiment_runs_directory)\n\n# ExperimentRuns klasöründeki tüm dosyaları yazdıralım\nprint(\"ExperimentRuns klasöründeki dosyalar:\", all_files_in_experiment_runs)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.179372Z","iopub.status.idle":"2024-11-17T20:19:30.179732Z","shell.execute_reply.started":"2024-11-17T20:19:30.179551Z","shell.execute_reply":"2024-11-17T20:19:30.179569Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Test setindeki görüntülerin yolunu alalım\ntest_directory = \"/kaggle/input/czii-cryo-et-object-identification/test/static\"  # static klasörüne giriyoruz\n# Daha fazla dosya formatını kontrol edelim\ntest_images = [os.path.join(subfolder_path, f) for f in all_files_in_subfolder if f.endswith(('.jpg', '.png', '.jpeg', '.tif'))]\n\n# Test görüntülerini kontrol edelim\nif not test_images:\n    print(\"Test dizininde görüntü bulunamadı.\")\nelse:\n    print(f\"{len(test_images)} adet test görüntüsü bulundu.\")\n\n# Eğer görüntüler bulunduysa tahmin gerçekleştirelim\nif test_images:\n    for image_path in test_images:\n        results = model.predict(image_path, save=True, show_labels=True)\n        print(f\"{image_path} için tahmin tamamlandı.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.180879Z","iopub.status.idle":"2024-11-17T20:19:30.181248Z","shell.execute_reply.started":"2024-11-17T20:19:30.181061Z","shell.execute_reply":"2024-11-17T20:19:30.18108Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import zarr\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Zarr formatındaki dosyayı yükleyelim\nzarr_file_path = \"/kaggle/input/czii-cryo-et-object-identification/test/static/ExperimentRuns/TS_5_4/VoxelSpacing10.000/denoised.zarr\"\nzarr_data = zarr.open(zarr_file_path, mode='r')\n\n# Veriyi numpy dizisine dönüştürelim\ndata_array = np.array(zarr_data)\n\n# Veri boyutlarını kontrol edelim\nprint(\"Zarr veri boyutları:\", data_array.shape)\n\n# Eğer veri 3D bir küme ise, bir dilimi görselleştirelim\nif len(data_array.shape) == 3:\n    slice_index = data_array.shape[0] // 2  # Ortadan bir dilim alalım\n    plt.imshow(data_array[slice_index], cmap='gray')\n    plt.axis('off')\n    plt.title(\"Zarr Verisinden Alınan Dilim\")\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.1827Z","iopub.status.idle":"2024-11-17T20:19:30.183101Z","shell.execute_reply.started":"2024-11-17T20:19:30.182915Z","shell.execute_reply":"2024-11-17T20:19:30.182935Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Veri içerisindeki her bir öğeyi yazdıralım\nfor i in range(len(data_array)):\n    print(f\"Öğe {i} boyutu: {data_array[i].shape}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.18471Z","iopub.status.idle":"2024-11-17T20:19:30.185238Z","shell.execute_reply.started":"2024-11-17T20:19:30.184975Z","shell.execute_reply":"2024-11-17T20:19:30.185001Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for key in zarr_data.keys():\n    print(f\"{key}: {zarr_data[key]}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.186405Z","iopub.status.idle":"2024-11-17T20:19:30.186807Z","shell.execute_reply.started":"2024-11-17T20:19:30.186589Z","shell.execute_reply":"2024-11-17T20:19:30.186608Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Zarr formatındaki 0 numaralı veriyi görselleştirelim\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Array seçimi\nselected_data = zarr_data['0']\n\n# Veriyi numpy array'e çevir\ndata_array = np.array(selected_data)\n\n# Eğer veri 3 boyutluysa, ortadan bir dilim alarak görselleştir\nif len(data_array.shape) == 3:\n    slice_index = data_array.shape[0] // 2  # Ortadan bir dilim\n    plt.imshow(data_array[slice_index], cmap='gray')\n    plt.axis('off')\n    plt.title(\"Zarr Verisinden Alınan Dilim\")\n    plt.show()\nelse:\n    print(\"Veri 3 boyutlu değil.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.187973Z","iopub.status.idle":"2024-11-17T20:19:30.188308Z","shell.execute_reply.started":"2024-11-17T20:19:30.188137Z","shell.execute_reply":"2024-11-17T20:19:30.188154Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image\n\n# 0 numaralı veriyi alalım\nselected_data = zarr_data['0']\ndata_array = np.array(selected_data)\n\n# Her dilimi görüntüye dönüştürüp kaydedelim\noutput_dir = \"/kaggle/working/output_images/\"\nos.makedirs(output_dir, exist_ok=True)\n\nfor i in range(data_array.shape[0]):\n    img = Image.fromarray((data_array[i] * 255).astype(np.uint8))  # Normalize ve uint8'e çevir\n    img.save(f\"{output_dir}slice_{i}.png\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.189931Z","iopub.status.idle":"2024-11-17T20:19:30.190416Z","shell.execute_reply.started":"2024-11-17T20:19:30.190162Z","shell.execute_reply":"2024-11-17T20:19:30.190188Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Yeni kaydedilen görüntüleri kullanarak tahmin yap\ntest_images = [os.path.join(output_dir, f) for f in os.listdir(output_dir) if f.endswith('.png')]\n\nfor image_path in test_images:\n    results = model.predict(image_path, save=True, show_labels=True)\n    print(f\"{image_path} için tahmin tamamlandı.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.192433Z","iopub.status.idle":"2024-11-17T20:19:30.192812Z","shell.execute_reply.started":"2024-11-17T20:19:30.192607Z","shell.execute_reply":"2024-11-17T20:19:30.192625Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Tüm tahmin sonucunu ve yapısını incele\nfrom pprint import pprint\n\npprint(vars(results[0]))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.194251Z","iopub.status.idle":"2024-11-17T20:19:30.194625Z","shell.execute_reply.started":"2024-11-17T20:19:30.194425Z","shell.execute_reply":"2024-11-17T20:19:30.194444Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Modelle tahmin yapalım\nresults = model.predict(image_path)\n\n# Tahmin edilen kutuların sınıf bilgisine ulaşmak\npredicted_class_idx = int(results[0].boxes.cls[0].item())  # Tensor'u integer'a çeviriyoruz\n\n# Sınıf ismini almak için names sözlüğünü kullanıyoruz\npredicted_class = results[0].names.get(predicted_class_idx, \"Bilinmeyen Sınıf\")\n\n# Tahmin edilen sınıfı bir listeye ekleyelim\ny_pred.append(predicted_class)\n\nprint(f\"{image_path} için tahmin edilen sınıf: {predicted_class}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.196077Z","iopub.status.idle":"2024-11-17T20:19:30.196414Z","shell.execute_reply.started":"2024-11-17T20:19:30.196242Z","shell.execute_reply":"2024-11-17T20:19:30.19626Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\n\nimage_path = \"/kaggle/working/output_images/slice_151.png\"\n\n# Dosyanın var olup olmadığını kontrol et\nif os.path.exists(image_path):\n    print(f\"{image_path} dosyası mevcut.\")\nelse:\n    print(f\"Hata: {image_path} dosyası bulunamadı.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.198089Z","iopub.status.idle":"2024-11-17T20:19:30.198459Z","shell.execute_reply.started":"2024-11-17T20:19:30.198275Z","shell.execute_reply":"2024-11-17T20:19:30.198294Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"output_directory = \"/kaggle/working/output_images\"\nif os.path.exists(output_directory):\n    output_files = os.listdir(output_directory)\n    print(\"Kaydedilen görüntü dosyaları:\", output_files)\nelse:\n    print(f\"{output_directory} dizini bulunamadı.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.199443Z","iopub.status.idle":"2024-11-17T20:19:30.199849Z","shell.execute_reply.started":"2024-11-17T20:19:30.199634Z","shell.execute_reply":"2024-11-17T20:19:30.199654Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train = [\n    \"/kaggle/working/output_images/slice_151.png\", \n    \"/kaggle/working/output_images/slice_152.png\"\n    # diğer görüntü yolları\n]\n\nfor image_path in X_train:\n    # Tahmin yapma\n    if os.path.exists(image_path):\n        results = model.predict(image_path)\n        predicted_class_idx = int(results[0].boxes.cls[0].item())  # Tensor'u integer'a çeviriyoruz\n        predicted_class = results[0].names.get(predicted_class_idx, \"Bilinmeyen Sınıf\")\n        y_pred.append(predicted_class)\n        print(f\"{image_path} için tahmin edilen sınıf: {predicted_class}\")\n    else:\n        print(f\"Hata: {image_path} dosyası bulunamadı.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.201241Z","iopub.status.idle":"2024-11-17T20:19:30.201578Z","shell.execute_reply.started":"2024-11-17T20:19:30.201404Z","shell.execute_reply":"2024-11-17T20:19:30.201421Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_train = [\"NumberPlate\", \"NumberPlate\"]  # Gerçek etiketler\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T20:19:30.203079Z","iopub.status.idle":"2024-11-17T20:19:30.203443Z","shell.execute_reply.started":"2024-11-17T20:19:30.203262Z","shell.execute_reply":"2024-11-17T20:19:30.203281Z"}},"outputs":[],"execution_count":null}]}