CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-bytedeco--javacpp-presets-platform

Cross-platform Java bindings for 60+ native C/C++ libraries including OpenCV, FFmpeg, PyTorch, TensorFlow, and scientific computing libraries

Pending
Overview
Eval results
Files

machine-learning.mddocs/

Machine Learning

Comprehensive machine learning capabilities through PyTorch, TensorFlow, ONNX, and specialized ML framework bindings for training and inference operations.

Capabilities

PyTorch Integration

Deep learning framework with dynamic computation graphs, comprehensive tensor operations, and neural network building blocks.

/**
 * Multi-dimensional tensor for numerical computations
 */
public class Tensor extends Pointer {
    /**
     * Create tensor filled with zeros
     * @param sizes Tensor dimensions
     * @return Zero-filled tensor
     */
    public static native Tensor zeros(long[] sizes);
    
    /**
     * Create tensor filled with ones
     * @param sizes Tensor dimensions
     * @return One-filled tensor
     */
    public static native Tensor ones(long[] sizes);
    
    /**
     * Create tensor from data
     * @param data Input data array
     * @param sizes Tensor dimensions
     * @return Tensor containing data
     */
    public static native Tensor from_blob(FloatPointer data, long[] sizes);
    
    /**
     * Add tensors element-wise
     * @param other Tensor to add
     * @return Result tensor
     */
    public native Tensor add(Tensor other);
    
    /**
     * Add scalar to tensor
     * @param scalar Scalar value to add
     * @return Result tensor
     */
    public native Tensor add(double scalar);
    
    /**
     * Matrix multiplication
     * @param mat2 Second matrix
     * @return Matrix product
     */
    public native Tensor mm(Tensor mat2);
    
    /**
     * Batch matrix multiplication
     * @param mat2 Second batch of matrices
     * @return Batch matrix product
     */
    public native Tensor bmm(Tensor mat2);
    
    /**
     * Get tensor size
     * @return Array of dimension sizes
     */
    public native long[] sizes();
    
    /**
     * Get number of dimensions
     * @return Number of dimensions
     */
    public native int dim();
    
    /**
     * Get data type
     * @return Tensor data type
     */
    public native ScalarType dtype();
    
    /**
     * Move tensor to device
     * @param device Target device
     * @return Tensor on specified device
     */
    public native Tensor to(Device device);
    
    /**
     * Reshape tensor
     * @param shape New shape
     * @return Reshaped tensor
     */
    public native Tensor reshape(long[] shape);
    
    /**
     * Get tensor as CPU float data
     * @return Float pointer to tensor data
     */
    public native FloatPointer data_ptr_float();
}

/**
 * Device specification for tensor placement
 */
public class Device extends Pointer {
    /**
     * CPU device
     */
    public static final int kCPU = 0;
    
    /**
     * CUDA device
     */
    public static final int kCUDA = 1;
    
    /**
     * Create device specification
     * @param type Device type (kCPU, kCUDA)
     * @param index Device index (for multi-GPU)
     */
    public Device(int type, int index);
    
    /**
     * Create CPU device
     * @return CPU device
     */
    public static native Device cpu();
    
    /**
     * Create CUDA device
     * @param index GPU index
     * @return CUDA device
     */
    public static native Device cuda(int index);
}

/**
 * Neural network module base class
 */
public class Module extends Pointer {
    /**
     * Forward pass
     * @param inputs Input tensors
     * @return Output tensors
     */
    public native TensorVector forward(TensorVector inputs);
    
    /**
     * Set training mode
     * @param mode Training mode flag
     */
    public native void train(boolean mode);
    
    /**
     * Set evaluation mode
     */
    public native void eval();
    
    /**
     * Get module parameters
     * @return Parameter tensors
     */
    public native TensorVector parameters();
    
    /**
     * Move module to device
     * @param device Target device
     */
    public native void to(Device device);
}

TensorFlow Lite Integration

Lightweight ML inference framework optimized for mobile and edge devices.

/**
 * TensorFlow Lite interpreter for model inference
 */
public class Interpreter extends Pointer {
    /**
     * Create interpreter from model buffer
     * @param modelBuffer Serialized model data
     */
    public Interpreter(ByteBuffer modelBuffer);
    
    /**
     * Create interpreter from byte array
     * @param modelData Serialized model data
     */
    public Interpreter(byte[] modelData);
    
    /**
     * Run inference
     * @param inputs Input tensors array
     * @param outputs Output tensors array
     */
    public native void run(Object[] inputs, Object[] outputs);
    
    /**
     * Run inference with single input/output
     * @param input Input tensor
     * @param output Output tensor
     */
    public native void run(Object input, Object output);
    
    /**
     * Resize input tensor
     * @param inputIndex Input tensor index
     * @param shape New input shape
     */
    public native void resizeInput(int inputIndex, int[] shape);
    
    /**
     * Allocate tensors for inference
     */
    public native void allocateTensors();
    
    /**
     * Get number of input tensors
     * @return Number of inputs
     */
    public native int getInputTensorCount();
    
    /**
     * Get number of output tensors
     * @return Number of outputs
     */
    public native int getOutputTensorCount();
    
    /**
     * Get input tensor info
     * @param inputIndex Input index
     * @return Tensor information
     */
    public native Tensor getInputTensor(int inputIndex);
    
    /**
     * Get output tensor info
     * @param outputIndex Output index
     * @return Tensor information
     */
    public native Tensor getOutputTensor(int outputIndex);
}

/**
 * TensorFlow Lite model representation
 */
public class Model extends Pointer {
    /**
     * Load model from file
     * @param modelPath Path to model file
     * @return Loaded model
     */
    public static native Model fromFile(String modelPath);
    
    /**
     * Load model from buffer
     * @param modelData Model data buffer
     * @return Loaded model
     */
    public static native Model fromBuffer(ByteBuffer modelData);
}

ONNX Integration

Open Neural Network Exchange format for model interoperability.

/**
 * ONNX model representation
 */
public class ModelProto extends Pointer {
    /**
     * Parse model from file
     * @param filename Path to ONNX model file
     * @return Parsed model
     */
    public static native ModelProto parseFromFile(String filename);
    
    /**
     * Parse model from bytes
     * @param data Serialized model data
     * @return Parsed model
     */
    public static native ModelProto parseFromBytes(BytePointer data);
    
    /**
     * Get model graph
     * @return Model computation graph
     */
    public native GraphProto graph();
    
    /**
     * Get model version
     * @return Model version
     */
    public native long ir_version();
    
    /**
     * Get model opset imports
     * @return Opset version information
     */
    public native OperatorSetIdProtoVector opset_import();
}

/**
 * ONNX computation graph
 */
public class GraphProto extends Pointer {
    /**
     * Get graph nodes
     * @return Graph computation nodes
     */
    public native NodeProtoVector node();
    
    /**
     * Get graph inputs
     * @return Input value info
     */
    public native ValueInfoProtoVector input();
    
    /**
     * Get graph outputs
     * @return Output value info
     */
    public native ValueInfoProtoVector output();
    
    /**
     * Get graph initializers
     * @return Constant tensor initializers
     */
    public native TensorProtoVector initializer();
}

/**
 * ONNX computation node
 */
public class NodeProto extends Pointer {
    /**
     * Get node operation type
     * @return Operation name
     */
    public native String op_type();
    
    /**
     * Get node inputs
     * @return Input tensor names
     */
    public native StringVector input();
    
    /**
     * Get node outputs
     * @return Output tensor names
     */
    public native StringVector output();
    
    /**
     * Get node attributes
     * @return Operation attributes
     */
    public native AttributeProtoVector attribute();
}

ONNX Runtime Integration

High-performance inference engine for ONNX models with hardware acceleration.

/**
 * ONNX Runtime environment
 */
public class OrtEnv extends Pointer {
    /**
     * Create environment with logging level
     * @param logLevel Logging level
     * @param logId Log identifier
     * @return Environment instance
     */
    public static native OrtEnv create(int logLevel, String logId);
    
    /**
     * Create default environment
     * @return Default environment
     */
    public static native OrtEnv create();
}

/**
 * ONNX Runtime inference session
 */
public class OrtSession extends Pointer {
    /**
     * Create session from model file
     * @param env Environment
     * @param modelPath Path to ONNX model
     * @param sessionOptions Session options
     * @return Inference session
     */
    public static native OrtSession create(OrtEnv env, String modelPath, 
        OrtSessionOptions sessionOptions);
    
    /**
     * Run inference
     * @param inputs Input tensors map
     * @return Output tensors
     */
    public native OrtValueVector run(OrtValueVector inputs);
    
    /**
     * Run inference with input/output names
     * @param inputNames Input tensor names
     * @param inputs Input tensors
     * @param outputNames Output tensor names
     * @return Output tensors
     */
    public native OrtValueVector run(StringVector inputNames, OrtValueVector inputs,
        StringVector outputNames);
    
    /**
     * Get input count
     * @return Number of model inputs
     */
    public native int getInputCount();
    
    /**
     * Get output count
     * @return Number of model outputs
     */  
    public native int getOutputCount();
    
    /**
     * Get input name
     * @param index Input index
     * @return Input name
     */
    public native String getInputName(int index);
    
    /**
     * Get output name
     * @param index Output index
     * @return Output name
     */
    public native String getOutputName(int index);
}

/**
 * ONNX Runtime tensor value
 */
public class OrtValue extends Pointer {
    /**
     * Create tensor from float array
     * @param data Float data
     * @param shape Tensor shape
     * @return Tensor value
     */
    public static native OrtValue createTensor(float[] data, long[] shape);
    
    /**
     * Create tensor from byte array
     * @param data Byte data
     * @param shape Tensor shape
     * @return Tensor value
     */
    public static native OrtValue createTensor(byte[] data, long[] shape);
    
    /**
     * Get tensor data as float array
     * @return Float data array
     */
    public native float[] getFloatArray();
    
    /**
     * Get tensor shape
     * @return Shape dimensions
     */
    public native long[] getShape();
    
    /**
     * Check if value is tensor
     * @return true if tensor, false otherwise
     */
    public native boolean isTensor();
}

TensorRT Integration

NVIDIA GPU-accelerated inference optimization for deep learning models.

/**
 * TensorRT inference builder
 */
public class IBuilder extends Pointer {
    /**
     * Create inference builder
     * @param logger Logger instance
     * @return Builder instance
     */
    public static native IBuilder createInferBuilder(ILogger logger);
    
    /**
     * Create network definition
     * @param flags Network creation flags
     * @return Network definition
     */
    public native INetworkDefinition createNetworkV2(int flags);
    
    /**
     * Create builder configuration
     * @return Builder configuration
     */
    public native IBuilderConfig createBuilderConfig();
    
    /**
     * Build serialized network
     * @param network Network definition
     * @param config Builder configuration
     * @return Serialized engine
     */
    public native IHostMemory buildSerializedNetwork(INetworkDefinition network,
        IBuilderConfig config);
}

/**
 * TensorRT network definition for building models
 */
public class INetworkDefinition extends Pointer {
    /**
     * Add input tensor
     * @param name Input name
     * @param type Data type
     * @param dims Tensor dimensions
     * @return Input tensor
     */
    public native ITensor addInput(String name, DataType type, Dims dims);
    
    /**
     * Add convolution layer
     * @param input Input tensor
     * @param nbOutputMaps Number of output feature maps
     * @param kernelSize Convolution kernel size
     * @param kernelWeights Kernel weights
     * @param biasWeights Bias weights
     * @return Convolution layer
     */
    public native IConvolutionLayer addConvolutionNd(ITensor input, int nbOutputMaps,
        DimsHW kernelSize, Weights kernelWeights, Weights biasWeights);
    
    /**
     * Add activation layer
     * @param input Input tensor
     * @param type Activation type
     * @return Activation layer
     */
    public native IActivationLayer addActivation(ITensor input, ActivationType type);
    
    /**
     * Add pooling layer
     * @param input Input tensor
     * @param type Pooling type
     * @param windowSize Pooling window size
     * @return Pooling layer
     */
    public native IPoolingLayer addPoolingNd(ITensor input, PoolingType type,
        DimsHW windowSize);
    
    /**
     * Mark tensor as network output
     * @param tensor Output tensor
     */
    public native void markOutput(ITensor tensor);
}

/**
 * TensorRT CUDA inference engine
 */
public class ICudaEngine extends Pointer {
    /**
     * Create execution context
     * @return Execution context
     */
    public native IExecutionContext createExecutionContext();
    
    /**
     * Get number of bindings (inputs + outputs)
     * @return Number of bindings
     */
    public native int getNbBindings();
    
