Πίνακας περιεχομένων:

RoboPhoto - Mosaic Generator for the Public: 4 Βήματα
RoboPhoto - Mosaic Generator for the Public: 4 Βήματα

Βίντεο: RoboPhoto - Mosaic Generator for the Public: 4 Βήματα

Βίντεο: RoboPhoto - Mosaic Generator for the Public: 4 Βήματα
Βίντεο: 🚀 RUTUBE и ТОЧКА. Разработка РУТУБА за 5 часов *БЕЗ ВОДЫ* [Next / React / Nest / PostgreSQL / Redux] 2024, Νοέμβριος
Anonim
Image
Image
RoboPhoto - Mosaic Generator for the Public
RoboPhoto - Mosaic Generator for the Public
RoboPhoto - Mosaic Generator for the Public
RoboPhoto - Mosaic Generator for the Public

Το RoboPhoto είναι μια φωτομοσαϊκή γεννήτρια σε πραγματικό χρόνο

Το RoboPhoto δημιουργεί ένα φωτομοσαϊκό των χρηστών του - ενώ περιμένετε.

Χρησιμοποιώντας σύγχρονες ψηφιακές τεχνικές όπως η επεξεργασία εικόνας, η αναγνώριση προσώπου και η τεχνητή νοημοσύνη, το RoboPhoto είναι σε θέση να δημιουργήσει ένα φωτομοσαϊκό όλων των επισκεπτών που περνούν και πατούν το κουμπί του-σε πραγματικό χρόνο.

Κάθε φορά που πατάτε το κουμπί, λαμβάνεται μια φωτογραφία του προσώπου. Αμέσως κάθε φωτογραφία σαρώνεται και ερμηνεύεται από το RoboPhoto. Το λογισμικό RoboPhoto θα αλλάξει όλη την μεμονωμένη εικόνα - έτσι θα γίνει μέρος μιας μεγαλύτερης εικόνας και στη συνέχεια θα εκτυπώσει αυτήν την τροποποιημένη εικόνα σε ένα αυτοκόλλητο με ετικέτα με ένα σύνολο συντεταγμένων που υποδεικνύουν τη θέση κάθε φωτογραφίας σε αυτήν τη μεγαλύτερη εικόνα. Στη συνέχεια, κάθε επισκέπτης καλείται να τοποθετήσει το δικό του αυτοκόλλητο φωτογραφιών σε έναν μεγαλύτερο καμβά που περιέχει μόνο ένα αντίστοιχο πλέγμα.

Κατά τη λειτουργία του RoboPhoto, θα δημιουργηθεί μια νέα εικόνα. Ένα φωτομοσαϊκό που αποτελείται από αυτές τις μεμονωμένες φωτογραφίες που θα μιμούνται μια προκαθορισμένη «εικόνα-στόχο».

Το RoboPhoto λειτουργεί επίσης σε λειτουργία ενός χρήστη. Όταν διαμορφωθεί με αυτόν τον τρόπο, το RoboPhoto δημιουργεί ένα πλήρες ψηφιδωτό ενός χρήστη.

Προμήθειες

  • Υπολογιστής Windows 10 με εγκατεστημένα πακέτα Visual Studio και IoT
  • Ένα Raspberry Pi 3B+ με εγκατεστημένο το Microsoft Windows 10 IoT
  • Έγχρωμος εκτυπωτής ετικετών (Brother VC-500W)
  • Ένα μεγάλο κόκκινο κουμπί τοποθετημένο σε βάθρο για εισαγωγή χρήστη
  • Οθόνη HDMI για σχόλια χρηστών
  • Μια κάμερα Microsoft Xbox Kinect v2- έκλεψε από τον γιο μου- για λήψη φωτογραφιών
  • Ένα δίκτυο (Wifi, LAN)
  • Ένα πλέγμα -στόχος. Ένα φύλλο χαρτιού με ένα πλέγμα τυπωμένο πάνω του -γεμάτο με συντεταγμένες. Αυτό το πλέγμα χαρτιού χρησιμοποιείται ως καμβάς όπου οι επισκέπτες μπορούν να κολλήσουν τη φωτογραφία τους στις καθορισμένες συντεταγμένες. Και έτσι τελικά θα σχηματίσουν μαζί το τελικό αποτέλεσμα: ένα όμορφο νέο φωτομοσαϊκό.

