Antes de começar
Use a detecção de objetos quando LaiCai deve encontrar onde um objeto está na tela. A classificação das imagens só responde ao que uma imagem inteira contém e não devolve uma caixa delimitadora.
Este guia leva você de imagens cruas para um modelo ONNX compatível com o LaiCai. Ele usa um verdadeiro conjunto de dados de jogos de pequenos objetos como o exemplo trabalhado, mas o mesmo processo se aplica a controles de aplicativos, produtos, ícones, ferramentas e outros alvos visíveis.

Use a detecção de objetos quando LaiCai deve encontrar onde um objeto está na tela. A classificação das imagens só responde ao que uma imagem inteira contém e não devolve uma caixa delimitadora.
Normalmente sim quando eles aparecem no mesmo jogo ou aplicativo, use a mesma escala de captura de tela, e precisa ser detectado no mesmo fluxo. Modelos separados apenas quando as cenas não estão relacionadas, a lista de classes torna-se muito grande, ou um grupo precisa de um tamanho de entrada diferente ou alvo de desempenho.
Colete quadros do dispositivo exato, resolução, nível de zoom e qualidade visual que a LaiCai verá. Diversidade importa mais do que salvar muitos quadros de vídeo consecutivos que parecem quase idênticos.
Uma classe deve representar uma decisão visual que o Flow precisa fazer. Mantenha os nomes curtos, únicos e estáveis porque a mesma ordem é usada emYOLOetiquetas, data.yaml, config.json e o seletor de classe vision.detecte.
Se um recurso coletado ainda se assemelha ao recurso disponível, rotule ambos os estados, por exemplo Copper e CopperDepleted. Não espere um limiar de confiança sozinho para separar de forma confiável dois estados visuais reais.

MakeSense.ai é uma ferramenta de rotulagem gratuita baseada em navegador. Para modelos LaiCai, escolha Detecção de Objetos, use caixas retangulares e exporteYOLOAnotações. (Object Detection)
Abra MakeSense.ai e faça upload das imagens de origem. Mantenha sua pasta de imagem original; a etiqueta exportada ZIP não a substitui.
Escolha a Detecção de Objectos, não o Reconhecimento de Imagens. (Object Detection · Image Recognition)
Crie a lista de classes final em uma ordem fixa, em seguida, desenhe um retângulo em torno de cada instância alvo.
Reveja imagens vazias, objetos perdidos, classes erradas e caixas soltas antes de exportar.
Exportar anotações Rect como um pacote ZIPYOLOformato. (Rect annotations)
Emparelhe cada imagem com um arquivo de etiqueta .txt com o mesmo nome. Dividir por gravação de sessão ou intervalo de tempo, não espalhando aleatoriamente quadros de vídeo adjacentes através do trem e validação.
dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yamlpath: /absolute/path/to/dataset
train: images/train
val: images/val
names:
0: Copper
1: CopperDepleted
2: Wood
3: MonsterUma divisão de partida prática é 80% trem e 20% validação. O conjunto de validação deve conter cenas genuinamente invisíveis.

O exemplo abaixo usa versões verificadas com este fluxo de trabalho. Um modelo Nano é o ponto de partida mais seguro para detecção contínua. Use 640 px para objetos maiores e 960 px quando alvos importantes são pequenos.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install ultralytics==8.4.138 onnx==1.22.0 \
onnxruntime==1.29.0 onnxslim==0.1.96| Parâmetro | Valor inicial | Porquê? |
|---|---|---|
model | YOLO26n | Pequeno e rápido o suficiente para a primeira iteração. |
imgsz | 960 / 640 | Use 960 para alvos pequenos; use 640 quando os alvos são maiores ou a velocidade importa mais. |
epochs | 200 | Define um teto generoso enquanto a parada precoce pode terminar mais cedo. |
patience | 40 | Paradas após a validação não melhorou para 40 épocas. |
batch | 8 | Reduza para 4 ou 2 se a memória acabar; aumente apenas após a medição. |
device | mps / 0 / cpu | O silicone da Apple usa mps, NVIDIA usa 0 e qualquer máquina pode usar cpu. |
workers | 4 | Um ponto de partida conservador entre plataformas. |
seed | 42 | Torna as comparações de dados e treinamento mais fáceis de reproduzir. |
close_mosaic | 15 | Desabilita mosaico perto do fim para que as épocas finais vejam mais imagens naturais. |
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="dataset/data.yaml",
imgsz=960,
epochs=200,
patience=40,
batch=8,
device="mps", # NVIDIA: 0 · CPU: "cpu"
workers=4,
seed=42,
close_mosaic=15,
)Use o melhor ponto de controle, inspecione previsões em capturas de tela invisíveis e reveja cada classe separadamente. Uma pontuação global elevada pode esconder uma classe rara fraca.


LaiCai importa ONNX, não o arquivo .pt de treinamento. Exportar uma entrada estática NCHW RGB, lote 1, float32 ou float16, e previsões brutas de uma para muitas para que LaiCai possa aplicar filtragem de confiança e NMS.
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(
format="onnx",
imgsz=960,
batch=1,
dynamic=False,
simplify=True,
nms=None,
)Selecione o diretório em si na biblioteca Modelo de LaiCai. O diretório deve conter config.json e o arquivo ONNX nomeado pelo modelFile. Os IDs da classe devem começar em 0 e permanecer contíguos.
game-objects/
├── config.json
└── model.onnx{
"id": "game-objects-v1",
"name": "Game Objects v1",
"type": "yolo",
"modelFile": "model.onnx",
"outputFormat": "raw_yolo_no_objectness",
"id2label": {
"0": "Copper",
"1": "CopperDepleted",
"2": "Wood",
"3": "Monster"
},
"label2id": {
"Copper": 0,
"CopperDepleted": 1,
"Wood": 2,
"Monster": 3
}
}Se LaiCai diz config.json está faltando ou ilegível, você selecionou um arquivo ONNX ou uma pasta incompleta. Importar o diretório completo do modelo e certificar-se de id2label ou label2id define cada classe.
AbrirLaiCai Flow, vá para Model library, importe o diretório preparado, e confirme que o modelo está marcado Compatível antes de usá-lo em visão. detectar. (vision.detect)
Gravar as imagens originais,YOLOetiquetas, lista de classes, dados. yaml, comando de treino, e best.pt juntos. Estes arquivos são sua fonte de conjunto de dados reutilizável; o arquivo ONNX exportado sozinho não é suficiente para reciclagem confiável. (data.yaml)
Não. Rotular o novo lote, exportá-lo e fundi-lo com o conjunto de dados antigo gravado offline. Reimportar dados antigos apenas quando você precisa corrigir anotações antigas.
Sim, mas anexá-lo após as classes existentes e remapear a nova exportação pelo nome da classe. Em seguida, retreine no conjunto de dados completo para que as classes antigas permaneçam representadas.
Os dois estados são visualmente semelhantes e o modelo não aprendeu a distinção. Adicione uma classe de estado empobrecido separado ou exemplos hard-negativos verificados, então retreine e reveja a matriz de confusão.
Não. Um limiar pode trocar memória por precisão, mas não pode substituir classes em falta, rótulos inconsistentes ou exemplos negativos confusos.
Os comandos e as escolhas de compatibilidade neste guia foram verificados com base na documentação oficial atual e no contrato do modelo LaiCai.
Após o modelo ser compatível, use a visão. detectar para escolher uma classe, limiar e região de tela, em seguida, conectar o caminho de sucesso ou falha para a próxima ação Flow. (vision.detect)