微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:切片索引必须是整数或无或具有 __index__ 方法​​Albumentations/NumPy

如何解决类型错误:切片索引必须是整数或无或具有 __index__ 方法​​Albumentations/NumPy

大家好,请帮助我,我遇到了随机作物增加错误。 类型错误:切片索引必须是整数或无或具有 index 方法

代码如下。

!conda install -c conda-forge gdcm -y

import os

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from PIL import Image
import cv2 as cv
import albumentations as A

import pydicom
from pydicom.pixel_data_handlers.util import apply_voi_lut

from tqdm.auto import tqdm

def read_img(path,voi_lut=True,fix_monochrome=True):
    dcm = pydicom.read_file(path)
    
    if voi_lut:
        img = apply_voi_lut(dcm.pixel_array,dcm)
    else:
        img = dcm.pixel_array
        
    if fix_monochrome and dcm.PhotometricInterpretation == "MONOCHROME1":
        img = np.amax(img) - img
        
    img = img - np.min(img)
    img = img / np.max(img)
    img = (img * 255).astype(np.uint8)
    
    return img

def resize_img(img,size,pad=True,resample=Image.lanczos):
    img = np.array(img)
    
    if pad:
        max_width = 4891
        max_height = 4891
        
        img = np.pad(img,((0,max_height - img.shape[0]),(0,max_width - img.shape[1]),0)))
        
    img = img.resize((size,size),resample)
    
    return img

def augment_img(img,clahe=True,albumentations=True):
    if clahe:
        clahe = cv.createCLAHE(clipLimit=15.0,tileGridSize=(8,8))
        img = clahe.apply(img)
    else:
        img = cv.equalizeHist(img)
        
    if albumentations:
        img = np.stack((img,) * 3,axis=-1)
        
        transform = A.Compose([
            A.RandomSunFlare(p=0.2),A.RandomFog(p=0.2),A.RandomBrightness(p=0.2),A.RandomCrop(p=1.0,width=img.shape[0] / 2,height=img.shape[1] / 2),A.Rotate(p=0.2,limit=90),A.RGBShift(p=0.2),A.RandomSNow(p=0.2),A.HorizontalFlip(p=0.2),A.VerticalFlip(p=0.2),A.RandomContrast(p=0.2,limit=0.2),A.HueSaturationValue(p=0.2,hue_shift_limit=20,sat_shift_limit=30,val_shift_limit=50)
        ])
        
        img = transform(image=img)["image"]
        
    return img

img = read_img('../input/siim-covid19-detection/test/00188a671292/3eb5a506ccf3/3dcdfc352a06.dcm') #You can replace this with any .dcm filepath on your system
img = augment_img(img)
img = resize_img(img,1024)
plt.imshow(img,cmap='gray')

这是针对 SIIM kaggle 比赛的。我不知道如何解决这个问题,问题仅在于随机裁剪。我尝试在线搜索,但无法搜索

解决方法

我认为错误在这一行:

A.RandomCrop(p=1.0,width=img.shape[0] / 2,height=img.shape[1] / 2)

这里的问题是您的宽度和高度可能不是整数,但必须是。

检查Albumentations RandomCrop documentation

这是解决方案。

  1. 将宽度和高度参数显式转换为整数:
A.RandomCrop(p=1.0,width=int(img.shape[0] / 2),height=int(img.shape[1] / 2))
  1. 使用整数除法:
A.RandomCrop(p=1.0,width=img.shape[0] // 2,height=img.shape[1] // 2)

如果有帮助,请告诉我!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?