Χρησιμοποιήθηκε μια κάμερα icrosoft Kinect 2.0 επειδή μπορεί να τραβήξει εικόνες βάθους. Αυτή η λειτουργία χρησιμοποιείται για τη δημιουργία μιας εικονικής οθόνης πρασίνου σε κάθε μεμονωμένο φωτογράφο. Με αυτόν τον τρόπο το RoboPhoto μπορεί να ξαναβάψει το φόντο σε κάθε μεμονωμένη φωτογραφία για να ταιριάζει με το χρώμα ενός τεμαχίου στόχου μέσα στο μελλοντικό μωσαϊκό.

Βήμα 1: Πώς λειτουργεί

Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί
Πώς Λειτουργεί

Το RoboPhoto είναι μια εγκατάσταση που περιέχει ένα βάθρο με ένα μεγάλο κόκκινο κουμπί, έναν υπολογιστή με προσαρτημένο εκτυπωτή ετικετών και μια μικρή συσκευή IoT που χειρίζεται τη διεπαφή χρήστη (οθόνη και κουμπί). Στην περίπτωσή μου: ένα RaspBerry 3B+.

  1. Το RoboPhoto λειτουργεί σε δημόσια προσβάσιμη τοποθεσία και (μετά την ενεργοποίησή του) λειτουργεί μόνος του. Όταν τρέχουν, οι διερχόμενοι επισκέπτες ενθαρρύνονται από το RoboPhoto να πατήσουν το μεγάλο κόκκινο κουμπί.
  2. Κάθε φορά που πατάτε αυτό το μεγάλο κόκκινο κουμπί, το RoboPhoto θα τραβήξει μια φωτογραφία του επισκέπτη που μόλις πάτησε το κουμπί με την κάμερα Kinect.
  3. Στη συνέχεια, το RoboPhoto θα χρησιμοποιήσει την προηγμένη τεχνολογία A. I. και ικανότητες επεξεργασίας εικόνας για να αλλάξετε κάθε φωτογραφία για να ταιριάξετε με ένα κομμάτι μέσα στο μελλοντικό μωσαϊκό. Για να επιτευχθεί αυτό, το RoboPhoto ξαναβάφει το φόντο κάθε φωτογραφίας για να ταιριάζει με το χρώμα ενός τεμαχίου στόχου μέσα σε μια προφορτωμένη εικόνα. Μετά την επεξεργασία, το RoboPhoto εκτυπώνει την επεξεργασμένη φωτογραφία σε ένα αυτοκόλλητο μαζί με ένα σύνολο συντεταγμένων που καθορίζουν τη θέση αυτού του αυτοκόλλητου εντός του ψηφιδωτού.

  4. Στη συνέχεια, ο χρήστης καλείται να τοποθετήσει το αυτοκόλλητο στο ψηφιδωτό φύλλο στόχου.
  5. Και έτσι - αφού έχουν επισκεφθεί πολλοί άνθρωποι - θα εμφανιστεί ένα νέο έργο τέχνης. Για να δημιουργήσετε ένα μωσαϊκό θα χρειαστείτε πολλά μεμονωμένα κομμάτια. Πήρα αξιοπρεπή αποτελέσματα τρέχοντας 600 κομμάτια

Το RoboPhoto μπορεί επίσης να λειτουργεί σε λειτουργία ενός χρήστη.

Σε αυτή τη διαμόρφωση, το RoboPhoto δημιουργεί ένα πλήρες μωσαϊκό από επεξεργασμένες φωτογραφίες από ένα μόνο χρήστη. Αφού πατήσετε το κουμπί, το RoboPhoto θα τραβήξει περίπου 600 διαφορετικές φωτογραφίες του χρήστη και, στη συνέχεια, θα τις επεξεργαστεί και θα τις κανονίσει ώστε να σχηματίσουν ένα ενιαίο ψηφιδωτό, που δημιουργήθηκε μετά από μια προεπιλεγμένη εικόνα-στόχο.

Βήμα 2: Συναρμολόγηση του υλικού

Συναρμολόγηση του υλικού
Συναρμολόγηση του υλικού
Συναρμολόγηση του υλικού
Συναρμολόγηση του υλικού

Όπως φαίνεται στην παραπάνω εικόνα, ο υπολογιστής Win 10 είναι συνδεδεμένος στην κάμερα Kinect. Το Kinect πρέπει να συνδεθεί μέσω USB 3.0. Εκείνη τη στιγμή που δημιούργησα το RoboPhoto - δεν ήταν διαθέσιμο Raspberry Pi με USB 3.0.*

