1
resposta

ValueError: Found array with 0 sample(s) (shape=(0, 128)) while a minimum of 1 is required.

Olá, tive um erro ao executar esse código:

DICIONARIO_NOME = 'dicionario.csv'
dados_treinamento = ['Aula/Treinamento/positivos/', 'Aula/Treinamento/negativos']

# Rotina para criação do dicionario de palavras virtuais

descritores = np.empty((0,128), dtype=np.uint8)

for caminho in dados_treinamento:

  for arquivo in arquivo_diretorio(caminho):
      sift_descritor = get_SIFT_descritores(os.path.join(caminho,arquivo))
      descritores = np.append(descritores, sift_descritor, axis=0)

img_representacao = PacoteDePalavras()
img_representacao.gerar_dicionario(descritores)
img_representacao.salvar_dicionario('Aula/', DICIONARIO_NOME)

O erro foi esse:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-b5df7f859b5a> in <module>()
     13 
     14 img_representacao = PacoteDePalavras()
---> 15 img_representacao.gerar_dicionario(descritores)
     16 img_representacao.salvar_dicionario('Aula/', DICIONARIO_NOME)

2 frames
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    584                              " minimum of %d is required%s."
    585                              % (n_samples, array.shape, ensure_min_samples,
--> 586                                 context))
    587 
    588     if ensure_min_features > 0 and array.ndim == 2:

ValueError: Found array with 0 sample(s) (shape=(0, 128)) while a minimum of 1 is required.
1 resposta

Oii Iago, como você está? Espero que esteja bem ^-^

Peço perdão pela demora em obter um retorno.

Inicialmente a lista de descritores é iniciada com um array vazio:

descritores = np.empty((0,128), dtype=np.uint8)

E dentro do trecho do for é adicionado valores na lista através da linha:

descritores = np.append(descritores, sift_descritor, axis=0)

Porém, por algum motivo o seu código não está executando o trecho do for, logo, a lista de descritores sempre será vazia e por isso o erro ValueError: Found array with 0 sample(s) (shape=(0, 128)) while a minimum of 1 is required. está sendo apresentado.

Um dos motivos nos quais isso pode estar acontecendo, é o script não conseguir localizar as pastas em seu Google Drive, então, os endereços passados na lista dados_treinamento não estão sendo de fato executados. Abaixo, um passo a passo para correção:

1- No painel esquerdo do Google Colab, vá em Arquivos e clique em Montar drive:

Imagem que mostra o símbolo de arquivos e de montar drive

2- Atualize o painel e em seguida clique em drive e expanda a pasta My Drive:

Imagem que mostra a pasta My Drive expandida

3- Procure a pasta que possui as imagens, clique com o botão direito sobre ela e clique em Copiar Caminho:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4- Adicione esse caminho na lista dados_treinamento, exemplo:

dados_treinamento = ['/content/drive/MyDrive/dadosImagem/Treinamento/positivos/', '/content/drive/MyDrive/dadosImagem/Treinamento/negativos']

Execute o código novamente e verifique se obterá êxito. Como temos muitas imagens, o tempo de execução é relativamente alto, em meu caso, durou cerca de 50 minutos, mas após isso, foi possível verificar o arquivo dicionario.csv na pasta de destino, como mostro abaixo:

Imagem que mostra o arquivo dicionario.csv salvo na pasta

Qualquer dúvida estou por aqui, a gente vai se falando.

Abraços e bons estudos!