{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30746,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-08-07T22:22:43.986192Z","iopub.execute_input":"2024-08-07T22:22:43.986584Z","iopub.status.idle":"2024-08-07T22:23:35.921950Z","shell.execute_reply.started":"2024-08-07T22:22:43.986555Z","shell.execute_reply":"2024-08-07T22:23:35.920639Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"DESCRIÇÃO\n\nO desafio incidirá sobre a classificação de cinco condições degenerativas da coluna lombar: Estreia Neural Neuural Esquerda, Estreitamento Neuélo Neural Direita Estreita, Estenose Subarticular Esquerda, Estenose Subarticular Direita e Stenosis do Canal Espinhal. Para cada estudo de imagem no conjunto de dados, fornecemos escores de gravidade (Normal / de Mão, Moderado ou Grave) para cada uma das cinco condições nos níveis de disco intervertebral L1 / L2, L2 / I3, L3 / L4 / L5 e L5 / S1.\n\nAs submissões são avaliadas usando a média de perdas de log ponderada por amostragem e um any_severe_spinalprevisão gerada pela métrica.","metadata":{}},{"cell_type":"markdown","source":"**DATA FRAME DE TREINO **","metadata":{}},{"cell_type":"markdown","source":"DESCRIÇÃO \n1. study_id = O ID de estudo , um rotulo para mostra imagens , pode incluir varias series em imagens\n1. condition_level = O rotulo de destino , a 'parte' do corpo , com seu respectiva gravidade ","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv')","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:27:31.231093Z","iopub.execute_input":"2024-08-07T22:27:31.231523Z","iopub.status.idle":"2024-08-07T22:27:31.254957Z","shell.execute_reply.started":"2024-08-07T22:27:31.231493Z","shell.execute_reply":"2024-08-07T22:27:31.253724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head(10)","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:27:34.628740Z","iopub.execute_input":"2024-08-07T22:27:34.629649Z","iopub.status.idle":"2024-08-07T22:27:34.676709Z","shell.execute_reply.started":"2024-08-07T22:27:34.629610Z","shell.execute_reply":"2024-08-07T22:27:34.675503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[train['study_id'] == 100206310]","metadata":{"execution":{"iopub.status.busy":"2024-08-05T23:06:50.145170Z","iopub.execute_input":"2024-08-05T23:06:50.145564Z","iopub.status.idle":"2024-08-05T23:06:50.165919Z","shell.execute_reply.started":"2024-08-05T23:06:50.145537Z","shell.execute_reply":"2024-08-05T23:06:50.164928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.nunique()","metadata":{"execution":{"iopub.status.busy":"2024-07-25T16:29:26.587575Z","iopub.execute_input":"2024-07-25T16:29:26.588005Z","iopub.status.idle":"2024-07-25T16:29:26.604382Z","shell.execute_reply.started":"2024-07-25T16:29:26.587965Z","shell.execute_reply":"2024-07-25T16:29:26.602989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:29:58.571310Z","iopub.execute_input":"2024-07-22T17:29:58.571718Z","iopub.status.idle":"2024-07-22T17:29:58.590172Z","shell.execute_reply.started":"2024-07-22T17:29:58.571679Z","shell.execute_reply":"2024-07-22T17:29:58.589109Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:30:00.937904Z","iopub.execute_input":"2024-07-22T17:30:00.938403Z","iopub.status.idle":"2024-07-22T17:30:00.945768Z","shell.execute_reply.started":"2024-07-22T17:30:00.938370Z","shell.execute_reply":"2024-07-22T17:30:00.944686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"DESCRIÇÃO \n1. study_id = O ID de estudo , um rotulo para mostra imagens , pode incluir varias series em imagens\n1. instance_number = O número de ordem da imagem na pilha 3D.\n1. condition = A condição\n1. level = As verterbras relevantes\n1. x = coordenada x , no centro da area\n1. y = coordenada y , no centro da area","metadata":{}},{"cell_type":"markdown","source":"* **DATA FRAME DE TREINO E COORDENADAS**","metadata":{}},{"cell_type":"code","source":"train_coordenadas = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:33:25.001885Z","iopub.execute_input":"2024-08-07T22:33:25.002325Z","iopub.status.idle":"2024-08-07T22:33:25.089830Z","shell.execute_reply.started":"2024-08-07T22:33:25.002293Z","shell.execute_reply":"2024-08-07T22:33:25.088538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_coordenadas.head(10)","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:30:07.297812Z","iopub.execute_input":"2024-07-22T17:30:07.298187Z","iopub.status.idle":"2024-07-22T17:30:07.316553Z","shell.execute_reply.started":"2024-07-22T17:30:07.298159Z","shell.execute_reply":"2024-07-22T17:30:07.315389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_coordenadas[train_coordenadas['study_id'] == 100206310]","metadata":{"execution":{"iopub.status.busy":"2024-08-05T23:07:00.853123Z","iopub.execute_input":"2024-08-05T23:07:00.853512Z","iopub.status.idle":"2024-08-05T23:07:00.872921Z","shell.execute_reply.started":"2024-08-05T23:07:00.853482Z","shell.execute_reply":"2024-08-05T23:07:00.871855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_coordenadas.nunique()","metadata":{"execution":{"iopub.status.busy":"2024-07-25T16:28:23.642122Z","iopub.execute_input":"2024-07-25T16:28:23.642923Z","iopub.status.idle":"2024-07-25T16:28:23.675643Z","shell.execute_reply.started":"2024-07-25T16:28:23.642885Z","shell.execute_reply":"2024-07-25T16:28:23.674357Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_coordenadas.shape","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:30:10.553745Z","iopub.execute_input":"2024-07-22T17:30:10.554188Z","iopub.status.idle":"2024-07-22T17:30:10.561139Z","shell.execute_reply.started":"2024-07-22T17:30:10.554155Z","shell.execute_reply":"2024-07-22T17:30:10.560010Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_coordenadas.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:30:12.294905Z","iopub.execute_input":"2024-07-22T17:30:12.295306Z","iopub.status.idle":"2024-07-22T17:30:12.317149Z","shell.execute_reply.started":"2024-07-22T17:30:12.295272Z","shell.execute_reply":"2024-07-22T17:30:12.315775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* **DATAF FRAME DE TREINO SERIES**","metadata":{}},{"cell_type":"markdown","source":"DESCRIÇÃO \n\n1. study_id = O id de estudo , um rotulo para imagem \n2. series_id = O id da serie de imagem\n3. series_description = A orientação da serie\n","metadata":{}},{"cell_type":"code","source":"train_series = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_series_descriptions.csv')","metadata":{"execution":{"iopub.status.busy":"2024-07-22T17:30:14.369586Z","iopub.execute_input":"2024-07-22T17:30:14.370743Z","iopub.status.idle":"2024-07-22T17:30:14.393608Z","shell.execute_reply.started":"2024-07-22T17:30:14.370705Z","shell.execute_reply":"2024-07-22T17:30:14.392436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_series.head(10)","metadata":{"execution":{"iopub.status.busy":"2024-07-20T12:39:10.477154Z","iopub.execute_input":"2024-07-20T12:39:10.477605Z","iopub.status.idle":"2024-07-20T12:39:10.488664Z","shell.execute_reply.started":"2024-07-20T12:39:10.477573Z","shell.execute_reply":"2024-07-20T12:39:10.487319Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"teste_series = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_series_descriptions.csv')","metadata":{"execution":{"iopub.status.busy":"2024-07-20T12:50:33.465472Z","iopub.execute_input":"2024-07-20T12:50:33.466191Z","iopub.status.idle":"2024-07-20T12:50:33.477033Z","shell.execute_reply.started":"2024-07-20T12:50:33.466156Z","shell.execute_reply":"2024-07-20T12:50:33.475925Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"teste_series","metadata":{"execution":{"iopub.status.busy":"2024-07-20T13:29:01.672830Z","iopub.execute_input":"2024-07-20T13:29:01.673197Z","iopub.status.idle":"2024-07-20T13:29:01.684978Z","shell.execute_reply.started":"2024-07-20T13:29:01.673170Z","shell.execute_reply":"2024-07-20T13:29:01.683766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submissão = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:29:07.274020Z","iopub.execute_input":"2024-08-07T22:29:07.274504Z","iopub.status.idle":"2024-08-07T22:29:07.288098Z","shell.execute_reply.started":"2024-08-07T22:29:07.274468Z","shell.execute_reply":"2024-08-07T22:29:07.287045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submissão.shape","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:48:27.697020Z","iopub.execute_input":"2024-08-07T22:48:27.697519Z","iopub.status.idle":"2024-08-07T22:48:27.705938Z","shell.execute_reply.started":"2024-08-07T22:48:27.697484Z","shell.execute_reply":"2024-08-07T22:48:27.704557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* **IMAGENS**","metadata":{}},{"cell_type":"code","source":"import os\nimport random\nimport pydicom\nimport matplotlib.pyplot as plt\n\ndef plot_random_dicom_images(root_directory, num_images=5):\n    dicom_files = []\n    \n    # Percorrer recursivamente todas as pastas e subpastas\n    for dirpath, _, filenames in os.walk(root_directory):\n        for filename in filenames:\n            if filename.lower().endswith('.dcm'):\n                dicom_files.append(os.path.join(dirpath, filename))\n    \n    # Selecionar aleatoriamente os arquivos DICOM\n    selected_files = random.sample(dicom_files, min(num_images, len(dicom_files)))\n    \n    # Plotar as imagens DICOM\n    fig, axes = plt.subplots(1, len(selected_files), figsize=(15, 5))\n    if len(selected_files) == 1:\n        axes = [axes]\n    \n    for ax, dicom_file in zip(axes, selected_files):\n        ds = pydicom.dcmread(dicom_file)\n        ax.imshow(ds.pixel_array, cmap=plt.cm.gray)\n        ax.axis('off')\n        ax.set_title(os.path.basename(dicom_file))\n    \n    plt.show()\n\n# Exemplo de uso\nroot_directory = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images'\nplot_random_dicom_images(root_directory, num_images=5)\n","metadata":{"execution":{"iopub.status.busy":"2024-07-20T13:21:47.174862Z","iopub.execute_input":"2024-07-20T13:21:47.175308Z","iopub.status.idle":"2024-07-20T13:21:55.915268Z","shell.execute_reply.started":"2024-07-20T13:21:47.175269Z","shell.execute_reply":"2024-07-20T13:21:55.913994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom\nimport matplotlib.pyplot as plt\n\ndef plot_dicom_image(image_path):\n\n    # Carrega a imagem DICOM\n    dicom = pydicom.dcmread(image_path)\n    img = dicom.pixel_array\n    \n    # Plota a imagem\n    plt.imshow(img, cmap=plt.cm.gray)\n    plt.axis('off')  # Remove os eixos\n    plt.show()\n\n# Exemplo de uso\nplot_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/1792451510/9.dcm')\nplot_dicom_image(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/2092806862/12.dcm\")\nplot_dicom_image(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/1012284084/46.dcm\")\n\n","metadata":{"execution":{"iopub.status.busy":"2024-08-05T23:20:35.370233Z","iopub.execute_input":"2024-08-05T23:20:35.371094Z","iopub.status.idle":"2024-08-05T23:20:35.889599Z","shell.execute_reply.started":"2024-08-05T23:20:35.371056Z","shell.execute_reply":"2024-08-05T23:20:35.888244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pydicom\n\ndef get_dicom_image_sizes(root_directory):\n    dicom_sizes = {}\n    \n    # Percorrer recursivamente todas as pastas e subpastas\n    for dirpath, _, filenames in os.walk(root_directory):\n        for filename in filenames:\n            if filename.lower().endswith('.dcm'):\n                dicom_file = os.path.join(dirpath, filename)\n                try:\n                    ds = pydicom.dcmread(dicom_file)\n                    size = ds.pixel_array.shape\n                    if size in dicom_sizes:\n                        dicom_sizes[size] += 1\n                    else:\n                        dicom_sizes[size] = 1\n                except Exception as e:\n                    print(f\"Erro ao ler {dicom_file}: {e}\")\n    \n    return dicom_sizes\n\n# Exemplo de uso\nroot_directory = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images'\nsizes = get_dicom_image_sizes(root_directory)\nfor size, count in sizes.items():\n    print(f\"Tamanho: {size}, Quantidade: {count}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-07-20T13:29:09.890308Z","iopub.execute_input":"2024-07-20T13:29:09.890735Z","iopub.status.idle":"2024-07-20T14:06:00.998327Z","shell.execute_reply.started":"2024-07-20T13:29:09.890703Z","shell.execute_reply":"2024-07-20T14:06:00.995873Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install tqdm","metadata":{"execution":{"iopub.status.busy":"2024-07-20T14:07:03.432078Z","iopub.execute_input":"2024-07-20T14:07:03.433759Z","iopub.status.idle":"2024-07-20T14:07:21.691834Z","shell.execute_reply.started":"2024-07-20T14:07:03.433701Z","shell.execute_reply":"2024-07-20T14:07:21.690164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pydicom\nfrom tqdm import tqdm\n\ndef get_dicom_image_sizes_with_progress(root_directory):\n    dicom_sizes = {}\n    \n    # Contar o número total de arquivos para a barra de progresso\n    total_files = sum(len(files) for _, _, files in os.walk(root_directory))\n    \n    # Percorrer recursivamente todas as pastas e subpastas com uma barra de progresso\n    with tqdm(total=total_files, desc=\"Processando arquivos DICOM\") as pbar:\n        for dirpath, _, filenames in os.walk(root_directory):\n            for filename in filenames:\n                if filename.lower().endswith('.dcm'):\n                    dicom_file = os.path.join(dirpath, filename)\n                    try:\n                        ds = pydicom.dcmread(dicom_file)\n                        size = ds.pixel_array.shape\n                        if size in dicom_sizes:\n                            dicom_sizes[size] += 1\n                        else:\n                            dicom_sizes[size] = 1\n                    except Exception as e:\n                        print(f\"Erro ao ler {dicom_file}: {e}\")\n                    pbar.update(1)\n    \n    return dicom_sizes\n\n# Exemplo de uso\nroot_directory = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images'\nsizes = get_dicom_image_sizes_with_progress(root_directory)\nfor size, count in sizes.items():\n    print(f\"Tamanho: {size}, Quantidade: {count}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-07-22T15:31:18.915678Z","iopub.execute_input":"2024-07-22T15:31:18.916128Z","iopub.status.idle":"2024-07-22T16:33:45.294900Z","shell.execute_reply.started":"2024-07-22T15:31:18.916092Z","shell.execute_reply":"2024-07-22T16:33:45.293379Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pydicom\nfrom tqdm import tqdm\n\ndef get_dicom_image_sizes_with_progress(root_directory):\n    dicom_sizes = {}\n    \n    # Contar o número total de arquivos para a barra de progresso\n    total_files = sum(len(files) for _, _, files in os.walk(root_directory))\n    \n    # Percorrer recursivamente todas as pastas e subpastas com uma barra de progresso\n    with tqdm(total=total_files, desc=\"Processando arquivos DICOM\") as pbar:\n        for dirpath, _, filenames in os.walk(root_directory):\n            for filename in filenames:\n                if filename.lower().endswith('.dcm'):\n                    dicom_file = os.path.join(dirpath, filename)\n                    try:\n                        ds = pydicom.dcmread(dicom_file)\n                        size = ds.pixel_array.shape\n                        if size in dicom_sizes:\n                            dicom_sizes[size] += 1\n                        else:\n                            dicom_sizes[size] = 1\n                    except Exception as e:\n                        print(f\"Erro ao ler {dicom_file}: {e}\")\n                    pbar.update(1)\n    \n    return dicom_sizes\n\n# Exemplo de uso\nroot_directory = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images'\nsizes = get_dicom_image_sizes_with_progress(root_directory)\nfor size, count in sizes.items():\n    print(f\"Tamanho: {size}, Quantidade: {count}\")","metadata":{"execution":{"iopub.status.busy":"2024-07-25T16:02:30.546059Z","iopub.execute_input":"2024-07-25T16:02:30.546560Z","iopub.status.idle":"2024-07-25T16:02:35.727733Z","shell.execute_reply.started":"2024-07-25T16:02:30.546524Z","shell.execute_reply":"2024-07-25T16:02:35.725338Z"},"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"MEXENDO NOS DADOS","metadata":{}},{"cell_type":"code","source":"treino_sample = train_coordenadas.sample(frac=0.1, random_state=1)","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:33:30.915013Z","iopub.execute_input":"2024-08-07T22:33:30.915880Z","iopub.status.idle":"2024-08-07T22:33:30.929938Z","shell.execute_reply.started":"2024-08-07T22:33:30.915839Z","shell.execute_reply":"2024-08-07T22:33:30.928658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"treino_sample.to_csv('treino_sample')","metadata":{"execution":{"iopub.status.busy":"2024-08-07T22:51:52.200968Z","iopub.execute_input":"2024-08-07T22:51:52.201406Z","iopub.status.idle":"2024-08-07T22:51:52.262142Z","shell.execute_reply.started":"2024-08-07T22:51:52.201373Z","shell.execute_reply":"2024-08-07T22:51:52.260619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"treino_sample.info()","metadata":{"execution":{"iopub.status.busy":"2024-08-07T23:06:08.922584Z","iopub.execute_input":"2024-08-07T23:06:08.923106Z","iopub.status.idle":"2024-08-07T23:06:08.955432Z","shell.execute_reply.started":"2024-08-07T23:06:08.923061Z","shell.execute_reply":"2024-08-07T23:06:08.954009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport shutil\nimport os\nimport pydicom\nfrom tqdm import tqdm  # Biblioteca para a barra de progresso\n\n# Caminho para o diretório original das imagens e para o diretório de destino\nsource_dir = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images'\ndestination_dir = '/kaggle/working/destination_images'\n\n# Criar o diretório de destino se não existir\nos.makedirs(destination_dir, exist_ok=True)\n\n# Adicionar barra de progresso\nfor index, row in tqdm(treino_sample.iterrows(), total=treino_sample.shape[0], desc='Copiando imagens'):\n    # Garantir que os valores sejam strings\n    study_id = str(row['study_id'])\n    series_id = str(row['series_id'])  # Corrigido para 'series'\n    instance_number = str(row['instance_number'])\n    \n    # Construir o caminho do diretório e nome do arquivo a partir das colunas\n    file_path = os.path.join(study_id, series_id, f\"{instance_number}.dcm\")\n    source_path = os.path.join(source_dir, file_path)\n    new_filename = f\"{study_id}_{series_id}_{instance_number}.dcm\"\n    destination_path = os.path.join(destination_dir, new_filename)\n    \n    # Verificar se o arquivo de origem existe\n    if os.path.exists(source_path):\n        # Ler o arquivo DICOM para garantir que é um arquivo válido (opcional)\n        try:\n            dicom_file = pydicom.dcmread(source_path)\n            # Copiar o arquivo para o diretório de destino com o novo nome\n            shutil.copy(source_path, destination_path)\n        except Exception as e:\n            print(f\"Erro ao ler o arquivo DICOM {source_path}: {e}\")\n    else:\n        print(f\"Arquivo não encontrado: {source_path}\")\n\nprint(\"Cópia de arquivos concluída.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-08-07T23:09:07.990911Z","iopub.execute_input":"2024-08-07T23:09:07.991343Z","iopub.status.idle":"2024-08-07T23:09:50.261912Z","shell.execute_reply.started":"2024-08-07T23:09:07.991312Z","shell.execute_reply":"2024-08-07T23:09:50.260868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pydicom\n\nimport os\nimport pydicom\nfrom tqdm import tqdm\n\ndef get_dicom_image_sizes_with_progress(root_directory):\n    dicom_sizes = {}\n    \n    # Contar o número total de arquivos para a barra de progresso\n    total_files = sum(len(files) for _, _, files in os.walk(root_directory))\n    \n    # Percorrer recursivamente todas as pastas e subpastas com uma barra de progresso\n    with tqdm(total=total_files, desc=\"Processando arquivos DICOM\") as pbar:\n        for dirpath, _, filenames in os.walk(root_directory):\n            for filename in filenames:\n                if filename.lower().endswith('.dcm'):\n                    dicom_file = os.path.join(dirpath, filename)\n                    try:\n                        ds = pydicom.dcmread(dicom_file)\n                        size = ds.pixel_array.shape\n                        if size in dicom_sizes:\n                            dicom_sizes[size] += 1\n                        else:\n                            dicom_sizes[size] = 1\n                    except Exception as e:\n                        print(f\"Erro ao ler {dicom_file}: {e}\")\n                    pbar.update(1)\n    \n    return dicom_sizes\n\n# Exemplo de uso\nroot_directory = '/kaggle/working/destination_images'\nsizes = get_dicom_image_sizes_with_progress(root_directory)\nfor size, count in sizes.items():\n    print(f\"Tamanho: {size}, Quantidade: {count}\")","metadata":{"execution":{"iopub.status.busy":"2024-08-07T23:18:58.423535Z","iopub.execute_input":"2024-08-07T23:18:58.424006Z","iopub.status.idle":"2024-08-07T23:20:12.827129Z","shell.execute_reply.started":"2024-08-07T23:18:58.423971Z","shell.execute_reply":"2024-08-07T23:20:12.825897Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}