Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann

Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann

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

Beispielcode

Platzieren Sie den Beispielcode unten. https://github.com/segurvita/docker-fbx-sdk-python-nodejs

Verwendung des Beispielcodes

#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.

Was ist los?

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!

In Docker Hub veröffentlichen

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

schließlich

Bei der Erstellung dieses Artikels habe ich auf die folgenden Seiten verwiesen. Vielen Dank.

Recommended Posts

Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Aus einem Buch, das Programmierer lernen können ... (Python): Zeiger
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
Ich habe einen Python-Text gemacht
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Aus einem Buch, das Programmierer lernen können ... (Python): Über das Sortieren
Python-Bedingungsextraktion aus der Liste, die ich oft vergesse
Aus einem Buch, das Programmierer lernen können (Python): Nachrichten dekodieren
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Ich habe ein Modul erstellt, das leicht fehlerhaft sein kann, aber ich kann das Argument nicht von entry_points übergeben
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Docker-Image, das cx_Oracle verwenden kann
Ich habe mit Python einen Daemon erstellt
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
[First Ripple] [I am] Rufe JavaScript (Node.js) von Python auf und verarbeite Ripple
[Python] Ich habe meine eigene Bibliothek erstellt, die dynamisch importiert werden kann
Aus einem Buch, das der Programmierer lernen kann ... (Python): Finden Sie den häufigsten Wert
Aus einem Buch, das Programmierer lernen können ... (Python): Überprüfung von Arrays
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Ich habe eine Python-Wrapper-Bibliothek für die Docomo-Bilderkennungs-API erstellt.
Aus einem Buch, das Programmierer lernen können (Python): Statistischer Verarbeitungsabweichungswert
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Ich habe eine generische Python-Projektvorlage erstellt
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Aus einem Buch, das der Programmierer lernen kann ... (Python): Bedingte Suche (Maximalwert)
Ich habe mit Python eine Hex-Map erstellt
[Python] Ich habe eine Funktion erstellt, die auch reguläre Ausdrücke verwenden kann, die Zeichenfolgen auf einmal ersetzen.
ConSinGAN: Ich habe versucht, GAN zu verwenden, das aus einem Bild generiert werden kann
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Aufrufbefehle von Python (Windows Edition)
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Ich habe eine Bibliothek zum Betreiben des AWS CloudFormation-Stacks über CUI (Python Fabric) erstellt.
Aus einem Buch, das Programmierer lernen können (Python): Klassendeklaration (öffentlich / privat usw.)
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.