275 lines
9.5 KiB
Plaintext
275 lines
9.5 KiB
Plaintext
{
|
|
"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
|
|
}
|