İçindekiler:

RoboPhoto - Halk için Mozaik Oluşturucu: 4 Adım
RoboPhoto - Halk için Mozaik Oluşturucu: 4 Adım

Video: RoboPhoto - Halk için Mozaik Oluşturucu: 4 Adım

Video: RoboPhoto - Halk için Mozaik Oluşturucu: 4 Adım
Video: Elimi kestim. Demir kanaması deneyi #kimya #shorts 2024, Kasım
Anonim
Image
Image
RoboPhoto - Halk için Mozaik Oluşturucu
RoboPhoto - Halk için Mozaik Oluşturucu
RoboPhoto - Halk için Mozaik Oluşturucu
RoboPhoto - Halk için Mozaik Oluşturucu

RoboPhoto, gerçek zamanlı bir fotomozaik oluşturucudur

RoboPhoto, siz beklerken kullanıcılarının bir fotomozaikini oluşturur.

RoboPhoto, görüntü işleme, yüz tanıma ve yapay zeka gibi modern dijital teknikleri kullanarak, yanından geçen ve düğmesine basan tüm ziyaretçilerin gerçek zamanlı bir fotomozaikini oluşturma yeteneğine sahiptir.

Düğmeye her basıldığında, eldeki kişinin bir fotoğrafı çekilir. Anında her fotoğraf RoboPhoto tarafından taranır ve yorumlanır. RoboPhoto yazılımı daha sonra tüm bireysel görüntüleri değiştirecek ve böylece daha büyük bir görüntünün parçası haline gelecek ve daha sonra bu değiştirilmiş resmi, daha büyük görüntü içindeki her fotoğrafın konumunu gösteren bir dizi koordinatla etiketlenmiş bir etikete yazdıracaktır. Daha sonra her ziyaretçiden, yalnızca ilgili bir ızgara içeren daha büyük bir tuval üzerine kendi fotoğraf çıkartmasını yerleştirmesi istenir.

RoboPhoto'nun çalışması sırasında yeni bir görüntü oluşturulacaktır. Önceden tanımlanmış bir 'hedef imajı' taklit edecek bu bireysel fotoğraflardan oluşan bir fotomozaik.

RoboPhoto ayrıca tek kullanıcı modunda da çalışır. Bu şekilde yapılandırıldığında, RoboPhoto tek bir kullanıcının tam bir mozaiğini oluşturur.

Gereçler

  • Visual Studio ve IoT paketleri yüklü bir Windows 10 PC
  • Microsoft Windows 10 IoT yüklü bir Raspberry Pi 3B+
  • Renkli etiket yazıcısı (Brother VC-500W)
  • Kullanıcı girişi için bir kaide üzerine monte edilmiş büyük bir kırmızı buton
  • Kullanıcı geri bildirimi için bir HDMI ekranı
  • Fotoğraf çekmek için oğlumdan çalınan bir Microsoft Xbox Kinect v2 kamera
  • Bir ağ (Wifi, LAN)
  • Bir hedef ızgarası. Koordinatlarla dolu, üzerine ızgara basılmış bir kağıt yaprağı. Bu kağıt ızgara, ziyaretçilerin fotoğraflarını belirlenen koordinatlara yapıştırabilecekleri bir tuval olarak kullanılır. Ve sonunda birlikte nihai sonucu oluşturacaklar: yeni ve güzel bir fotomozaik.

Derinlik görüntüleri çekebildiği için icrosoft Kinect 2.0 kamera kullanılmıştır. Bu özellik, her bir fotoğrafta sanal bir yeşil ekran oluşturmak için kullanılır. Bu şekilde RoboPhoto, her bir fotoğrafın arka planını, olası mozaik içindeki hedef parçanın rengiyle eşleştirmek için yeniden boyayabilir.

Adım 1: Nasıl Çalışır?

Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?
Nasıl Çalışır?

