Ir para o conteúdo

Referência — API Web

Superfície pública do pacote @mauriciobenjamin700/ort-vision-sdk-web (tudo exportado de @mauriciobenjamin700/ort-vision-sdk-web).

Tarefas

Classe Criação Descrição
Classifier await Classifier.create(model, options) Classificação de imagem.
Detector await Detector.create(model, options) Detecção de objetos (YOLO).
Segmenter await Segmenter.create(model, options) Segmentação de instância (YOLO-seg).
DetectClassify await DetectClassify.create(model, options) Pipeline fundido detector → classificador, num único .onnx.
VisionTask Classe base comum.

predict() é sempre async e retorna Promise<...Results[]> de comprimento 1 por imagem. Cada tarefa expõe um alias run().

Tipos de opções

Tipo Para
ClassifierOptions / ClassifierPredictOptions construção / predict do Classifier (labels, numClasses, inputSize, applySoftmax, providers; topK no predict)
DetectorOptions / DetectorPredictOptions Detector (head, labels, inputSize, confThreshold, iouThreshold; overrides + classes no predict)
SegmenterOptions / SegmenterPredictOptions Segmenter (+ maskThreshold)
DetectorHead ("yolo") / SegmenterHead ("yolo-seg") famílias de decoder
DetectClassifyOptions / DetectClassifyPredictOptions DetectClassify (labels, classifierLabels; confThreshold, classes, topK no predict)

Os três tipos de detecção aceitam ainda raiseOnEmpty (construção e predict) — ver Resultado vazio.

Resultados

Envelope Visão em massa Iterar produz
ClassificationResults probs n/a (resultado único)
DetectionResults boxes DetectionResult
DetectClassifyResults boxes DetectionResult com classification preenchido (+ classifierNames no envelope)
SegmentationResults boxes, masks SegmentationResult

Todo envelope expõe names, origImg, origShape, path e speed — um objeto Speed com load, preprocess, inference e postprocess em milissegundos, preenchido por todo predict(). Ver Custo da inferência.

Visões em massa: Boxes, Probs, Masks (mesmos atributos do Python).

Tipos/classes por instância: DetectionResult, SegmentationResult, ClassificationResult, ClassProbability (com classId/className/ confidence e os aliases cls/name/conf/box), além de BoundingBox (asXyxy(), asXywh()), Mask (data/width/height) e RGBImage.

Imagens, rótulos e providers

Símbolo Descrição
loadImage(image) Carrega qualquer entrada suportada para um RGBImage.
ImageInput Tipo de união das entradas aceitas por predict().
resolveLabels(spec, options) Resolve uma LabelSpec para o mapeamento de classes.
LabelSpec / ResolveLabelsOptions Tipos da resolução de rótulos.
COCO_CLASSES As 80 classes do preset COCO.
DEFAULT_PROVIDERS ["webgpu", "wasm"].
resolveProviders(...) Resolve a lista de providers para nomes do ORT-Web.
OrtSession / OrtSessionOptions / ModelSource Sessão de baixo nível.
OrtSession.inputShape / .inputShapes Shapes declarados pelo grafo, eixos dinâmicos como null.
OrtSession.release() Libera a sessão nativa (necessário ao descartar uma sessão com a página viva).
task.inputSize Resolução em que a tarefa realmente pré-processa.
task.warmup(runs?) Roda o modelo com tensor zerado para pagar a compilação de shaders adiantado.
spatialInputSize / resolveInputSize / declaredShapesFrom Helpers puros da precedência grafo → chamador → fallback.
DeclaredShape / DeclaredDim Shape declarado e uma dimensão (number, ou null quando simbólica).

Erros

Hierarquia de exceções exportada: OrtVisionError (base), ImageLoadError, InferenceError, LabelMapError, ModelLoadError, ProviderNotAvailableError, FusionError, NoDetectionsError.

Resultado vazio

Detector, Segmenter e DetectClassify aceitam raiseOnEmpty nas opções de construção e nas de predict(). Default false: não achar nada devolve um envelope vazio. Com true, lança NoDetectionsError — ver Quando não detectar nada é um erro.

Símbolo Descrição
raiseOnEmpty Opção de construção e de predict(); o valor por chamada vence.
NoDetectionsError Lançado quando nada sobra e o flag está ativo.
requireDetections(count, options) O helper compartilhado pelas três tarefas, exportado para quem constrói a própria tarefa.

Pipelines fundidos

Símbolo Descrição
readFusionSpec(metadata) Lê o que um pipeline fundido declara sobre si mesmo; null quando o modelo não é um pipeline.
FusionSpec / CropSource O contrato decodificado e de onde vêm os recortes.
INPUT_IMAGE / INPUT_SOURCE / INPUT_SCALE / INPUT_PAD Nomes das entradas do grafo fundido.
OUTPUT_BOXES / OUTPUT_SCORES / OUTPUT_CLASSES / OUTPUT_NUM_DETECTIONS / OUTPUT_PROBS Nomes das saídas.
METADATA_PREFIX / FUSION_KIND_DETECT_CLASSIFY Namespace ovs. e a família de pipeline.
parseNames(raw) Interpreta um mapa de classes repr-encoded.

Fundir modelos é um passo de build do lado Python (extra [compose]); o navegador só carrega o .onnx resultante. Ver Pipelines fundidos.

Utilitários de pré/pós-processamento

O pacote também exporta helpers de baixo nível para quem constrói o próprio pipeline: letterbox, resize, normalize, toCHW, toTensor, toFloat32/toFloat32Tensor, fromCv2/toCv2, softmax, topK, nms, batchedNms, decodeYolo, decodeYoloAnchors e decodeYoloSeg.

O caminho rápido que as tarefas tomam

Os primitivos acima alocam e varrem o buffer inteiro a cada chamada — a forma certa para uma biblioteca, a errada para um laço de vídeo. As tarefas internas usam duas pipelines que fundem esse trabalho num drawImage mais um laço, com o buffer de saída reusado entre frames:

Símbolo O que faz
LetterboxPipeline(w, h, fill?) Redimensiona preservando proporção e preenche o resto, devolvendo { data, scale, padLeft, padTop, reused }. É o que Detector, Segmenter e DetectClassify usam.
ResizePipeline(w, h, mean?, std?) Estica até o alvo (sem padding) e já normaliza, devolvendo { data, reused }. É o que o Classifier usa — ele não mapeia nada de volta para a imagem original, então não há escala nem padding a inverter.
letterboxToTensorData(...) / resizeToTensorData(...) As formas de uma chamada só, para quem não quer manter a pipeline viva.
writePlanarFloat32(rgba, w, h, mean, std, out, stride?) O laço em si: RGBA (ou RGB empacotado, com stride: 3) → float32 planar normalizado.
zeroTensorData(w, h) O tensor zerado que o warmup() alimenta.

release() não é opcional

O buffer de saída é reusado, então run() marca-o como em uso e a chamada seguinte aloca outro em vez de corromper o primeiro. Chame release() depois que a inferência resolveu — a partir daí os valores já estão dentro do heap do WASM.

A saída é bit-idêntica à dos primitivos

Fundir mudou quantas passadas e quantas alocações acontecem, não a aritmética: (valor / 255 - mean) / std é avaliado nessa ordem justamente porque colapsar numa multiplicação-e-soma daria outro arredondamento. Os testes comparam as duas saídas valor a valor.

Fonte da verdade

As assinaturas completas vivem no código-fonte em sdk-js-web/src/. Esta página resume a superfície pública exportada em index.ts.