! 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 comotrue, envia a inferência de forma assíncrona. O padrão éfalse. -
multi_array_output
Texto opcional; quando o valor retornado for uma featureMLMultiArray, 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 comotrue, esta execução usa apenas a CPU.
Valores retornados
-
resultado
TabelaEstrutura 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)