Aus irgendeinem Grund musste ich das FBX SDK Python von Node.js aus aufrufen, also habe ich ein Docker-Image erstellt.
Das erstellte Docker-Image wird unten veröffentlicht. https://hub.docker.com/r/seguropus/fbx-sdk-python-nodejs
Platzieren Sie den Beispielcode unten. https://github.com/segurvita/docker-fbx-sdk-python-nodejs
#Erstellen Sie ein Docker-Image
docker-compose build
#Starten Sie den Docker-Container
docker-compose up
Wenn die folgende Anzeige angezeigt wird, ist dies erfolgreich.
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
Was Sie sehen, ist eine Liste von Dateiformaten, die das FBX SDK lesen kann.
Wenn Sie dies sehen, haben Sie erfolgreich auf das FBX SDK Python zugegriffen.
Zuerst startet "Docker-Compose Up" den Docker-Container.
Der Docker-Container führt beim Start den Node.js-Code index.js
aus.
index.js
ruft den Python-Code main.py
auf.
main.py
ruft eine Liste der unterstützten Formate von FBX SDK Python ab und zeigt sie an.
Dockerfile
Es gab eine Person, die ein Docker-Image veröffentlicht hat, in dem Python und Node.js zusammen lebten, also habe ich darauf basierend eine Docker-Datei erstellt.
Dockerfile
# Python 2.7 und Knoten.Alpin mit js 12
FROM nikolaik/python-nodejs:python2.7-nodejs12-alpine
#Bibliotheksupdate mit apk
RUN apk update && \
apk add \
curl \
libxml2 \
libstdc++
#Laden Sie das FBX SDK herunter
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
#Installationsordner erstellen
RUN mkdir -p /python-fbx/install
#FBX SDK entpacken
RUN tar -zxvf \
/tmp/fbx20195_fbxpythonsdk_linux.tar.gz \
-C /python-fbx && \
printf "yes\nn" | \
/python-fbx/fbx20195_fbxpythonsdk_linux \
/python-fbx/install
#Installieren Sie das FBX SDK
RUN cp /python-fbx/install/lib/Python27_ucs4_x64/* \
/usr/local/lib/python2.7/site-packages/
# python-Shell installieren
RUN npm install -g python-shell
#Temporäre Datei löschen
RUN rm -r /python-fbx
RUN rm /tmp/fbx20195_fbxpythonsdk_linux.tar.gz
#Umgebungsvariable NODE_Stellen Sie PATH ein
ENV NODE_PATH /usr/local/lib/node_modules
python-shell
ist eine Bibliothek zum Aufrufen von Python von Node.js.
Seit ich es im globalen Bereich installiert habe, habe ich die Umgebungsvariable "NODE_PATH" so festgelegt, dass index.js mit "require" abgerufen werden kann.
docker-compose.yml
So sieht docker-compose.yml
aus.
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
wird ausgeführt, wenn der Docker-Container gestartet wird.
index.js
index.js sieht so aus.
index.js
const pythonShell = require('python-shell');
// python-Shell-Optionen
const pyOption = {
mode: 'text',
pythonPath: '/usr/local/bin/python',
pythonOptions: ['-u'],
scriptPath: '/src',
}
// main.Führen Sie py aus
const pyShell = new pythonShell.PythonShell('main.py', pyOption);
//Standard-Python-Ausgabe anzeigen
pyShell.on('message', (message) => {
console.log(message);
});
//Verarbeitung beenden
pyShell.end(function (err, code, signal) {
if (err) {
console.error(err);
}
console.log('The exit code was: ' + code);
});
Ich rufe main.py
mit python-shell
auf.
main.py
main.py
sieht so aus.
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()
Ich lade das FBX SDK Python mit from fbx import *
.
Eine Funktion namens "list_reader_format ()" zeigt eine Liste von Dateiformaten an, die das FBX SDK Python in der Standardausgabe lesen kann.
Sie haben erfolgreich ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann!
Es ist eine große Sache, also werde ich es auf Docker Hub veröffentlichen.
#Anmeldung
docker login
#Schieben Sie das Docker-Image
docker push seguropus/fbx-sdk-python-nodejs
Unten veröffentlicht. https://hub.docker.com/r/seguropus/fbx-sdk-python-nodejs
Bei der Erstellung dieses Artikels habe ich auf die folgenden Seiten verwiesen. Vielen Dank.