J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js

J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js

Pour une raison quelconque, j'ai dû appeler le FBX SDK Python à partir de Node.js, j'ai donc créé une image Docker.

L'image Docker créée est publiée ci-dessous. https://hub.docker.com/r/seguropus/fbx-sdk-python-nodejs

Exemple de code

Placez l'exemple de code ci-dessous. https://github.com/segurvita/docker-fbx-sdk-python-nodejs

Comment utiliser l'exemple de code

#Créer une image Docker
docker-compose build

#Lancer le conteneur Docker
docker-compose up

Avec cela, si l'affichage suivant apparaît, c'est réussi.

fbx-sdk-python-nodejs    | # FBX SDK can read the following formats.
fbx-sdk-python-nodejs    | 00 FBX (*.fbx)
fbx-sdk-python-nodejs    | 01 AutoCAD DXF (*.dxf)
fbx-sdk-python-nodejs    | 02 Alias OBJ (*.obj)
fbx-sdk-python-nodejs    | 03 3D Studio 3DS (*.3ds)
fbx-sdk-python-nodejs    | 04 Collada DAE (*.dae)
fbx-sdk-python-nodejs    | 05 Alembic ABC (*.abc)
fbx-sdk-python-nodejs    | 06 Biovision BVH (*.bvh)
fbx-sdk-python-nodejs    | 07 Motion Analysis HTR (*.htr)      
fbx-sdk-python-nodejs    | 08 Motion Analysis TRC (*.trc)      
fbx-sdk-python-nodejs    | 09 Acclaim ASF (*.asf)
fbx-sdk-python-nodejs    | 10 Acclaim AMC (*.amc)
fbx-sdk-python-nodejs    | 11 Vicon C3D (*.c3d)
fbx-sdk-python-nodejs    | 12 Adaptive Optics AOA (*.aoa)      
fbx-sdk-python-nodejs    | 13 Superfluo MCD (*.mcd)
fbx-sdk-python-nodejs    | 14 (*.zip)
fbx-sdk-python-nodejs exited with code 0

Ce que vous voyez est une liste de formats de fichiers que le SDK FBX peut lire.

Si vous voyez cela, vous avez accédé avec succès au FBX SDK Python.

Que ce passe-t-il?

Tout d'abord, docker-compose up lance le conteneur Docker.

Le conteneur Docker exécute le code Node.js ʻindex.js` lorsqu'il démarre.

ʻIndex.js appelle le code Python main.py`.

main.py récupère la liste des formats pris en charge à partir du SDK FBX Python et l'affiche.

Dockerfile

Il y avait une personne qui a publié une image Docker dans laquelle Python et Node.js vivaient ensemble, j'ai donc créé un Dockerfile basé sur cela.

Dockerfile


# Python 2.7 et Node.Alpine avec js 12
FROM nikolaik/python-nodejs:python2.7-nodejs12-alpine

#Mise à jour de la bibliothèque avec apk
RUN apk update && \
    apk add \
    curl \
    libxml2 \
    libstdc++

#Télécharger le SDK FBX
RUN curl -L \
    https://damassets.autodesk.net/content/dam/autodesk/www/adn/fbx/20195/fbx20195_fbxpythonsdk_linux.tar.gz \
    -o /tmp/fbx20195_fbxpythonsdk_linux.tar.gz

#Créer un dossier d'installation
RUN mkdir -p /python-fbx/install

#Décompressez le SDK FBX
RUN tar -zxvf \
    /tmp/fbx20195_fbxpythonsdk_linux.tar.gz \
    -C /python-fbx && \
    printf "yes\nn" | \
    /python-fbx/fbx20195_fbxpythonsdk_linux \
    /python-fbx/install

