Tarayıcıda makine öğrenimi modelleri oluşturmak için TensorFlow.js ve Python kullanın

Yazar: MOHD SANAD ZAKI RIZVI

Çeviri: Wu Jindi

Redaksiyon: Ding Nanya

Bu makale hakkında 5500 kelime 15 dakika okumanız tavsiye edilir.

Bu makale ilk olarak TensorFlow.js ve bileşenlerinin önemini tanıtmakta ve tarayıcıda makine öğrenimi modelleri oluşturmak için bunu kullanma yöntemini tanıtmaktadır. Ardından, vücut duruşunu algılamak için bilgisayarın web kamerasını kullanan bir uygulama oluşturun.

Genel Bakış

  • TensorFlow.js (deeplearn.js), karmaşık kurulum adımları olmadan tarayıcıda makine öğrenimi ve derin öğrenme modelleri oluşturmamıza olanak tanır.
  • TensorFlow.js-Core API ve Layer API'nin iki bileşeni.
  • Tensorflow.js kullanarak web kameralarından görüntüleri sınıflandırmak için harika bir model oluşturmayı öğrenin.

Giriş

Makine öğrenimi modelleri yazmak için en çok hangi aracı kullanmayı seviyorsunuz? Veri bilimciler bu ebedi soruya çeşitli cevaplar verecekler. Bazı insanlar RStudio'yu sever, diğerleri Jupyter Notebook'ları tercih eder. Ben kesinlikle ikincisine aitim.

Bu yüzden, TensorFlow.js (daha önce deeplearn.js) ile ilk karşılaştığımda kalbim patladı. Tarayıcıda bir makine öğrenimi modeli mi oluşturuyorsunuz? JavaScript kullanıyor musunuz? Gerçek olamayacak kadar iyi geliyor!

4,3 milyardan fazla insan bir web tarayıcısı kullanıyor - dünya nüfusunun yaklaşık% 55'i. -Wikipedia (Mart 2019)

Google'ın TensorFlow.js'si yalnızca makine öğrenimini tarayıcıya tanıtmak ve makine öğrenimini demokratikleştirmekle kalmaz, aynı zamanda JavaScript kullanan geliştiriciler için mükemmel bir makine öğrenimi portalıdır.

Web tarayıcımız en erişilebilir platformlardan biridir. Bu nedenle, yalnızca makine öğrenimi modellerini eğitmekle kalmayan, aynı zamanda tarayıcının kendisinde "öğrenen" veya "öğrenmeyi aktaran" uygulamalar oluşturmak mantıklıdır.

Bu yazıda, önce TensorFlow.js ve diğer farklı bileşenleri kullanmanın önemini anlayacağız. Ardından, tarayıcıda kendi makine öğrenimi modelimizi oluşturmak için TensorFlow.js kullanarak derinlemesine tartışacağız. Ardından, vücut duruşunuzu tespit etmek için bilgisayarın web kamerasını kullanacak bir uygulama geliştireceğiz!

TensorFlow'da yeniyseniz, aşağıdaki makaleden daha fazla bilgi edinebilirsiniz:

  • TensorFlow 101: Derin Öğrenmeye Başlamanız için Tensörleri ve Grafikleri Anlama
  • TensorFlow kullanarak Yapay Sinir Ağlarını Uygulamaya Giriş

içindekiler

1. TensorFlow.js'yi neden kullanmalısınız?

1.1 Tarayıcıdaki resimleri sınıflandırmak için web kamerasını kullanın

1.2 TensorFlow.js'nin Özellikleri

İkinci olarak, tarayıcıdaki makine öğrenimini anlayın

2.1 Core API: Tensörlerle Çalışma

2.2 Katman API: Keras gibi modeller oluşturun

3. Google'ın eğitim öncesi modelini kullanın: PoseNet

1. TensorFlow.js'yi neden kullanmalısınız?

Bu soruyu cevaplamak için benzersiz bir yöntem kullanacağım. TensorFlow.js'nin teorik yönlerini araştırmayacağım veya neden bu kadar inanılmaz bir araç olduğunu listelemeyeceğim.

Bunun yerine, TensorFlow.js'yi kullanmazsanız neyi özleyeceğinizi size göstereceğim. Öyleyse, web kameranızı görüntüleri sınıflandırmak için kullanmak üzere 5 dakika içinde bir uygulama oluşturalım. Doğru, doğrudan kod kısmına gideceğiz!

