El izleme, bir kişinin elinin hareketlerini gerçek zamanlı olarak algılamak ve takip etmek için bilgisayar görüşünü kullanma sürecidir. El izlemenin en baskın uygulaması sanal gerçeklik kulaklıklarıdır. Kulaklıklar, dokunmatik kontrolörler yerine giriş olarak ellerinizi kullanmanızı sağlar. Bu da deneyimi daha sürükleyici hale getiriyor.
Python, bilgisayar görüşü için OpenCV ve MediaPipe kullanarak bir kişinin ellerini nasıl takip edeceğinizi öğrenin.
Google, birçok makine öğrenimi çözümü içeren MediaPipe çerçevesini geliştirdi. Çözümlerden biri de denilen el ve parmak takip çözümü. Medya Borusu Elleri. Elleri izlemek için MediaPipe Hands iki işlem gerçekleştirir: avuç içi algılama ve yer işareti algılama.
Avuç İçi Algılama
MediaPipe, avuç içlerinin giriş görüntüsünde nerede olduğunu belirleyerek başlar. Sert nesneler için sınırlayıcı kutuları tahmin etmek, eklemli parmaklara sahip elleri belirlemekten daha basit olduğu için.
El İşaretlerinin Tespiti
Avuç içi tespitinden sonra, MediaPipe el işaretlerini tespit eder. El işareti modeli, her el işaretinin konumunun 21 kesin koordinatını tahmin edebilir.
Sayılar, her yer işareti için benzersiz bir tanımlayıcıyı temsil eder.
Ortamınızı Kurma
Bu projeyi takip etmek için, aşağıdakilere aşina olmalısınız: Python'un temelleri. Aşağıdaki kitaplıkları ortamınıza kurun:
- OpenCV: Bu kütüphaneyi bilgisayar görüşü için ve girdi görüntüsü üzerinde görüntü işleme tekniklerini gerçekleştirmek için kullanacaksınız.
- MediaPipe: Giriş görüntüsü üzerinde el algılama ve izleme gerçekleştirmek için bu kitaplığı kullanacaksınız.
- imutils: Girişin video çerçevesini yeniden boyutlandırmak için bu kitaplığı kullanacaksınız.
OpenCV, MediaPipe ve imutils kitaplıklarını yüklemek için terminalinizde aşağıdaki komutu çalıştırın. Pip'i kurun—Python paket yöneticisi- gerekirse. Kitaplıkları boşlukla ayrılmış bir liste olarak ilettiğinizden emin olun.
pip kurulumu OpenCV-Python MediaPipe imutils
Güncelleme tamamlandığında ortam, kodlamaya başlamanız için hazırdır.
Bu projenin tam kaynak kodu şu adreste mevcuttur: GitHub deposu.
Gerekli Kitaplıkları İçe Aktarma
Kurduğunuz kitaplıkları kullanabilmeniz için içe aktarmanız gerekir. Herhangi birini aç Python IDE'si, bir Python dosyası oluşturun ve aşağıdaki içe aktarmaları ekleyin:
içe aktarmak CV2
içe aktarmak orta boru gibi mp
içe aktarmak imutils
OpenCV'yi cv2 olarak ve MediaPipe'ı küçük harfle içe aktardığınızdan emin olun. Bunu yapmamak bir hata atar.
MediaPipe eller çözümünü çağırmak için mpHands'ı ve el girişini algılamak ve izlemek için hands nesnesini kullanacaksınız. Belirlenen ellerin yer işaretleri arasındaki bağlantıları çizmek için mpDraw nesnesini kullanacaksınız.
mpHands = mp.solutions.hands
eller = mpHands. Eller()
mpDraw = mp.solutions.drawing_utils
Hands() yapıcısına çeşitli parametreler ileterek MediaPipe eller modelinde ince ayar yapabilirsiniz. Varsayılan değerler bu proje için yeterince iyi, ancak modeli nasıl etkilediklerini görmek için onlarla deney yapabilirsiniz:
bırakmalısın static_image_mode Modelin elleri izlemeye başlamadan önce bir kez algılamasını sağlamak için Yanlış olarak. Yalnızca algılama güvenirliği beyan edilen parametrenin altına düşerse izleme sürecini tekrarlayarak genel girdi işlemeyi daha hızlı hale getirir.
El Takibi Gerçekleştirme
El izlemeyi gerçekleştirmek için üç işleve ihtiyacınız vardır: biri girişi işlemek için, biri el yer işareti bağlantılarını çizmek için ve program akışını kontrol etmek için bir ana işlev.
Giriş İşleme İşlevi
Bu işlev girişi alır, gri tonlamaya dönüştürür ve girişteki elleri algılamak ve izlemek için MediaPipe eller modeline iletir.
# Giriş görüntüsünün işlenmesi
kesinlikleişlem_görüntüsü(resim):
# Girişi gri tonlamaya dönüştürme
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
sonuçlar = eller.işlem (gray_image)
# Tespit edilen ellerin arama işlevine döndürülmesi
geri dönmek sonuçlar
İşlev, girişte algılanan herhangi bir el olup olmadığına ilişkin sonuçları döndürür.
El İşareti Bağlantıları Çizim İşlevi
Bu işlev, giriş işleme işlevinin herhangi bir el algılayıp algılamadığını kontrol eder. Algılanan herhangi bir ibre varsa, her bir yer işaretinin üzerinden geçer ve çevresine bir daire çizerek, kullanarak yer işaretini takip eder. Python'un numaralandırma işlevi. Ardından, orijinal video girişindeki yer işaretleri arasındaki bağlantıları çizer.
# Yer işareti bağlantılarının çizilmesi
kesinlikleberaberlik_el_bağlantıları(resim, sonuçlar):
eğer sonuçlar.multi_hand_landmarks:
için elms içinde sonuçlar.multi_hand_landmarks:
için kimlik, lm içinde numaralandırmak (handLms.landmark):
h, w, c = resim.şekil# Her yer işaretinin koordinatlarını bulma
cx, cy = int (lm.x * w), int (lm.y * h)# Her yer işareti kimliğini ve koordinatlarını yazdırma
# terminalde
yazdır (id, cx, cy)# Her yer işaretinin etrafında bir daire oluşturma
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.DOLU)
# Yer işareti bağlantılarının çizilmesi
mpDraw.draw_landmarks (img, handLms,
mpHands. EL_BAĞLANTILARI)
geri dönmek img
İşlev, her bir yer işaretini daire içine alarak başlar:
Daha sonra el bağlantılarını çizer:
Sonunda çıktısını çağıran işleve döndürür.
Ana İşlev
Programınızın akışını kontrol edecek bir ana işlev oluşturun. Çıktının tutarlılığını sağlamak için girişi alır ve video karesini yeniden boyutlandırır. Girişi, daha sonra elleri algılayacak ve izleyecek olan işleme işlevine iletin. Döndürülen sonuçları, orijinal video girişindeki bağlantıyı çizecek olan el yer işaretleri bağlantı çizim işlevine götürün. Sonunda çıktıyı kullanıcıya gösterecektir.
kesinlikleana():
# 0'ı kullanmak için video yolu ile değiştirin
# önceden kaydedilmiş video
büyük harf = cv2.VideoCapture(0)sırasındaDoğru:
# Girişin alınması
başarı, resim = cap.read()
resim = imutils.resize (resim, genişlik=500, yükseklik=500)
sonuçlar = process_image (resim)
draw_hand_connections (resim, sonuçlar)# Çıktıyı görüntüleme
cv2.imshow("El izleyici", resim)
# q tuşuna basıldığında program sona erer
eğer cv2.waitKey(1) == sıra('Q'):
cap.release()
cv2.destroyAllWindows()
Son adım, programınızı çalıştırmaktır. Aşağıdaki kod, programı çalıştırdığınızda önce ana işlevin çalışmasını sağlar.
eğer __isim__ == "__ana__":
ana()
Program çalıştığında şöyle bir çıktı üretir:
Program elleri gerçek zamanlı olarak takip eder.
Sürükleyici Sanal Gerçeklik için Elle İzleme
Sanal gerçeklikte el takibi, teknolojiyi daha cazip hale getiriyor. Sanal gerçeklik kulaklıkları, sanal dünyaya yükseltilmiş gerçeklik duygusu getirerek el takibini sunmaya başladı. Kulaklıklar, kullanıcının sanal bir el kullanarak komut girmesine izin verir.
Sanal kulaklıklarda el takibi, bu teknolojinin uygulamalarından sadece bir tanesidir. El takibini istediğiniz herhangi bir uygulanabilir alana dahil edebilirsiniz.