簡體   English   中英

使用對象檢測時出現 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 ::調整大小

我在 Windows 10 上首先使用 cuda(不確定我是否設置正確)還有誰知道我如何檢查我是否使用 cuda 謝謝

我今天出現這個錯誤是因為我的圖片路徑不對。您可以嘗試顯示一張圖片,看看您是否成功閱讀了圖片。

所以我找到了我自己問題的答案!!!

我所做的是打印它正在加載的名稱,並且它停止的圖像已損壞。 我不得不多次這樣做。

只需鍵入您的腳本或 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 替換為您嘗試調整圖像大小的目錄名稱。 希望它有幫助。

這是一個超級晚的答案,但我在嘗試弄清楚為什么它告訴我我的圖像被加載為空時遇到了很多困難,即使我的路徑是正確的並且我的圖像沒有被損壞,所以對於任何人誰在這里但仍然無法修復它:確保您的目錄中沒有 .DS_Store 作為文件。 如果你這樣做,它顯然不是一個圖像文件,所以它被讀入為空。 打印圖像,如果第一張圖像是 .DS_Store,則將其刪除: 從 Mac 上的命令行刪除當前文件夾和所有子文件夾中的 .DS_STORE 文件,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM