Schulterbreite auf Foto ermitteln - Machbarkeit / Preiseinschätzung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
madrew
User
Beiträge: 2
Registriert: Mittwoch 13. November 2019, 10:49

Hallo liebe Python-Forengemeinde,

gleich vorab: ich habe nur sehr geringe Programmierkenntnisse durch einen Grundkurs im Studium.
Meine Anfrage hier zielt daher in erster Linie darauf ab, von erfahrenen Programmierern wie euch eine Einschätzung zu meinem Vorhaben zu erhalten.

In meinem Webshop möchte ich gerne eine Funktion integrieren, die mittels eines Fotos und der Körpergröße des Kunden die Schulterbreite (der Umfang ist nicht notwendig) ermittelt.
Als Laie stelle ich mir den Ablauf ungefähr folgendermaßen vor:

1.) Der Kunde macht ein Foto seines gesamten Körpers und gibt zudem seine Körpergröße an.
2.) Das Programm erkennt den menschlichen Körper.
3.) Der obere sowie untere Pixel des Körpers werden erkannt und die Distanz dieser beiden Punkte gleich der manuell angegebenen Körpergröße gesetzt.
4.) Zudem wird die Schulterpartie erkannt und in diesem Feld die beiden äußeren Pixel (links und rechts) markiert.
5.) Die Distanz dieser beiden Punkte auf dem Bild wird in Relation zu dem Referenzwert der Körpergröße gesetzt und daraus eine Schulterbreite in cm errechnet.

Nach meinen ersten Recherchen ist dies nur über Mask R-CNN umsetzbar und damit ein noch recht neues Feld. Oder gibt es einfachere Möglichkeiten, die Schulterbreite automatisch zu ermitteln?

Ich freue mich über eure Einschätzungen zu dem Aufwand für eine solche Programmierung und bin über jede Hilfe / jeden Tipp dankbar! :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt speziell auf die Erkennung von Koerperhaltung optimierte Netzwerke - https://github.com/tensorflow/tfjs-mode ... er/posenet zB. Damit wuerdest du die Schulter-Koordinaten und andere signifikante Punkte bekommen. Ob das allerdings ausreichend genau ist, kann ich nicht ohne langwierige Experimente beurteilen. Ich weiss das es vor Jahren mal eine andere Herangehensweise gab, bei der Kunden gebeten wurden, ein Foto von sich mit einer CD zu machen, womit dann wiederum zurueckgerechnet wurde auf den Rest des Koerpers.

Probleme bei all diesen Ansaetzen: Kameras sind keine linearen Abbilder. Die verzerren auf erstmal unbekannte Art und Weise, und diese Information muss eigentlich vorliegen, damit man linear wie du interpolieren kann.

Andere Ansaetze umgehen das, indem sie einen Ganzkoerperanzug verschicken (wie ein Maleranzug), der mit ganz vielen Fiducals bedruckt ist. Wenn davon ausreichend viele erkannt werden, dann bekommt man ein gutes 3D-Modell.

Alles in allem ist das trotz vieler Fortschritte in dem Gebiet nicht trivial, und braucht Wochen oder Monate an Arbeit eines erfahrenen Entwicklerteams.
madrew
User
Beiträge: 2
Registriert: Mittwoch 13. November 2019, 10:49

Danke für deine Antwort! :)
Bei meinem Vorhaben geht es lediglich um Fotos, keine bewegten Bilder und nur die Auswertung eines Fotos in stets gleicher Körperhaltung aus der Frontansicht.
Daher ist weder die Erstellung eines 3D Modells noch des Schulterumfangs bzw. die Ermittlung von Bewegungsmustern notwendig.

Dass die Segmentierung eines menschlichen Körpers auf einem Foto durch das Training eines neuralen Netzwerkes möglich ist, habe ich inzwischen verstanden. Der größte Aufwand dabei dürfte das Labeling der Trainingsbilder sein.

Gehen wir nun mal einen Schritt weiter und davon aus, dass die Kontur des menschlichen Körpers auf dem Foto erkannt wurde und der Hintergrund ausgeblendet (weiß) wird. Wie könnte man den oberen sowie unteren Pixel der menschlichen Silhouette auf dem Foto markieren und die Distanz in Pixeln ermitteln?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Posenet ist es egal, ob du ein Video oder ein Standbild benutzt. Ein Video ist nichts als eine Abfolge von Standbildern. Und 3D liefert auch Posenet nicht. Sondern bis zu 17 Schluesselpunkte des menschlichen Koerpers. Es tut genau das, was du selbst beschreibst: die Lokalisation (oder Segmentierung) von Koerperteilen. Dabei liefert es uA die Koordinaten der Schultern, sowie von Kopf und Fussgelenken. Was genau daran ist *nicht* relevant fuer dein Problem? Eine generischere Segmentierung eines Bildes in "Mensch" und "Rest" braucht prinzipiell die genau gleichen Trainingsdaten.

Ich wuerde dir raten, anhand von Trainingsbildern die du hoffentlich schon hast, und von denen du die Masse der Personen kennst, zu versuchen festzustellen, ob Posenet und seine Schluesselpunkte eine verlaessliche Abschaetzung des Schulterabstandes ermoeglichen.
Antworten