RoboPhoto, üzerinde büyük kırmızı bir düğme bulunan bir kaide, etiket yazıcısı takılı bir bilgisayar ve Kullanıcı Arayüzünü (ekran ve düğme) yöneten küçük bir IoT cihazından oluşan bir kurulumdur. Benim durumumda: bir RaspBerry 3B+.

  1. RoboPhoto, herkesin erişebileceği bir yerde çalışır ve (açtıktan sonra) kendi kendine çalışır. Koşarken, geçen ziyaretçiler RoboPhoto tarafından büyük kırmızı düğmeye basmaya teşvik edilir.
  2. O büyük kırmızı düğmeye her basıldığında, RoboPhoto, Kinect kamerasıyla düğmeye yeni basan ziyaretçinin fotoğrafını çeker.
  3. Ardından RoboPhoto gelişmiş yapay zekasını kullanacak. ve mozaiğin içindeki bir parçaya uyacak şekilde her fotoğrafı değiştirmek için görüntü işleme becerileri. Bunu başarmak için RoboPhoto, önceden yüklenmiş bir görüntüdeki hedef parçanın rengiyle eşleşmesi için her fotoğrafın arka planını yeniden boyar. Düzenlemeden sonra, RoboPhoto, düzenlenen fotoğrafı, mozaik içindeki bu tek çıkartmanın yerini tam olarak belirleyen bir dizi koordinatla birlikte bir çıkartmaya yazdırır.

  4. Daha sonra kullanıcıdan çıkartmayı mozaik hedef sayfasına yerleştirmesi istenir.
  5. Ve böylece – birçok insan ziyaret ettikten sonra – yeni bir sanat eseri ortaya çıkacak. Mozaik oluşturmak için çok sayıda ayrı parçaya ihtiyacınız olacak. 600 parça ile iyi sonuçlar aldım.

RoboPhoto ayrıca tek kullanıcı modunda da çalışabilir.

Bu yapılandırmada RoboPhoto, tek bir kullanıcıdan düzenlenmiş fotoğrafların tam bir mozaiğini oluşturur. Düğmeye bastıktan sonra, RoboPhoto, kullanıcının yaklaşık 600 farklı fotoğrafını çekecek ve ardından hepsini, önceden seçilmiş bir hedef görüntüden sonra oluşturulan tek bir yeni mozaik oluşturacak şekilde düzenleyecek ve düzenleyecektir.

Adım 2: Donanımın Montajı

Donanımın Montajı
Donanımın Montajı
Donanımın Montajı
Donanımın Montajı

Yukarıdaki resimde görüldüğü gibi Win 10 PC, Kinect kamerasına bağlıdır. Kinect, USB 3.0 ile bağlanmalıdır. RoboPhoto'yu oluşturduğum sırada - USB 3.0'lı Raspberry Pi mevcut değildi.*

PC ayrıca, takılı etiket yazıcısına yazdırma yapmak için de kullanılır. Benim durumumda bir Brother VC-500W. Oldukça ucuz bir ev tipi renkli etiket yazıcısı. Ancak çok çok yavaştır. Mümkünse profesyonel bir tane kullanmak daha iyidir.

Büyük Kırmızı Düğme, bir Raspberry Pi 3B+'a takılıdır. GPIO'ya yalnızca 4 kablo bağlanmıştır. Bu, bu Talimatta yapılması gereken tek lehimlemedir. Pi ayrıca HDMI üzerinden 7'' TFT ekran aracılığıyla ziyaretçimize geri bildirim sağlar.

Toparlamak için, tüm bu bileşenleri tutan ahşap bir kaide yaptım.

Kaidenin yanına, duvara karşı, hedef ızgarayı ve koordinatları içeren bir kağıt yaprağı yerleştirilir (A1/A2). Kullandığım etiket yazıcısı, etiket genişliği = 2, 5 cm ile maksimuma çıktığı için, bu ızgaradaki tüm kareler 2,5 cm x 2, 5 cm ölçülerindedir.

*Bugün, Raspberry Pi4, USB3.0 sunuyor. Alse W10 cihaz üzerinde çalıştırılabilir. Dolayısıyla, bir PC kullanmadan bir RoboPhoto v2.0 oluşturmak teorik olarak mümkün olmalıdır. Belki de Covid '19 bana böyle bir Eğitilebilir Tabloyu yakında yayınlamak için yeterli zamanı sağlayacaktır.

Adım 3: Kodu Yazma

Kodu Yazma
Kodu Yazma
Kodu Yazma
Kodu Yazma

kod

RoboPhoto, VisualStudio ile iki projeli bir çözüm olarak oluşturuldu:

  1. Bilgisayardaki bir Windows Forms uygulaması, bir TCP sunucusunu barındırıyor ve Kinect girişini yönetiyor
  2. Bir Raspberry Pi 3B+, Button press olaylarını işlemek ve 7'' TFT ekranı aracılığıyla kullanıcıya geri bildirim sağlamak için UWP başlı bir uygulamada (başlangıç uygulaması olarak ayarlanmış) bir TCP istemcisini barındırır.

