[PYTHON] [Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft

Qu'est-ce que TitanCraft?

Un fichier .schematic Minecraft est généré à partir d'une seule image du corps entier prise avec un smartphone, etc. via un objet 3D. Vous pouvez invoquer un géant en chargeant le fichier «.schematic» généré dans le monde de Micra en utilisant un «mod» tel que WorldEdit. Je vais.

Le code source est disponible ici

Tu peux le faire

titan1.png

  • Ce jour-là, l'humanité s'est souvenue *

titan2.png

titans.png

Flux de processus

Suivons le déroulement du processus en utilisant l'image ci-dessous. (L'image est tirée de ici: prier_tone1 :) man_2.jpg

1. Extrayez le premier plan de l'image d'entrée

J'utilise un référentiel appelé remove_bg que j'ai créé pour extraire le premier plan. À ce moment-là, une image de masque est requise pour PI Fu dans le processus suivant, alors créez-la ensemble. Dans remove_bg, appliquez d'abord Semantic Segmentation à l'image d'entrée pour extraire l'objet cible. Après cela, une image ternaire appelée trimap est générée et entrée dans FBA_Matting avec l'image d'entrée pour extraire le premier plan.

** [Résultat du traitement] ** man_2_remove_bg.png

Ce n'est pas très approprié car l'image échantillon n'a presque pas de fond, mais vous pouvez voir que la personne est bien découpée. (Il y a des endroits où l'arrière-plan reste, comme près de l'entrejambe et du cou.) Je pensais qu'il serait plus précis d'utiliser API de remove.bg, mais il y avait des frais. Donc je ne l'ai pas utilisé cette fois.

2. Générez un objet 3D à partir d'une image avec PIFu

Créez un objet 3D à partir d'une image en utilisant une technique appelée PIFu. Ce processus déduit non seulement la forme 3D, mais également la texture des vêtements et des coiffures qui ne sont pas montrés dans l'image. Je ne sais pas grand-chose sur PLFu, mais vous pouvez le trouver un peu plus en détail, comme dans cet article.

** [Résultat du traitement] ** man_1_obj.jpg (Visualisé avec * meshlab * *)

Les parties arrière et bout à bout qui ne sont pas représentées dans l'image d'entrée sont également bien reproduites. C'est incroyable. À l'heure actuelle, il peut être un peu difficile de l'utiliser comme un objet 3D tel quel, mais il semble qu'il ne faudra pas longtemps avant qu'un bel objet 3D puisse être généré à partir d'une image si la technologie avance plus loin dans le futur: ok_hand_tone2:

3. Générez un fichier .schematic pour Minecraft à partir d'un objet 3D

En utilisant le référentiel que j'ai créé obj2schematic, j'ai utilisé le fichier .obj généré par [2.](# 2.-Générer un objet 3D à partir d'une image avec PIFu) pour créer un.schematic pour Minecraft.Créez un fichier. Il lit le fichier .obj généré par PIFu, analyse le contenu et le convertit en un bloc de Micra. Vous pouvez invoquer un géant en chargeant le fichier «.schematic» généré dans le monde avec un «mod» tel que WorldEdit!

** [Résultat du traitement] ** man_schematic.png

Et à propos de ça? Je pense que c'est bien fait: smile_cat:

Ci-dessous, la galerie des géants invoqués.

2020-08-03_16.53.29.png

2020-08-03_16.55.51.png

2020-08-03_16.56.12.png

2020-08-03_16.58.22.png

2020-08-03_17.01.51.png

2020-08-03_17.05.14.png

Résumé

J'ai créé un outil pour invoquer un géant dans Minecraft à partir d'une image. J'ai rendu possible son exécution sur Google Colab, veuillez donc l'utiliser. Open In Colab

Si vous souhaitez l'exécuter localement, vous avez besoin d'un environnement python, mais si vous pouvez l'effacer, vous pouvez l'utiliser immédiatement. Même dans mon environnement sans GPU (MacBook Pro (2019)), une image (512x512) peut être traitée en 2 à 3 minutes.

Je l'ai fait parce que je voulais que mon fils dise "Wow!", Mais je suis heureux d'avoir pu le faire comme je l'imaginais: joy_cat: Cette fois, j'ai créé un objet 3D à partir d'une image de tout le corps, mais je pense que je peux faire diverses autres choses en changeant le modèle à utiliser. Si vous avez des idées, n'hésitez pas à nous en faire part dans les commentaires, etc.: rolling_eyes:

De plus, j'utilise des modèles publics tels que PIFu et FBA_Matting, mais il est étonnant qu'il soit dans un état où il peut être utilisé sans comprendre les détails de chaque méthode. Je l'ai ressenti à nouveau.

Recommended Posts

[Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft
J'ai créé un outil pour compiler nativement Hy
J'ai créé un outil pour obtenir de nouveaux articles
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
J'ai fait un script pour afficher des pictogrammes
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai créé un outil utile pour Digital Ocean
J'ai créé un outil de collecte de configuration de routeur Config Collecor
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
J'ai créé un outil pour générer du Markdown à partir du fichier JSON Scrapbox exporté
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
〇✕ J'ai fait un jeu
Création de l'outil de gestion des utilisateurs Let's Chat
J'ai fait une bibliothèque pour bien séparer les phrases japonaises
J'ai créé un outil de nettoyage pour Google Container Registry
J'ai fait un script pour mettre un extrait dans README.md
J'ai créé un module Python pour traduire les commentaires
J'ai créé un code pour convertir illustration2vec en modèle Keras
J'ai fait une commande pour marquer le clip de la table
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai créé un outil de génération de données texte répétitif "rpttxt"
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
J'ai fait une boîte pour me reposer avant que Pepper ne se fatigue
J'ai fait une commande pour générer un commentaire pour une table dans Django
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait un texte Python
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
Création d'un outil qui facilite la définition des paramètres des modèles d'apprentissage automatique
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
Je vous ai fait exécuter des commandes depuis un navigateur WEB
J'ai fait un script pour dire bonjour à mon Koshien
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai créé un serveur Web avec Razpai pour regarder des anime
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Création d'un outil CLI client / serveur WebSocket (comme WebSocket version netcat)
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
Outil pour convertir la configuration Juniper
J'ai créé un démon avec Python
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai créé un plugin pour générer une table Markdown à partir de csv avec Vim
J'ai fait un générateur de mot de passe pour enseigner Python3 aux enfants (bonus) * Complètement refait
J'ai créé une application Web en Python qui convertit Markdown en HTML
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
J'ai fait une sorte d'outil de traitement d'image simple en langage Go.
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent