Maison / Maîtriser l'ordinateur / Reconnaissance de photos. Cherchez et trouvez avec Google Images. Rechercher partout sur Internet

Reconnaissance de photos. Cherchez et trouvez avec Google Images. Rechercher partout sur Internet

Ces derniers temps, les programmes de reconnaissance faciale ont été exclusivement au service des ministères. Ils aident à identifier une personne en fonction des traits du visage. Maintenant, l'utilisation d'un tel logiciel le plus souvent vu dans les systèmes de sécurité, dans les activités commerciales liées à la publicité et à la promotion de divers services.

Aussi, certains similaires services en ligne et des programmes sont également disponibles pour les utilisateurs ordinaires, ils peuvent être trouvés sur Internet. Un exemple est le programme Lenovo Veriface. Il s'agit d'un utilitaire intégré propriétaire qui vous permet de déverrouiller l'appareil en analysant le visage.

Comment fonctionne la recherche de visage

Dans certains services, la recherche de visage fonctionne sur basé sur la technologie des réseaux neuronaux. La recherche est basée sur certaines caractéristiques de base : poids de l'image, résolution, correction des couleurs, exposition, résolution, etc. Maintenant, la technologie des réseaux de neurones se développe, en plus des fonctionnalités de base, la définition se fait à l'aide caractéristiques supplémentaires: texture de la peau, forme de la bouche, oreilles, couleur des cheveux, position des yeux, etc.

Pour trouver une personne similaire, vous devez télécharger des photos claires, sinon la recherche échouera. Il convient également de mentionner que les réseaux sociaux protègent les informations sur leurs utilisateurs. La plupart des réseaux sociaux ont des fonctionnalités de protection de profil intégrées qui vous permettent de masquer les photos d'une personne.

Programmes de reconnaissance faciale

Les systèmes (programmes) de reconnaissance faciale basés sur des photos et des vidéos utilisent des algorithmes plus avancés. Systèmes similaires non dans libre accès , ils sont utilisés dans les services de sécurité, pour contrôler et prévenir les urgences dans les grandes villes et dans les endroits très fréquentés.

Ces logiciels utilisent le plus souvent l'algorithme de reconnaissance Viola-Jones. Le programme, utilisant cette méthode, reconnaît les visages même lorsqu'ils sont tournés de 30 degrés. Méthode basé sur les signes de Haar, qui sont un ensemble de masques noirs et blancs de différentes formes et tailles. Des masques sont appliqués à l'image et la luminosité des pixels est calculée par addition, après quoi la différence entre les valeurs est calculée.

Ensuite, le système compare les résultats avec les données accumulées et, après avoir déterminé le visage dans l'image, continue de le suivre pour sélectionner l'angle optimal. Après cela, le processus de lecture commence et le logiciel trouve les points de référence sur le visage. Ensuite, l'image est analysée avec les données qui se trouvent dans les bases de données. S'ils correspondent, la personne est identifiée.

trouver le visage

FindFace est un programme de reconnaissance faciale russe, une solution puissante qui vous permettra de reconnaître un visage sur une photo. FindFace propose non seulement des outils pour les utilisateurs ordinaires, mais également pour les sociétés d'État et les entreprises. Avec lui, vous pouvez trouver une personne enregistrée sur Vkontakte.

À partir du 1er septembre, le service public Find Face cesse de fonctionner, seuls les utilisateurs ayant acheté un compte PRO pourront l'utiliser pendant un certain temps. Les auteurs abandonneront alors complètement la version du domaine public au profit de leur produit commercial.

Google images

Google search.Images vous permet de trouver des photos identiques basées sur des données moteurs de recherche, y compris la recherche d'une personne par le visage. Plus concentré sur rechercher dans les ressources étrangères:


Photos de Yandex

Analogue domestique du service précédent, qui vous aidera à trouver une personne par photo sur Internet et à rechercher par photo dans les réseaux sociaux :


Pictriev

Un service en anglais qui permet aux utilisateurs de trouver une personne similaire et de reconnaître un visage à partir d'une photo en ligne. Tout d'abord, il se concentre sur la comparaison avec des célébrités, donc les résultats peuvent ne pas être tout à fait corrects :


Bonjour!

