使用对象检测时出现 Open cv 错误
I am getting a Open cv error when working with object detection
import cv2
import numpy as np
from random import shuffle
from tqdm import tqdm
import os
TRAIN_DIR=r'C:\Users\Valued Customer\Desktop\Object detection\train'
TEST_DIR=r'C:\Users\Valued Customer\Desktop\Object detection\test'
IMG_SIZE=300
LR=1e-3
MODEL_NAME = 'dogsvscats-{}-{}.model'.format(LR,'2conv-basic')
def Label_img(img):
label = img.split('.')[-3]
if label == 'cat':
return [1,0]
elif label == 'dog':
return [0,1]
def create_train_data():
training_data = []
for img in tqdm(os.listdir(TRAIN_DIR)):
label = Label_img(img)
path = os.path.join(TRAIN_DIR,img)
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
training_data.append([np.array(img),np.array(label)])
shuffle(training_data)
np.save('train_data.npy',training_data)
return training_data
def process_test_data():
testing_data = []
for img in tqdm(os.listdir(TEST_DIR)):
path = os.path.join(TEST_DIR,img)
img_num = img.split('.')[0]
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
testing_data.append([np.array(img),img_num])
np.save('testing_data.npy',testing_data)
return testing_data
train_data = create_train_data()
#if U already have train data then:
#train_data = np.load('train_data.npy',allow_pickle=True)
print('data has been loaded')
import tflearn
from tflearn.layers.conv import conv_2d,max_pool_2d
from tflearn.layers.core import input_data,dropout,fully_connected
from tflearn.layers.estimator import regression
from tflearn.layers.normalization import batch_normalization as bn
import tensorflow as tf
tf.reset_default_graph()
convnet = input_data(shape=[None,IMG_SIZE,IMG_SIZE,3],name='input')
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = fully_connected(convnet,1024,activation='relu')
convnet = dropout(convnet,0.8)
convnet = tflearn.layers.normalization.batch_normalization(convnet,trainable=True)
convnet = fully_connected(convnet,2,activation='softmax')
convnet = regression(convnet,
optimizer='adam',
learning_rate= LR,
loss='categorical_crossentropy',
name='targets')
model = tflearn.DNN(convnet)
train = train_data[:-500]
test = train_data[-500:]
X = np.array([i[0] for i in train]).reshape(-1,IMG_SIZE,IMG_SIZE,3)
Y = np.array([i[1] for i in train])
test_x = np.array([i[0] for i in test]).reshape(-1,IMG_SIZE,IMG_SIZE,3)
test_y = np.array([i[1] for i in test])
model.fit({'input':X},{'targets':Y},
n_epoch=5,validation_set=({'input':test_x},{'targets':test_y}),
snapshot_step=500,show_metric=True,run_id=MODEL_NAME)
#
model.save(MODEL_NAME)
每当我尝试 运行 这段代码时,它在创建训练数据时会停止 21%
def create_train_data():
training_data = []
for img in tqdm(os.listdir(TRAIN_DIR)):
label = Label_img(img)
path = os.path.join(TRAIN_DIR,img)
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
它一直给他们一个开放的简历错误
错误:OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: 错误: (-215:Assertion failed) !ssize.empty() in function 'cv::resize
我在 windows 十
首先使用 cuda(不确定我是否设置正确)
也有人知道我如何检查我是否在使用 cuda
谢谢
今天出现这个错误是因为我的图片路径不对right.U可以尝试显示一张图片看是否读取成功
所以我找到了我自己问题的答案!!!
我所做的是打印它正在加载的图像的名称,并且它停止的图像已损坏。我不得不多次这样做。
只需键入您的脚本或 ipython 单元格以验证是否存在可能导致此错误的空图像或损坏图像。
import os
from PIL import Image
img_dir = r"/content/downloads/Cars"
for filename in os.listdir(img_dir):
try :
with Image.open(img_dir + "/" + filename) as im:
print('ok')
except :
print(img_dir + "/" + filename)
os.remove(img_dir + "/" + filename)
将 img_dir 替换为您尝试调整图像大小的目录名称。希望对您有所帮助。
这是一个超级迟到的答案,但我在试图弄清楚为什么它告诉我我的图像被加载为空时遇到了很多困难,即使我的路径是正确的 none 我的图像已损坏,所以对于任何在此处但仍无法修复它的人:请确保您的目录中没有 .DS_Store 作为文件。如果这样做,它显然不是图像文件,因此它会被读入为空。打印图像,如果第一张图像是 .DS_Store,请删除它: 它应该可以工作。
import cv2
import numpy as np
from random import shuffle
from tqdm import tqdm
import os
TRAIN_DIR=r'C:\Users\Valued Customer\Desktop\Object detection\train'
TEST_DIR=r'C:\Users\Valued Customer\Desktop\Object detection\test'
IMG_SIZE=300
LR=1e-3
MODEL_NAME = 'dogsvscats-{}-{}.model'.format(LR,'2conv-basic')
def Label_img(img):
label = img.split('.')[-3]
if label == 'cat':
return [1,0]
elif label == 'dog':
return [0,1]
def create_train_data():
training_data = []
for img in tqdm(os.listdir(TRAIN_DIR)):
label = Label_img(img)
path = os.path.join(TRAIN_DIR,img)
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
training_data.append([np.array(img),np.array(label)])
shuffle(training_data)
np.save('train_data.npy',training_data)
return training_data
def process_test_data():
testing_data = []
for img in tqdm(os.listdir(TEST_DIR)):
path = os.path.join(TEST_DIR,img)
img_num = img.split('.')[0]
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
testing_data.append([np.array(img),img_num])
np.save('testing_data.npy',testing_data)
return testing_data
train_data = create_train_data()
#if U already have train data then:
#train_data = np.load('train_data.npy',allow_pickle=True)
print('data has been loaded')
import tflearn
from tflearn.layers.conv import conv_2d,max_pool_2d
from tflearn.layers.core import input_data,dropout,fully_connected
from tflearn.layers.estimator import regression
from tflearn.layers.normalization import batch_normalization as bn
import tensorflow as tf
tf.reset_default_graph()
convnet = input_data(shape=[None,IMG_SIZE,IMG_SIZE,3],name='input')
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = conv_2d(convnet,32,filter_size=[2,2],activation='relu')
convnet = conv_2d(convnet,64,filter_size=[2,2],activation='relu')
convnet = bn(convnet,trainable=True)
convnet = max_pool_2d(convnet,kernel_size=[3,3])
convnet = fully_connected(convnet,1024,activation='relu')
convnet = dropout(convnet,0.8)
convnet = tflearn.layers.normalization.batch_normalization(convnet,trainable=True)
convnet = fully_connected(convnet,2,activation='softmax')
convnet = regression(convnet,
optimizer='adam',
learning_rate= LR,
loss='categorical_crossentropy',
name='targets')
model = tflearn.DNN(convnet)
train = train_data[:-500]
test = train_data[-500:]
X = np.array([i[0] for i in train]).reshape(-1,IMG_SIZE,IMG_SIZE,3)
Y = np.array([i[1] for i in train])
test_x = np.array([i[0] for i in test]).reshape(-1,IMG_SIZE,IMG_SIZE,3)
test_y = np.array([i[1] for i in test])
model.fit({'input':X},{'targets':Y},
n_epoch=5,validation_set=({'input':test_x},{'targets':test_y}),
snapshot_step=500,show_metric=True,run_id=MODEL_NAME)
#
model.save(MODEL_NAME)
每当我尝试 运行 这段代码时,它在创建训练数据时会停止 21%
def create_train_data():
training_data = []
for img in tqdm(os.listdir(TRAIN_DIR)):
label = Label_img(img)
path = os.path.join(TRAIN_DIR,img)
img = cv2.resize(cv2.imread(path),(IMG_SIZE,IMG_SIZE), interpolation = cv2.INTER_AREA)
它一直给他们一个开放的简历错误
错误:OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: 错误: (-215:Assertion failed) !ssize.empty() in function 'cv::resize
我在 windows 十 首先使用 cuda(不确定我是否设置正确) 也有人知道我如何检查我是否在使用 cuda 谢谢
今天出现这个错误是因为我的图片路径不对right.U可以尝试显示一张图片看是否读取成功
所以我找到了我自己问题的答案!!!
我所做的是打印它正在加载的图像的名称,并且它停止的图像已损坏。我不得不多次这样做。
只需键入您的脚本或 ipython 单元格以验证是否存在可能导致此错误的空图像或损坏图像。
import os
from PIL import Image
img_dir = r"/content/downloads/Cars"
for filename in os.listdir(img_dir):
try :
with Image.open(img_dir + "/" + filename) as im:
print('ok')
except :
print(img_dir + "/" + filename)
os.remove(img_dir + "/" + filename)
将 img_dir 替换为您尝试调整图像大小的目录名称。希望对您有所帮助。
这是一个超级迟到的答案,但我在试图弄清楚为什么它告诉我我的图像被加载为空时遇到了很多困难,即使我的路径是正确的 none 我的图像已损坏,所以对于任何在此处但仍无法修复它的人:请确保您的目录中没有 .DS_Store 作为文件。如果这样做,它显然不是图像文件,因此它会被读入为空。打印图像,如果第一张图像是 .DS_Store,请删除它: