5- Atividades Educacionais: Escreva a Palavra

Olá pessoal, tudo bem com vocês?

Hoje iremos explorar como criar uma rotina que automatize a criação de atividades educacionais, simplificando o trabalho realizado.
Vamos unir imagens disponíveis e um modelo de atividade para que o aluno preencha a palavra referente à imagem.

Vamos lá?


Tópicos:

  • Introdução
  • Lista de Imagens
  • Seleção de Imagens
  • Fluxo para Download

Introdução

Nesta etapa, nosso foco será criar uma rotina que permita automatizar um tipo de atividade educacional.
A ideia é simplificar o processo de criação, unindo imagens e modelos de atividade para que o aluno possa preencher a palavra correspondente à imagem apresentada. Isso facilita o trabalho do educador e torna o aprendizado mais dinâmico.


Lista de Imagens

Na postagem anterior, criamos um script que gera imagens no formato de desenho automaticamente, utilizando ferramentas como stable diffusion.
Agora, vamos carregar a lista de imagens armazenadas no Google Drive. Essa lista será a base para selecionar as imagens que serão usadas na atividade.
Através da caixinha “carrega_lista_imagens_disponiveis” iremos carregar todas as imagens criadas na etapa anterior e armazenada na planilha.

Assim teremos as informações “prompt, palavra e categoria”.

  • prompt: É a instrução de como pedimos que a imagem seja gerada, ela descreve o conteúdo que foi gerado. O arquivo criado possui o prompt em seu nome acompanhado da data de criação.
    • Exemplo: Accountant using a calculator_2025_05_04_12_41_35.jpg
  • Essa estratégia permite a criação de várias imagens para o mesmo desejo (prompt).

Na imagem abaixo vemos a variedade de imagens criadas para o mesmo prompt (cat, chick, chicken).


Seleção de Imagens

Utilizaremos um código específico para filtrar as imagens e selecionar aquelas que são de nosso interesse.
O primeiro filtro será definir quais categorias de prompt / imagens serão permitidas na atividade.
Foi definido que na atividade atual serão inclusas:

const categoriasPermitidas = [
  'Profissão',
  'Animal Doméstico',
  'Animal Selvagem',
  'Animal de Fazenda'
];

Como na etapa anterior foi selecionado todas as atividades, um código irá filtrar para somente as categorias selecionadas:

const allItems = $input.all().map(x => x.json);

const filtrados = allItems.filter(item =>
  categoriasPermitidas.includes(item.categoria)
);

Na nossa atividade precisamos de seis imagens diferentes, com isso faremos um sorteio de seleção de seis dos itens filtrados.

const selecionados = filtrados.sort(() => 0.5 - Math.random()).slice(0, 6);

Nesse momento agora temos a quantidade exata que precisamos na atividade escolhida de forma aleatória. Iremos agora recuperar aleatoriamente filtrando o prompt uma imagem criada.

  • Temos várias imagens para cada prompt (estilo de imagem).
  • Iremos entre as criadas selecionar uma para a nossa atividade.
  • Faremos isso para todas as seis escolhidas.
const baseDir = '/content-manager/blogProfessoraAntenada/personagens/jpg/';

function getRandomMatchingFile(promptText) {
  const files = fs.readdirSync(baseDir);
  const pattern = `${promptText}_`;
  const matchingFiles = files.filter(f => f.startsWith(pattern) && f.endsWith('.jpg'));
  if (matchingFiles.length === 0) return null;

  const randomFile = matchingFiles[Math.floor(Math.random() * matchingFiles.length)];
  return path.join(baseDir, randomFile);
}

for (const item of selecionados) {
  const filePath = getRandomMatchingFile(item.prompt);
}

O retorno será as seis imagens escolhidas, para isso a cada carregamento de imagem iremos salvá-la em uma variável chamada resultado.

 resultado.push({
    json: item,
    binary: {
      [palavra]: {
        data: fileBuffer.toString('base64'),
        fileName,
        mimeType: 'image/jpeg',
      }
    }
  });
}

return resultado;

Dessa forma teremos como retorno as imagens que precisamos.


Fluxo para Download

Por hoje é só. Disponibilizamos o fluxo para download.
Lembre-se de ajustar para a sua planilha Google Sheets e para o caminho onde estão os mockups criados.


Até a próxima!