Antes de empezar
Use la detección de objetos cuando LaiCai debe encontrar dónde está un objeto en pantalla. La clasificación de imágenes sólo responde lo que una imagen entera contiene y no devuelve una caja de fijación.
Esta guía te lleva desde capturas de pantalla crudas a un modelo ONNX compatible con LaiCai. Utiliza un verdadero conjunto de datos de juego de objetos pequeños como el ejemplo trabajado, pero el mismo proceso se aplica a controles de aplicaciones, productos, iconos, herramientas y otros objetivos visibles.

Use la detección de objetos cuando LaiCai debe encontrar dónde está un objeto en pantalla. La clasificación de imágenes sólo responde lo que una imagen entera contiene y no devuelve una caja de fijación.
Normalmente sí cuando aparecen en el mismo juego o aplicación, usan la misma escala de captura de pantalla, y necesitan ser detectados en el mismo Flujo. Modelos separados sólo cuando las escenas no están relacionadas, la lista de clases se vuelve muy grande, o un grupo necesita un tamaño de entrada diferente o objetivo de rendimiento.
Recoger marcos del dispositivo exacto, resolución, nivel de zoom y calidad visual que LaiCai verá. La diversidad importa más que guardar muchos vídeos consecutivos que parecen casi idénticos.
Una clase debe representar una decisión visual que el Flujo necesita tomar. Mantenga los nombres cortos, únicos y estables porque el mismo orden se utiliza enYOLOetiquetas, data.yaml, config.json, y el selector de clase vision.detect.
Si un recurso recogido aún se asemeja al recurso disponible, etiqueta ambos estados, por ejemplo Copper y CopperDepleted. No espere un umbral de confianza solo para separar fiablemente dos estados visuales reales.

MakeSense.ai es una herramienta de etiquetado basada en el navegador. Para los modelos LaiCai, elija la detección de objetos, utilice cajas rectangulares y exporteYOLOanotaciones. (Object Detection)
Abrir MakeSense.ai y subir las imágenes de origen. Mantenga su carpeta de imagen original; la etiqueta exportada ZIP no la reemplaza.
Elija la detección de objetos, no el reconocimiento de imagen. (Object Detection · Image Recognition)
Crear la lista final de clase en un orden fijo, luego dibujar un rectángulo alrededor de cada instancia de destino.
Revisa imágenes vacías, objetos perdidos, clases erróneas y cajas sueltas antes de la exportación.
Exportar Anotaciones Rect como un paquete ZIP enYOLOformato. (Rect annotations)
Pare cada imagen con un archivo de etiqueta .txt mismo. Dividido por sesión de grabación o rango de tiempo, no por dispersión al azar marcos de vídeo adyacentes a través del tren y validación.
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: MonsterUna división inicial práctica es un 80% de tren y un 20% de validación. El conjunto de validación debe contener escenas genuinamente invisibles.

El ejemplo a continuación utiliza versiones verificadas con este flujo de trabajo. Un modelo Nano es el punto de partida más seguro para la detección continua. Utilice 640 px para objetos más grandes y 960 px cuando objetivos importantes son pequeños.
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 | ¿Por qué? |
|---|---|---|
model | YOLO26n | Lo suficientemente pequeño y rápido para la primera iteración. |
imgsz | 960 / 640 | Utilice 960 para objetivos pequeños; use 640 cuando los objetivos son más grandes o la velocidad importa más. |
epochs | 200 | Establece un techo generoso mientras la parada temprana puede terminar antes. |
patience | 40 | Para después de la validación no ha mejorado para 40 épocas. |
batch | 8 | Reducir a 4 o 2 si la memoria se agota; aumentar sólo después de la medición. |
device | mps / 0 / cpu | Silicona de Apple utiliza mp3, NVIDIA utiliza 0, y cualquier máquina puede usar cpu. |
workers | 4 | Un punto de partida conservador multiplataforma. |
seed | 42 | Hace más fácil reproducir las comparaciones de dataset y training. |
close_mosaic | 15 | Mosaico deshabilitado cerca del final para que las épocas finales vean más imágenes naturales. |
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,
)Utilice el mejor puesto de control, inspeccionar las predicciones sobre capturas de pantalla no vistas, y revisar cada clase por separado. Una puntuación global alta puede ocultar una clase rara débil.


LaiCai importa ONNX, no el archivo de entrenamiento .pt. Exportar una entrada estática NCHW RGB, lote 1, flota32 o flotador16, y predicciones crudas de uno a muchos para que LaiCai pueda aplicar filtro de confianza y NMS. (float32 · float16)
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,
)Seleccione el directorio en la biblioteca modelo de LaiCai. El directorio debe contener config.json y el archivo ONNX llamado por modelFile. Los ID de clase deben comenzar a 0 y permanecer contiguos.
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
}
}Si LaiCai dice que config.json falta o no está legible, seleccionó un archivo ONNX o una carpeta incompleta. Importar el directorio modelo completo y asegurarse de que id2label o label2id define cada clase.
AbiertoLaiCai Flow, vaya a la biblioteca modelo, importar el directorio preparado y confirme que el modelo está marcado Compatible antes de utilizarlo en la visión. Detectar. (vision.detect)
Guarda las imágenes originales,YOLOetiquetas, lista de clases, datos. Yaml, comando de entrenamiento, y mejor.pt juntos. Estos archivos son su fuente de conjunto de datos reutilizable; el archivo ONNX exportado por sí solo no es suficiente para una reeducación confiable. (data.yaml · best.pt)
No. Etiquetar el nuevo lote, exportarlo y fusionarlo con el antiguo dataset guardado fuera de línea. Reimportar datos antiguos sólo cuando necesite corregir anotaciones antiguas.
Sí, pero apréndelo después de las clases existentes y remapa la nueva exportación por nombre de clase. Luego reentrenamiento en el conjunto de datos completo para que las viejas clases permanezcan representadas.
Los dos estados son visualmente similares y el modelo no ha aprendido la distinción. Agregue una clase de estado agotado separada o verifique ejemplos duro-negativos, luego vuelva a entrenar y revisar la matriz de confusión.
No. Un umbral puede cambiar de memoria por precisión, pero no puede sustituir las clases desaparecidas, etiquetas inconsistentes o ejemplos negativos confusos.
Los comandos y las opciones de compatibilidad en esta guía se revisaron contra la documentación oficial actual y el contrato modelo LaiCai.
Después de que el modelo sea compatible, utilice la visión. detectar para elegir una región de clase, umbral y pantalla, luego conectar el éxito o el camino de fracaso a la siguiente acción de flujo. (vision.detect)