matlab-integrate-pytorch-vision

$npx mdskill add matlab/matlab-agentic-toolkit/matlab-integrate-pytorch-vision

Creates MATLAB interfaces for Python vision models using MPyReq

  • Solves the problem of interfacing MATLAB with Python image processing and computer vision models.
  • Depends on GitHub repository URLs, pip-installable packages, and MPyReq framework.
  • Decides which model to use based on user-provided information or specified requirements.
  • Delivers a working MATLAB interface for the selected model, enabling seamless integration.

SKILL.md

.github/skills/matlab-integrate-pytorch-visionView on GitHub ↗
---
name: matlab-integrate-pytorch-vision
description: >-
  Creates MATLAB interfaces to Python image processing and computer vision models
  from GitHub repositories or pip-installable packages using MPyReq.
  Use when asked to interface MATLAB with a Python CV/image model (segmentation,
  depth estimation, object detection, image generation, super-resolution, etc.),
  given a GitHub repo URL for an image/vision model, or asked to create an MPyReq
  demo for a deep-learning vision pipeline.
  Do NOT use for general-purpose Python-MATLAB interfacing, non-vision models (NLP,
  tabular, audio), model deployment/serving, or MATLAB-only image processing workflows.
license: MathWorks BSD-3-Clause
metadata:
  author: MathWorks
  version: "1.0"
---

# MPyReq MATLAB Interface Builder

Build a MATLAB interface to a Python/PyTorch model repository using the MPyReq framework.

## When to Use

- User asks to interface MATLAB with a Python image processing or computer vision model (segmentation, depth estimation, object detection, image generation, super-resolution, pose estimation, optical flow, salient object detection, etc.)
- User provides a GitHub repository URL for a vision/image model and wants to call it from MATLAB
- User asks to "create an MPyReq wrapper" or "MPyReq demo" for an image/CV model
- User wants to run a pip-installable vision model library (e.g., Cellpose, SAM2, Depth-Pro, BiRefNet, StarDist) from MATLAB

## When Not to Use

- General-purpose Python-MATLAB interfacing (no vision/image model involved)
- Non-vision models: NLP, audio, tabular, reinforcement learning, time-series
- Model deployment, containerization, or inference servers
- Pure MATLAB image processing workflows with no Python dependency
- Creating Python code (this skill creates MATLAB code that calls Python)

## Prerequisites: MPyReq on the MATLAB Path

Before generating any demo script, verify that MPyReq is available. Run `which MPyReq` via the MATLAB MCP server (if available) or ask the user to confirm.

### If MPyReq is NOT on the MATLAB path:

1. **Download MPyReq** from the MATLAB File Exchange:
   https://mathworks.com/matlabcentral/fileexchange/182230-matlab-based-python-requirements-manager
2. **Install it** — either:
   - Open the downloaded `.mltbx` file in MATLAB (double-click), which installs it as a MATLAB Add-On automatically, or
   - Extract the files and add the folder containing `MPyReq.m` to the MATLAB path:
     ```matlab
     addpath("/path/to/mpyreq");
     savepath; % persist across sessions
     ```
3. **Verify** by running `which MPyReq` in MATLAB — it should return the path to `MPyReq.m`.

Do not proceed with demo generation until MPyReq is confirmed on the path.

## Input

Ask the user for:
1. **GitHub repository URL** — the Python model repository to interface with
2. **What the model does** (optional) — to help identify the right inference example

## Step 1: Analyze the Repository

Fetch and analyze the GitHub repository to determine:

- **Python version requirement** — check `setup.py`, `setup.cfg`, `pyproject.toml`, or README for the required Python version. Default to `"3.12"` if not specified. Use `"3.11"` if the project needs older compatibility.
- **Installation method** — determine how the project is installed:
  - If it uses `torch.hub.load()`: only need `torch` and `torchvision` as pip packages (model downloads automatically)
  - If it's a pip-installable package: use `MPyReq.pipPackage()`
  - If it's a non-packaged git repo: use `MPyReq.gitrepo()` + `MPyReq.requirementTextFile()` if a `requirements.txt` exists
  - If it needs `pip install git+<url>`: use `MPyReq.pipPackage("git+<url>", Name="<ProjectName>")`
- **Additional dependencies** — any extra pip packages needed (e.g., `torch`, `torchvision`, etc.)
- **Model weights** — determine how weights are loaded:
  - `torch.hub.load()` — weights download automatically, no `MPyReq.weights()` needed
  - Direct URL download — use `MPyReq.weights()` with the checkpoint URL
  - HuggingFace `.from_pretrained()` — weights download automatically via the library