    /**
     * Get binding name
     * @param index Binding index
     * @return Binding name
     */
    public native String getBindingName(int index);
    
    /**
     * Check if binding is input
     * @param index Binding index
     * @return true if input binding
     */
    public native boolean bindingIsInput(int index);
    
    /**
     * Get binding dimensions
     * @param index Binding index
     * @return Tensor dimensions
     */
    public native Dims getBindingDimensions(int index);
}

/**
 * TensorRT execution context for inference
 */
public class IExecutionContext extends Pointer {
    /**
     * Execute inference synchronously
     * @param bindings Array of device memory pointers for inputs/outputs
     * @return true if successful
     */
    public native boolean execute(PointerPointer bindings);
    
    /**
     * Execute inference asynchronously  
     * @param bindings Array of device memory pointers for inputs/outputs
     * @param stream CUDA stream
     * @return true if successful
     */
    public native boolean enqueue(PointerPointer bindings, Pointer stream);
    
    /**
     * Set binding dimensions for dynamic shapes
     * @param index Binding index
     * @param dimensions New dimensions
     * @return true if successful
     */
    public native boolean setBindingDimensions(int index, Dims dimensions);
}

Usage Examples

PyTorch Tensor Operations

import org.bytedeco.pytorch.*;
import org.bytedeco.pytorch.torch.*;
import static org.bytedeco.pytorch.global.torch.*;

public class TensorExample {
    static {
        Loader.load(torch.class);
    }
    
    public static void tensorOperations() {
        try (PointerScope scope = new PointerScope()) {
            // Create tensors
            Tensor a = zeros(new long[]{3, 4});
            Tensor b = ones(new long[]{3, 4});
            
            // Basic operations
            Tensor sum = a.add(b);
            Tensor scaled = sum.mul(2.0);
            
            // Matrix operations
            Tensor matrix1 = rand(new long[]{3, 4});
            Tensor matrix2 = rand(new long[]{4, 5});
            Tensor product = matrix1.mm(matrix2);
            
            System.out.println("Matrix product shape: " + 
                java.util.Arrays.toString(product.sizes()));
            
            // Move to GPU if available
            if (cuda_is_available()) {
                Device gpu = Device.cuda(0);
                Tensor gpuTensor = matrix1.to(gpu);
                System.out.println("Tensor moved to GPU");
            }
        }
    }
}

TensorFlow Lite Inference

import org.bytedeco.tensorflowlite.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class TFLiteInference {
    static {
        Loader.load(tensorflowlite.class);
    }
    
    public static void runInference(String modelPath, float[] inputData) {
        try (PointerScope scope = new PointerScope()) {
            // Load model
            Model model = Model.fromFile(modelPath);
            Interpreter interpreter = new Interpreter(model);
            
            // Prepare input
            int inputSize = inputData.length;
            ByteBuffer inputBuffer = ByteBuffer.allocateDirect(inputSize * 4);
            inputBuffer.order(ByteOrder.nativeOrder());
            for (float value : inputData) {
                inputBuffer.putFloat(value);
            }
            
            // Prepare output
            int outputSize = interpreter.getOutputTensor(0).numElements();
            ByteBuffer outputBuffer = ByteBuffer.allocateDirect(outputSize * 4);
            outputBuffer.order(ByteOrder.nativeOrder());
            
            // Run inference
            interpreter.run(inputBuffer, outputBuffer);
            
            // Process results
            outputBuffer.rewind();
            float[] results = new float[outputSize];
            outputBuffer.asFloatBuffer().get(results);
            
            System.out.println("Inference completed. Output size: " + outputSize);
        }
    }
}

ONNX Runtime Inference

import org.bytedeco.onnxruntime.*;
import static org.bytedeco.onnxruntime.global.onnxruntime.*;

public class ONNXInference {
    static {
        Loader.load(onnxruntime.class);
    }
    
