| # CAM++ MLX Model Usage Example (ModelScope Architecture) | |
| import mlx.core as mx | |
| import numpy as np | |
| from model import CAMPPModelScopeV2 | |
| import json | |
| def load_model(model_path="."): | |
| # Load config | |
| with open(f"{model_path}/config.json", "r") as f: | |
| config = json.load(f) | |
| # Initialize model | |
| model = CAMPPModelScopeV2( | |
| input_dim=config["input_dim"], | |
| channels=config.get("channels", 512), | |
| block_layers=config.get("block_layers", [4, 9, 16]), | |
| embedding_dim=config["embedding_dim"], | |
| cam_channels=config.get("cam_channels", 128), | |
| input_kernel_size=config.get("input_kernel_size", 5) | |
| ) | |
| # Load weights | |
| weights = mx.load(f"{model_path}/weights.npz") | |
| model.load_weights(weights) | |
| return model | |
| def extract_speaker_embedding(model, audio_features): | |
| # audio_features: (batch, features, time) - e.g., mel-spectrogram | |
| # Returns: speaker embedding vector | |
| mx.eval(model.parameters()) # Ensure weights are loaded | |
| with mx.no_grad(): | |
| embedding = model(audio_features) | |
| return embedding | |
| # Example usage: | |
| # model = load_model() | |
| # features = mx.random.normal((1, 320, 200)) # Example input | |
| # embedding = extract_speaker_embedding(model, features) | |
| # print(f"Speaker embedding shape: {embedding.shape}") | |