提示错误如下:
Using TensorFlow backend.
Traceback (most recent call last):
File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 93, in
x_train, y_train = prep_data(train_images)
File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 84, in prep_data
image, label = read_image(image_file)
File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 66, in read_image
return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_AREA), label
cv2.error: OpenCV(4.1.0) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/resize.cpp:3718: error: (-215:Assertion failed) !ssize.empty() in function 'resize'
博主给出的建议是:由于文件导入路径错误所致。
https://www.cnblogs.com/gengyi/p/10279480.html
# 先导入要用的库
import os
import cv2
import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import ticker
import seaborn as sns
# %matplotlib inline
#关注这两行,读取文件的路径
TRAIN_DIR = './train'
TEST_DIR = './test'
train_dogs = [(TRAIN_DIR + i, 1) for i in os.listdir(TRAIN_DIR) if 'dog' in i]
train_cats = [(TRAIN_DIR + i, 0) for i in os.listdir(TRAIN_DIR) if 'cat' in i]
test_images = [(TEST_DIR + i, -1) for i in os.listdir(TEST_DIR)]
train_images = train_dogs[:100] + train_cats[:100]
random.shuffle(train_images)
test_images = test_images[:10]
ROWS = 64
COLS = 64
def read_image(tuple_set):
file_path = tuple_set[0]
label = tuple_set[1]
#错误报在这两行
img = cv2.imread(file_path, 1)
return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_AREA), label
CHANNELS = 3
def prep_data(images):
no_images = len(images)
data = np.ndarray((no_images, CHANNELS, ROWS, COLS), dtype=np.uint8)
labels = []
for i, image_file in enumerate(images):
image, label = read_image(image_file)
data[i] = image.T
labels.append(label)
return data, labels
x_train, y_train = prep_data(train_images)
x_test, y_shit = prep_data(test_images)
print(x_train.shape)
print(x_test.shape)
代码如上,由于复制粘贴过来的,碉堡下成功第一步,别人说可以用,但是出错啊,所以开启了debug和百度,Goole的探索。
排除步骤如下:
(1)看到代码cv2.imread()函数显示问题
附上调试代码,发现运行后没有问题:
import cv2
img = cv2.imread('boy.jpg',0)
print(img)
cv2.imshow('img',img)
cv2.waitKey(0)
其中,boy.jpg文件与运行文件放在同一文件下,或者指定具体路径。
(2)cv2.resize()显示错误的话,问题可能出在resize或者其上一步的cv2.imread()
结果发现:img返回的是NoneType,说明img对象里根本就没有读入文件。
(3)cv.imread()返回为空,说明输入的参数file_path或者cv.IMREAD_COLOR有问题:
通过以下内容发现,问题就是出在了路径问题
图像读入:cv2.imread()
使用函数cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。
• cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,
这是默认参数。
• cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
import cv2
img = cv2.imread('lena.jpg',0)
PS:调用opencv,就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命
令print img时得到的结果是None。
---------------------
作者:furuit
来源:CSDN
原文:https://blog.csdn.net/fu6543210/article/details/80835280
版权声明:本文为博主原创文章,转载请附上博文链接!
(4)输出下路径,会发现哪里怪怪的,对!就是输出的路径文件名,
img = cv2.imread(‘lena.jpg’,0) ,
cv2.imread(“图片名称”,‘0或1’) #0表示灰度图片,1表示为彩色图片,也可以直接写参数cv2.IMREAD_COLOR,默认是1,即默认输出为彩色图片。
笔者的图片名称位置输出的是 ‘./traindog.4824.jpg’,文件路径和文件名粘连一块了,怪不得计算机老报错
(5)应该书图中的./train/num.jpg,文件名和路径有/隔开。
更改办法:最后加上一个/,完美解决!
TRAIN_DIR = './train/'
TEST_DIR = './test/'
(6)最后看了下猫狗大战进阶https://www.2cto.com/kf/201707/659350.html
这路径最后写的是什么?
train/,最后还有个 /,
所以代码看仔细喽,差一个都不行,我的是原来就没有,导致排错耽误了这么久!
train_dir = '/home/ccf/Study/tensorflow/My-TensorFlow-tutorials-master/02_cats_vs_dogs/data/train/'
debug是程序员的一种素养,也是能力的体现,希望多点细心少犯错,会排错,共勉!
代码部分为kaggle猫狗大战的数据预处理部分!
以上,能力有限,不正之处还请批评指正,