{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":28755,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport cv2\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nimport multiprocessing\n\n# Input,Output\nINPUT_DIR = '/kaggle/input/competitions/aptos2019-blindness-detection/train_images/'\nOUTPUT_DIR = '/kaggle/working/processed_images/'\n\n# Çıktı klasörü\nos.makedirs(OUTPUT_DIR, exist_ok=True)\n\n# Eğitim verileri\ndf = pd.read_csv('/kaggle/input/competitions/aptos2019-blindness-detection/train.csv')\nprint(f\"Toplam görsel sayısı: {len(df)}\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-06-30T18:15:59.297176Z","iopub.execute_input":"2026-06-30T18:15:59.297525Z","iopub.status.idle":"2026-06-30T18:15:59.310287Z","shell.execute_reply.started":"2026-06-30T18:15:59.297497Z","shell.execute_reply":"2026-06-30T18:15:59.309272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport cv2\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nimport multiprocessing\n\n# Yolların tam ve doğru olduğundan eminiz\nINPUT_DIR = '/kaggle/input/competitions/aptos2019-blindness-detection/train_images/'\nOUTPUT_DIR = '/kaggle/working/processed_images/'\nos.makedirs(OUTPUT_DIR, exist_ok=True)\n\n# Eğitim verilerini oku\ndf = pd.read_csv('/kaggle/input/competitions/aptos2019-blindness-detection/train.csv')\n\ndef crop_image_from_gray(img, tol=7):\n    if img.ndim == 2:\n        mask = img > tol\n        return img[np.ix_(mask.any(1),mask.any(0))]\n    elif img.ndim == 3:\n        gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)\n        mask = gray_img > tol\n        check_shape = img[:,:,0][np.ix_(mask.any(1),mask.any(0))].shape[0]\n        if (check_shape == 0): \n            return img \n        else:\n            img1 = img[:,:,0][np.ix_(mask.any(1),mask.any(0))]\n            img2 = img[:,:,1][np.ix_(mask.any(1),mask.any(0))]\n            img3 = img[:,:,2][np.ix_(mask.any(1),mask.any(0))]\n            img = np.stack([img1, img2, img3], axis=-1)\n        return img\n\ndef preprocess_image(image_id):\n    # 1. Akıllı Dosya Yolu Bulucu\n    base_path = os.path.join(INPUT_DIR, str(image_id))\n    \n    if os.path.exists(base_path): \n        img_path = base_path # CSV'de zaten uzantı varsa bunu kullan\n    elif os.path.exists(base_path + '.png'):\n        img_path = base_path + '.png'\n    elif os.path.exists(base_path + '.jpg'):\n        img_path = base_path + '.jpg'\n    else:\n        return # Dosya hiçbir şekilde yoksa işlemi atla, sistemi çökertme\n        \n    # 2. Görseli Oku\n    img = cv2.imread(img_path)\n    \n    # Görsel dosya olarak var ama bozuksa (okunamıyorsa) atla\n    if img is None:\n        return\n        \n    # 3. Ön İşleme Adımları\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    img = crop_image_from_gray(img)\n    img = cv2.resize(img, (300, 300))\n    img = cv2.addWeighted(img, 4, cv2.GaussianBlur(img, (0,0), 10), -4, 128)\n    \n    # 4. Temizlenen görseli klasöre standart .png olarak kaydet\n    out_name = str(image_id) if str(image_id).endswith('.png') else f\"{image_id}.png\"\n    out_path = os.path.join(OUTPUT_DIR, out_name)\n    cv2.imwrite(out_path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR))\n\nif __name__ == '__main__':\n    image_ids = df['id_code'].tolist()\n    print(\"Akıllı ön işleme başladı, lütfen bekleyin (yaklaşık 2-4 dk sürecek)...\")\n    \n    # CPU'nun 4 çekirdeğini aynı anda kullan\n    with multiprocessing.Pool(processes=4) as pool:\n        list(tqdm(pool.imap(preprocess_image, image_ids), total=len(image_ids)))\n        \n    # Başarıyla işlenip kaydedilen dosya sayısını ekrana basarak teyit edelim\n    processed_count = len(os.listdir(OUTPUT_DIR))\n    print(f\"\\nİşlem tamamlandı! Toplam {processed_count} görsel başarıyla temizlendi ve kaydedildi.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-30T18:16:17.407507Z","iopub.execute_input":"2026-06-30T18:16:17.407807Z","iopub.status.idle":"2026-06-30T18:22:36.937272Z","shell.execute_reply.started":"2026-06-30T18:16:17.407783Z","shell.execute_reply":"2026-06-30T18:22:36.936180Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import shutil\n\nprint(\"Görseller zipleniyor, bu işlem yaklaşık 1 dakika sürebilir...\")\n\n# processed_images klasöründeki her şeyi tek bir zip dosyası yapar\nshutil.make_archive('/kaggle/working/APTOS_Preprocessed', 'zip', OUTPUT_DIR)\n\nprint(\"Zip işlemi tamamlandı! Artık tek ve sağlam bir dosyamız var.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-30T18:36:58.607958Z","iopub.execute_input":"2026-06-30T18:36:58.608492Z","iopub.status.idle":"2026-06-30T18:37:24.837191Z","shell.execute_reply.started":"2026-06-30T18:36:58.608430Z","shell.execute_reply":"2026-06-30T18:37:24.836358Z"}},"outputs":[],"execution_count":null}]}