Ο υπολογιστής χρησιμοποιείται επίσης για τη διαχείριση της εκτύπωσης στο συνημμένο εκτυπωτή ετικετών. Στην περίπτωσή μου ένα Brother VC-500W. Ένας αρκετά φθηνός εκτυπωτής ετικετών χρώματος οικιακής χρήσης. Ωστόσο, είναι πολύ αργό. Αν μπορείτε, χρησιμοποιήστε καλύτερα έναν επαγγελματία.

Το μεγάλο κόκκινο κουμπί είναι προσαρτημένο σε ένα Raspberry Pi 3B+. Μόνο 4 καλώδια είναι συνδεδεμένα στο GPIO. Αυτή είναι η μόνη συγκόλληση που απαιτείται σε αυτό το Instructable. Το Pi παρέχει επίσης ανατροφοδότηση στον επισκέπτη μας μέσω οθόνης TFT 7 ιντσών μέσω HDMI.

Για να το τακτοποιήσω, έφτιαξα ένα ξύλινο βάθρο που συγκρατεί όλα αυτά τα εξαρτήματα.

Δίπλα στο βάθρο, στον τοίχο, τοποθετείται ένα φύλλο χαρτιού που περιέχει το πλέγμα-στόχο και τις συντεταγμένες (Α1/Α2). Επειδή ο εκτυπωτής ετικετών που χρησιμοποίησα μεγιστοποιείται κατά πλάτος ετικέτας = 2, 5 cm, όλα τα τετράγωνα σε αυτό το πλέγμα έχουν διαστάσεις 2, 5cm x 2, 5cm.

*Σήμερα, το Raspberry Pi4 προσφέρει USB3.0. Το Alse W10 μπορεί να εκτελεστεί στη συσκευή. Θα πρέπει λοιπόν θεωρητικά να είναι δυνατή η δημιουργία ενός RoboPhoto v2.0 χωρίς τη χρήση υπολογιστή. Perhapsσως ο Covid '19 να μου δώσει αρκετό χρόνο μόνος μου για να δημοσιεύσω σύντομα ένα τέτοιο Instructable.

Βήμα 3: Γράφοντας τον Κώδικα

Γράφοντας τον Κώδικα
Γράφοντας τον Κώδικα
Γράφοντας τον Κώδικα
Γράφοντας τον Κώδικα

Κώδικας

Το RoboPhoto δημιουργήθηκε με το VisualStudio ως λύση με δύο έργα:

  1. Μια εφαρμογή Windows Forms στον υπολογιστή φιλοξενεί διακομιστή TCP και χειρίζεται την είσοδο Kinect
  2. Ένα Raspberry Pi 3B+ που φιλοξενεί έναν πελάτη TCP σε μια εφαρμογή με επικεφαλίδα UWP (ορίστηκε ως εφαρμογή εκκίνησης) για να χειρίζεται συμβάντα τύπου Button και να παρέχει στον χρήστη ανατροφοδότηση μέσω της οθόνης TFT 7 ιντσών.

Στο παραπάνω διάγραμμα, προσπάθησα να σας δώσω μια ιδέα για το τι κάνει το soft μου. Το Visual Studio που έγραψα για να δημιουργήσω αυτήν τη λύση (απολύτως 100% λειτουργική) RoboPhoto παρέχεται με αυτό το Instructable. Ωστόσο, πρέπει να προειδοποιήσω όλους να κατεβάσουν αυτό το αρχείο: Ο κώδικας που έγραψα δεν είναι καθόλου όμορφος και συχνά συνδέεται με το dev-PC μου. Έτσι ενθαρρύνω όλους να δημιουργήσουν μια καλύτερη, πιο ωραία και σταθερή λύση.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Δίκτυο

Στο παράδειγμα κώδικα, ο κώδικας του Pi αναπτύσσεται μέσω του Visual Studio σε μια IPAddress στο δίκτυό μου. Μάλλον θα πρέπει να το αλλάξετε για να ταιριάζει με το δικό σας. Για να το κάνετε αυτό - κάντε δεξί κλικ στο έργο προγράμματος -πελάτη ARM αφού ανοίξετε τη λύση στο Visual Studio, στη συνέχεια επιλέξτε ιδιότητες και μετακινήστε την τιμή Απομακρυσμένο μηχάνημα στην IPAddress του δικού σας Pi. Επίσης, πρέπει να επιτρέψετε την κυκλοφορία από πελάτη σε διακομιστή στη θύρα 8123 στο τείχος προστασίας των Windows στον διακομιστή (PC). Εάν εκτελέσετε τη λύση από το Visual Studio, θα πρέπει να σας ζητήσει να το κάνετε για το U.

