MediaPipe Kullanarak İleri Seviye Bilgisayarla Görü

Overview

MediaPipe Kullanarak İleri Seviye Bilgisayarla Görü

Mediapipe, Google tarafından oluşturulan makine öğrenimi çözümleri oluşturmak kullandığımız açık kaynaklı bir frameworktür. MediaPipe modüler yapısı sayesinde bize kullanımı kolay ve hızlı uygulanabilir bir yapı sunuyor. Bir çok platformda kullanılmasıda büyük bir avantaj sağlıyor.
Aşağıdak resimde mediapipe ile oluşturabileceğimiz bazı modeller bulunuyor. Bunları ayrıca incelemek için https://google.github.io/mediapipe/ adresini ziyaret edebilirsiniz. image

Burada bulunan çözümleri kullanarak bizde Hand,Face Detection, Face Mesh, Pose modelleri oluşturacağız. Bunları daha sonra kullanmak için modüler bir yapı kullanacağız. Adım adım ilerleyelim.

Kullanacağımız Kütüphaneler

MediaPipe kütüphanesini yüklemek için terminale "pip install mediapipe" yazabilirsiniz. Bununlar birlikte videolardan üzerinde yapacağımız işlemleri de opencv kütüphanesi ile yapacağız. OpenCV kurmak içinde pip install opencv-python yazabilirsiniz.

Hands

image
Elin şeklini ve hareketleri anlamak için bu modülü kullanacağız. MediaPipe Hands birden fazla modelin birlikte çalışması ile oluşuyor. Burada modellerden biri Palm Detection diğeri Hand Landmarks . Palm Detection modeli elin bulunduğu kısmı keser ve Hand Landmarks modeli elde bulunan noktaları detect etmeye çalışır. Elin croplanması sayesinde Landmark modeli daha başarı bir sonuç ortaya koyar.
Aşağıdaki resimde elde tespit edilecek landmarkları görebilirsiniz. image

Modüler bir yapı oluşturmak istediğimi söylemiştim. Bu sebeple HandTracking adında bir sınıf oluşturalım. Bunu sınıf içerisinde "init" metodu ile alacağımız parametreleri belirtelim. Bu parametlerelin ayrıntılı açıklamasını "https://google.github.io/mediapipe/solutions/hands.html" adresinden öğrenebilirsiniz.

Öncelikle hands adında bir değişken oluşturalım bu değişken ile hands sınıfındaki metotlara erişebileceğiz. Daha sonra elde ettiğimiz landmarkları çizim yaparken kullanmak için mp_drawing nesnesini oluşturuyoruz. image

find() adında image ve draw parametleri alan bir fonksiyon oluşturalım. Burada image değişkeni videodan aldığımız frameleri temsil ediyor, draw değişkenine ise default olarak True değerini verdik, video üzerinde çizim göstermek istemezsek bunu False yapabiliriz.

MediaPipe alınan imagelerin RGB formatında olmasını istiyor. Biz Opencv ile okuduğumuz videoları BGR olarak okuyoruz. Bu sebeple cvtColor metodu ile imagei RGB ye çeviriyoruz. Oluşturduğumuz hands nesnesinin process metodunu kullarak handtracking işlemini başlatıyoruz. Buradan aldığımız bilgileri result değişkeninde tutuyoruz. Result değişkeni içerisinde detect edilen eller ve bu ellerin landmarkları bulunuyor.For döngüsü ile detect edilen ellerin landmarklarını alıyoruz. Tüm bu aldığımız bilgileri mp_drawing objesinin draw_landmarks metodunu kullanarak çizdiriyoruz. Burada mp_hans.HAND_CONNECTIONS ile landmarklar arasında çizgiler çekiyoruz. Daha sonra kullanmak için img döndürüyoruz. image

Hand Videos

Aşağıdak videolarda sonuçları inceleyebilirsiniz.

Pose

image

Videolar kullanarak pose tahmini ile yapılan egzersizlerin doğruluğunun kontrol edilmesi, işaret dili, vucut hareketlerimizi kullanabileceğimiz uygulamalar gibi bir çok alanda bize faydası olabilir. MediaPipe kütüphanesinde bulunan Pose sınıfıda bunu bizim için oldukça kolay hale getiriyor. 33 farklı 3 boyutlu landmarkı pose modelini kullanarak tespit edebiliyoruz.

image

Yine Hands modelinde olduğu gibi 2 farklı model bulunuyor modellerden biri landmarkların tespit edilmesi biri pose estimation yapılacak insanın tespit edilmesinde kullanıyor. Croplanan image sayesinde landmarkların yüksek doğruluk oranıyla detect edilmesi sağlanıyor.

Pose modelinde de daha sonra kullanmak için bir sınıf oluşturacağız. Modules klasörü altında Pose adında bir python dosyası oluşturalım. Bu python dosyasının içersinde "PoseDetection" adında bir sınıf oluşturalım. Burada bir çok parametre bulunuyor. Şimdilik bu parametreleri değiştirmemize gerek yok. Parametreler hakkında daha fazla bilgi almak için mediapipe sitesini ziyaret edebilirsiniz. image

Hand modeline çok benzer işlemler uygulayarak find metodumuzu oluşturuyoruz. Landmarkların birleşmesi için mp_pose.POSE_CONNECTIONS parametresini de kullanmayı unutmayalım.
image

VIDEO

Face Detection

image

Mediapipe ile face detection yapmakta oldukça hızlı ve başarılı görünüyor. Yüzde bulunan 6 farklı landmarkın tespit edileside ayrıca sağlanıyor. Bunun yanında bounding box oluşturarak yüzü bir kare içerisine alarak detection işlemini gerçekleştirebiliyoruz. Ayrıca birden fazla yüzün tespit edilemside sağlanıyor.

Burada da aynı hand ve pose kısımlarında ki detection ve drawing objelerimizi oluşturuyoruz. Yine bahsettiğim gibi modüler bir yapı olması için FaceDetectionC adında bir class oluşturdum. image

