Bonjour,
Je pose le problème ici car je recherche plus une solution théorique pour mon problème que du code(ou un algo écrit de A-Z).
Depuis quelque temps je joue à un jeu appelé The division qui est une sorte de FPS-RPG possédant pas mal d'équipement différent. Le problème est que la gestion de l'inventaire in-game est désastreuse, on ne peut pas rechercher des objets par nom ou par "famille".
Ce que je compte faire, c'est un programme au dessus du jeu qui quand on l'active parcours notre équipement et l'enregistre en base.
Suite à cela, il y aurait une petite fenêtre toute simple ou l'on pourrait voir de façon ergonomique notre équipement et faire des recherches textuels..
Voici un screenshot(tiré d'internet) de l'inventaire que je veux parser :
Vous allez me dire que ça semble difficile pour le peu que cela puisse apporter... et vous avez raison
Mais c'est un sujet qui m’intéresse et je pense qu'il y a plusieurs façon de faire possible :
A) Lire la mémoire(RAM) du jeu pour essayer de trouver l'inventaire mais cela me semble difficile, indigeste et pas super "légal".
B) Générer des petites images qui ressemble à l'encadré rouge pour tous les items du jeu (assez facile, fond de couleur unie, avec un texte simple)(On les génère que une fois avec un programme indépendant, ce sont nos échantillons) et faire ce que l'on appelle du template matching : le programme prend un screenshot du jeu et on recherche toutes les images générées dans celui-ci. Donc si il y a 1000 objets, on recherche 1000 petites images dans le screenshot.
=> C'est la solution que j'ai choisie hier soir pour un premier algo sans prise de tête, c'est du brutforce pur et dur mais ça marche. Je vous enverrai le temps que cela prend pour faire 1000 comparaison ce soir, mais de tête ça sera un peu trop long :'( Pour information j'ai utilisé la libraire openCV avec la fonction matchTemplate => http://docs.opencv.org/2.4/doc/tutor..._matching.html
C) Faire une recherche sur la couleur dominante (le orange) et essayer de retracer toute la ligne de l'objet.. extraire l'image et faire de l'OCR dessus
Je ne sais pas encore comment je vais m'y prendre pour cette solution mais c'est celle qui me parait le plus adapté, le plus rapide et le moins gourmand en ressource.
Edit : D) On peut aussi inspecter le réseau pour récupérer l'inventaire vu que c'est un jeu multijoueur. Normalement il est envoyé tôt ou tard et n'est pas sauvegardé dans un fichier en local.. mais après avoir testé avec wireshark, je n'ai aucune idée de la structure des paquets, donc c'est peine perdue pour déchiffrer le contenu
Auriez vous d'autres idées ? Comment feriez vous ?
Je n'ai jamais effectué de reconnaissance d'images ou de reconnaissance de texte donc je suis un peu néophyte.. Mais j'aimerais vraiment comprendre comment faire.
Pour ceux que ça interesse et dans un registre similaire il y a :https://github.com/HearthSim/Hearthstone-Deck-Tracker
Un logiciel qui analyse le jeu et ajouter de overlay. Je n'ai pas eu le temps d'analyser le code encore..
Merci à vous de m'avoir lu jusqu'ici
Partager