Bu en iyi kısım - bunu yapmak için herhangi bir şey yüklemenize gerek yok! Tek ihtiyacınız olan bir metin editörü ve bir web tarayıcısıdır. Aşağıdaki animasyon, oluşturacağımız uygulamayı göstermektedir:

Bu ne kadar harika! Tarayıcıda birkaç dakika içinde bitirdim. Öyleyse, bir web tarayıcısında kendi görüntü sınıflandırma modelinizi oluşturmanıza yardımcı olacak adımlara ve koda bir göz atalım.

1.1 Tarayıcıda bir görüntü sınıflandırma modeli oluşturmak için bir web kamerası kullanın

İstediğiniz bir metin düzenleyiciyi açın ve index.html dosyasını oluşturun. Aşağıdaki kodu bu dosyaya kaydedin:

< ! DOCTYPE html > < html > < baş > < meta karakter kümesi = "UTF-8" > < meta http-equiv = "X-UA-Uyumlu" content = "IE = kenar" > < meta name = "görünüm alanı" content = "genişlik = cihaz genişliği, ilk ölçek = 1" > < ! - sayfanın başlığı - > < Başlık > image_classification < /Başlık > < ! - yükleme işlem kütüphanesi - > < script src = "https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.min.js" > < /senaryo > < script src = "https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/addons/p5.dom.min.js" > < /senaryo > < ! - ml5.js yükle - > < script src = "https://unpkg.com/ml5@0.1.1/dist/ml5.min.js" > < /senaryo > < ! - index.js yükle - > < script src = "index.js" > < /senaryo > < / kafa > < vücut > < ! - videonun gösterileceği yer burasıdır - > < video id = "video" > < /video > < /vücut > < / html >

Ardından, başka bir index.js dosyası oluşturun ve içine aşağıdaki kodu yazın:

mobilenet olsun; hadi video; let etiket = ''; // model hazır olduğunda tahminlerde bulunun function modelReady () { console.log ('Model hazır !!!'); mobilenet.predict (gotResults); } function gotResults (hata, sonuçlar) { if (hata) { console.error (hata); } Başka { label = results.className; // kendini çağırarak çıkarımı döngüye sok mobilenet.predict (gotResults); } } // kurulum işlevi function setup () { createCanvas (640, 550); // video çekimi oluşturmak için ml5 video = createCapture (VIDEO); video.hide (); arkaplan (0); // MobileNet'i yükleyin ve video beslemesine uygulayın mobilenet = ml5.imageClassifier ('MobileNet', video, modelReady); } function draw () { arkaplan (0); // videoyu göster görüntü (video, 0, 0); doldurma (255); textSize (32); // tahmin etiketini göster metin (etiket, 10, yükseklik-20); }

Bu iki dosyayı kaydedin ve ardından index.html dosyasını Google Chrome veya Mozilla Firefox gibi bir tarayıcıda açın. Bu kadar! Artık, web kameranızı, görüntüleri tarayıcının kendisinde gerçek zamanlı olarak sınıflandırmak için kullanabilen bir uygulama oluşturdunuz! Bilgisayarımda şöyle görünüyor:

Video bağlantısı:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2019/05/mobilenet_demo.mp4?_=1