Vous pouvez trouver le bon produit sur Internet différentes façons. Le plus souvent, les acheteurs de boutiques en ligne saisissent une requête dans la barre de recherche, parcourent les produits dans les catégories, ont recours à l'aide. Mais il y en a un de plus manière intéressante- Ce .

disons dans réseau social ou sur l'un des sites que vous parcourez, vous avez aimé une petite chose, mais vous n'avez trouvé nulle part une description et un lien, donc vous ne savez pas où vous pouvez l'acheter, ou peut-être que vous ne savez même pas ce que c'est)) Ou une autre option - vous avez trouvé un produit, mais le prix ne convient pas, je veux moins cher. C'est dans de tels cas qu'une recherche par image sera utile.

Examinons plusieurs options qui nous aideront à trouver un produit par photo.

Comment trouver un produit par image dans Google et Yandex

La recherche par images (images, photos) dans Google et Yandex est devenue possible après que les moteurs de recherche ont appris à reconnaître les images. A ce jour, c'est le plus moyen abordable découvrez ce qui est montré dans l'image, où il est vendu et combien il coûte.

Trouvons quelque chose avec Recherche d'images Google.

Prenons la Power Bank comme image source.

La recherche de biens par photo dans les moteurs de recherche commence par une icône en forme d'appareil photo.

En cliquant sur l'icône de l'appareil photo, vous pouvez trouver le produit en utilisant le lien ou télécharger une image précédemment enregistrée. Le plus facile à faire glisser image désirée dans la barre de recherche.

Après avoir téléchargé le fichier, des informations s'ouvriront à partir desquelles vous découvrirez ce qui est montré dans l'image et une longue liste de sites apparaîtra où cette photo se trouve.

Si vous souhaitez afficher un produit dans une boutique en ligne spécifique, ajoutez simplement son nom dans la barre de recherche - ebay, amazon, aliexpress, etc.

La méthode ci-dessus pour rechercher des images à l'aide de moteurs de recherche est manière universelle pour toutes occasions. Mais il existe d'autres options qui vous permettent de rechercher des produits rapidement et facilement sur certaines plateformes de trading.

Comment trouver un produit sur Aliexpress par photo en utilisant un plugin

L'extension de navigateur fait un bon travail de recherche de produits sur Ali "Aliexpress recherche par image". Vous pouvez l'installer pour les navigateurs Google Chrome, Yandex. Navigateur Et Opéra.

Pour trouver un produit sur Aliexpress par photo à l'aide de ce plugin, faites un clic droit sur l'image et sélectionnez l'élément "Trouver un produit sur Aliexpress par cette image" dans le menu déroulant.

Nous sommes transférés à Google, où une liste de pages aliexpress a déjà été formée, sur laquelle le même ensemble de stylos est vendu.

Cette extension vous aidera également à trouver le bon produit moins cher sur Aliexpress lui-même auprès d'un autre vendeur. Certes, cette méthode échoue parfois - le plugin n'est pas compatible avec toutes les images, mais ça vaut le coup d'essayer !

Une autre excellente application avec des fonctionnalités avancées - AliPrice. Avec lui, vous pouvez trouver un produit sur Aliexpress par l'image en quelques secondes, évaluer la note du vendeur, afficher l'historique des prix, lire les avis et les critiques. En savoir plus sur la prolongation.

Comment trouver un produit par photo sur TaoVao

Un moteur de recherche permet de rechercher des produits par images du catalogue TaoVao en russe Cupinato. Tout est intuitif ici.

Les choses sont plus difficiles avec moteur de recherche chinois Taowao. Des traducteurs en ligne pour nous aider !

Vous savez maintenant comment trouver un produit par photo sur Internet, et si vous connaissez d'autres moyens, partagez-les dans les commentaires !

Bonne chance avec vos achats et n'oubliez pas de passer des commandes dans les magasins en ligne via. Ainsi, vous économisez environ 5 à 15 % du coût des biens achetés !

Cordialement, Anna

1. Nous devons estimer nous-mêmes la partie approximative des déplacements - au moins pour un ensemble limité de points. StereoBM ne fonctionnera pas ici, nous avons donc besoin d'un autre moyen. L'option logique serait d'utiliser la correspondance des caractéristiques - trouver des points spéciaux dans les deux cadres et sélectionner des mappages. Vous pouvez lire comment cela se fait.
2. Une fois que nous avons deux ensembles de points correspondants, nous pouvons les introduire dans findFundamentalMat pour obtenir la matrice fondamentale dont nous avons besoin pour stereoRectifyUncalibrated.
3. Exécutez stereoRectifyUncalibrated, obtenez deux matrices pour rectifier les deux images.
4. Et... et puis ce n'est pas clair. Nous avons redressé les cadres, mais il n'y a pas de matrice Q, qui était nécessaire pour l'étape finale. En cherchant sur Google, je suis tombé sur un article sur le même désarroi et j'ai réalisé que soit j'avais raté quelque chose en théorie, soit OpenCV n'avait pas pensé à ce moment.

OpenCV : nous sommes 2:0.

4.1 Modification du forfait

Mais attendez. Peut-être avons-nous fait fausse route dès le début. Dans les tentatives précédentes, nous avons essentiellement essayé de déterminer réel la position des points tridimensionnels - d'où la nécessité de connaître les paramètres de la caméra, de la matrice, de rectifier les images, etc. En fait, c'est la triangulation habituelle : sur la première caméra, je vois ce point ici, et sur la seconde ici - puis nous allons dessiner deux rayons passant par les centres des caméras, et leur intersection montrera à quelle distance se trouve le point de notre part.

C'est très bien, mais en général, nous n'en avons pas besoin. Nous serions intéressés par les dimensions réelles des objets si notre modèle était ensuite utilisé à des fins industrielles, dans certaines imprimantes 3d. Mais nous allons (cet objectif s'est déjà un peu brouillé) pousser les données reçues dans un réseau de neurones et des classificateurs similaires. Pour ce faire, nous avons seulement besoin de savoir relatif tailles des objets. Comme nous nous en souvenons encore, ils sont inversement proportionnels aux décalages de parallaxe - plus un objet est éloigné de nous, moins il se déplace lorsque nous nous déplaçons. Existe-t-il un moyen de trouver ces décalages? plus plus facile, juste en quelque sorte correspondant aux deux images ?

C'est un algorithme merveilleux qui fait exactement ce dont nous avons besoin. Nous y mettons une image et un ensemble de points. Ensuite, nous avons mis la deuxième image. On obtient en sortie pour les points donnés leur nouvelle position dans la deuxième image (approximative, bien sûr). Aucun étalonnage et aucune mention de la caméra - le flux optique, malgré son nom, peut être calculé en fonction de n'importe quoi. Bien qu'il soit généralement utilisé pour le suivi d'objets, la détection de collision et même réalité augmentée.

Pour nos besoins, nous voulons (pour l'instant) utiliser le flux "dense" de Gunnar Farneback, car il peut calculer le flux non pas pour certains points individuels, mais pour l'image entière à la fois. La méthode est disponible via calcOpticalFlowFarneback, et les premiers résultats commencent à être très, très agréables - regardez à quel point il a l'air plus cool que le précédent résultat stereoRectifyUncalibrated + stereoBM.


Un grand merci au merveilleux jeu Portal 2 pour la possibilité de construire vos propres pièces et de jouer avec des blocs. Je "fais" la science !

Code pour cette petite démo

# encodage : utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2.imread("0.jpg", 0) img2 = cv2.imread("1.jpg", 0) def stereo_depth_map(img1 , img2): # 1: correspondance des fonctionnalités orb = cv2.ORB() kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1, des2) matches = triés(matches, key=lambda x: x.distance) src_points = np.vstack(.pt) for m in matches]) dst_points = np.vstack( .pt) pour m dans les matchs]) # 2 : findFundamentalMat F, mask = cv2.findFundamentalMat(src_points, dst_points) # 3 : stereoRectifyUncalibrated _, H1, H2 = cv2.stereoRectifyUncalibrated(src_points.reshape(src_points.shape[ 0], 1, 2), dst_points.reshape(dst_points.shape, 1, 2), F, img1.shape) rect1 = cv2.warpPerspective(img1, H1, (852, 480)) rect2 = cv2.warpPerspective(img2, H2, (852, 480)) # 3.5 : stereoBM stéréo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET, ndisparities=16, SADWindowSize=15) return stereo.compute(rect1, rect2) def optical_flow_depth_map(img1, img2): flow = cv2.calcOpticalFlowFarneback (img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0) mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1]) return mag def plot( titre, img, i): plt.subplot(2, 2, i) plt.title(title) plt.imshow(img, "gray") plt.gca().get_xaxis().set_visible(False) plt.gca ().get_yaxis().set_visible(False) plot(u"Première image", img1, 1) plot(u"Deuxième image (pas à droite)", img2, 2) plot(u"stereoRectifyUncalibrated", stereo_depth_map(img1, img2), 3) plot(u"Première image", optical_flow_depth_map(img1, img2), 4) plt.show()

Tellement bon. Nous avons des compensations, et elles semblent bonnes. Comment maintenant à nous recevoir d'eux les coordonnées des points tridimensionnels ?

4.2 La partie où l'on obtient les coordonnées des points 3D

Cette image a déjà flashé sur l'un des liens ci-dessus.

La distance à l'objet ici est calculée à l'aide de la méthode de la géométrie scolaire (triangles similaires) et ressemble à ceci : . Et les coordonnées, respectivement, comme ceci: . Ici w Et h- la largeur et la hauteur de l'image, on les connaît, F est la distance focale de la caméra (la distance entre le centre de la caméra et la surface de son écran), et B- caméras même étape. Soit dit en passant, veuillez noter que nous violons légèrement les noms généralement acceptés des axes ici, lorsque Z est dirigé vers le haut - nous avons Z regardant "profondément" dans l'écran, et X et Y, respectivement, sont dirigés le long de la largeur et hauteur de l'image.

Eh bien, à propos F tout est simple - nous avons déjà stipulé que nous ne nous intéressons pas aux paramètres réels de la caméra, tant que les proportions de tous les objets changent selon une loi. Si vous substituez Z dans la formule pour X ci-dessus, vous pouvez voir que X ne dépend pas du tout de la distance focale (f est réduit), donc ses différentes valeurs ne changeront que la profondeur - "étirer" ou " aplatir » notre scène. Visuellement - pas très agréable, mais encore une fois, pour l'algorithme de classification - cela n'a pas d'importance du tout. Alors, réglons la distance focale de manière intelligente - pensez-y. Cependant, je me réserve le droit de modifier légèrement mon opinion plus loin dans le texte.

À propos B un peu plus compliqué - si nous n'avons pas de podomètre intégré, nous ne savons pas jusqu'où la caméra s'est déplacée dans le monde réel. Alors comptons un peu pour l'instant et décidons que le mouvement de la caméra est à peu près fluide, nous avons beaucoup d'images (quelques douzaines par seconde) et la distance entre deux images voisines est approximativement la même, c'est-à-dire . Et encore une fois, nous allons clarifier légèrement cette situation, mais pour l'instant, qu'il en soit ainsi.

Il est temps d'écrire du code

import cv2 import numpy as np f = 300 # puisque nous faisons de la visualisation, j'ai quand même choisi le focus pour que la scène paraisse conditionnellement réelle B = 1 w = 852 h = 480 img1 = cv2.imread("0.jpg", 0 ) img2 = cv2.imread("1.jpg", 0) flux = cv2.calcOpticalFlowFarneback(img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0) mag, ang = cv2.cartToPolar(flux[ .., 0], flow[..., 1]) edge = cv2.Canny(img1, 100, 200) result = for y in xrange(img1.shape): for x in xrange(img1.shape): si arêtes == 0 : continuer delta = mag si delta == 0 : continuer Z = (B * f) / delta X = (Z * (x - w / 2.)) / f Y = (Z * (y - h / 2.)) / f point = np.array() result.append(point) result = np.vstack(result) def dump2ply(points): # enregistrer au format .ply pour ouvrir avec Blender avec open("points .ply", "w") as f : f.write("ply\n") f.write("format ascii 1.0\n") f.write("element vertex ()\n".format(len( points))) f.write("property float x\n") f.write("property float y\n") f.write("property float z\n") f.write("end_header\n") pour point en points : f.write("(:.2f) (:.2f) (:.2f)\n".format(point, point, point)) dump2ply(résultat)

Voici à quoi ressemble le résultat. J'espère que ce GIF a réussi à se charger au moment où vous avez lu jusqu'ici.


Pour plus de clarté, je n'ai pas pris tous les points à la suite, mais uniquement les frontières mises en évidence par le détecteur Canny

À première vue (du moins pour moi), tout semblait génial - même les angles entre les faces des cubes formaient un joli quatre-vingt-dix degrés. Les objets en arrière-plan se sont avérés pires (notez comment les contours des murs et de la porte sont déformés), mais bon, c'est probablement juste un peu de bruit, il peut être corrigé en utilisant b O plus de cadres ou autre chose.

De toutes les conclusions hâtives possibles qui pouvaient être tirées ici, celle-ci était la plus éloignée de la vérité.

5. La partie qui ne fonctionne pas

En général, le principal problème s'est avéré être que certains des points étaient assez déformés. Et - un signe alarmant, où il était déjà temps de soupçonner que quelque chose n'allait pas - il n'était pas déformé au hasard, mais approximativement aux mêmes endroits, il n'était donc pas possible de corriger le problème en superposant séquentiellement de nouveaux points (à partir d'autres cadres).

Cela ressemblait à ceci :


L'escalier est froissé, se transformant parfois en un morceau amorphe de quelque chose d'incompréhensible.

J'ai essayé de résoudre ce problème pendant très longtemps, et pendant ce temps, j'ai essayé ce qui suit:

- Lissez les images avec le flux optique : flou gaussien, filtre médian et filtre bilatéral tendance qui laisse des bords nets. C'est inutile : les objets, au contraire, s'estompent encore plus.
- J'ai essayé de trouver des lignes droites dans l'image en utilisant la transformation de Hough et de les transférer dans un état droit inchangé. Partiellement travaillé, mais seulement sur les bordures - les surfaces étaient toujours les mêmes déformées ; de plus, il était impossible de mettre une pensée dans l'esprit de "et s'il n'y avait pas du tout de lignes droites dans l'image" n'importe où.
- J'ai même essayé de créer ma propre version du flux optique en utilisant le templateMatching d'OpenCV. Cela a fonctionné comme ceci : pour n'importe quel point, nous construisons un petit carré (environ 10x10) autour de lui, et commençons à le déplacer et à rechercher la correspondance maximale (si la direction du mouvement est connue, alors "autour" peut être limité). Cela s'est avéré pas mal par endroits (bien que cela ait fonctionné clairement plus lentement que la version originale):


À gauche se trouve le ruisseau Farneback déjà familier, à droite se trouve le vélo décrit ci-dessus

Du point de vue du bruit, hélas, il s'est avéré que ce n'était pas mieux.

En général, tout était mauvais, mais très logique. Parce que c'est comme ça que ça aurait dû être.


Illustration du problème. Le mouvement ici est encore un pas vers la droite

Choisissons un point vert dans l'image ci-dessus. Supposons que nous connaissions la direction du mouvement, et que nous allions chercher le "jumeau décalé" de notre point vert, se déplaçant dans une direction donnée. Quand décidons-nous que nous avons trouvé le jumeau désiré ? Lorsque nous tombons sur une sorte de "point de repère", une zone caractéristique qui ressemble à l'environnement de notre point de départ. Par exemple, sur le coin. Les angles à cet égard sont faciles à suivre car ils sont assez rares en eux-mêmes. Donc, si notre point vert est un angle et que nous trouvons un angle similaire dans un voisinage donné, alors le problème est résolu.

Un peu plus compliqué, mais toujours facile, est la situation avec la ligne verticale (deuxième point vert à gauche). Considérant que nous nous déplaçons vers la droite, nous ne rencontrerons la ligne verticale qu'une seule fois pendant toute la période de recherche. Imaginez que nous rampons avec notre fenêtre de recherche sur l'image et que nous voyons un arrière-plan solide, un arrière-plan, un arrière-plan à nouveau, une ligne verticale, un arrière-plan à nouveau, un arrière-plan et à nouveau un arrière-plan. C'est aussi facile.

Le problème apparaît lorsque nous essayons de suivre un morceau de ligne situé parallèle au mouvement. Le point rouge n'a pas de candidat clairement défini pour le rôle de jumeau déplacé. Il y en a beaucoup, tous sont à proximité, et il est tout simplement impossible d'en choisir un par la méthode que nous utilisons. Il s'agit d'une limitation fonctionnelle du flux optique. Comme Wikipédia nous avertit gentiment dans l'article correspondant, "Nous ne pouvons pas résoudre cette seule équation avec deux variables inconnues", et rien ne peut être fait ici.

Rien du tout?

En général, pour être honnête, ce n'est probablement pas tout à fait vrai. Pouvez-vous trouver le point rouge sur la photo de droite ? Ce n'est pas non plus très difficile, mais pour cela, nous utilisons mentalement une autre méthode - nous trouvons le «point vert» (coin inférieur) le plus proche à proximité, estimons sa distance et mettons de côté la distance correspondante sur la deuxième face du cube. Les algorithmes de flux optique ont de la place pour se développer - cette méthode pourrait être adoptée (si cela n'a pas encore été fait).

6. Points verts FTW

En fait, comme le suggère le bon sens tardif à ce stade, nous essayons toujours de faire un travail supplémentaire qui n'est pas important pour notre objectif ultime - la reconnaissance, la classification et d'autres renseignements. Pourquoi essayons-nous de nous enfoncer monde en trois dimensions Tous points d'image ? Même lorsque nous travaillons avec des images 2D, nous n'essayons généralement pas d'utiliser chaque pixel pour la classification - la plupart d'entre eux n'ont aucune valeur. informations utiles. Pourquoi ne pas faire la même chose ici ?

En fait, tout s'est avéré si simple. On calculera le même flux optique, mais uniquement pour des points "verts", stables. Et au fait, OpenCV s'est déjà occupé de nous. La chose dont nous avons besoin s'appelle le flux Lucas-Canade.

Ce sera un peu ennuyeux de donner du code et des exemples pour les mêmes cas, car vous obtenez la même chose, mais avec un nombre de points beaucoup plus petit. Faisons autre chose en cours de route : par exemple, ajouter à notre algorithme la capacité de gérer les rotations de la caméra. Avant cela, nous nous déplacions exclusivement latéralement, ce qui est assez rare dans le monde réel en dehors des fenêtres des trains.

Avec l'avènement des rotations, les coordonnées X et Z sont mélangées pour nous. Laissons les anciennes formules de calcul des coordonnées relatives à la caméra, et nous les convertirons en coordonnées absolues comme suit (ici - les coordonnées de la position de la caméra, alpha - l'angle de rotation) :

(y est une triche ; c'est parce que nous croyons que la caméra ne bouge pas de haut en bas)

Quelque part ici, nous avons des problèmes avec la distance focale - rappelez-vous, nous avons décidé de la régler sur une distance arbitraire ? Donc, maintenant que nous avons la possibilité d'évaluer le même point sous différents angles, cela a commencé à avoir de l'importance - précisément en raison du fait que les coordonnées X et Z ont commencé à interférer les unes avec les autres. En fait, si nous exécutons le code similaire au précédent avec un focus arbitraire, nous verrons quelque chose comme ceci :


Ce n'est pas évident, mais il s'agit d'une tentative d'arrangement d'un contournement de caméra autour d'un cube régulier. Chaque cadre est une estimation points visibles après la prochaine rotation de la caméra. Vue de dessus, comme sur la minimap.

Heureusement, nous avons toujours le flux optique. En tournant, nous pouvons voir quels points vont vers lesquels et calculer leurs coordonnées sous deux angles de vue. Il est facile d'obtenir la distance focale à partir d'ici (prenez simplement les deux formules ci-dessus pour différentes valeurs alpha, égalisez les coordonnées et exprimez f). Tellement mieux:


Non pas que tous les points s'emboîtent parfaitement les uns dans les autres, mais vous pouvez au moins deviner qu'il s'agit d'un cube.

Et enfin, nous devons en quelque sorte gérer le bruit, à cause duquel nos estimations de la position des points ne coïncident pas toujours (voir les jolis anneaux inégaux sur le gif ci-dessus ? Idéalement, il devrait y avoir un point au lieu de chacun d'eux ). Il y a déjà de la place pour la créativité, mais la manière la plus adéquate me semblait la suivante :
- lorsque nous avons plusieurs décalages latéraux d'affilée, nous combinons leurs informations - ainsi, pour un point, nous aurons plusieurs estimations de profondeur à la fois ;
- lorsque la caméra tourne, on essaie de faire correspondre les deux ensembles de points (avant la rotation et après) et de les ajuster l'un à l'autre. Cet ajustement est correctement appelé "enregistrement de points" (que vous ne devineriez jamais si vous entendiez le terme hors contexte) et pour cela, j'ai utilisé l'algorithme de point le plus proche itératif en recherchant la version python + OpenCV sur Google ;
- puis les points qui se trouvent dans le rayon seuil (déterminé par la méthode du plus proche voisin) fusionnent. Pour chaque point, nous gardons également une trace de quelque chose comme "l'intensité" - un compteur de la fréquence à laquelle il s'est combiné avec d'autres points. Plus l'intensité est grande, plus il y a de chances qu'il s'agisse d'un point honnête et correct.

Le résultat n'est peut-être pas aussi solide qu'avec les dés Portal, mais au moins il est précis. Voici quelques modèles recréés que j'ai d'abord chargés dans Blender, tourné la caméra autour d'eux et enregistré les images résultantes :


Tête du professeur Dowell


Une voiture au hasard

Application

Revenons un peu en arrière et rappelons-nous pourquoi nous avons fait tout cela. Le raisonnement était le suivant :
- nous devons être capables de reconnaître les choses montrées dans les images
- mais ces images changent chaque fois que nous changeons de position ou regardons la même chose sous des angles différents. Parfois méconnaissable
- ce n'est pas un bug, mais une fonctionnalité : une conséquence du fait que nos capteurs oculaires limités ne voient qu'une partie de l'objet, et non l'objet entier
- par conséquent, il est nécessaire de combiner d'une manière ou d'une autre ces données partielles des capteurs et d'en recueillir une idée du sujet dans sa forme complète.

D'une manière générale, c'est certainement un problème. Pas seulement vision. C'est plutôt une règle, pas une exception - nos capteurs ne sont pas omnipotents, ils perçoivent constamment des informations sur un objet en plusieurs parties - mais il est curieux de savoir comment tous ces cas peuvent être combinés dans une sorte de cadre commun ? Disons (pour en revenir à la vision), vos yeux font maintenant constamment de petits mouvements très rapides - des saccades - des sauts entre les objets dans le champ de vision (et dans les intervalles entre ces mouvements, votre vision ne fonctionne pas du tout - c'est pourquoi vous ne pouvez pas voir vos propres saccades, même en regardant dans le miroir à bout portant). Le cerveau travaille constamment dur pour « assembler » les pièces qu'il voit. Ce- le même problème que nous venons d'essayer de résoudre, ou est-ce toujours différent ? Perception de la parole quand nous pouvons correspondre à dix différentes options la prononciation d'un mot avec l'une de ses orthographes « idéales » est-elle aussi une tâche similaire ? Et qu'en est-il de la réduction des synonymes à une « image » du sujet ?

Si tel est le cas, le problème est peut-être plus qu'un simple algorithme local du système visuel qui remplace le pointeur laser d'un scanner pour nos yeux sous-évolués.

Des considérations évidentes disent que lorsque nous essayons de recréer quelque chose vu dans la nature, il ne sert à rien de copier aveuglément toutes ses parties constituantes. Pour voler dans les airs, les ailes battantes et les plumes ne sont pas nécessaires, une aile rigide et une portance suffisent; vous n'avez pas besoin de jambes mécaniques pour courir vite - une roue fera beaucoup mieux. Au lieu de copier ce que nous voyons, nous voulons trouver un principe et le répéter nous-mêmes (peut-être en le rendant plus facile/plus efficace). Quel est le principe de l'intelligence, un analogue des lois de l'aérodynamique pour le vol, nous ne le savons pas encore. L'apprentissage en profondeur et Yang Lekun, son prophète (et après lui de nombreuses autres personnes) pensent qu'il faut se tourner vers la capacité de construire des hiérarchies de fonctionnalités « profondes » à partir des données reçues. Peut-être pouvons-nous ajouter un raffinement supplémentaire à cela - la capacité de combiner des éléments de données pertinents, de les percevoir comme des parties d'un objet et de les placer dans une nouvelle dimension ?

Balises : Ajouter des balises

Il y a des moments où vous avez vraiment besoin de rechercher par image à partir de votre téléphone. Oui, la plupart d'entre nous savent comment effectuer une telle opération sur un ordinateur.

Tout y est simple - chaque navigateur (, Google, etc.) a sa propre page pour utiliser des photos comme requête.

En fait, il ne reste plus qu'à indiquer la photo originale et commencer à chercher des matériaux pertinents.

Contrairement à l'avis de certains utilisateurs, il n'en est pas moins facile de réaliser une telle opération.

L'algorithme des actions est le même, et dans certains cas encore plus simple. Vous avez seulement besoin de savoir quels services ou applications utiliser pour cela et comment le faire correctement.

Mais nous allons vous dire 5 les meilleures options, qui vous aident à trouver quelque chose sur une photo.

Contenu:

Google Chrome

C'est le même navigateur qui est par défaut sur tous les smartphones et tablettes qui fonctionnent.

Soit dit en passant, Yandex a son propre navigateur, tout comme Google, mais il n'a pas la même fenêtre et les mêmes fonctions que celles illustrées sur la figure. Il est donc inutile de le télécharger.

TinEye

Et c'est déjà un service spécialisé créé pour permettre aux utilisateurs du monde entier de rechercher des informations par photo.

De nombreux professionnels le connaissent.

Bien qu'il soit également connu des amateurs, car il est extrêmement utile d'effectuer la tâche avec son aide, et il produit des résultats assez informatifs et précis.

Pour l'utiliser, faites ceci :

  1. Rendez-vous sur le site officiel (lien ci-dessous). La page de ressources s'adapte automatiquement à votre appareil, ce qui est assez important.
  2. Et puis tout est très clair - il y a un seul bouton et un champ pour saisir une demande. Si vous cliquez sur le bouton, une nouvelle fenêtre apparaîtra dans laquelle vous devrez spécifier l'emplacement du fichier source. Et le champ de saisie sert à utiliser des liens vers des photos. Si la deuxième approche est utilisée, c'est-à-dire qu'un lien est entré, vous devrez en outre cliquer sur l'icône de la loupe.
  3. Après cela, le processus aura lieu.

Il est à noter que TinEye a un algorithme complètement différent de celui utilisé par Yandex et Google.

Dans la plupart des cas, les résultats sont plus précis et plus conformes aux attentes des utilisateurs. Donc, vous devriez certainement essayer d'utiliser ce service.

Google Googles

Ici nous parlons sur une application plutôt non standard qui recherche des informations non seulement sur certaines images, mais sur les endroits où vous vous trouvez et les choses que vous voyez.

Cela signifie que vous pouvez prendre une photo d'une peinture dans une galerie que vous regardez ou d'un aliment que vous voyez dans un magasin.

Après cela, le programme trouvera toutes les informations disponibles sur le sujet photographié.

Il convient également de noter que le programme dispose d'un mode de traduction avec reconnaissance de texte d'accompagnement sur la photo.

Autrement dit, vous pouvez prendre une photo d'une inscription afin que le programme puisse utiliser cette inscription comme demande et la traduire, par exemple, du russe vers l'anglais.

Pour utiliser Googles sur votre smartphone, procédez comme suit :

  • lancez l'application (avant cela, bien sûr, téléchargez-la et installez-la);
  • sélectionnez le mode de fonctionnement ci-dessous ;
  • prenez une photo de la même manière que vous le faites normalement ;
  • regardez les résultats.

CamFind

Et ferme notre liste est une autre application qui fonctionne sur le même principe que Google Googles, mais, fondamentalement, elle recherche toutes sortes de marchandises dans les magasins.

Par exemple, vous pouvez prendre en photo des lunettes de soleil ou un pot de yaourt et l'application trouvera immédiatement toutes les informations sur ce produit.

S'il s'agit de lunettes, vous verrez les prix dans différentes chaînes de vente au détail, variétés, marques, etc.

En général, pour ceux qui font constamment des achats ou qui achètent régulièrement quelque chose dans les magasins.

D'autre part, il sera également utile, par exemple, aux parents qui souhaitent connaître la composition du produit qu'ils achètent pour leurs enfants. En général, c'est une chose vraiment bonne et utile.

L'utilisation de ce programme est également très simple et se présente comme suit :

  • prendre une photo;
  • attendre que l'identification se produise ;
  • regardez les résultats.

Il est à noter qu'ici, vous pouvez transférer certaines images vers votre collection spéciale (section "Favoris").