- **Inference example** — locate the primary inference/prediction code in the README or example scripts
- **Preprocessing requirements** — check if the model requires specific input normalization (e.g., ImageNet mean/std), resizing, or center cropping

## Step 2: Generate the MPyReq Setup Script

Create a MATLAB `.m` file that sets up the Python environment. Follow these patterns from the demo files:

### MANDATORY: Installation folder setup
Every generated script MUST begin with `MPyReq.setInstallFolder()`. This tells MPyReq where to download Python, packages, and model weights. Without this, MPyReq will show a GUI dialog which blocks non-interactive execution. Also include `MPyReq.autoAcceptDownloadPrompts(true)` to avoid interactive confirmation prompts.

```matlab
% Set installation folder (SSD recommended, ~15+ GB free space)
% Change this path to a suitable location on your machine
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
```

### Pattern A: Simple pip package (like Cellpose)
```matlab
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("<package_name>");
```

### Pattern B: Git repo as pip package (like SAM2)
```matlab
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("git+https://github.com/<org>/<repo>.git", Name="<RepoName>");
```

### Pattern C: Git repo + requirements.txt (like VGGT, BiRefNet)
```matlab
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.11");
MPyReq.gitrepo("https://github.com/<org>/<repo>.git");
reqTxt = MPyReq.pathTo("<repo>") + filesep + "requirements.txt";
MPyReq.requirementTextFile(reqTxt, Name="<repo>Packages");
```

### Pattern D: torch.hub model (like DINOv2, ResNet, etc.)
When the model uses `torch.hub.load()`, no git clone or weights download is needed — just install torch/torchvision:
```matlab
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("torch");
MPyReq.pipPackage("torchvision");
% Model loads automatically via torch.hub:
model = py.torch.hub.load('org/repo', 'model_name');
```

### Weights download pattern
Only needed when weights are NOT handled by `torch.hub.load()` or `.from_pretrained()`:
```matlab
MPyReq.weights("<weights_url>", DownloadTo=MPyReq.pathTo("<RepoName>") + filesep + "checkpoints");
```

## Step 3: Create the MATLAB Inference Interface

Translate the Python inference example to MATLAB. Refer to these resource files for conversion rules and patterns:

- [references/python_matlab_conversions.md](references/python_matlab_conversions.md) — Python-to-MATLAB syntax conversion table
- [references/image_conversion_patterns.md](references/image_conversion_patterns.md) — Image tensor conversions (MATLAB to Python and back), dimension reordering, display patterns

## Step 4: Assemble the Final Script

Create a single `demo<ModelName>.m` file with clear sections:

```matlab
%% Setup Python Environment
% Start with clean state (only if switching projects)
% terminate(pyenv); clear MPyReq

% Set installation folder (SSD recommended, ~15+ GB free space)
% Change this path to a suitable location on your machine
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("<version>");
% ... package installation calls ...

%% Reference Python Code
%{
<paste the original Python inference code as a comment block>
%}

%% Load Model
% ... model loading code ...

%% Run Inference
% ... load input, run model, extract results ...

%% Visualize Results
% ... display/plot results ...
```

## Step 5: Test with MATLAB MCP Server

Check if a MATLAB MCP server tool is available in the current session (look for MCP tools like `matlabRunCode`, `matlab_run`, or similar).

### If MATLAB MCP server IS available:

1. **Run the setup section** — execute the `MPyReq.python()` and package installation calls through the MATLAB MCP server to verify the Python environment installs correctly.
2. **Run the inference section** — execute the model loading and inference code to verify end-to-end functionality.
3. **Iterate on errors** — if any step fails, read the error output, fix the generated code, and re-run.

#### Attempt Limit and Graceful Fallback

Track each fix-and-retry cycle as one attempt. **Stop after a maximum of 5 attempts** (combined across setup and inference). If the code is not fully working after 5 attempts:

1. **Stop iterating.** Do not continue retrying the same or similar approaches.
2. **Save the best version** of `demo<ModelName>.m` — the version that got furthest (e.g., setup succeeded but inference failed, or partial inference ran).
3. **Return the script to the user** with a structured handoff:

```
## What Works
- <list sections/steps that executed successfully>

## What Needs Attention
- <describe the remaining failure: error message, which line/section fails>
- <root cause hypothesis if known>

## Recommended Next Steps
1. <most likely fix — e.g., "Try Python 3.11 instead of 3.12 due to package compatibility">
2. <alternative approach — e.g., "Install system dependency X before running">
3. <manual verification — e.g., "Run `pip install <pkg>` in the MPyReq venv directly to check build logs">

## Environment Details
- Python version attempted: <version>
- Platform: <OS>
- Errors encountered: <brief summary of distinct errors across attempts>
```