Κατά την κωδικοποίηση, είχα πολλά προβλήματα να κάνω το W32 & UWP να επικοινωνήσει σωστά. Το έκανα να λειτουργεί χρησιμοποιώντας δύο ξεχωριστές κλάσεις σε client & server: resp MyEchoClient.cs (στο πρόγραμμα -πελάτη ARM) και ConnectionClient.cs (οι συνδέσεις πελατών στον διακομιστή).

Filesηφιδωτά αρχεία - προσαρμοσμένη τάξη

Το RoboPhoto δημιουργεί ψηφιδωτά για να μιμηθεί μια εικόνα-στόχο. Αυτή η εικόνα-στόχος και όλες οι μεμονωμένες φωτογραφίες που αποτελούν μαζί το μελλοντικό ψηφιδωτό, καθώς και κάποιες άλλες ιδιότητες κάθε RoboPhoto αποθηκεύονται σε αρχεία σε ένα σύστημα αρχείων. Ο συνοδευτικός μου κώδικας χρησιμοποιεί ένα σύνολο αρχείων και φακέλων στον κατάλογο c: / tmp / MosaicBuilder. Μέσα σε αυτόν τον φάκελο, ο κώδικας θα διαβάσει όλους τους υποφακέλους με όνομα φακέλου που ξεκινά με [prj_] ως φάκελοι έργων μωσαϊκών. Μέσα σε όλους αυτούς τους φακέλους [prj_] θα προσπαθήσει να ανοίξει ένα αρχείο έργου με το όνομα [_projectdata.txt] που περιέχει όλες τις πληροφορίες που απαιτούνται για κάθε έργο.

Ένα τέτοιο αρχείο έργου αποτελείται από:

  1. την πλήρη διαδρομή και το όνομα αρχείου της εικόνας-στόχου αυτού του έργου
  2. την πλήρη διαδρομή όπου αποθηκεύονται μεμονωμένες φωτογραφίες (κομμάτια) αυτού του έργου
  3. Αριθμός στηλών που θα περιέχει το ψηφιδωτό
  4. Αριθμός σειρών που θα περιέχει το ψηφιδωτό

Παραδείγματα έργων παρέχονται στο αρχείο zip: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

Στον κωδικό διακομιστή C#, ο χειρισμός μωσαϊκών γίνεται μέσω μιας προσαρμοσμένης κλάσης: BBMosaicProject.cs

Microsoft Kinect v2.0 - Greenscreen

Για να τραβήξετε φωτογραφίες οποιαδήποτε κάμερα θα κάνει. Αλλά έχω χρησιμοποιήσει το Microsoft Kinect v2.0 για να συνδυάσω έγχρωμες εικόνες και εικόνες βάθους. Με αυτόν τον τρόπο, μπορεί να δημιουργηθεί ένα εφέ πράσινης οθόνης. Το φόντο σε όλες τις έγχρωμες εικόνες που λαμβάνονται από το Kinect θα αντικατασταθεί με μια ομοιόμορφη πράσινη επιφάνεια (BBBackgroundRemovalTool.cs).

Μια αναφορά στο Microsoft. Kinect προστέθηκε στο έργο διακομιστή.

EMGU

Επειδή πρέπει να είμαστε σίγουροι ότι ένα άτομο είναι στη φωτογραφία που τραβήχτηκε όταν πατήθηκε το κουμπί, προστέθηκαν δυνατότητες αναγνώρισης προσώπου στο RoboPhoto.

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

Μόνο όταν ένα άτομο βρίσκεται μέσα στην εικόνα, η πράσινη οθόνη αυτής της εικόνας θα αντικατασταθεί από μια ομοιόμορφη χρωματισμένη επιφάνεια, με κωδικούς χρωμάτων ίσους με το χρώμα του μέσου όρου του τεμαχίου στόχου στο μελλοντικό ψηφιδωτό.

Βήμα 4: Ευχαριστώ

Σας ευχαριστώ
Σας ευχαριστώ

Σας ευχαριστώ που διαβάσατε το Instructable μου. Αυτό ήταν το πρώτο μου. Ελπίζω να το διασκέδασες.

Συνιστάται: