Il y a un an et demi, je parcourais le blog de l'un des photographes de portrait russes à succès avec un style reconnaissable, et la pensée m'est venue à l'esprit, pourquoi ne pas simplement mettre l'appareil photo sur un trépied, mettre les lumières dans le studio une fois, régler tous les paramètres de l'appareil photo et effectuer le traitement automatique des photos avec les données fournies profil? Les photos du blog étaient super, mais très similaires les unes aux autres.

Comme j'appartiens à des gens qui ne savent pas prendre de photos au téléphone et qui aiment les appareils photo, j'ai vraiment aimé l'idée. Oui, j'ai vu toutes sortes de photomatons et de supports photo, mais les développeurs de ces appareils n'ont même pas maîtrisé la fabrication de couleurs normales. J'ai décidé que c'était parce que les développeurs ne comprenaient pas la photographie.
De sorte qu'avec cette idée, la même chose ne se produit pas qu'avec les autres (qui n'ont pas bougé ou ont calé au stade initial). J'ai décidé que la chose la plus importante était de faire en sorte que tout fonctionne dans son ensemble et de ne pas polir un composant distinct pour qu'il brille. Et comme j'ai très peu de temps de développement, après le principal travail à plein temps, j'ai une force maximale de 1 à 2 heures, et un peu plus le week-end, vous devriez essayer de ne rien apprendre de nouveau, de tirer le meilleur parti des connaissances disponibles.
Je veux dire dans cet article quels problèmes j'ai rencontrés et comment je les ai résolus.
Une petite explication sur les conditions de prise de vue et les équipements: je n'ai considéré que les appareils photo avec le capteur APS-C minimum et les flashs de studio professionnels, le seul moyen de garantir des images de haute qualité à tout moment, de jour comme de nuit.
Toutes les personnes de stature différente
La première chose que j'ai été surprise de découvrir lorsque j'ai placé l'appareil photo sur un trépied, c'est qu'il n'est pas si facile de s'insérer dans le cadre et même d'avoir une bonne composition. Lorsque vous vous déplacez de et vers l'appareil photo, toute la composition se détériore également si elle est correctement placée pour une personne spécifique se tenant à un certain point. Oui, vous pouvez mettre une chaise et dire que vous devez vous asseoir sur une chaise, mais ce ne sera pas très intéressant. Vous pouvez toujours recadrer les photos, mais la qualité se détériorera considérablement. Eh bien, la dernière façon que j'ai choisie est de faire viser automatiquement la caméra.
Il y a aussi 2 options ici. Correct - l'axe optique est toujours horizontal, la caméra se déplace de haut en bas et il est plus facile à mettre en œuvre - ajustez la position de la caméra avec des inclinaisons. Dans ce cas, il y aura des distorsions prometteuses, mais elles sont assez bien corrigées lors du traitement si vous vous souvenez de l'angle de la caméra.
Comme je n'avais pratiquement aucune expérience dans la fabrication d'appareils en fer, j'ai essayé de trouver quelque chose d'aussi prêt à l'emploi que possible. J'ai trouvé plusieurs appareils pour la prise de vue panoramique dans la gamme de 1000 $, qui ont tous permis de contrôler manuellement les inclinaisons et les virages, ainsi que de prendre automatiquement des panoramas. Mais il était impossible de les contrôler depuis un ordinateur. Il existe également de nombreux dispositifs de contrôle des caméras vidéo, pour la prise de vue depuis des grues, par exemple. Les bons appareils qui ont un soupçon de contrôle numérique sont très chers, et on ne sait pas très bien si une API est disponible. Du coup, j'ai trouvé ici un tel appareil sur un site populaire:

De l'électronique, il n'y a rien. Il y a un an, seule la version avec moteurs collecteurs (avec boîtes de vitesses intégrées) était disponible, que j'ai achetée. Il était nécessaire de gérer cette chose à partir d'un ordinateur. Lors du forum de notre institut, ils ont suggéré que le moyen le plus abordable est d'utiliser l'Arduino. Alors je l'ai fait. J'ai acheté un autre bouclier moteur, car les moteurs sont alimentés en 12 volts. Après avoir essayé d'activer cette fonction, j'ai ressenti toute la douleur que les moteurs de collecteur peuvent causer à une personne - ils sont non seulement impossibles à tourner à un angle donné, il n'est pas facile non plus de «tourner un peu». Ma première pensée a été d'y installer un moteur pas à pas. Pendant très longtemps, je cherchais un moteur pas à pas qui s'insérerait dans cette plate-forme au lieu de celui qui se tenait là, mais je ne l'ai pas trouvé. Puis il a commencé à réfléchir à la façon de visser le servo, même de l'acheter, mais n'a pas pu trouver quelque chose de fiable. L'idée suivante était de fixer l'accéléromètre à la plate-forme et de faire pivoter progressivement la plate-forme à un angle prédéterminé. J'ai vissé l'accéléromètre avec un gyroscope et une boussole, mais c'était très buggé et j'ai également refusé cette idée (un mois plus tard, j'ai réalisé que l'alimentation chinoise de la caméra était responsable des pépins de l'accéléromètre, d'où il n'y avait pas de mauvaise interférence). Et puis j'ai accidentellement lu comment le servo est organisé. J'ai aimé l'idée de visser une résistance pour mesurer l'angle, mais j'ai dû en quelque sorte la connecter à une poulie. J'ai dû apprendre FreeCAD et utiliser l'impression 3D pour la première fois de ma vie. Bref, après traitement avec un fichier, tout a pu être collecté.

J'ai dû me tourmenter avec le programme pour arduino pour régler un angle donné, car la caméra sur la plate-forme a un grand moment d'inertie et elle ne s'arrête pas immédiatement. Mais au final, il s'est avéré que l'angle était réglé avec une précision d'environ 1 degré.
Maintenant, à propos de la visée automatique - l'idée est simple de faire en sorte que le visage soit en haut du cadre. Il vous suffit donc de trouver un visage et d'ajuster la plate-forme dans chaque image à partir de la vue en direct. Je ne savais rien sur l'identification des visages, j'ai donc utilisé le tutoriel en utilisant les signes Haar (cascades haar). J'ai découvert que pour les particuliers, cette méthode ne fonctionne pas. Il trouve sur chaque trame un tas d'ordures en plus de ce qui est nécessaire et consomme beaucoup de temps processeur. Il a ensuite trouvé un autre exemple de la façon d'utiliser les réseaux de neurones via OpenCV. Les réseaux de neurones fonctionnent très bien! Mais j'étais content jusqu'à ce que je commence à traiter des photos en parallèle. Et Linux a en quelque sorte commencé à allouer du temps processeur entre le thread de gestion de la plateforme et les processus de traitement des photos. Il a pris le chemin de la moindre résistance - il a commencé à faire des grimaces sur la carte vidéo. Tout a commencé à fonctionner parfaitement.
Malgré le fait que je ne voulais pas me plonger dans les détails, j'ai quand même effectué un petit test. Et j'ai acheté Intel Neural Compute Stick 2 - j'ai essayé de compter sur lui au lieu d'une carte vidéo. Mes résultats sont à peu près les mêmes (chiffres - temps de traitement pour une image de taille 800x533) -
- Core i5 9400F - 59
- Core i7 7500U - 108
- Core i7 3770-110
- GeForce GTX 1060 6 Go - 154
- GeForce GTX 1050 2Gb - 199
- Core i7 3770, Ubuntu 18.04 avec opencv d'OpenVINO - 67
- Intel Neural Compute Stick 2, ubuntu 18.04 avec opencv d'OpenVINO - 349
Il s'est avéré qu'il suffisait de traiter des images de taille 300 sur le petit côté pour que le visage d'une personne debout à pleine hauteur dans le cadre soit localisé de manière fiable. Fonctionne plus rapidement sur ces images. J'utilise actuellement la GeForce GTX 1050. Je suis sûr qu'elle peut être grandement améliorée, mais il y a maintenant un problème beaucoup plus grave.
Exposition
Ce n'est un secret pour personne que la photographie doit être correctement exposée. Dans mon cas, c'est encore plus important car il n'y a pas de retouche. Pour que les défauts cutanés soient moins visibles, la photo doit être aussi claire que possible, au bord de la surexposition, mais sans surexposition.
La luminosité de l'image finale lors de la prise de vue au flash dépend des paramètres suivants:
- Puissance du flash
- La distance du flash au sujet
- Ouverture
- Valeur ISO
- Options lors de la conversion de RAW
Une fois le cadre créé, nous ne pouvons modifier que le dernier paramètre. Mais le changer sur une large plage n'est pas très bon, car avec une grande correction positive de l'exposition du cadre sombre, il y aura du bruit et dans le cas contraire, il peut y avoir un écrêtage dans les zones claires.
Le système TTL (Through The Lens) est utilisé pour déterminer automatiquement l'exposition pendant la prise de vue au flash. Cela fonctionne comme suit:
- Le flash fait une série de petits flashs.
- À ce moment, l'appareil photo mesure l'exposition, fait la mise au point et mesure la distance au sujet mis au point.
- Sur la base de ces données, il calcule la puissance de flash requise.
- Le flash se déclenche à nouveau et à ce moment, l'obturateur s'ouvre, une photo est prise.
Ce système fonctionne très bien lorsque vous pouvez régler manuellement les images après la prise de vue. Mais pour obtenir le résultat final, cela fonctionne de manière insatisfaisante. Si cela - j'ai essayé le flash Profoto pour> 100t.r.
J'ai des conditions bien connues, les flashs doivent se tenir tout le temps au même endroit. Ainsi, vous pouvez simplement calculer l'exposition par la position d'une personne dans l'espace. Le problème se pose - comment déterminer la position d'une personne?
La première idée était simplement de prendre la distance par rapport à l'objet de mise au point depuis EXIF et pour la première image de faire beaucoup de compensation d'exposition dans le convertisseur RAV, et pour la suivante, d'ajuster la puissance du flash ou l'ouverture. Il est très probable qu'une personne fasse beaucoup de photos, debout au même endroit. Mais il s'est avéré que la distance dans EXIF est écrite très discrètement, plus l'objet est éloigné - plus le pas est grand. De plus, pour différents objectifs, la distance à l'objet prend différents ensembles de valeurs, et certains ne la mesurent pas du tout.
L'idée suivante est d'utiliser un télémètre à ultrasons. Cet appareil mesure la distance de façon assez précise, mais seulement jusqu'à un mètre et seulement si une personne n'est pas vêtue de quelque chose qui absorbe les ondes sonores. Si vous placez le télémètre sur le servo et le tournez comme un radar, il s'améliore un peu - il mesure jusqu'à 1,5 mètre, ce qui est également très petit (les gens obtiennent le meilleur si vous les tirez à une distance de 2 mètres).
Bien sûr, je savais que même les téléphones bon marché construisent déjà des cartes de profondeur et floutent l'arrière-plan de manière sélective. Mais je ne voulais pas m'impliquer. Malheureusement, il n'y avait pas d'autre choix. J'ai d'abord voulu acheter 2 webcams, les combiner et lire la carte de déplacement à l'aide d'OpenCV. Mais, heureusement, j'ai trouvé de nombreuses caméras de profondeur qui le font déjà en elles-mêmes. J'ai opté pour Intel D435 (si quelqu'un veut en acheter un, il n'est pas pris en charge sous Linux dans la branche principale du noyau. Il y a des correctifs pour debian et ubuntu dans le référentiel librealsense. J'ai dû les corriger pour fedora).

Dès que j'ai tout connecté, j'ai écrit un programme de test qui mesure la distance à un petit carré au centre. Donc, ce code fonctionne toujours. Et ça marche plutôt bien. Bien sûr, vous devez rechercher un visage dans l'image de l'appareil photo RVB et calculer la distance entre le flash et ce visage. Mais ce sont des plans pour l'avenir.
Selon la position d'une personne dans l'espace, il est nécessaire de calculer la correction de l'exposition. Au début, j'ai trouvé une formule qui ne fonctionnait que pour une source ponctuelle de lumière dans le vide (en fait, l'absence de murs et de plafonds réfléchissants importait). Mais ensuite, il vient de faire une série de prises de vue avec un flash constant et d'ajuster l'exposition dans un égaliseur à l'œil, il s'est avéré que la correction dépendait presque linéairement de la distance. J'utilise le système d'éclairage Rembrandt, un flash avec une boîte à lumière est dans le plan de l'appareil photo.
Mais quelque chose doit être fait avec la correction d'exposition. Idéalement, vous devez changer la puissance du flash, mais jusqu'à présent, mon diaphragme et mes additifs changent <1 / 6Ev - dans le convertisseur rav. Ma synchronisation flash peut être contrôlée via Bluetooth à l'aide de l'application pour téléphone. Donc, à l'avenir, je prévois de comprendre comment le protocole y est organisé et de changer la puissance des flashs.
Voici une comparaison de la sortie flash constante avec TTL et ma méthode. Il fonctionne beaucoup plus stable et plus précisément TTL:

Variété
Lorsqu'une fille (ou même un gars) vient chez le photographe pour une séance photo, elle (ou lui) veut généralement une photo d'un plan différent, un plus grand, où seul son visage et plus général sont de toute la longueur ou de la taille. Tout le monde ne le sait pas, mais surtout, le plan est modifié en changeant la distance focale de l'objectif. Autrement dit, une personne se tient toujours à une distance de, disons, 2 mètres, si nous devons photographier à pleine hauteur, nous enveloppons l'objectif 35 mm, si seul le visage fait 135 mm, et si la taille est haute, alors 50 mm ou 85 mm. Eh bien, ou ne changez pas les objectifs et réglez l'objectif avec le zoom. Offrir à l'utilisateur de tourner le zoom avec ses mains sur l'appareil photo, qui se tient sur une plate-forme mobile, traversant un faisceau de fils, ne semble pas très bon. J'ai donc acheté un pack de pièces détachées sur aliexpress, pris un servo variateur qui ne m'a pas été utile pour contrôler la plateforme et j'ai fait ceci:

Et voici comment cela fonctionne:
Les résultats du premier test dans un studio photo, tout d'abord je voulais voir à quel point ce serait divers de prendre des photos, de ne rien bouger ni de reconfigurer pendant la prise de vue:

Vidéo de processus:
Résultat
Voici quelques-uns des meilleurs clichés réalisés:

comme tout le monde a demandé la permission de publier, si vous vous reconnaissez et souhaitez supprimer la photo - écrivez-moi
Pourquoi ai-je fait ça? C'est une chose qui ne s'est pas encore produite, du moins je n'ai rien trouvé de tel. Potentiellement utile - il y a maintenant de nombreux spécialistes, tels que des psychologues, des entraîneurs commerciaux, des entraîneurs sportifs, des coiffeurs vendant leurs services via des blogs, ils ont besoin de beaucoup de photos et exactement de la forme qu'ils souhaitent, pas du photographe. Certaines personnes n'aiment tout simplement pas qu'un étranger (photographe) les regarde lors de la prise de vue. Eh bien, le plus simple est un excellent divertissement pour les événements d'entreprise, les expositions et autres événements.
Je n'ai pas décrit la partie logicielle, comment les photos sont traitées et l'interaction avec l'utilisateur, car il y a déjà tellement de texte, j'écrirai la deuxième partie plus tard. Ces points sont déjà assez bien définis pour que les personnes qui ne sont pas familiarisées avec la programmation puissent utiliser le système.