Avant de commencer
Utilisez la détection d'objets lorsque LaiCai doit trouver où un objet est à l'écran. Le classement de l'image ne répond qu'à ce qu'une image entière contient et ne renvoie pas une boîte de délimitation.
Ce guide vous emmène des captures d'écran brutes à un modèle ONNX compatible LaiCai. Il utilise un jeu réel de petits objets comme exemple travaillé, mais le même processus s'applique aux contrôles d'applications, produits, icônes, outils et autres cibles visibles.

Utilisez la détection d'objets lorsque LaiCai doit trouver où un objet est à l'écran. Le classement de l'image ne répond qu'à ce qu'une image entière contient et ne renvoie pas une boîte de délimitation.
Habituellement oui quand ils apparaissent dans le même jeu ou application, utilisez la même échelle de capture d'écran, et doivent être détectés dans le même flux. Des modèles séparés seulement lorsque les scènes sont sans rapport, la liste de classes devient très grande, ou un groupe a besoin d'une taille d'entrée ou d'une cible de performance différente.
Recueillir les images à partir de l'appareil exact, de la résolution, du niveau de zoom et de la qualité visuelle que LaiCai verra. La diversité importe plus que l'enregistrement de nombreuses images vidéo consécutives qui semblent presque identiques.
Une classe doit représenter une décision visuelle que le Flow doit prendre. Gardez les noms courts, uniques et stables parce que le même ordre est utilisé dansYOLOétiquettes, data.yaml, config.json, et le sélecteur de classe vision.detect.
Si une ressource collectée ressemble encore à la ressource disponible, inscrire les deux états, par exemple le cuivre et le cuivre appauvri. Ne vous attendez pas à ce qu'un seuil de confiance sépare de façon fiable deux états visuels réels.

MakeSense.ai est un outil d'étiquetage gratuit basé sur le navigateur. Pour les modèles LaiCai, choisissez Détection d'objets, utilisez des boîtes rectangulaires et exportezYOLOles annotations. (Object Detection)
Ouvrez MakeSense.ai et téléchargez les images sources. Gardez votre dossier image d'origine; l'étiquette exportée ZIP ne le remplace pas.
Choisissez Détection d'objet, pas reconnaissance d'image. (Object Detection · Image Recognition)
Créez la liste de classes finale dans un ordre fixe, puis dessinez un rectangle autour de chaque instance cible.
Examinez les images vides, les objets manqués, les mauvaises classes et les cases lâches avant d'exporter.
Exporter les rect annotations en tant que paquet ZIP dansYOLOmodèle. (Rect annotations)
Jumelez chaque image avec un fichier d'étiquette .txt du même nom. Séparer par la session d'enregistrement ou la plage de temps, et non par la diffusion aléatoire des images vidéo adjacentes dans le train et la validation.
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: MonsterUne fraction de départ pratique est 80% de train et 20% de validation. L'ensemble de validation doit contenir des scènes réellement invisibles.

L'exemple ci-dessous utilise des versions vérifiées avec ce flux de travail. Un modèle Nano est le point de départ le plus sûr pour la détection continue. Utilisez 640 px pour les objets plus grands et 960 px lorsque les cibles importantes sont petites.
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| Paramètre | Valeur de départ | Pourquoi |
|---|---|---|
model | YOLO26n | Petit et assez rapide pour la première itération. |
imgsz | 960 / 640 | Utilisez 960 pour les petites cibles; utilisez 640 lorsque les cibles sont plus grandes ou que la vitesse est plus importante. |
epochs | 200 | Régle un plafond généreux tandis que l'arrêt anticipé peut finir plus tôt. |
patience | 40 | Arrêts après validation ne s'est pas amélioré pendant 40 époques. |
batch | 8 | Réduire à 4 ou 2 si la mémoire s'épuise; augmenter seulement après la mesure. |
device | mps / 0 / cpu | Apple silicium utilise des mps, NVIDIA utilise 0, et n'importe quelle machine peut utiliser cpu. |
workers | 4 | Un point de départ cross-plateforme conservateur. |
seed | 42 | Il facilite la reproduction des séries de données et des comparaisons de formation. |
close_mosaic | 15 | Désactive la mosaïque près de la fin afin que les dernières époques voient des images plus naturelles. |
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,
)Utilisez le meilleur point de contrôle, inspectez les prévisions sur des captures d'écran invisibles et examinez chaque classe séparément. Un score global élevé peut cacher une classe rare faible.


LaiCai importe ONNX, pas le fichier .pt formation. Exportez une entrée statique NCHW RGB, lot 1, float32 ou float16, et des prédictions brutes d'un à plusieurs pour que LaiCai puisse appliquer le filtrage de confiance et 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,
)Sélectionnez le répertoire lui-même dans la bibliothèque Model de LaiCai. Le répertoire doit contenir config.json et le fichier ONNX nommé par modelFile. Les identifiants de classe doivent commencer à 0 et rester contigus.
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 dit que config.json est manquant ou illisible, vous avez sélectionné un fichier ONNX ou un dossier incomplet. Importez le répertoire complet du modèle et assurez-vous que id2label ou label2id définit chaque classe.
OuvrirLaiCai Flow, allez dans la bibliothèque Model, importez le répertoire préparé, et confirmez que le modèle est marqué Compatible avant de l'utiliser en vision. détecter. (vision.detect)
Enregistrer les images originales,YOLOles étiquettes, la liste des classes, les données. yaml, commande d'entraînement, et best.pt ensemble. Ces fichiers sont votre source réutilisable de données; le fichier ONNX exporté seul ne suffit pas pour un recyclage fiable. (data.yaml)
C'est pas vrai. Étiquetez le nouveau lot, exportez-le et fusionnez-le avec l'ancien jeu de données enregistré hors ligne. Réimportez les anciennes données seulement lorsque vous devez corriger les anciennes annotations.
Oui, mais ajoutez-le après les classes existantes et recartez la nouvelle exportation par nom de classe. Puis reformer sur l'ensemble de données complet afin que les anciennes classes restent représentées.
Les deux états sont visuellement semblables et le modèle n'a pas appris la distinction. Ajouter une classe d'état appauvri distincte ou des exemples durs négatifs vérifiés, puis reformer et revoir la matrice de confusion.
C'est pas vrai. Un seuil peut échanger le rappel contre la précision, mais il ne peut remplacer les classes manquantes, les étiquettes incohérentes, ou confondre des exemples négatifs.
Les commandes et les choix de compatibilité dans ce guide ont été vérifiés par rapport à la documentation officielle actuelle et au contrat modèle LaiCai.
Une fois le modèle compatible, utilisez la vision. détecter de choisir une classe, un seuil et une région d'écran, puis connecter le chemin de succès ou d'échec à la prochaine action de flux. (vision.detect)