Yukarıdaki şemada size soft'umun ne yaptığı hakkında bir fikir vermeye çalıştım. Bunu oluşturmak için yazdığım Visual Studio (kesinlikle %100 çalışıyor) RoboPhoto çözümü, bu Eğitilebilir Dosya ile sağlanır. Ancak bu dosyayı indiren herkesi uyarmalıyım: Yazdığım kod güzel olmaktan çok uzak ve genellikle geliştirici bilgisayarıma bağlı. Bu yüzden herkesi daha iyi, daha hoş ve daha istikrarlı bir çözüm yaratmaya teşvik ediyorum.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Örnek kodda, Pi'nin kodu Visual Studio aracılığıyla ağımdaki bir IPAdresi'ne dağıtılır. Muhtemelen bunu kendinize uyacak şekilde değiştirmelisiniz. Bunu yapmak için - çözümü Visual Studio'da açtıktan sonra ARM istemci projesine sağ tıklayın, ardından özellikleri seçin ve Remote machine değerini kendi Pi'nizin IPAdresi olarak değiştirin. Ayrıca, sunucudaki (PC) Windows Güvenlik Duvarı'ndaki 8123 numaralı bağlantı noktasında istemciden sunucuya giden trafiğe izin vermeniz gerekir. Çözümü Visual Studio'dan çalıştırırsanız, sizden bunu U için yapmanızı istemelidir.

Kodlama yaparken W32 ve UWP'nin düzgün iletişim kurmasını sağlamakta çok sorun yaşadım. İstemci ve sunucuda iki ayrı sınıf kullanarak çalışmasını sağladım: resp MyEchoClient.cs (ARM istemcisinde) ve ConnectionClient.cs (sunucuda istemci bağlantılarını yönetme).

Mozaik dosyaları - özel sınıf

RoboPhoto, bir hedef görüntüyü taklit etmek için mozaikler oluşturur. Bu hedef görüntü ve birlikte mozaiği oluşturan tüm bireysel fotoğraflar ve her RoboPhoto'nun diğer bazı özellikleri bir dosya sistemindeki dosyalarda saklanır. Eşlik eden kodum, c:\tmp\MosaicBuilder dizininde bir dizi dosya ve klasör kullanır. Bu klasör içinde kod, [prj_] ile başlayan bir klasör adına sahip tüm alt klasörleri mozaik proje klasörleri olarak okuyacaktır. Tüm bu [prj_] klasörleri içinde, her proje için gerekli tüm bilgileri içeren [_projectdata.txt] adlı bir proje dosyasını açmaya çalışacaktır.

Böyle bir proje dosyası şunlardan oluşur:

  1. bu projenin hedef görüntüsünün tam yolu ve dosya adı
  2. bu projenin bireysel fotoğraflarının (parçalarının) depolandığı tam yol
  3. Mozaiğin içereceği sütun sayısı
  4. Mozaiğin içereceği satır sayısı

Örnek projeler zip dosyasında verilmiştir: \slnBBMosaic2\wfMosaicServerKinect\bin\x86\Debug\prj_xxx

C# sunucu kodunda, tüm mozaik işleme özel bir sınıf aracılığıyla yapılır: BBMosaicProject.cs

Microsoft Kinect v2.0 - Yeşil ekran

Sadece fotoğraf çekmek için herhangi bir kamera yapacaktır. Ancak renkli görüntüleri ve derinlik görüntülerini birleştirmek için Microsoft Kinect v2.0'ı kullandım. Bu şekilde bir yeşil ekran efekti oluşturulabilir. Kinect'ten alınan tüm renkli görüntülerdeki arka plan, tek tip yeşil bir yüzeyle değiştirilecektir (BBBackgroundRemovalTool.cs).

Sunucu projesine bir Microsoft. Kinect referansı eklendi.

EMGU

Düğmeye basıldığında çekilen fotoğrafta bir kişinin olduğundan emin olmamız gerektiğinden, RoboPhoto'ya yüz tanıma özellikleri eklendi.

www.nuget.org/packages/Emgu. CV/3.4.3.3016

Sadece bir kişi resmin içinde olduğunda, bu resimdeki yeşil ekran, mozaikte hedef parçanın ortalama rengine eşit renk kodlarıyla, tek tip renkli bir yüzey ile değiştirilecektir - bu resim olacaktır.

4. Adım: Teşekkürler

Teşekkürler
Teşekkürler

Eğitilebilirliğimi okuduğunuz için teşekkür ederim. Bu benim ilkimdi. Umarım keyif almışsındır.

Önerilen: