Analyse d'une image
Fermé
Terence
-
14 oct. 2020 à 13:50
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 17 déc. 2020 à 12:02
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 17 déc. 2020 à 12:02
A voir également:
- Analyse d'une image
- Image iso - Guide
- Analyse disque dur - Télécharger - Informations & Diagnostic
- Comment agrandir une image - Guide
- Acronis true image - Télécharger - Sauvegarde
- Analyse composant pc - Guide
49 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
14 oct. 2020 à 17:03
14 oct. 2020 à 17:03
Bonjour Terence,
Si j'ai bien compris:
_ Tu débutes en programmation ?
_ Le prof vous a donné des images d'un jeu de cartes ?
_ Il vous demande vraiment de faire de la reconnaissance d'image ?
Pour débuter, il me semble qu'il y a des exercices plus faciles !
C'est vraiment ça ?
Si j'ai bien compris:
_ Tu débutes en programmation ?
_ Le prof vous a donné des images d'un jeu de cartes ?
_ Il vous demande vraiment de faire de la reconnaissance d'image ?
Pour débuter, il me semble qu'il y a des exercices plus faciles !
C'est vraiment ça ?
Bonjour Phil,
Oui c’est ça. Après dans ma classe certains sont déjà avancé en programmation, ce qui n’est pas mon cas. C’est pour ça qu’il a dit qu’il ne mettait que les cartes de 1 à 10.
Il nous a bien fourni un jeu de carte en image oui.
D’après lui c’est très simple et basique comme genre de code
Oui c’est ça. Après dans ma classe certains sont déjà avancé en programmation, ce qui n’est pas mon cas. C’est pour ça qu’il a dit qu’il ne mettait que les cartes de 1 à 10.
Il nous a bien fourni un jeu de carte en image oui.
D’après lui c’est très simple et basique comme genre de code
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 14 oct. 2020 à 18:03
Modifié le 14 oct. 2020 à 18:03
Je serais curieux de voir ce que ca donne ...
Pour moi, reconnaissance d'image = IA avec réseau de neurones et tout ...
Pour moi, reconnaissance d'image = IA avec réseau de neurones et tout ...
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
346
14 oct. 2020 à 18:55
14 oct. 2020 à 18:55
Bonjour,
Je vous avoue que je suis tout aussi étonné que Phil_1857 qu'on vous demande de faire de la reconnaissance d'image alors que vous débutez en programmation. Il s'agit à priori d'une tache d'intelligence artificielle donc c'est un sujet assez complexe.
Après le problème est peut-être plus simple que ce qu'il n'y parait, tout dépend des images qui vous ont été fournis. S'il s'agit de photos, alors je ne pourrais pas vous aider et je vous conseille de chercher des exercices plus facile pour commencer.
Si ce sont des images qui ont été généré numériquement, c'est à dire où tous les trèfles par exemple sont exactement les mêmes au pixel prêt et placés exactement au même endroit au pixel prêt, et si on ne vous demande pas que l'algorithme fonctionne pour des images inconnues, alors votre approche peut fonctionner.
Pour le symbole, vous pouvez chercher quelques pixels qui vous permettent à partir de la couleur de ces seuls pixels, de trouver la couleur (pique, carreur, coeur trèfle) de la carte.
Pour déterminer le numéro de la carte, votre solution peut peut-être fonctionner, mais j'imagine que ça dépend de comment sont les images exactement. Si le numéro affiché est de la même couleur que les symboles, alors la surface du chiffre va être comptabilisée et pourra fausser les résultats. Mais encore une fois, ça dépends des images qui vous ont été données, rien de vous empêche d'essayer.
Sinon, une idée que j'ai, qui est plus compliqué, mais qui pourrait fonctionner dans le cas où votre première méthode ne fonctionnerait pas : vous pouvez faire comme pour l'analyse du symbole. Vous prennez quelques pixels qui vous permettent, à eux seuls, de déterminer le numéro de la carte. Si je prends un exemple avec uniquement des 1 et des 2, vous pouvez regarder le pixel au centre de la carte et les 2 pixels qui sont aux centre des symboles lorsque qu'il y en a 2, et en fonction des quels sont blancs, rouges, ou noirs, vous devriez pouvoir determiner s'il s'agit d'un 1 ou un 2.
Il faut généraliser ça avec les 10 numéros.
Bon, je ne sais pas ce que vous appellez débutant exactement.
Je ne trouve pas que ce soit un algorithme très simple quand même, mais étant donné que ça correspond plus ou moins à ce que vous avez proposé, je me dis que vous avez peut-être le niveau pour le réaliser. Ça reste quand même infiniment plus simple que de la "vrai" reconnaissance d'image.
Je vous avoue que je suis tout aussi étonné que Phil_1857 qu'on vous demande de faire de la reconnaissance d'image alors que vous débutez en programmation. Il s'agit à priori d'une tache d'intelligence artificielle donc c'est un sujet assez complexe.
Après le problème est peut-être plus simple que ce qu'il n'y parait, tout dépend des images qui vous ont été fournis. S'il s'agit de photos, alors je ne pourrais pas vous aider et je vous conseille de chercher des exercices plus facile pour commencer.
Si ce sont des images qui ont été généré numériquement, c'est à dire où tous les trèfles par exemple sont exactement les mêmes au pixel prêt et placés exactement au même endroit au pixel prêt, et si on ne vous demande pas que l'algorithme fonctionne pour des images inconnues, alors votre approche peut fonctionner.
Pour le symbole, vous pouvez chercher quelques pixels qui vous permettent à partir de la couleur de ces seuls pixels, de trouver la couleur (pique, carreur, coeur trèfle) de la carte.
Pour déterminer le numéro de la carte, votre solution peut peut-être fonctionner, mais j'imagine que ça dépend de comment sont les images exactement. Si le numéro affiché est de la même couleur que les symboles, alors la surface du chiffre va être comptabilisée et pourra fausser les résultats. Mais encore une fois, ça dépends des images qui vous ont été données, rien de vous empêche d'essayer.
Sinon, une idée que j'ai, qui est plus compliqué, mais qui pourrait fonctionner dans le cas où votre première méthode ne fonctionnerait pas : vous pouvez faire comme pour l'analyse du symbole. Vous prennez quelques pixels qui vous permettent, à eux seuls, de déterminer le numéro de la carte. Si je prends un exemple avec uniquement des 1 et des 2, vous pouvez regarder le pixel au centre de la carte et les 2 pixels qui sont aux centre des symboles lorsque qu'il y en a 2, et en fonction des quels sont blancs, rouges, ou noirs, vous devriez pouvoir determiner s'il s'agit d'un 1 ou un 2.
Il faut généraliser ça avec les 10 numéros.
Bon, je ne sais pas ce que vous appellez débutant exactement.
Je ne trouve pas que ce soit un algorithme très simple quand même, mais étant donné que ça correspond plus ou moins à ce que vous avez proposé, je me dis que vous avez peut-être le niveau pour le réaliser. Ça reste quand même infiniment plus simple que de la "vrai" reconnaissance d'image.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 09:38
15 oct. 2020 à 09:38
Bonjour,
Merci pour vos réponses.
Alors pour être plus clair, nous avons ce genre d'image .
Et à partir de là il faut réaliser un code qui permettrait d'identifier la carte.
Mon niveau en programmation est de 0. Je connais un peu les boucles etc mais niveau algorithmique. Lorsqu'il s'agit de traduire dans un langage j'ai beaucoup de mal. Je ne suis pas développeur mais malheureusement dans les études informatique on n'y échappe pas.
Merci pour vos réponses.
Alors pour être plus clair, nous avons ce genre d'image .
Et à partir de là il faut réaliser un code qui permettrait d'identifier la carte.
Mon niveau en programmation est de 0. Je connais un peu les boucles etc mais niveau algorithmique. Lorsqu'il s'agit de traduire dans un langage j'ai beaucoup de mal. Je ne suis pas développeur mais malheureusement dans les études informatique on n'y échappe pas.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 15 oct. 2020 à 13:42
Modifié le 15 oct. 2020 à 13:42
Bonjour T-rence,
Déjà, si il n'y a que les cartes de 1 à 10, cela simplifie le problème: il ne peut y avoir que 2 couleurs sur une carte, le blanc du fond et le rouge ou le noir des figures
Donc si les chiffres que tu affiches représentent les 3 composantes Rouge, Vert, Bleu de la couleur du pixel, tu peux chercher si il y a au moins 1 pixel rouge ou 1 noir, en dehors du blanc
Par contre, pour le type de figure, (trèfle, cœur,...), et le chiffre, c'est un peu moins simple ...
Pour le chiffre, on peut peut être compter la quantité de pixels noirs ou rouges, vu que sur le 10 de carreau, par exemple, il y a une surface de rouge plus grande que sur l'as
Moi je ferai d'abord un petit programme de test pour analyser les cartes une par une et donc récupérer le nombre de pixels de couleur de chacune, ce qui donnerait une liste de 10 entiers par figure qui servirait ensuite dans le programme définitif pour connaitre le chiffre d'une carte donnée
exemple : liste_trefle = [3250,4520,6585,8674, .....]
Exemple: tu a déterminé que c'est une carte rouge, et tu a le nb total de pixels rouges, donc tu cherches dans liste_carreau et dans liste_coeur un nb de pixels qui correspond
Si le nb est le 5eme de la liste liste_carreau, c'est donc un 5 de carreau
Déjà, si il n'y a que les cartes de 1 à 10, cela simplifie le problème: il ne peut y avoir que 2 couleurs sur une carte, le blanc du fond et le rouge ou le noir des figures
Donc si les chiffres que tu affiches représentent les 3 composantes Rouge, Vert, Bleu de la couleur du pixel, tu peux chercher si il y a au moins 1 pixel rouge ou 1 noir, en dehors du blanc
Par contre, pour le type de figure, (trèfle, cœur,...), et le chiffre, c'est un peu moins simple ...
Pour le chiffre, on peut peut être compter la quantité de pixels noirs ou rouges, vu que sur le 10 de carreau, par exemple, il y a une surface de rouge plus grande que sur l'as
Moi je ferai d'abord un petit programme de test pour analyser les cartes une par une et donc récupérer le nombre de pixels de couleur de chacune, ce qui donnerait une liste de 10 entiers par figure qui servirait ensuite dans le programme définitif pour connaitre le chiffre d'une carte donnée
exemple : liste_trefle = [3250,4520,6585,8674, .....]
Exemple: tu a déterminé que c'est une carte rouge, et tu a le nb total de pixels rouges, donc tu cherches dans liste_carreau et dans liste_coeur un nb de pixels qui correspond
Si le nb est le 5eme de la liste liste_carreau, c'est donc un 5 de carreau
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 13:41
15 oct. 2020 à 13:41
Bonjour Phil,
Merci pour ta réponse.
Oui voilà c'est à peu près le style d'idées que j'avais. Maintenant c'est surtout pour retranscrire en langage python qui va être compliqué.
Est-ce que tu aurais des pistes vis-à-vis du code ? J'ai beau cherché sur le net mais je ne trouve pas vraiment de documentation qui ressemblerais à ce genre de choses.
J'ai une assez bonne logique dans l'analyse mais dès qu'il s'agit d'être technique c'est un peu plus compliqué pour moi.
Merci en tout cas de ton aide
Merci pour ta réponse.
Oui voilà c'est à peu près le style d'idées que j'avais. Maintenant c'est surtout pour retranscrire en langage python qui va être compliqué.
Est-ce que tu aurais des pistes vis-à-vis du code ? J'ai beau cherché sur le net mais je ne trouve pas vraiment de documentation qui ressemblerais à ce genre de choses.
J'ai une assez bonne logique dans l'analyse mais dès qu'il s'agit d'être technique c'est un peu plus compliqué pour moi.
Merci en tout cas de ton aide
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
15 oct. 2020 à 13:56
15 oct. 2020 à 13:56
for x in range(carte.width): for y in range(carte.height): print(pixel[x,y])
Avec ça, on analyse toute la surface
Ensuite, à toi de dire ce que représentent les chiffres qui s'affichent, personnellement, je ne connais ni
numpy ni matplotlib, ni PIL ...
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 14:02
15 oct. 2020 à 14:02
Les chiffres qui s'affichent (255 255 255 par exemple) représente les couleurs à un pixel donné. 255 255 255 étant le blanc et 0 0 0 le noir.
Ok donc si je comprend ton code, on a deux boucles et chacune analyse un pixel sur la longueur et la largeur.
A partir de ce moment là est- ce que l'on peut faire une "comparaison" ou une déduction qui serait:
Si au moins un pixel de la carte est rouge alors la carte est soit du carreau soit du coeur
Si non c'est soit du trèfle soit du pique ?
Je sais pas si tu vois ce que je veux dire
Ok donc si je comprend ton code, on a deux boucles et chacune analyse un pixel sur la longueur et la largeur.
A partir de ce moment là est- ce que l'on peut faire une "comparaison" ou une déduction qui serait:
Si au moins un pixel de la carte est rouge alors la carte est soit du carreau soit du coeur
Si non c'est soit du trèfle soit du pique ?
Je sais pas si tu vois ce que je veux dire
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 15 oct. 2020 à 14:29
Modifié le 15 oct. 2020 à 14:29
"Ok donc si je comprend ton code, on a deux boucles et chacune analyse un pixel sur la longueur et la largeur."
on a 2 boucles pour extraire un pixel de coordonnées x,y, donc on parcourt toute la surface, dans ton exemple, tu ne parcours que la ligne en y 50
C'est quoi le 4eme chiffre qui s'affiche:
il n'y a pas que 255,255,255, mais un 4eme chiffre au bout ...
Enfin, si les 3 1ers chiffres sont la couleur, alors au lieu du print, on peut écrire:
En fin de boucle rouge = nb de pixels rouges et noir = nb de pixels noirs
on a 2 boucles pour extraire un pixel de coordonnées x,y, donc on parcourt toute la surface, dans ton exemple, tu ne parcours que la ligne en y 50
C'est quoi le 4eme chiffre qui s'affiche:
il n'y a pas que 255,255,255, mais un 4eme chiffre au bout ...
Enfin, si les 3 1ers chiffres sont la couleur, alors au lieu du print, on peut écrire:
noir = 0 rouge = 0 for x in range(carte.width): for y in range(carte.height): if(pixel[x,y][0:3] == (0,0,0)): noir += 1 elif(pixel[x,y][0:3] == (255,0,0)): rouge += 1
En fin de boucle rouge = nb de pixels rouges et noir = nb de pixels noirs
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 14:45
15 oct. 2020 à 14:45
Je viens de remarquer qu'il y avait 4 valeurs. Je suppose donc que c'est du RGBa.
J'ai changé dans mon exemple j'ai analyser toute la carte comme tu dis. Du coup j'ai essayé de modifier ton code
blanc = 0
couleur = 0
for x in range(carte.width):
for y in range(carte.height):
if(pixel[x,y][0:3] == (255,255,255)):
blanc += 1
elif(pixel[x,y][0:3] =/= (255,255,255)):
couleur += 1
Ce qui pourrait nous donner un pourcentage de couleur sur la carte et à partir d'un tableau déterminer le chiffre présent sur la carte en comparant les pourcentages ?
Je sais pas ce que tu en pense.
J'ai changé dans mon exemple j'ai analyser toute la carte comme tu dis. Du coup j'ai essayé de modifier ton code
blanc = 0
couleur = 0
for x in range(carte.width):
for y in range(carte.height):
if(pixel[x,y][0:3] == (255,255,255)):
blanc += 1
elif(pixel[x,y][0:3] =/= (255,255,255)):
couleur += 1
Ce qui pourrait nous donner un pourcentage de couleur sur la carte et à partir d'un tableau déterminer le chiffre présent sur la carte en comparant les pourcentages ?
Je sais pas ce que tu en pense.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
>
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 15:43
15 oct. 2020 à 15:43
Rectification:
Pourquoi s'occuper du blanc et du pourcentage ?
Si il y a 1 pixel rouge, la carte est rouge si il y a 1 pixel noir, la carte est noire
En fin de boucle tu as le nombre de pixels (rouges ou noirs) pour une carte
Tu peux donc faire ca pour toutes les cartes et remplir 4 listes :
pixels_trefle = [25402, 36548, ...] (le 1er chiffre pour le 1, le 2eme pour le 2, ....jusqu'a 10)
pixels_pique = [.......]
pixels_coeur = [......]
pixels_carreau = [.....]
Ensuite, pour déterminer une carte, je compte le nb de pixels (rouges ou noirs) et si ce nb correspond à
un chiffre de l'une des listes, par exemple le 2eme de pixels_pique, alors c'est un 2 de pique ...
noir = 0 rouge = 0 for x in range(carte.width): for y in range(carte.height): if(pixel[x,y][0:4] == [0,0,0]): noir += 1 elif(pixel[x,y][0:4] == [255,0,0]): rouge += 1
Pourquoi s'occuper du blanc et du pourcentage ?
Si il y a 1 pixel rouge, la carte est rouge si il y a 1 pixel noir, la carte est noire
En fin de boucle tu as le nombre de pixels (rouges ou noirs) pour une carte
Tu peux donc faire ca pour toutes les cartes et remplir 4 listes :
pixels_trefle = [25402, 36548, ...] (le 1er chiffre pour le 1, le 2eme pour le 2, ....jusqu'a 10)
pixels_pique = [.......]
pixels_coeur = [......]
pixels_carreau = [.....]
Ensuite, pour déterminer une carte, je compte le nb de pixels (rouges ou noirs) et si ce nb correspond à
un chiffre de l'une des listes, par exemple le 2eme de pixels_pique, alors c'est un 2 de pique ...
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
>
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
15 oct. 2020 à 15:47
15 oct. 2020 à 15:47
Ah oui je vois ce que tu veux dire. En faite, c'est un peu comme mon idée avec les pourcentages mais la par rapport au nombre de pixels. En gros si tu as tant de pixels noir alors ta carte est le 4 de pique par exemple.
Là aussi je devrais donc créer des tableaux pour pouvoir comparer ma valeur et me dire c'est telle carte
Là aussi je devrais donc créer des tableaux pour pouvoir comparer ma valeur et me dire c'est telle carte
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
>
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
Modifié le 15 oct. 2020 à 15:58
Modifié le 15 oct. 2020 à 15:58
ben oui pas besoin de pourcentages, et tu as directement la forme et la valeur:
10 de trèfle
idem avec if(noir != 0):
10 de trèfle
#Carte a analyser: noir = 0 rouge = 0 for x in range(carte.width): for y in range(carte.height): if(pixel[x,y][0:4] == [0,0,0]): noir += 1 elif(pixel[x,y][0:4] == [255,0,0]): rouge += 1 if(rouge != 0): for k in range(len(pixels_coeur)): if(pixels_coeur[k] == rouge): print('''C'est un {} de coeur'''.format(k)) for k in range(len(pixels_carreau)): if(pixels_carreau[k] == rouge): print('''C'est un {} de carreau'''.format(k))
idem avec if(noir != 0):
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
>
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
15 oct. 2020 à 15:56
15 oct. 2020 à 15:56
Oui mais je crois que le soucis ici, c'est que c'est grâce à une analyse de chaque carte que j'ai fait au préalable qui peut me permettre ce genre de résultat. Alors que normalement on est capable d'identifier la forme grâce à un bout de code aussi. Je sais pas si je m'exprime correctement.
Mais je pense faire comme tu proposes parce que ça m'a l'air rapide et efficace. Et comme je ne peux pas me lancer dans plus complexe car j'en ai pas le niveau je vais essayer de coder un truc dans la soirée en sortant des cours.
Mais je vais partir de ce que tu m'as envoyé. Je te remercie beaucoup pour ton aide. Je reviendrais dans la soirée pour te montrer un peu ce que j'ai fait si tu le veux bien
Mais je pense faire comme tu proposes parce que ça m'a l'air rapide et efficace. Et comme je ne peux pas me lancer dans plus complexe car j'en ai pas le niveau je vais essayer de coder un truc dans la soirée en sortant des cours.
Mais je vais partir de ce que tu m'as envoyé. Je te remercie beaucoup pour ton aide. Je reviendrais dans la soirée pour te montrer un peu ce que j'ai fait si tu le veux bien
015648974
Messages postés
1
Date d'inscription
jeudi 15 octobre 2020
Statut
Membre
Dernière intervention
15 octobre 2020
15 oct. 2020 à 14:59
15 oct. 2020 à 14:59
Fait un tableau avec les % de couleur de chaque carte en premier :
pctCouleurCarte = [0]*10
Tu devras remplir le tableau dans ton code quand tu auras récupérer le % de couleur de chaque carte
Du coup avant d'avoir rempli les 10 valeurs, ton programme pourra juste te donner le % de couleur et pas trouver la carte
Rajoute avant ta boucle :
nbPixels = carte.width * carte.height
Après la boucle :
pctCouleur = (blanc / nbPixels) * 100
Quand ton tableau pctCouleurCarte est rempli :
for i in range (0,10) :
if pctCouleurCarte[i] == pctCouleur
print "La carte est la Carte " + i
pctCouleurCarte = [0]*10
Tu devras remplir le tableau dans ton code quand tu auras récupérer le % de couleur de chaque carte
Du coup avant d'avoir rempli les 10 valeurs, ton programme pourra juste te donner le % de couleur et pas trouver la carte
Rajoute avant ta boucle :
nbPixels = carte.width * carte.height
Après la boucle :
pctCouleur = (blanc / nbPixels) * 100
Quand ton tableau pctCouleurCarte est rempli :
for i in range (0,10) :
if pctCouleurCarte[i] == pctCouleur
print "La carte est la Carte " + i
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
15 oct. 2020 à 15:43
15 oct. 2020 à 15:43
Yes donc là je pense que grâce au code de Phil, je peux avoir l'info sur la couleur ce qui élimine une première étape du problème.
Et grâce au tableau de pourcentage je peux avoir le numéro de la carte.
Il me manquerait alors seulement la forme. Et là je pense qu'il faudrait superposer des pixels à partir d'une couleur. Quand on sait que c'est du rouge on superpose un même pixel sur une carte de carreau et de coeur et c'est ce qui nous donnerait la forme.
Et grâce au tableau de pourcentage je peux avoir le numéro de la carte.
Il me manquerait alors seulement la forme. Et là je pense qu'il faudrait superposer des pixels à partir d'une couleur. Quand on sait que c'est du rouge on superpose un même pixel sur une carte de carreau et de coeur et c'est ce qui nous donnerait la forme.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 15 oct. 2020 à 15:48
Modifié le 15 oct. 2020 à 15:48
avec ma méthode, pas besoin de pourcentage, et il ne manque pas la forme
on obtient directement : 10 de trèfle, par exemple
(voir ma réponse de 15h43)
on obtient directement : 10 de trèfle, par exemple
(voir ma réponse de 15h43)
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
Modifié le 5 nov. 2020 à 17:24
Modifié le 5 nov. 2020 à 17:24
Bonjour,
Je reviens vers vous pour le même problème. La solution a été acceptée, mais on m'a rajouté une contrainte qui serait si on zoom ou alors si on fait une rotation de la carte il faut que le programme la reconnaisse.
Pour ça j'ai juste le droit d'utiliser des librairies qui permettent la rotation ou le zoom.
Avec le code que l'on a déjà, je pense que pour la rotation ça ne devrait pas poser de soucis. Mais pour ce qui est du zoom je pense que le code ne fonctionnerait pas.
Merci pour votre aide
Je reviens vers vous pour le même problème. La solution a été acceptée, mais on m'a rajouté une contrainte qui serait si on zoom ou alors si on fait une rotation de la carte il faut que le programme la reconnaisse.
Pour ça j'ai juste le droit d'utiliser des librairies qui permettent la rotation ou le zoom.
Avec le code que l'on a déjà, je pense que pour la rotation ça ne devrait pas poser de soucis. Mais pour ce qui est du zoom je pense que le code ne fonctionnerait pas.
Merci pour votre aide
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
149
11 nov. 2020 à 01:28
11 nov. 2020 à 01:28
Salut,
Si la consigne est exactement "si on zoom ou alors si on fait une rotation de la carte il faut que le programme la reconnaisse"
Cela signifie qu'à l'ouverture du programme la carte n'est ni zoomée, ni orientée autrement que par son orientation par défaut. Dans ce cas, après avoir écrit l'algorithme de reconnaissance en condition normale, tu ajoutes un dictionnaire
Ensuite, qu'on zoome ou oriente la carte, il suffit de récupérer l'association clé-valeur correspondante.
Évidemment, ça ne marche pas si on ajoute une image de carte orientée ou zoomée dans le programme.
Si la consigne est exactement "si on zoom ou alors si on fait une rotation de la carte il faut que le programme la reconnaisse"
Cela signifie qu'à l'ouverture du programme la carte n'est ni zoomée, ni orientée autrement que par son orientation par défaut. Dans ce cas, après avoir écrit l'algorithme de reconnaissance en condition normale, tu ajoutes un dictionnaire
image_carte_dict = {"/chemin/de/1/trèfle.png": "as de trèfle", ...}
Ensuite, qu'on zoome ou oriente la carte, il suffit de récupérer l'association clé-valeur correspondante.
Évidemment, ça ne marche pas si on ajoute une image de carte orientée ou zoomée dans le programme.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
>
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
11 nov. 2020 à 10:32
11 nov. 2020 à 10:32
Bonjour Dachiasse,
non en fait ce n'est pas exactement ça
on a déjà 4 listes (une par figure) contenant les nombres de pixels pour chaque carte de l'as à 10
on affiche une carte, on compte les pixels (rouges ou noirs), et l'on retrouve ce nombre de pixels dans une des listes, ce qui permet d'afficher: "c'est un 2 de trèfle", par exemple
Nouvelle étape : on affiche une carte, on la tourne de 40 degrés (par exemple)
Donc, même processus:
Compter les pixels, afficher le nom de la carte ...
non en fait ce n'est pas exactement ça
on a déjà 4 listes (une par figure) contenant les nombres de pixels pour chaque carte de l'as à 10
on affiche une carte, on compte les pixels (rouges ou noirs), et l'on retrouve ce nombre de pixels dans une des listes, ce qui permet d'afficher: "c'est un 2 de trèfle", par exemple
Nouvelle étape : on affiche une carte, on la tourne de 40 degrés (par exemple)
Donc, même processus:
Compter les pixels, afficher le nom de la carte ...
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
5 nov. 2020 à 17:27
5 nov. 2020 à 17:27
Bonjour T-Rence,
Tu veux dire que le zoom change le nombre de pixels
Si tu connais le facteur de zoom, tu multiplies le nombre de pixels (noirs ou rouges) trouvés sur
la carte à tester par ce facteur et ca te donnes normalement une valeur de l'une des 4 listes
définies (pixels_trefle, etc ...)
Exemple: zoom = 2, on divise par 2, zoom = 0.5, on multiplie par 2
Tu veux dire que le zoom change le nombre de pixels
Si tu connais le facteur de zoom, tu multiplies le nombre de pixels (noirs ou rouges) trouvés sur
la carte à tester par ce facteur et ca te donnes normalement une valeur de l'une des 4 listes
définies (pixels_trefle, etc ...)
Exemple: zoom = 2, on divise par 2, zoom = 0.5, on multiplie par 2
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
9 nov. 2020 à 13:34
9 nov. 2020 à 13:34
Bonjour Phil,
Merci de ta réponse et désolé de la mienne qui est un peu tardive j'ai été assez pris par le temps avec le travail ce week-end.
Donc en gros si on connaît le coefficient multiplicateur pour le zoom il suffit de diviser le nombre de pixels par ce même coefficient ?
J'ai peur que si on zoom que ce ne soit pas toute la carte qui soit zoomé mais juste une zone. Ce qui pourrait du coup fausser les résultats.
Et est ce qu'il est possible de générer un zoom random pouvant aller de 0.1 (puisqu'on ne peut pas diviser par 0 pour les pixels) à 10 par exemple. Et du coup avoir un retour de la valeur choisie afin de la connaître ?
Merci de ta réponse et désolé de la mienne qui est un peu tardive j'ai été assez pris par le temps avec le travail ce week-end.
Donc en gros si on connaît le coefficient multiplicateur pour le zoom il suffit de diviser le nombre de pixels par ce même coefficient ?
J'ai peur que si on zoom que ce ne soit pas toute la carte qui soit zoomé mais juste une zone. Ce qui pourrait du coup fausser les résultats.
Et est ce qu'il est possible de générer un zoom random pouvant aller de 0.1 (puisqu'on ne peut pas diviser par 0 pour les pixels) à 10 par exemple. Et du coup avoir un retour de la valeur choisie afin de la connaître ?
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
9 nov. 2020 à 13:47
9 nov. 2020 à 13:47
Bonjour T-Rence,
"J'ai peur que si on zoom que ce ne soit pas toute la carte qui soit zoomée mais juste une zone. Ce qui pourrait du coup fausser les résultats."
Oui, mais tu en es sur ou pas, que seule une soit zoomée ?
Qui décide de ça ?
Déjà, fais un test avec le zoom sur toute la carte pour voir si ca marche, ce sera déjà une première étape
Si seule une zone est zoomée, alors là, pas évident, il faudrait pouvoir savoir quelle zone est zoomée, y appliquer le coefficient multiplicateur et ajouter le nombres de pixels de la zone non zoomée ...
"J'ai peur que si on zoom que ce ne soit pas toute la carte qui soit zoomée mais juste une zone. Ce qui pourrait du coup fausser les résultats."
Oui, mais tu en es sur ou pas, que seule une soit zoomée ?
Qui décide de ça ?
Déjà, fais un test avec le zoom sur toute la carte pour voir si ca marche, ce sera déjà une première étape
Si seule une zone est zoomée, alors là, pas évident, il faudrait pouvoir savoir quelle zone est zoomée, y appliquer le coefficient multiplicateur et ajouter le nombres de pixels de la zone non zoomée ...
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
10 nov. 2020 à 14:57
10 nov. 2020 à 14:57
Bonjour Phil,
J'ai pas encore réussi à zoomer l'image.
Néanmoins j'ai réussi à faire une rotation
J'ai ajouté la couleur verte par sécurité pour les pixels blanc (puisque de base le fond est blanc mais je ne sais pas si c'est comptabilisé dans le calcul.)
Le problème c'est que les pixels changent en fonction de la rotation. Pour exemple j'ai choisi un AS de pique avec une rotation d'un angle de 172° j'ai donc 56713 pixels noir contre 56404 pixels de base (soit une différence de 309 pixels).
J'ai donc testé avec le 2 de pique et la même rotation. Là la différence de pixels est de 320. Donc ce qui n'est pas une valeur constante.
Et si je change la rotation en mettant à 32° par exemple pour le 2 de pique toujours on est à 335 pixels de différence par rapport au code de base.
Je ne vois pas comment on pourrait régler ça.
Aurais-tu une idée?
J'espère avoir été assez clair dans mon explication.
Merci encore pour ton aide
J'ai pas encore réussi à zoomer l'image.
Néanmoins j'ai réussi à faire une rotation
carte = Image.open("Untitled Folder/2_of_spades.png") carte= carte.rotate(172, expand=1, fillcolor='green') print (carte.size) imshow(np.asarray(carte))
J'ai ajouté la couleur verte par sécurité pour les pixels blanc (puisque de base le fond est blanc mais je ne sais pas si c'est comptabilisé dans le calcul.)
Le problème c'est que les pixels changent en fonction de la rotation. Pour exemple j'ai choisi un AS de pique avec une rotation d'un angle de 172° j'ai donc 56713 pixels noir contre 56404 pixels de base (soit une différence de 309 pixels).
J'ai donc testé avec le 2 de pique et la même rotation. Là la différence de pixels est de 320. Donc ce qui n'est pas une valeur constante.
Et si je change la rotation en mettant à 32° par exemple pour le 2 de pique toujours on est à 335 pixels de différence par rapport au code de base.
Je ne vois pas comment on pourrait régler ça.
Aurais-tu une idée?
J'espère avoir été assez clair dans mon explication.
Merci encore pour ton aide
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
10 nov. 2020 à 16:27
10 nov. 2020 à 16:27
Bonjour T-Rence,
Effectivement, j'imagine bien que le nombre de pixels puisse changer avec la rotation
Prenons l'exemple simple d'une droite horizontale de 30 mm de long avec des pixels carrés de 5 mm de coté : Il y a 6 pixels
Refais la droite à 45 degrés, toujours sur une grille de pixels de 5 mm de coté et en conservant la longueur de 30 mm: il n'y a plus que 4 pixels
Donc , si on se base sur l'hypothèse que, pour une carte donnée, le nombre de pixels varie proportionnellement avec l'angle de rotation, on peut faire une série de tests de degré en degré et noter le nombre de pixels en fonction de l'angle
Ensuite, quand on teste réellement une carte, on fait comme pour le zoom, en fonction de l'angle, on multiple par un coefficient qui redonne le nombre de pixels originaux
Effectivement, j'imagine bien que le nombre de pixels puisse changer avec la rotation
Prenons l'exemple simple d'une droite horizontale de 30 mm de long avec des pixels carrés de 5 mm de coté : Il y a 6 pixels
Refais la droite à 45 degrés, toujours sur une grille de pixels de 5 mm de coté et en conservant la longueur de 30 mm: il n'y a plus que 4 pixels
Donc , si on se base sur l'hypothèse que, pour une carte donnée, le nombre de pixels varie proportionnellement avec l'angle de rotation, on peut faire une série de tests de degré en degré et noter le nombre de pixels en fonction de l'angle
Ensuite, quand on teste réellement une carte, on fait comme pour le zoom, en fonction de l'angle, on multiple par un coefficient qui redonne le nombre de pixels originaux
T-Rence
Messages postés
57
Date d'inscription
samedi 27 juillet 2019
Statut
Membre
Dernière intervention
16 décembre 2020
10 nov. 2020 à 18:28
10 nov. 2020 à 18:28
Je pense comprendre à moitié ce que tu m'expliques. Mais ça me semble assez complexe à réaliser non ?
Est ce que l'on pourrait pas générer un angle au hasard entre 0 et 360 ? Le stocker dans une variable et du coup gérer les pixels vis-à-vis de cette variable ?
Par contre ça me semble quasi impossible à réaliser.
Assez complexe cette partie.
Est ce que l'on pourrait pas générer un angle au hasard entre 0 et 360 ? Le stocker dans une variable et du coup gérer les pixels vis-à-vis de cette variable ?
Par contre ça me semble quasi impossible à réaliser.
Assez complexe cette partie.