{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "btIcF4lpu_Xx" }, "source": [ "import requests\n", "\n", "# Пример запроса к TCIA API\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "j4rCtvc9u_XD" }, "source": [ "**Шаг 1**. The Cancer Imaging Archive (TCIA) предоставляет доступ к медицинским изображениям через API. Вы можете использовать библиотеку requests для загрузки данных из TCIA:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uR4WCv5yrzNl", "outputId": "0a2a3495-5147-4bed-a209-c800c26cda8d" }, "outputs": [], "source": [ "import requests\n", "\n", "# Пример запроса к TCIA API\n", "url = \"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getSeries?Collection=TCGA-BRCA\"\n", "response = requests.get(url)\n", "\n", "# Проверка ответа\n", "if response.status_code == 200:\n", " print(\"Данные получены успешно\")\n", "else:\n", " print(\"Ошибка получения данных\")\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "AlwoAu-ju7SC" }, "source": [] }, { "cell_type": "markdown", "metadata": { "id": "LuW1z73XvxYF" }, "source": [ "**Шаг 2.** Данные приходят в JSON формате.\n", "В этом примере запрос отправляется с параметром format=json, чтобы вернуть данные в формате JSON.\n", "Преобразование ответа в JSON:\n", "response.json() позволяет конвертировать ответ в словарь Python, с которым будем работать дальше.\n", "Обработка JSON-ответа:\n", "Сначала печатаем весь JSON для ознакомления." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0rA31BsAuGeM", "outputId": "fac4ab13-ddbb-41fd-ade9-279df305554a" }, "outputs": [], "source": [ "import requests\n", "import json\n", "\n", "# Пример запроса к TCIA API, предполагающий JSON формат\n", "url = \"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getSeries?Collection=TCGA-BRCA&format=json\"\n", "response = requests.get(url)\n", "\n", "# Проверка ответа\n", "if response.status_code == 200:\n", " print(\"Данные получены успешно\")\n", "\n", " # Преобразование ответа в JSON\n", " data = response.json()\n", " print(json.dumps(data, indent=4)) # Печать данных в формате JSON с отступами\n", "\n", " # Обработка данных\n", " for item in data:\n", " series_instance_uid = item.get('SeriesInstanceUID', 'N/A')\n", " modality = item.get('Modality', 'N/A')\n", " protocol_name = item.get('ProtocolName', 'N/A')\n", " body_part_examined = item.get('BodyPartExamined', 'N/A')\n", "\n", " # Печать извлеченной информации\n", " print(f\"SeriesInstanceUID: {series_instance_uid}\")\n", " print(f\"Modality: {modality}\")\n", " print(f\"ProtocolName: {protocol_name}\")\n", " print(f\"BodyPartExamined: {body_part_examined}\")\n", " print('-' * 30)\n", "else:\n", " print(\"Ошибка получения данных\")\n" ] }, { "cell_type": "markdown", "metadata": { "id": "G3VSxAgX6RbK" }, "source": [ "**Шаг3**.**Получение идентификаторов для загрузки изображений**\n", "\n", "Используя первый запрос к TCIA API, получили метаданные, такие как SeriesInstanceUID для каждой серии изображений.\n", "Эти идентификаторы нужны для следующего шага — получения ссылок на сами изображения.\n", "Запрос на загрузку изображений с использованием SeriesInstanceUID\n", "Чтобы загрузить все изображения в определенной серии, нужно выполнить запрос к TCIA API с использованием SeriesInstanceUID" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "AexV0o2gJahr", "outputId": "06c3167c-931f-4f15-917e-a5fe6d7463d5" }, "outputs": [], "source": [ "import os\n", "import requests\n", "\n", "# Пример использования SeriesInstanceUID\n", "series_instance_uid = \"1.3.6.1.4.1.14519.5.2.1.6450.4002.265963154110062013582166845425\" # Пример идентификатора\n", "\n", "# URL для загрузки изображений\n", "url = f\"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getImage?SeriesInstanceUID={series_instance_uid}\"\n", "response = requests.get(url, stream=True)\n", "\n", "# Путь для сохранения ZIP-файла\n", "output_path = \"/content/images.zip\"\n", "\n", "# Создание необходимых папок, если их нет\n", "folder_path = os.path.dirname(output_path)\n", "os.makedirs(folder_path, exist_ok=True)\n", "\n", "# Проверка ответа и сохранение изображения\n", "if response.status_code == 200:\n", " print(f\"Сохранение файла в {output_path}\")\n", " with open(output_path, \"wb\") as file:\n", " for chunk in response.iter_content(chunk_size=128):\n", " file.write(chunk)\n", " print(f\"Изображения успешно загружены и сохранены как {output_path}\")\n", "else:\n", " print(\"Ошибка при загрузке изображений\")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "-PwPLc8aKV9h", "outputId": "821075b5-c777-451e-e84f-6ea3f69c092a" }, "outputs": [], "source": [ "import zipfile\n", "\n", "# Распаковка загруженного ZIP-файла\n", "with zipfile.ZipFile(\"images.zip\", 'r') as zip_ref:\n", " zip_ref.extractall(\"images\") # Папка для распакованных изображений\n", "print(\"Файлы успешно распакованы\")\n" ] }, { "cell_type": "markdown", "metadata": { "id": "DVVYma3wM4vf" }, "source": [ "**Шаг. 4**# Для чтения DICOM файлов используйте pydicom, а для визуализации изображений — matplotlib." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Tw2PTwQrOlLe", "outputId": "d21f3b3b-c985-45ad-fdc6-a8c36cd10335" }, "outputs": [], "source": [ "!pip install pydicom\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 839 }, "id": "OLMmOFkCM59-", "outputId": "f4370e76-ad70-45da-8192-fe2de2232455" }, "outputs": [], "source": [ "import os\n", "import pydicom\n", "import matplotlib.pyplot as plt\n", "\n", "# Папка с распакованными изображениями\n", "dicom_folder = \"images\"\n", "\n", "# Чтение всех DICOM-файлов в папке и визуализация первого изображения\n", "for filename in os.listdir(dicom_folder):\n", " if filename.endswith(\".dcm\"):\n", " dicom_path = os.path.join(dicom_folder, filename)\n", " dicom_data = pydicom.dcmread(dicom_path)\n", "\n", " # Получение массива пикселей изображения\n", " image = dicom_data.pixel_array\n", "\n", " # Визуализация изображения\n", " plt.imshow(image, cmap=\"gray\")\n", " plt.title(f\"Пациент ID: {dicom_data.PatientID}\")\n", " plt.axis(\"off\")\n", " plt.show()\n", " break # Визуализируем только первое изображение\n" ] }, { "cell_type": "markdown", "metadata": { "id": "U-9TfVjKQsFV" }, "source": [ " библиотеки, как OpenCV, scikit-image, и NumPy предоставляют множество инструментов для фильтрации, повышения контраста и удаления шума." ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 0 }