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
Placez l'exemple de code ci-dessous. https://github.com/segurvita/docker-fbx-sdk-python-nodejs
#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.
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!
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
En créant cet article, je me suis référé aux pages suivantes. Merci beaucoup.
Recommended Posts