4. **Mark clearly in the script** which sections are verified vs. unverified using comments:
```matlab
%% Setup Python Environment — VERIFIED
% ... (code that ran successfully) ...

%% Run Inference — NEEDS MANUAL VERIFICATION
% The following section encountered errors during automated testing.
% See recommended next steps above.
% ... (best-effort code) ...
```

#### Early exit conditions (stop before 5 attempts):

- **Same error repeats 2+ times** with no new information — stop immediately
- **Environment/platform issue** outside MATLAB's control (e.g., missing system library, network block, GPU driver mismatch) — stop and report
- **Package build failure** requiring system-level intervention (e.g., C compiler missing, CUDA version mismatch) — stop and report

### If MATLAB MCP server is NOT available:

1. **Return the generated `demo<ModelName>.m` file** to the user.
2. Provide **setup instructions** summarizing:
   - Prerequisites (MATLAB version, MPyReq on path)
   - The MPyReq commands that will run and what they install
   - Expected first-run behavior (downloads Python, packages — may take several minutes)
   - How to run: open the script in MATLAB and run section-by-section (`Ctrl+Enter`)
3. Note any **platform-specific considerations** (e.g., Windows CUDA setup, `UV_EXTRA_INDEX_URL`).

## Important Notes

- **NEVER modify the cloned repository's source code** (e.g., editing config files, patching Python modules) without explicitly asking the user for permission first. If a workaround requires source edits, describe the change and let the user decide.
- **NEVER use Python dunder methods** (`__enter__`, `__exit__`, `__init__`, etc.) in MATLAB — double underscores are invalid MATLAB syntax. For context managers like `torch.no_grad()` or `torch.inference_mode()`, use the equivalent functional API (e.g., `py.torch.set_grad_enabled(false/true)`) instead of the `with` statement pattern.
- **Always permute outputs back to MATLAB dimension ordering** — PyTorch uses NCHW (batch first, channels second). MATLAB expects batch last and channels second-to-last (H x W x C x B). Use `permute` to reorder, then `squeeze` to remove singleton batch dims.
- **Convert bounding boxes to MATLAB format** — Python models typically return `[x1, y1, x2, y2]` (corner pairs). MATLAB expects M x 4 as `[startX, startY, width, height]`. Convert with: `boxes(:,3) - boxes(:,1)` for width, `boxes(:,4) - boxes(:,2)` for height.
- **Always use `imread`** for loading images — never use Python image libraries (PIL, OpenCV, etc.). Keep image I/O on the MATLAB side and convert to tensors for Python.
- Always include the original Python inference code as a `%{ %}` comment block for reference
- Use `py.importlib.import_module()` when direct `py.module.submodule` doesn't work (deep nesting)
- For Windows GPU/CUDA support, note that `UV_EXTRA_INDEX_URL` may need to be set
- If the repo requires `cd` to a specific directory (e.g., for relative config paths), use `cd(MPyReq.pathTo("<Name>"))`
- Test that the generated code handles both GPU and CPU paths where applicable
- Keep the MATLAB interface idiomatic — use MATLAB image types, display functions, and data structures

For additional gotchas (class ID mapping, opencv-python issues, `insertObjectAnnotation` tips), see [references/common_gotchas.md](references/common_gotchas.md).

## Reference Files

The following reference files are bundled with this skill. Read them from the skill's `references/` directory:

### Demo examples (expected output format)
- [references/demo-cellpose.md](references/demo-cellpose.md) — simple pip package pattern
- [references/demo-sam2.md](references/demo-sam2.md) — git+pip pattern with weights
- [references/demo-depthpro.md](references/demo-depthpro.md) — git repo + pip install pattern with weights
- [references/demo-birefnet.md](references/demo-birefnet.md) — git repo + requirements.txt + weights
- [references/demo-stardist.md](references/demo-stardist.md) — complex dependency management
- [references/demo-vggt.md](references/demo-vggt.md) — git repo + requirements.txt, point cloud output

### Conversion guides
- [references/python_matlab_conversions.md](references/python_matlab_conversions.md) — Python-to-MATLAB syntax conversion table
- [references/image_conversion_patterns.md](references/image_conversion_patterns.md) — Image tensor conversions and display patterns
- [references/common_gotchas.md](references/common_gotchas.md) — Class ID mapping, opencv-python issues, annotation tips

### MPyReq documentation
- [references/readme.md](references/readme.md) — MPyReq documentation overview

The MPyReq class is in the project's `mpyreq/MPyReq.m`.

## Skill Feedback

If this skill's guidance was wrong, incomplete, or didn't work, emit a plain-text
feedback marker in your response, then continue with the task.

Format: `IPCV-SKILL-FEEDBACK [matlab-integrate-pytorch-vision] [category]: what failed; what you did instead`
Categories: `wrong-command` (incorrect/outdated), `missing-guidance` (omitted step),
`discovery-failure` (suggested approach didn't work), `platform-issue` (environment-specific)

----

Copyright 2026 The MathWorks, Inc.

----

More from matlab/matlab-agentic-toolkit

SkillDescription
matlab-access-datafeed>
matlab-add-awgnRead BEFORE writing any code that adds Additive White Gaussian Noise (AWGN) to signals and converts between SNR, Eb/No, Es/No, and per-subcarrier SNR for communications simulations, using awgn(), convertSNR(), berawgn(). The default MATLAB patterns for AWGN (e.g., 'measured' option, manual SNR formulas) produce subtly incorrect results. This skill specifies the correct calling conventions, required function usage, and critical anti-patterns that must be avoided.
matlab-analyze-ams-waveformAnalyze AMS waveform data using Mixed-Signal Blockset utilities: phase noise measurement, clock jitter, anti-aliased resampling, timing measurements, lock time, INL/DNL, ADC/DAC calibration, HSpice import. Use when analyzing time-domain voltage from PLL/VCO/clock simulations, measuring phase noise from variable-step solver output, computing jitter, or resampling non-uniform data.
matlab-analyze-dataAnalyze data using MATLAB. Use when the task involves tables, timetables, time-series data, numeric arrays, sensor matrices, or gridded data — including but not limited to exploring, filtering, sorting, cleaning, transforming, aggregating, smoothing, padding, trimming, and answering questions about data. MATLAB provides extensive, easy-to-use built-in functions for these workflows with no additional products required.
matlab-analyze-dependenciesAnalyze the effective toolbox file set to produce a Dependency Manifest — classify all transitive dependencies as included, product, add-on, or external-unresolved, then present resolution options with tradeoffs. Use after matlab-define-toolbox-api when the spec is approved.
matlab-analyze-emS-parameters, insertion loss, fields, currents, mesh control, and solver selection for RF PCB performance validation. TRIGGER: user asks to compute S-parameters, analyze insertion/return loss, extract fields or currents, compare MoM vs FEM, or control mesh for any RF PCB component. Invoke BEFORE writing sparameters() or solver code — API is non-obvious. SKIP: designing or creating components (use the specific matlab-design-pcb-* skill), material/stackup setup only (use matlab-manage-pcb-material), optimization sweeps (use matlab-optimize-pcb-design), PDN/IR-drop analysis (use matlab-analyze-pcb-pdn).
matlab-analyze-installed-antennaAnalyze antennas installed on electrically large conducting platforms using MATLAB Antenna Toolbox. Loads platform geometry from STL/STEP/IGES, installs antenna elements, selects electromagnetic solvers (MoM-PO, FMM, MoM), and computes patterns, impedance, coupling, and efficiency. Use when the user wants to model an antenna on a vehicle, aircraft, ship, satellite, or other large structure.
matlab-analyze-pcb-pdnPDN DC voltage/current analysis, IR drop, design rule checking, and multi-net batch analysis on imported PCB layouts. TRIGGER: user asks about power integrity, PDN analysis, IR drop, voltage distribution, current density, power nets, or design rule checking on a PCB. Invoke BEFORE writing code — the PDN API chain is specialized and non-obvious. SKIP: importing a PCB file (use matlab-read-pcb-layout), EM field/S-parameter extraction (use matlab-analyze-em), material/stackup setup only (use matlab-manage-pcb-material), transmission line design (use matlab-design-pcb-txline).
matlab-analyze-rcsCalculate and visualize monostatic and bistatic radar cross section (RCS) using MATLAB Antenna Toolbox. Computes RCS of platforms, antennas, and arrays with PO, MoM, and FMM solvers, supporting HH/VV/HV/VH polarization, GPU acceleration, and near-field observation. Use when the user wants to compute, plot, or analyze radar cross section.
matlab-analyze-rf-propagationAnalyze RF propagation and plan wireless sites using MATLAB Antenna Toolbox. Creates transmitter/receiver sites, computes signal strength, coverage maps, SINR, line-of-sight, and ray tracing in geographic or indoor environments. Supports multiple propagation models (free-space, close-in, Longley-Rice, ray tracing, rain/gas/fog), custom terrain, building data, and directional antennas. Use when the user wants to compute coverage, signal strength, path loss, SINR, ray tracing, or plan a wireless network.