Pular para o conteúdo principal

! Inferir uma imagem usando um request CoreML (:predict)

Declaração

resultado, mensagem_de_erro = objeto_request_de_visão:predict(imagem_a_inferir)

ou

foi_enviado, mensagem_de_erro = objeto_request_de_visão:predict(imagem_a_inferir, {
async = assíncrono,
multi_array_output = "table" ou "MLMultiArray",
uses_cpu_only = usar_apenas_CPU_nesta_execução,
})

Parâmetros

  • imagem a inferir
    Objeto de imagem, imagem que será inferida.

  • async
    Booleano opcional; quando definido como true, envia a inferência de forma assíncrona. O padrão é false.

  • multi_array_output
    Texto opcional; quando o valor retornado for uma feature MLMultiArray, especifica se o retorno será "table" ou "MLMultiArray". O padrão é "table".

  • uses_cpu_only
    Booleano opcional que afeta somente esta inferência; quando definido como true, esta execução usa apenas a CPU.

Valores retornados

  • resultado
    Tabela

    Estrutura retornada por um modelo de detecção de objetos
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Estrutura retornada por um modelo de classificação de imagens
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Estrutura retornada por outros tipos de modelo
    {
    ...
    }

Observações

  • Disponível a partir da versão 1.3.8 do software
  • Sistemas anteriores ao iOS 12 não são compatíveis.
  • Usa o contexto de inferência de imagens para inferir a imagem e retornar o resultado.
  • Se o modelo retornar uma feature MLMultiArray, multi_array_output = "MLMultiArray" preserva o objeto de tensor nativo para facilitar o pós-processamento.
  • :run() é um alias de :predict(); após um envio assíncrono, use :is_done() e :results() para ler o resultado.
  • O objeto de request de visão também oferece métodos como :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels() e :is_vision_request().

Exemplo

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- local onde o modelo compilado será armazenado

file.remove(compiled_model_path) -- durante os testes, recompila sempre; depois que o modelo estiver estável, esta linha pode ser comentada

if not file.exists(compiled_model_path) then -- se ainda não houver um modelo compilado, compila um
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- compila o modelo
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo') -- move o modelo compilado para o local especificado
end

vnrequest, err = coreml.new_vision_request(compiled_model_path) -- cria um request a partir do modelo
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image()) -- usa o request para inferir a imagem
nLog(rets)