PoseNet ist ein Machine Learning Model, das die Schätzung der menschlichen Körperhaltung in Echtzeit ermöglicht.
PoseNet kann verwendet werden, um entweder eine einzelne Pose oder mehrere Posen zu schätzen, was bedeutet, dass es eine Version des Algorithmus gibt, die nur eine Person in einem Bild / Video erkennen kann, und eine Version, die mehrere Personen in einem Bild / Video erkennen kann.
Sie haben es eilig? Dann speichern Sie diesen Blogartikel von R23 als PDF
Brauchen Sie den Inhalt dieses Artikels “PoseNet mit Webcam” schnell und bequem? Dann speichern Sie ihn doch einfach als PDF!
In unserem Studio würden wir gerne Motion Capture Aufzeichnungen erstellen. Unter Motion Capture, wörtlich Bewegungs-Erfassung, versteht man ein Tracking-Verfahren zur Erfassung und Aufzeichnung von Bewegungen, so dass Computer diese wiedergeben, analysieren, weiterverarbeiten und zur Steuerung von Anwendungen nutzen können.
Ein Beispiel für eine solche Anwendung ist die Übertragung menschlicher Bewegungen auf im Computer generierte 3D-Modelle. Wir haben vor wenigen Monaten hier im Blog eine Video-Anleitung erstellt, die Ihnen zeigt, wie Sie eine Motion Capture auf einen 3D Character in Blender verwenden.
Vor diesem Hintergrund freuen wir uns über über die Veröffentlichung einer TensorFlow.js-Version von PoseNet. Damit ist eine Echtzeit-Schätzung der menschlichen Pose im Browser ermöglicht. Probieren Sie hier eine Live-Demo aus.
Dieses Beispiel wurde mit p5.js erstellt.
Code
Ok, und warum ist das jetzt so aufregend? Posenschätzung hat viele Einsatzmöglichkeiten, von interaktiven Installationen, die auf den Körper reagieren, über Augmented Reality, Animation und mehr.
Während die Pose-Erkennungssysteme in der Regel spezielle Hardware und/oder Kameras sowie eine umfangreiche Systemeinrichtung erfordern, kann mit PoseNet auf TensorFlow.js jeder diese Technologie direkt aus einem Webbrowser heraus erleben.
Da PoseNet unter Open Source zur Verfügung steht, können Javascript-Entwickler diese Technologie mit nur wenigen Zeilen Code basteln und nutzen. Darüber hinaus kann dies sogar dazu beitragen, die Privatsphäre der Benutzer zu schützen. Da PoseNet auf TensorFlow.js im Browser läuft, verlassen keine Posing-Daten den Computer eines Benutzers.
// Copyright (c) 2018 ml5 // // This software is released under the MIT License. // https://opensource.org/licenses/MIT /* === ml5 Example PoseNet example using p5.js === */ let video; let poseNet; let poses = []; function setup() { createCanvas(640, 480); video = createCapture(VIDEO); video.size(width, height); // Create a new poseNet method with a single detection poseNet = ml5.poseNet(video, modelReady); // This sets up an event that fills the global variable "poses" // with an array every time new poses are detected poseNet.on('pose', function(results) { poses = results; }); // Hide the video element, and just show the canvas video.hide(); } function modelReady() { select('#status').html('Model Loaded'); } function draw() { image(video, 0, 0, width, height); // We can call both functions to draw all keypoints and the skeletons drawKeypoints(); drawSkeleton(); } // A function to draw ellipses over the detected keypoints function drawKeypoints() { // Loop through all the poses detected for (let i = 0; i < poses.length; i++) { // For each pose detected, loop through all the keypoints let pose = poses[i].pose; for (let j = 0; j < pose.keypoints.length; j++) { // A keypoint is an object describing a body part (like rightArm or leftShoulder) let keypoint = pose.keypoints[j]; // Only draw an ellipse is the pose probability is bigger than 0.2 if (keypoint.score > 0.2) { fill(255, 0, 0); noStroke(); ellipse(keypoint.position.x, keypoint.position.y, 10, 10); } } } } // A function to draw the skeletons function drawSkeleton() { // Loop through all the skeletons detected for (let i = 0; i < poses.length; i++) { let skeleton = poses[i].skeleton; // For every skeleton, loop through all body connections for (let j = 0; j < skeleton.length; j++) { let partA = skeleton[j][0]; let partB = skeleton[j][1]; stroke(255, 0, 0); line(partA.position.x, partA.position.y, partB.position.x, partB.position.y); } } }
License
MIT License
Copyright (c) 2018 ml5
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Jetzt sind Sie gefragt!
Haben Sie Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freue ich mich auf Ihren Kommentar.
Sie können diesen Beitrag natürlich auch weiterempfehlen. Ich bin Ihnen für jede Unterstützung dankbar!
Schreiben Sie einen Kommentar