    public static void runONNXModel(String modelPath, float[] inputData, long[] inputShape) {
        try (PointerScope scope = new PointerScope()) {
            // Create environment and session
            OrtEnv env = OrtEnv.create(ORT_LOGGING_LEVEL_WARNING, "ONNXInference");
            OrtSessionOptions sessionOptions = new OrtSessionOptions();
            OrtSession session = OrtSession.create(env, modelPath, sessionOptions);
            
            // Create input tensor
            OrtValue inputTensor = OrtValue.createTensor(inputData, inputShape);
            OrtValueVector inputs = new OrtValueVector(inputTensor);
            
            // Get input/output names
            String inputName = session.getInputName(0);
            String outputName = session.getOutputName(0);
            
            StringVector inputNames = new StringVector(inputName);
            StringVector outputNames = new StringVector(outputName);
            
            // Run inference
            OrtValueVector outputs = session.run(inputNames, inputs, outputNames);
            
            // Get results
            OrtValue outputTensor = outputs.get(0);
            float[] results = outputTensor.getFloatArray();
            long[] outputShape = outputTensor.getShape();
            
            System.out.println("ONNX inference completed");
            System.out.println("Output shape: " + java.util.Arrays.toString(outputShape));
            System.out.println("First 5 results: " + 
                java.util.Arrays.toString(java.util.Arrays.copyOf(results, 5)));
        }
    }
}

TensorRT Optimized Inference

import org.bytedeco.tensorrt.*;
import org.bytedeco.cuda.cudart.*;
import static org.bytedeco.tensorrt.global.nvinfer.*;
import static org.bytedeco.cuda.global.cudart.*;

public class TensorRTInference {
    static {
        Loader.load(nvinfer.class);
        Loader.load(cudart.class);
    }
    
    public static void optimizeAndInfer() {
        try (PointerScope scope = new PointerScope()) {
            // Create logger and builder
            ILogger logger = new Logger();
            IBuilder builder = IBuilder.createInferBuilder(logger);
            
            // Create network
            INetworkDefinition network = builder.createNetworkV2(
                1 << NetworkDefinitionCreationFlag.kEXPLICIT_BATCH);
            
            // Define network architecture (simplified example)
            Dims inputDims = new Dims(4);
            inputDims.d(0, 1).d(1, 3).d(2, 224).d(3, 224);  // NCHW format
            
            ITensor input = network.addInput("input", DataType.kFLOAT, inputDims);
            
            // Add layers (this is a simplified example)
            // In practice, you would load weights and build complete network
            
            network.markOutput(input);  // Placeholder output
            
            // Build engine
            IBuilderConfig config = builder.createBuilderConfig();
            config.setMaxWorkspaceSize(1L << 30);  // 1GB workspace
            
            IHostMemory serializedEngine = builder.buildSerializedNetwork(network, config);
            
            // Create runtime and deserialize engine
            IRuntime runtime = IRuntime.createInferRuntime(logger);
            ICudaEngine engine = runtime.deserializeCudaEngine(
                serializedEngine.data(), serializedEngine.size());
            
            // Create execution context
            IExecutionContext context = engine.createExecutionContext();
            
            // Allocate GPU memory for inputs/outputs
            int inputSize = 1 * 3 * 224 * 224 * 4;  // batch_size * channels * height * width * sizeof(float)
            Pointer inputGPU = new Pointer();
            Pointer outputGPU = new Pointer();
            
            cudaMalloc(inputGPU, inputSize);
            cudaMalloc(outputGPU, inputSize);  // Assume same size for output
            
            // Setup bindings
            PointerPointer bindings = new PointerPointer(2);
            bindings.put(0, inputGPU);
            bindings.put(1, outputGPU);
            
            // Copy input data to GPU (simplified)
            // cudaMemcpy(inputGPU, hostInputData, inputSize, cudaMemcpyHostToDevice);
            
            // Execute inference
            boolean success = context.execute(bindings);
            
            if (success) {
                System.out.println("TensorRT inference completed successfully");
                
                // Copy results back to host
                // cudaMemcpy(hostOutputData, outputGPU, outputSize, cudaMemcpyDeviceToHost);
            }
            
            // Cleanup GPU memory
            cudaFree(inputGPU);
            cudaFree(outputGPU);
        }
    }
    
    static class Logger extends ILogger {
        @Override
        public void log(Severity severity, String msg) {
            System.out.println("[TensorRT " + severity + "] " + msg);
        }
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-org-bytedeco--javacpp-presets-platform

docs

computer-vision.md

gpu-computing.md

index.md

machine-learning.md

multimedia.md

scientific-computing.md

text-processing.md

tile.json