#Installer le SDK FBX
RUN cp /python-fbx/install/lib/Python27_ucs4_x64/* \
    /usr/local/lib/python2.7/site-packages/

# python-installer le shell
RUN npm install -g python-shell

#Supprimer le fichier temporaire
RUN rm -r /python-fbx
RUN rm /tmp/fbx20195_fbxpythonsdk_linux.tar.gz

#Variable d'environnement NODE_Définir le CHEMIN
ENV NODE_PATH /usr/local/lib/node_modules

python-shell est une bibliothèque pour appeler Python à partir de Node.js.

Depuis que je l'ai installé dans la zone globale, j'ai défini la variable d'environnement NODE_PATH afin que index.js puisse être obtenu avec require.

docker-compose.yml

docker-compose.yml ressemble à ceci.

docker-compose.yml


version: '3'
services:
  fbx-sdk-python-nodejs:
    image: 'seguropus/fbx-sdk-python-nodejs'
    container_name: 'fbx-sdk-python-nodejs'
    build:
      context: ./
      dockerfile: ./Dockerfile
    volumes:
      - .:/src
    working_dir: /src
    command: node index.js

ʻIndex.js` est exécuté au démarrage du conteneur Docker.

index.js

index.js ressemble à ceci.

index.js


const pythonShell = require('python-shell');

// python-options de coque
const pyOption = {
    mode: 'text',
    pythonPath: '/usr/local/bin/python',
    pythonOptions: ['-u'],
    scriptPath: '/src',
}

// main.Exécuter py
const pyShell = new pythonShell.PythonShell('main.py', pyOption);

//Afficher la sortie Python standard
pyShell.on('message', (message) => {
    console.log(message);
});

//Terminer le traitement
pyShell.end(function (err, code, signal) {
    if (err) {
        console.error(err);
    }
    console.log('The exit code was: ' + code);
});

J'appelle main.py avec python-shell.

main.py

main.py ressemble à ceci.

main.py


from fbx import *


def list_reader_format(manager):
    print('# FBX SDK can read the following formats.')
    for formatIndex in range(manager.GetIOPluginRegistry().GetReaderFormatCount()):
        description = manager.GetIOPluginRegistry().GetReaderFormatDescription(formatIndex)
        print(formatIndex, description)


def main():
    # Create
    manager = FbxManager.Create()
    scene = FbxScene.Create(manager, "fbxScene")

    # List
    list_reader_format(manager)

    # Destroy
    scene.Destroy()
    manager.Destroy()


if __name__ == '__main__':
    main()

Je charge le FBX SDK Python avec from fbx import *. Une fonction appelée list_reader_format () affiche une liste de formats de fichiers que le FBX SDK Python peut lire dans la sortie standard.

Vous avez créé avec succès une image Docker qui peut appeler FBX SDK Python à partir de Node.js!

Publier sur Docker Hub

C'est un gros problème, je le publierai donc sur Docker Hub.

#s'identifier
docker login

#Poussez l'image Docker
docker push seguropus/fbx-sdk-python-nodejs

Publié ci-dessous. https://hub.docker.com/r/seguropus/fbx-sdk-python-nodejs

à la fin

En créant cet article, je me suis référé aux pages suivantes. Merci beaucoup.

Recommended Posts

J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
[Python] J'ai créé un utilitaire qui peut accéder au type dict comme un chemin
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
J'ai créé une VM qui exécute OpenCV pour Python
D'un livre que les programmeurs peuvent apprendre ... (Python): Pointer
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
J'ai fait un texte Python
Un mécanisme pour appeler des méthodes Ruby à partir de Python qui peut être fait en 200 lignes
À partir d'un livre que les programmeurs peuvent apprendre ... (Python): À propos du tri
python Extraction de condition de la liste que j'oublie souvent
À partir d'un livre que les programmeurs peuvent apprendre (Python): Décoder les messages
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
J'ai fait un module qui peut être glitch facilement, mais je ne peux pas passer l'argument de entry_points
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
Image Docker pouvant utiliser cx_Oracle
J'ai créé un démon avec Python
[First Ripple] [I am] Appeler JavaScript (Node.js) depuis Python et traiter Ripple
[Python] J'ai créé ma propre bibliothèque qui peut être importée dynamiquement
À partir d'un livre que le programmeur peut apprendre ... (Python): trouver la valeur la plus fréquente
À partir d'un livre que les programmeurs peuvent apprendre ... (Python): examen des tableaux
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
À partir d'un livre que les programmeurs peuvent apprendre (Python): valeur de l'écart de traitement statistique
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai créé un modèle de projet Python générique
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
J'ai créé un bot Discord en Python qui se traduit quand il réagit
À partir d'un livre que le programmeur peut apprendre ... (Python): Recherche conditionnelle (valeur maximale)
J'ai fait une carte hexadécimale avec Python
[Python] J'ai créé une fonction qui peut également utiliser des expressions régulières qui remplacent toutes les chaînes de caractères à la fois.
ConSinGAN: J'ai essayé d'utiliser le GAN qui peut être généré à partir d'une image
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]
Après avoir étudié Python3, j'ai créé un Slackbot
Appeler des commandes depuis Python (édition Windows)
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
À partir d'un livre que les programmeurs peuvent apprendre (Python): Déclaration de classe (public / privé, etc.)
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.