Öncelikle results.detection ile detection yapılmışmı bunu kontrol edelim. Daha sonra detect edilen yüzleri for döngüsü ile geziyoruz. Yüzün sınırlarına bir kare çizmek için bounding_box bilgisini çekiyoruz. Daha sonra kendi bounding boxımızı oluşturmak için detection dan aldığımız bilgileri imagein height ve widht değerleri ile çarpıyoruz. (detection yapılırken x,y,widht,height değerleri 0 ile 1 arasında veriliyor. Konumların tespit etmek için image'in shape değerleri ile çarpıyoruz.) Aldığımız bbox bilgisi ile cv2.rectangle ile bir kare çiziyoruz. Detection objesi içerisinde bulunan score bilgisinide putText metodu ile ekrana basabiliriz.
image

VIDEO

FACE MESH

image

Face Mesh modelini kullanarak yüzde bulunan 468 3 boyutlu noktayı tespit edebiliz. Burada aldığımız landmarklar ile bir çok işlem gerçekleştirebiliriz. Örneğin son zamanlarda çok kullanılan kamera filtrelerini bu sayede kolayca oluşturabiliriz. image

Yine aynı şekilde bir FaceMeshC adında bir sınıf oluşturalım. Bunun init metodu içerisinde gerekli parametreleri alalım. Aynı şekilde process işlemini başlatmak için gereken objeleri oluşturalım. image
Diğer modellerde yaptığımız gibi mp_draw nesnesini kullanarak çizim işlemini yapalım. image

VIDEO

SONUC Tüm bunları kullanmak için mp_models.py adında bir python dosyası oluşturalım. Burada hangi modeli kullanmak istediğimizi arg olarak verebiliriz. Örn : python mp_models.py hand ile hand detector çalışır ve gönderdiğimiz video üzerinde detect işlemi yapılır daha sonra bu video processed_videos klasörüne kaydedilir. image

which() metoduna argument olarak hangi model adı ilgili sınıftan bir obje oluşturulur. Bu detector objesi ve video show() metoduna gönderilir.

image

show metodunda ise opencv de buluanan VideoCapture metodu ile okunur. İlgili sınıfında find metoduna image gönderilir detection işlemi yapılan ve dönen video kaydedilir.

Owner
Burak Bagatarhan
Burak Bagatarhan
Official Code for VideoLT: Large-scale Long-tailed Video Recognition (ICCV 2021)

Pytorch Code for VideoLT [Website][Paper] Updates [10/29/2021] Features uploaded to Google Drive, for access please send us an e-mail: zhangxing18 at

Skye 26 Sep 18, 2022
Deep Learning Pipelines for Apache Spark

Deep Learning Pipelines for Apache Spark The repo only contains HorovodRunner code for local CI and API docs. To use HorovodRunner for distributed tra

Databricks 2k Jan 08, 2023
Train an RL agent to execute natural language instructions in a 3D Environment (PyTorch)

Gated-Attention Architectures for Task-Oriented Language Grounding This is a PyTorch implementation of the AAAI-18 paper: Gated-Attention Architecture

Devendra Chaplot 234 Nov 05, 2022
PyTorch code for our ECCV 2020 paper "Single Image Super-Resolution via a Holistic Attention Network"

HAN PyTorch code for our ECCV 2020 paper "Single Image Super-Resolution via a Holistic Attention Network" This repository is for HAN introduced in the

五维空间 140 Nov 23, 2022
Official code release for "Learned Spatial Representations for Few-shot Talking-Head Synthesis" ICCV 2021

Official code release for "Learned Spatial Representations for Few-shot Talking-Head Synthesis" ICCV 2021

Moustafa Meshry 16 Oct 05, 2022
HW3 ― GAN, ACGAN and UDA

HW3 ― GAN, ACGAN and UDA In this assignment, you are given datasets of human face and digit images. You will need to implement the models of both GAN

grassking100 1 Dec 13, 2021
CDTrans: Cross-domain Transformer for Unsupervised Domain Adaptation

[ICCV2021] TransReID: Transformer-based Object Re-Identification [pdf] The official repository for TransReID: Transformer-based Object Re-Identificati

DamoCV 569 Dec 30, 2022
Code for "Solving Graph-based Public Good Games with Tree Search and Imitation Learning"

Code for "Solving Graph-based Public Good Games with Tree Search and Imitation Learning" This is the code for the paper Solving Graph-based Public Goo

Victor-Alexandru Darvariu 3 Dec 05, 2022
Meta Self-learning for Multi-Source Domain Adaptation: A Benchmark

Meta Self-Learning for Multi-Source Domain Adaptation: A Benchmark Project | Arxiv | YouTube | | Abstract In recent years, deep learning-based methods

CVSM Group - email: <a href=[email protected]"> 188 Dec 12, 2022
Benchmark datasets, data loaders, and evaluators for graph machine learning

Overview The Open Graph Benchmark (OGB) is a collection of benchmark datasets, data loaders, and evaluators for graph machine learning. Datasets cover

1.5k Jan 05, 2023
Boostcamp CV Serving For Python

Boostcamp-CV-Serving Prerequisites MySQL GCP Cloud Storage GCP key file Sentry Streamlit Cloud Secrets: .streamlit/secrets.toml #DO NOT SHARE THIS I

Jungwon Seo 19 Feb 22, 2022
Object Database for Super Mario Galaxy 1/2.

Super Mario Galaxy Object Database Welcome to the public object database for Super Mario Galaxy and Super Mario Galaxy 2. Here, we document all object

Aurum 9 Dec 04, 2022
Learned Token Pruning for Transformers

LTP: Learned Token Pruning for Transformers Check our paper for more details. Installation We follow the same installation procedure as the original H

Sehoon Kim 52 Dec 29, 2022
Tools for the Cleveland State Human Motion and Control Lab

Introduction This is a collection of tools that are helpful for gait analysis. Some are specific to the needs of the Human Motion and Control Lab at C

CSU Human Motion and Control Lab 88 Dec 16, 2022
Arxiv harvester - Poor man's simple harvester for arXiv resources

Poor man's simple harvester for arXiv resources This modest Python script takes

Patrice Lopez 5 Oct 18, 2022
Code of the lileonardo team for the 2021 Emotion and Theme Recognition in Music task of MediaEval 2021

Emotion and Theme Recognition in Music The repository contains code for the submission of the lileonardo team to the 2021 Emotion and Theme Recognitio

Vincent Bour 8 Aug 02, 2022
Codebase for arXiv preprint "NeRF++: Analyzing and Improving Neural Radiance Fields"

NeRF++ Codebase for arXiv preprint "NeRF++: Analyzing and Improving Neural Radiance Fields" Work with 360 capture of large-scale unbounded scenes. Sup

Kai Zhang 722 Dec 28, 2022
Notepy is a full-featured Notepad Python app

Notepy A full featured python text-editor Notable features Autocompletion for parenthesis and quote Auto identation Syntax highlighting Compile and ru

Mirko Rovere 11 Sep 28, 2022
A python interface for training Reinforcement Learning bots to battle on pokemon showdown

The pokemon showdown Python environment A Python interface to create battling pokemon agents. poke-env offers an easy-to-use interface for creating ru

Haris Sahovic 184 Dec 30, 2022
DiscoNet: Learning Distilled Collaboration Graph for Multi-Agent Perception [NeurIPS 2021]

DiscoNet: Learning Distilled Collaboration Graph for Multi-Agent Perception [NeurIPS 2021] Yiming Li, Shunli Ren, Pengxiang Wu, Siheng Chen, Chen Feng

Automation and Intelligence for Civil Engineering (AI4CE) Lab @ NYU 98 Dec 21, 2022