Bu örnekte dikkat edilmesi gereken noktalar:

  • Yukarıdaki örnekte, önceden eğitilmiş bir görüntü sınıflandırma modeli MobileNet kullandık (https://ai.googleblog.com/2017/06/mobilenets-open-source-models-for.html)
  • TensorFlow üzerinde oluşturulmuş bir kitaplık olan ml5.js (https://ml5js.org/) kullanıyoruz. MobileNet modelini tarayıcıya yükler ve video beslemesinde çıkarım yapar.
  • Ayrıca, video girişini işlemek ve videonun kendisindeki görüntü etiketlerini işlemek için P5.js (https://p5js.org/) kitaplığını da kullanıyoruz.

Bilgisayara herhangi bir şey yüklememe gerek yok. Bu örnek, Linux, Windows veya MacOS olsun, herhangi bir modern sistem için geçerli olmalıdır - bu, web üzerinde modeller oluşturmak için JavaScript kullanmanın gücüdür.

Şimdi, TensorFlow.js tarafından sağlanan güçlü özelliklere ve tarayıcıda makine öğrenimi modellerini dağıtmak için bunların nasıl kullanılacağına bakalım.

1.2 TensorFlow.js'nin Özellikleri

TensorFlow.js, JavaScript geliştirme ve makine öğrenimi modellerinin eğitimi için kullanılan ve tarayıcı veya Node.js üzerinde dağıtılan bir kitaplıktır.

TensorFlow.js, kullanmamız için birçok işlev sağlar.

İnternette kullandığımız hemen hemen tüm web sitelerinin, tarayıcıların veya uygulama mantığının arkasındaki programlama dili olan JavaScript'te TensorFlow'un bir uzantısıdır. JavaScript, Python kadar çok yönlüdür, bu nedenle onu makine öğrenimi modelleri geliştirmek için kullanmak bize birçok avantaj sağlar:

  • ML modeli bir web dilinde yazıldıysa, dağıtımı daha kolaydır.
  • Tüm büyük tarayıcılar JavaScript'i desteklediğinden, platform türleri veya diğer uyumluluk sorunları hakkında endişelenmeden her yerde kullanabilirsiniz. Aynısı kullanıcılarınız için de geçerlidir.
  • TensorFlow.js bir istemci kitaplığıdır, yani kullanıcının tarayıcısında ML modellerini eğitebilir veya çalıştırabilir. Bu, veri gizliliğiyle ilgili endişeleri azaltır.
  • İstemcinizde gerçek zamanlı çıkarım çalıştırmak, uygulamalarınızı daha etkileşimli hale getirebilir çünkü kullanıcı girdilerine (daha önce oluşturduğumuz web kamerası uygulaması gibi) anında yanıt verebilirler.

TensorFlow.js, mevcut biçiminde aşağıdaki ana işlevleri sağlar:

  • Tarayıcıda makine öğrenimi: Tarayıcıda ML modelleri oluşturmak ve eğitmek için TensorFlow.js'yi kullanabilirsiniz.
  • Google'ın önceden eğitilmiş modeli: TensorFlow.js; nesne algılama, görüntü segmentasyonu, konuşma tanıma ve metin toksisitesi sınıflandırması gibi görevler için Google tarafından önceden eğitilmiş bir dizi modelle donatılmıştır.
  • Transfer öğrenimi: TensorFlow.js'de MobileNet gibi önceden eğitilmiş modelin parçalarını yeniden eğiterek aktarım öğrenimini gerçekleştirebilirsiniz.
  • Python modelini dağıtın: Keras veya TensorFlow kullanılarak eğitilen modeller, TensorFlow.js kullanılarak tarayıcıya kolayca aktarılabilir / dağıtılabilir.

Bu yazıda ilk iki işleve odaklanacağız. Bu dizinin ikinci bölümünde (çok yakında!), Öğrenmeyi nasıl aktaracağımızı ve modellerimizi Python'a nasıl yerleştireceğimizi tartışacağız.

2. Tarayıcıda makine öğrenimi

TensorFlow.js, modeli eğitmek için iki yöntem sağlar (TensorFlow'a çok benzer):

  • İlk yöntem, modeli düşük seviyeli tensör işlemlerini kullanarak tanımlamak için Core API'yi kullanmaktır.
  • İkinci yöntem, Keras'a benzer şekilde modeli tanımlamak için Katmanlar API'sini kullanmaktır.

Bu iki yöntemi birkaç örnekle anlayalım. Sonuçta, bir kavramı öğrenmenin en iyi yolu onu uygulamaya koymaktır!

İlk önce HTML dosyanızı ayarlayın:

Bilgisayarınızda yeni bir index.html dosyası oluşturun ve içine aşağıdaki kodu yazın:

< html lang = "en" > < baş > < meta karakter kümesi = "UTF-8" > < meta name = "görünüm alanı" content = "genişlik = cihaz genişliği, ilk ölçek = 1.0" > < meta http-equiv = "X-UA-Uyumlu" içerik = "ie = kenar" > < ! - Tensorflow.js yükle - > < script src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js" > < /senaryo > < / kafa > < vücut > < h1 > Tensorflow.js Core API < / h1 > < ! - < script src = "index.js" > < /senaryo > - > < script type = "text / javascript" > < /senaryo > < /vücut > < / html >

Temel bir HTML sayfası oluşturduk ve Tensorflow.js'yi bulut URL'sinden (satır 7) yükledik.

TensorFlow.js'yi (deeplearn.js) yükleme talimatları:

TensorFlow.js tarayıcılar için tasarlandığından, TensorFlow.js'yi kurmanın ve kullanmanın en kolay yolu onu hiç kurmamaktır. Bunu HTML'deki URL'den kolayca yükleyebilirsiniz.

Ya yerel olarak çalışmak istersen? Aslında, normalde Python veya R'de yaptığınız gibi, Jupyter Notebook'ta TensorFlow.js'yi kullanabilirsiniz. Bu herkes için bir çözüm!

Bu yerel yöntem biraz daha uzundur ve biraz zaman alır, bu nedenle bu makale onu kullanmayacaktır. Gerçekten nasıl yapılacağını öğrenmek istiyorsanız, Jupyter için ijavascript çekirdeğini kurarak başlayabilirsiniz. Aşağıda Jupyter Not Defterimin bir ekran görüntüsü var:

Şimdi, TensorFlow.js'yi kullanmanın önerilen yolu, onu doğrudan kütüphanenin resmi URL'sini kullanarak yüklemektir. HTML dosyasına yalnızca aşağıdaki satırı eklemeniz gerekir:

< scriptsrc = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js" > < /senaryo >

bitti! Gerçekten çok basit.

2.1 Core API: Tensörlerle Çalışma

Core API, TensorFlowCore'a çok benzer, modelleri tanımlamak için düşük seviyeli tensör işlemlerini ve doğrusal cebiri kullanabiliriz.

Özel bir model oluşturmak istiyorsak veya sıfırdan bir sinir ağı kurmak istiyorsak bu çok kullanışlıdır. Tarayıcıda tensör kullanımına bir örnek verelim.

İndex.html dosyasında ilk < senaryo > < /senaryo > Aşağıdaki kodu etiketlerin arasına ekleyin:

const a = tf.tensor (); const b = tf.tensor (); const y = a.add (b); // tf.add (a, b) ile eşdeğerdir const z = a.mul (b); y.print (); z.print ();

< senaryo > Etiketi temelde JavaScript anlamına gelir. Bu etiketler arasında yazdığımız her şey JavaScript kodu olarak çalıştırılacaktır. İşte index.html şu anda nasıl görünüyor:

< html lang = "en" > < baş > < meta karakter kümesi = "UTF-8" > < meta name = "görünüm alanı" content = "genişlik = cihaz genişliği, ilk ölçek = 1.0" > < meta http-equiv = "X-UA-Uyumlu" içerik = "ie = kenar" > < ! - Tensorflow.js yükle - > < script src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js" > < /senaryo > < / kafa > < vücut > < h1 > Tensorflow.js Core API < / h1 > < ! - < script src = "index.js" > < /senaryo > - > < script type = "text / javascript" > const a = tf.tensor (); const b = tf.tensor (); const y = a.add (b); // tf.add (a, b) ile eşdeğerdir const z = a.mul (b); // tf.mul (a, b) ile eşdeğerdir y.print (); z.print (); < /senaryo > < /vücut > < / html >

Yukarıdaki kodda, iki tensör a ve b üzerinde temel toplama ve çarpma işlemlerini gerçekleştiriyoruz ve sonuçları tarayıcıda yazdırıyoruz. Şimdi terminale gidin, proje klasörünü açın ve aşağıdaki komutla Python sunucusunu başlatın:

python3 -m http.server

Ardından tarayıcınızda aşağıdaki adresi açın:

http: // localhost: 8000 /

"Tensorflow.js Core API" yazan bir sayfa gördüğünüzde, konsolu açmak için Ctrl + Shift + I tuşlarını kullanın. Bu hem Chrome hem de Firefox'ta çalışmalıdır. Konsolda yukarıdaki işlemin çıktısını alıyoruz:

Core API hakkında daha fazlasını derinlemesine okumak istiyorsanız, resmi CoreAPI belgelerini okumanızı öneririm.

CoreAPI belgeleri:

https://www.tensorflow.org/js/guide/tensors_operations

2.2 Katman API: Keras gibi modeller oluşturun

Layers API, Python'daki Keras'a çok benzer. Keras gibi, modelleri oluşturmak için sıralı ve işlevsel yöntemler kullanabilirsiniz.

Sıra yöntemine bir örnek aracılığıyla daha yakından bakalım. Regresyon modelini şu veri noktaları üzerinde eğiteceğiz:

Burada, X ve Y'nin doğrusal bir ilişkisi vardır - her Y, X + i'ye karşılık gelir (burada i, 0, 1, 2, 3 ... n + 1'dir). Bu veri seti üzerinde temel bir regresyon modeli eğitelim. İndex.html dosyasında yapabilirsiniz < senaryo > < /senaryo > Aşağıdaki kodu etiketlerin arasına yazın:

const callbacks = { onEpochEnd: eşzamansız (dönem, günlükler) = > { console.log ("epoch:" + epoch + JSON.stringify (günlükler)) } }; // Eğitim için bazı sentetik veriler oluşturun. const xs = tf.tensor2d (,); const ys = tf.tensor2d (,); // Modeli oluşturun ve derleyin. async function basicRegression () { // Sıralı bir model oluşturun const model = tf.sequential (); model.add (tf.layers.dense ({units: 1, inputShape:})); model.add (tf.layers.dense ({units: 1, inputShape:})); model.compile ({iyileştirici: 'sgd', kayıp: 'meanSquaredError'}); // Modeli fit () ile eğitin. model.fit (xs, ys, {epochs: 100, validationSplit: 0.1, geri aramalar: geri aramalar}); // tahmin () ile çıkarım çalıştırın. model.predict (tf.tensor2d (,)). print (); } // Temel bir regresyon modeli oluşturun basicRegression ();

Meraklı okuyucular, Python'da sıralı modeller oluşturmak için yukarıdaki sözdiziminin Keras sözdizimine çok benzer olduğunu fark etmiş olmalıdır. Tarayıcı konsoluna geri döndüğümüzde tahminler alıyoruz.

Basit regresyon modelimiz, beklenen 8 değerine çok yakın olan 7.556'yı öngörür. Bu temel bir örnektir, ancak doğrudan tarayıcıda makine öğrenimi modelleri oluşturmanın ne kadar kolay ve yararlı olduğunu açıkça görebiliriz.

TensorFlow.js, tarayıcıda makine öğrenimi ve derin öğrenme modelleri oluşturabilir. Ayrıca, sistem modeli eğitiminiz sırasında mevcutsa, GPU'ların gücünü otomatik olarak kullanır.

Aşağıda, TensorFlow.js kullanılarak bazı standart veri kümeleri üzerinde eğitilmiş derin öğrenme modellerine ilişkin bazı örnekler verilmiştir:

Bu örneklere tfjs-samples deposunda göz atabilirsiniz.

tfjs-örnekler deposu:

https://github.com/tensorflow/tfjs-examples

3. Google'ın eğitim öncesi modelini kullanın: PoseNet

TensorFlow.js, hedef algılama, konuşma tanıma, görüntü segmentasyonu vb. Gibi birçok yararlı görev için Google'dan çok sayıda önceden eğitilmiş model sağlar. Önceden eğitilmiş modellerin avantajı, bunları herhangi bir büyük bağımlılık veya kurulum olmadan kullanabilmemiz ve kutudan çıkarılmadan kullanılabilmeleridir.

Google'ın önümüzdeki aylarda daha fazla model sunması bekleniyor. Mevcut önceden eğitilmiş modelleri aşağıdaki bağlantıdan görüntüleyebilirsiniz:

İlgili Bağlantılar:

https://www.tensorflow.org/js/models

Bu yazıda PoseNet kullanacağız. PoseNet, insan vücudunun kilit eklemlerinin konumlarını tahmin ederek bir kişinin bir görüntü veya videodaki pozunu tahmin edebilen görsel bir modeldir.

PoseNet nasıl çalışır?

Bu büyüleyici bir kavram. Poz tahmini, görüntüleri ve videolardaki insanları tespit etmek için kullanılan bir bilgisayarla görme teknolojisidir. Örneğin bu, bir kişinin dirseğinin resimde nerede göründüğünü belirlememize yardımcı olabilir.

Açıkça ifade etmek gerekirse, bir görüntüde kimin olduğunu belirlemekle ilgili değildir. Algoritma basitçe temel vücut eklemlerinin konumunu tahmin eder.

Tespit edilen anahtar noktalar "Parça" ve "Kimlik" dizinlerine ayarlanır ve güvenirlik puanı 0,0 ile 1,0 arasındadır (en yüksek değer 1,0'dır).

Aşağıda, PoseNet tarafından verilen çıktı türünün bir örneği verilmiştir:

İnanılmaz, değil mi? ! PoseNet'i kullanmak için ml5.js kütüphanesini kullanacağız. ml5.js, TensorFlow.js ve p5.js tabanlı bir kitaplıktır. p5.js, tarayıcıda web kamerasına erişmenizi kolaylaştıran başka bir kitaplıktır.

ml5.js, makine öğrenimini sanatçılar, yaratıcı kodlayıcılar ve öğrenciler için erişilebilir hale getirmeyi amaçlamaktadır. Kitaplık TensorFlow.js tabanlıdır ve basit bir sözdizimi aracılığıyla tarayıcıdaki makine öğrenimi algoritmalarına ve modellerine erişim sağlar.

Örneğin, aşağıda gösterildiği gibi 5 satır kodda MobileNet kullanarak bir görüntü sınıflandırma modeli oluşturmak için ml5.js kullanabilirsiniz:

Tarayıcıda hızlı prototipleme için çok uygun kılan Ml5.js'nin basitliğidir, bu yüzden projelerimizde kullanıyoruz.

PoseNet'e dönelim. Yeni bir index.html dosyası oluşturun ve aşağıdaki kodu ekleyin:

< html lang = "en" > < baş > < meta karakter kümesi = "UTF-8" > < meta name = "görünüm alanı" content = "genişlik = cihaz genişliği, ilk ölçek = 1.0" > < meta http-equiv = "X-UA-Uyumlu" içerik = "ie = kenar" > < ! - p5.js yükle - > < script src = "https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js" > < /senaryo > < script src = "https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/addons/p5.dom.min.js" > < /senaryo > < ! - ml5.js yükle - > < script src = "https://unpkg.com/ml5@0.2.3/dist/ml5.min.js" type = "text / javascript" > < /senaryo > < ! - videoyu tarayıcının merkezinde tutun - > < stil türü = "metin / css" > vücut{ metin hizalama: merkez; } < / stil > < / kafa > < vücut > < h1 > Ml5.js ile PoseNet demosu < / h1 > < p id = "durum" > Model Yükleniyor ... < / p > < div id = "videoContainer" > < / div > < ! - posenet.js dosyasını yükleyin - > < script src = "posenet.js" > < /senaryo > < /vücut > < / html >

Bu, temel bir HTML sayfası oluşturacak ve gerekli dosyaları yükleyecektir.

  • ml5.js ve p5.js resmi URL'leri üzerinden yüklenir.
  • posenet.js, PoseNet'i kullanmak için kodu yazacağımız dosyadır.

Şimdi, PoseNet'i kullanmak için JavaScript kodu yazacağız. İndex.html ile aynı klasörde yeni bir posenet.js dosyası oluşturun. Bu görevi tamamlamak için gereken adımlar şunlardır:

  • PoseNet modelini yükleyin ve web kamerasından video çekin
  • Vücut eklemlerini tespit etmek için anahtar noktalar
  • Algılanan vücut eklemlerini görüntüleyin
  • Tahmini vücut kemiklerini çizin
  • İlk adımla başlayalım.

    Adım 1: PoseNet modelini yükleyin ve web kamerasından video yakalayın

    PoseNet'i yüklemek için ml5.js kullanacağız. Aynı zamanda, p5.js bir web kamerasından birkaç satır kodla video çekmemize olanak tanır:

    hadi video; poseNet edelim; hadi pozlar =; function setup () { const canvas = createCanvas (640, 480); canvas.parent ('videoContainer'); // Video yakalama video = createCapture (VIDEO); video.size (genişlik, yükseklik); // Tek bir algılama ile yeni bir poseNet yöntemi oluşturun poseNet = ml5.poseNet (video, modelReady); // Bu, genel değişken "pozlar" ı dolduran bir olay oluşturur // her yeni poz algılandığında bir dizi ile poseNet.on ('poz', function (sonuçlar) { pozlar = sonuçlar; }); function modelReady () { select ('# durum']. html ('model Yüklendi') }

    Yukarıdaki kod bloklarından en önemlileri şunlardır:

    • createCapture (VIDEO): Video öğeleri oluşturmak için kamera aracılığıyla video çekmek için kullanılan bir p5.js işlevidir.
    • ml5.poseNet (video, modelRead): poseNet modelini yüklemek için ml5.js kullanıyoruz. Videoyu ileterek, modele video girişini işlemesini söyleriz.
    • PoseNet.on (): Bu işlev, yeni bir poz algılandığında çalıştırılır.
    • modelReady (): PoseNet yüklemeyi bitirdiğinde, modelin durumunu görüntülemek için bu işlevi çağırırız.

    2. Adım: Vücut eklemlerinin kilit noktalarını kontrol edin

    Bir sonraki adım, duruşu tespit etmektir. Önceki adımlarda, tespit edilen her bir pozu, poseNet.on () 'u çağırarak poz değişkenine kaydettiğimizi fark etmiş olabilirsiniz. Bu işlev arka planda sürekli olarak çalışır. Yeni bir poz bulunduğunda, vücut eklemlerinin konumunu aşağıdaki formatta verecektir:

    • 'Puan' Modelin güvenini ifade eder
    • 'Bölüm' Tespit edilen vücut eklemlerini / kilit noktaları gösterir
    • 'durum' Tespit edilen parçanın x ve y konumlarını içerir

    Bu bölüm için kod yazmak zorunda değiliz çünkü otomatik olarak üretiliyor.

    3. Adım: Tespit edilen insan eklemlerini görüntüleyin

    Tespit edilen insan eklemlerini ve x ve y konumlarını biliyoruz. Şimdi, tespit edilen insan eklemlerini göstermek için onları videoya çizmemiz gerekiyor. PoseNet'in tespit edilen insan eklemlerinin bir listesini ve her eklemin güven skorunu ve x ve y konumunu verdiğini gördük.

    % 20 eşik kullanacağız (keypoint.score > 0.2) Kilit noktayı çizmek için güven puanı. Bunu başarmak için gereken kod:

    // Algılanan anahtar noktaların üzerine üç nokta çizen bir işlev function drawKeypoints () { // Algılanan tüm pozlarda döngü yapın for (let i = 0; i < poses.length; i ++) { // Algılanan her poz için tüm temel noktalarda döngü yapın bırak poz = pozlar .poz; for (let j = 0; j < poz.keypoints.length; j ++) { // Bir anahtar nokta, bir vücut bölümünü tanımlayan bir nesnedir (rightArm veya leftShoulder gibi) let keypoint = poz.keypoints; // Poz olasılığı 0.2'den büyükse sadece bir elips çizin eğer (keypoint.score > 0.2) { doldurma (255, 0, 0); noStroke (); elips (keypoint.position.x, keypoint.position.y, 10, 10); } } } }

    4. Adım: Tahmini vücut iskeletini çizin

    PoseNet, kilit noktalara veya vücut eklemlerine ek olarak tahmini vücut iskeletlerini de algılayabilir. İskeleti çizmek için poz değişkenini kullanabiliriz:

    // İskeletleri çizmek için bir işlev function drawSkeleton () { // Tespit edilen tüm iskeletler arasında döngü yapın for (let i = 0; i < poses.length; i ++) { iskelet = pozlar olsun . iskelet; // Her iskelet için tüm vücut bağlantılarını dolaşın for (let j = 0; j < skeleton.length; j ++) { partA = iskelet olsun; partB = iskelet olsun; vuruş (255, 0, 0); satır (bölümA konumu.x, bölümA konumu.y, bölümB konumu.x, bölümB konumu.y); } } }

    Burada, tespit edilen iskeletin üzerinden geçerek kilit noktaları birleştiren çizgiler oluşturuyoruz. Kod hala oldukça basit.

    Şimdi, son adım, art arda drawSkeleton () ve drawKeypoints () işlevlerini ve web kamerasından yakaladığımız video kaynağını çağırmaktır. Bunu başarmak için p5.js'nin draw () işlevini kullanabiliriz, bu, setup () 'dan hemen sonra çağrılır ve tekrar tekrar çalıştırılır:

    function draw () { resim (video, 0, 0, genişlik, yükseklik); // Tüm anahtar noktaları ve iskeletleri çizmek için her iki işlevi de çağırabiliriz drawKeypoints (); drawSkeleton (); }

    Ardından, terminal penceresine gidin, proje klasörüne girin ve Python sunucusunu başlatın:

    python3 -m http.server

    Ardından tarayıcınıza gidin ve aşağıdaki adresi açın:

    http: // localhost: 8000 /

    Bak! PoseNet'iniz vücut duruşunuzu iyi algılamalıdır (tüm adımları doğru bir şekilde izlediyseniz). Aşağıdaki modelimin durumu:

    Son not

    TensorFlow.js'yi neden sevdiğimi anlayabilirsiniz. Çok verimlidir ve bir model oluştururken karmaşık kurulum adımları hakkında endişelenmenizi bile gerektirmez.

    TensorFlow.js, makine öğrenimini tarayıcıya getirerek makine öğrenimini daha erişilebilir hale getirmek için pek çok olasılık sergiliyor. Aynı zamanda veri gizliliği ve etkileşim gibi avantajları da vardır. Bu kombinasyon, özellikle makine öğrenimi uygulamalarınızı dağıtmak istiyorsanız, onu veri bilimcinin araç kutusunda çok güçlü bir araç haline getirir.

    Sonraki makalede, tarayıcıda aktarım öğrenmenin nasıl uygulanacağını keşfedeceğiz ve TensorFlow.js kullanarak makine öğrenimi veya derin öğrenme modellerini dağıtacağız.

    PoseNet ile projemiz bir adım daha ileri gidebilir ve başka bir sınıflandırıcıyı eğiterek bir jest tanıma uygulaması oluşturabilir. Denemenizi tavsiye ederim!

    Orjinal başlık:

    Tarayıcınızda TensorFlow.js ve Python kullanarak bir Makine Öğrenimi Modeli oluşturun

    Orijinal bağlantı:

    https://www.analyticsvidhya.com/blog/2019/06/build-machine-learning-model-in-your-browser-tensorflow-js-deeplearn-js/

    Çevirmen Profili

    Wu Jindi , Syracuse Üniversitesi Bilgisayar Bilimleri Yüksek Lisansının ilk yılı. Zorluklarla yüzleşmek benim için en rahat durumdur, yapamadığım şeylere katlanmaya meyilliyim. Amacım erken yatıp erken kalkan bir Havalı Kız olmak.

    - Bitiş -

    Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

    Yapay zeka "yapay zeka geriliği" mi oluyor? Yeni nedensellik bilimi
    önceki
    Yapay zekanın hangi bölümünden sorumlusunuz? Bilgi grafiğinin oluşturulması esas olarak insanlara mı yoksa makinelere mi dayanıyor?
    Sonraki
    Roger Data: Yaşam döngüsü dinamik simülasyon teknolojisi ve vergilendirmedeki uygulaması üzerine bir ön çalışma
    360 cep telefonu işi askıya alındı; 37 şehrin ortalama aylık maaşı 8,452 yuan ...
    Dünya Çölleşme ve Kuraklıkla Mücadele Günü: Sarı topraklar yeşil canlılıkla yeniden ortaya çıksın
    NLP'ye yeni başlayanlar için paylaşılacak 8 ücretsiz kaynak
    AI istihdam sıralaması: makine öğrenimi işleri listeye hakim ve AI işlerine olan talep yavaşlıyor (liste ektedir)
    Riskleri önleyin, gizli tehlikeleri ortadan kaldırın, kazaları azaltın ve inşaat sektöründe güvenli üretim için sağlam bir temel atın
    QS en son dünya üniversite sıralaması yayınlandı, Tsinghua ve Peking Üniversitesi tarihteki en yüksek sıralamayı kazandı
    Derin sinir ağına dayalı rüzgar çiftliği ultra kısa vadeli güç tahmin sistemi
    Çin'in Weihai Sahil Şeridi'nin 2019 Ulusal Trekking Konferansı başarıyla gerçekleştirildi
    XGBoost'a Giriş: Yaşam beklentisini tahmin etmek için denetimli öğrenmeyi kullanma
    Yi County, Anhui: Lotus Göleti ve Cuiying
    Steam High oyun girişi makine öğrenimi övgü! Kod yok, herkes oynayabilir, Çince versiyonu piyasaya sürüldü
    To Top