Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
26e1456
fix(yolo-coral-tpu): load local edgetpu.dll dynamically on Windows
solderzzc Mar 30, 2026
239f607
fix(yolo-coral-tpu): update tpu_probe.py to dynamically load local ed…
solderzzc Mar 30, 2026
701036e
fix(yolo-coral-tpu): prevent crash on CPU fallback by avoiding _edget…
solderzzc Mar 30, 2026
251bc28
fix(yolo-coral-tpu): add os.add_dll_directory, VC++ check, non-fatal …
solderzzc Mar 31, 2026
34dd2df
fix(yolo-coral-tpu): fix deploy.bat DLL paths, SKILL.md deploy field,…
solderzzc Mar 31, 2026
0e0f734
fix(yolo-coral-tpu): bundle coral_winusb.inf and use pnputil directly…
solderzzc Mar 31, 2026
5431c20
chore(yolo-coral-tpu): bundle edgetpu.dll + libusb-1.0.dll for offlin…
solderzzc Mar 31, 2026
f53d250
fix(yolo-coral-tpu): switch Windows driver from custom WinUSB INF to …
solderzzc Mar 31, 2026
38bf4aa
fix(yolo-coral-tpu): wait for msiexec to finish in Windows deployment
solderzzc Mar 31, 2026
2a629ef
fix(coral-tpu): automate UsbDk driver installation and refine detection
solderzzc Mar 31, 2026
85e3dea
chore: split yolo-detection-2026 into macos and win-wsl variant
solderzzc Mar 31, 2026
a2fce18
feat(yolo-coral-tpu): add interactive resume blocks for WSL and usbip…
solderzzc Mar 31, 2026
b7bcb81
fix(yolo-win-wsl): resolve deploy.bat crashes, usbipd PATH resolution…
solderzzc Apr 1, 2026
c3e7fd6
chore(models): include edge tpu tflite binaries directly in repository
solderzzc Apr 1, 2026
f5b4fd3
fix(yolo-win-wsl): add usbipd PATH fallback in wsl_wrapper
solderzzc Apr 1, 2026
97aa57b
fix(yolo-win-wsl): translate win paths to wsl /mnt/, install libedget…
solderzzc Apr 1, 2026
92aad77
chore: update benchmark scripts for reporting and test runs
solderzzc Apr 8, 2026
17e4eab
Merge branch 'develop' into feature/coral-tpu-detection
solderzzc Apr 8, 2026
bc6690e
Merge pull request #187 from SharpAI/feature/coral-tpu-detection
solderzzc Apr 8, 2026
9b2fa94
Merge branch 'develop' into fix/yolo-coral-tpu-windows-dll-loading
solderzzc Apr 8, 2026
9fae676
Merge pull request #188 from SharpAI/fix/yolo-coral-tpu-windows-dll-l…
solderzzc Apr 8, 2026
08186e5
Merge branch 'master' into develop
solderzzc Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 73 additions & 57 deletions skills.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,54 +100,6 @@
"large"
]
},
{
"id": "yolo-detection-2026-coral-tpu",
"name": "YOLO 2026 Coral TPU",
"description": "Google Coral Edge TPU — real-time object detection with LiteRT (INT8, ~4ms inference at 320×320).",
"version": "2.0.0",
"category": "detection",
"path": "skills/detection/yolo-detection-2026-coral-tpu",
"tags": [
"detection",
"yolo",
"coral",
"edge-tpu",
"litert",
"real-time",
"coco"
],
"platforms": [
"linux-x64",
"linux-arm64",
"darwin-arm64",
"darwin-x64",
"win-x64"
],
"requirements": {
"python": ">=3.9",
"system": "libedgetpu",
"hardware": "Google Coral USB Accelerator"
},
"capabilities": [
"live_detection",
"bbox_overlay"
],
"ui_unlocks": [
"detection_overlay",
"detection_results"
],
"fps_presets": [
0.2,
0.5,
1,
3,
5,
15
],
"model_sizes": [
"nano"
]
},
{
"id": "camera-claw",
"name": "Camera Claw",
Expand All @@ -157,16 +109,46 @@
"url": "https://github.com/SharpAI/CameraClaw",
"repo_url": "https://github.com/SharpAI/CameraClaw",
"code_structure": [
{ "path": "SKILL.md", "desc": "Aegis skill manifest (11 params)" },
{ "path": "package.json", "desc": "Node.js dependencies" },
{ "path": "config.yaml", "desc": "Default params" },
{ "path": "deploy.sh", "desc": "Node.js + Docker bootstrapper" },
{ "path": "deploy.bat", "desc": "Windows bootstrapper" },
{ "path": "scripts/monitor.js", "desc": "Main entry — Docker orchestrator + JSONL protocol" },
{ "path": "scripts/health-check.js", "desc": "Container health checker" },
{ "path": "docs/aegis_openclaw_note.md", "desc": "Aegis integration requirements" }
{
"path": "SKILL.md",
"desc": "Aegis skill manifest (11 params)"
},
{
"path": "package.json",
"desc": "Node.js dependencies"
},
{
"path": "config.yaml",
"desc": "Default params"
},
{
"path": "deploy.sh",
"desc": "Node.js + Docker bootstrapper"
},
{
"path": "deploy.bat",
"desc": "Windows bootstrapper"
},
{
"path": "scripts/monitor.js",
"desc": "Main entry — Docker orchestrator + JSONL protocol"
},
{
"path": "scripts/health-check.js",
"desc": "Container health checker"
},
{
"path": "docs/aegis_openclaw_note.md",
"desc": "Aegis integration requirements"
}
],
"tags": [
"security",
"sandbox",
"monitoring",
"openclaw",
"ai-agent"
],
"tags": ["security", "sandbox", "monitoring", "openclaw", "ai-agent"],
"platforms": [
"linux-x64",
"linux-arm64",
Expand Down Expand Up @@ -310,6 +292,40 @@
"ui_unlocks": [
"annotation_studio"
]
},
{
"id": "yolo-detection-2026-coral-tpu-macos",
"name": "YOLO 2026 Coral TPU (macOS)",
"description": "Google Coral Edge TPU natively via ai-edge-litert on macOS",
"category": "detection",
"path": "skills/detection/yolo-detection-2026-coral-tpu-macos",
"tags": [
"detection",
"yolo",
"coral",
"edge-tpu"
],
"platforms": [
"darwin-arm64",
"darwin-x64"
]
},
{
"id": "yolo-detection-2026-coral-tpu-win-wsl",
"name": "YOLO 2026 Coral TPU (Windows/WSL)",
"description": "Google Coral Edge TPU natively mapped to WSL2",
"category": "detection",
"path": "skills/detection/yolo-detection-2026-coral-tpu-win-wsl",
"tags": [
"detection",
"yolo",
"coral",
"edge-tpu",
"wsl"
],
"platforms": [
"win-x64"
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ function buildHTML(allResults, fixtureImages, { liveMode = false, liveStatus = n
tokens: r.tokens || r.data?.tokenTotals?.total,
perfSummary: r.perfSummary || r.data?.perfSummary || null,
system: r.data?.system || {},
serverParams: r.data?.serverParams || {},
tokenTotals: r.data?.tokenTotals || {},
suites: (r.data?.suites || []).map(s => ({
name: s.name,
Expand Down Expand Up @@ -492,6 +493,15 @@ function renderPerformance() {
let html = '<div class="header"><div class="page-title">⚡ Performance</div>';
html += '<div class="page-subtitle">' + esc(run.model || '?') + ' — ' + shortDate(run.timestamp) + '</div></div>';

if (run.serverParams && typeof run.serverParams === 'object' && Object.keys(run.serverParams).length > 0) {
let paramStr = '';
for (const k in run.serverParams) {
if (paramStr) paramStr += ' | ';
paramStr += '<b>' + esc(k) + '</b>: ' + esc(String(run.serverParams[k]));
}
html += '<div style="font-size:0.75rem; color:var(--text-dim); margin-left: 2rem; margin-top: 0.5rem; padding-bottom: 0.5rem;">[Server Params] ' + paramStr + '</div>';
}

// Hero cards
html += '<div class="hero-grid">';
const ttftAvg = perf?.ttft?.avgMs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,10 +230,14 @@ function suite(name, fn) {
suites.push({ name, fn, tests: [] });
}

let targetServerParams = {};
try { targetServerParams = JSON.parse(process.env.AEGIS_SERVER_PARAMS || '{}'); } catch { }

const results = {
timestamp: new Date().toISOString(),
gateway: GATEWAY_URL,
vlm: VLM_URL || null,
serverParams: targetServerParams,
system: {},
model: {},
suites: [],
Expand Down Expand Up @@ -333,6 +337,9 @@ async function llmCall(messages, opts = {}) {
...(model && { model }),
...(temperature !== undefined && { temperature }),
...(opts.expectJSON && { top_p: 0.8 }),
// For JSON-expected tests on local servers, enable server-side JSON mode
// which activates prefix buffering to strip hallucinated artifacts
...(opts.expectJSON && !isCloudApi && { response_format: { type: 'json_object' } }),
...(opts.tools && { tools: opts.tools }),
// Model-family-specific params (e.g. reasoning_effort:'none' for Mistral).
// These are merged last so they take precedence over defaults.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
---
name: yolo-detection-2026-coral-tpu
description: "Google Coral Edge TPU — real-time object detection natively via local Python environment"
name: yolo-detection-2026-coral-tpu-macos
description: "Google Coral Edge TPU — real-time object detection natively (macOS / Linux)"
version: 1.0.0
icon: assets/icon.png
entry: scripts/detect.py
deploy: deploy.sh
deploy:
linux: deploy.sh
macos: deploy.sh
runtime: python

requirements:
platforms: ["linux", "macos", "windows"]
platforms: ["linux", "macos"]



Expand Down Expand Up @@ -83,10 +85,7 @@ Real-time object detection natively utilizing the Google Coral Edge TPU accelera

## Requirements

- **Google Coral USB Accelerator** (USB 3.0 port recommended)
- **libusb** framework (installed automatically on Linux/macOS)
- Python 3 with the native `pycoral` environment
- Adequate cooling for sustained inference
- Python 3.9–3.13

## How It Works

Expand Down Expand Up @@ -125,12 +124,6 @@ Real-time object detection natively utilizing the Google Coral Edge TPU accelera
./deploy.sh
```

### Windows
```powershell
# Installs directly to the Microsoft runtime
.\deploy.bat
```

> **Important Deployment Notice**: The updated `deploy.sh` script will natively halt execution and prompt you securely for your OS `sudo` password to securely register the USB drivers (`libedgetpu`) system-wide. If you refuse the prompt, it gracefully outputs the exact terminal instructions for you to configure it manually.

## Performance
Expand Down Expand Up @@ -158,8 +151,9 @@ Same JSONL as `yolo-detection-2026`:

## Installation

### Linux / macOS
```bash
./deploy.sh
```

The deployer builds the local native Python virtual environment inline with global TPU hooks. No Docker containers or abstract container-bindings are used.
The deployer builds the local Python virtual environment and installs the Edge TPU runtime. No Docker required.
File renamed without changes.
File renamed without changes.
File renamed without changes.
129 changes: 129 additions & 0 deletions skills/detection/yolo-detection-2026-coral-tpu-macos/docker_out.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
Collecting tflite-runtime==2.14.0
Downloading tflite_runtime-2.14.0-cp39-cp39-manylinux2014_x86_64.whl (2.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 16.7 MB/s eta 0:00:00
Collecting pillow
Downloading pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.6/6.6 MB 39.5 MB/s eta 0:00:00
Collecting numpy
Downloading numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.5/19.5 MB 33.4 MB/s eta 0:00:00
Installing collected packages: pillow, numpy, tflite-runtime
Successfully installed numpy-2.0.2 pillow-11.3.0 tflite-runtime-2.14.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

[notice] A new release of pip is available: 23.0.1 -> 26.0.1
[notice] To update, run: pip install --upgrade pip
Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9671 kB]
Get:5 http://deb.debian.org/debian trixie-updates/main amd64 Packages [5412 B]
Get:6 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [114 kB]
Fetched 10.0 MB in 1s (10.4 MB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
libgnutls30t64 libidn2-0 libp11-kit0 libpsl5t64 libtasn1-6 libunistring5
publicsuffix
Suggested packages:
gnutls-bin
The following NEW packages will be installed:
libgnutls30t64 libidn2-0 libp11-kit0 libpsl5t64 libtasn1-6 libunistring5
libusb-1.0-0 publicsuffix wget
0 upgraded, 9 newly installed, 0 to remove and 14 not upgraded.
Need to get 3926 kB of archives.
After this operation, 13.0 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian trixie/main amd64 libunistring5 amd64 1.3-2 [477 kB]
Get:2 http://deb.debian.org/debian trixie/main amd64 libidn2-0 amd64 2.3.8-2 [109 kB]
Get:3 http://deb.debian.org/debian trixie/main amd64 libp11-kit0 amd64 0.25.5-3 [425 kB]
Get:4 http://deb.debian.org/debian trixie/main amd64 libtasn1-6 amd64 4.20.0-2 [49.9 kB]
Get:5 http://deb.debian.org/debian trixie/main amd64 libgnutls30t64 amd64 3.8.9-3+deb13u2 [1468 kB]
Get:6 http://deb.debian.org/debian trixie/main amd64 libpsl5t64 amd64 0.21.2-1.1+b1 [57.2 kB]
Get:7 http://deb.debian.org/debian trixie/main amd64 wget amd64 1.25.0-2 [984 kB]
Get:8 http://deb.debian.org/debian trixie/main amd64 libusb-1.0-0 amd64 2:1.0.28-1 [59.6 kB]
Get:9 http://deb.debian.org/debian trixie/main amd64 publicsuffix all 20250328.1952-0.1 [296 kB]
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC entries checked: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.40.1 /usr/local/share/perl/5.40.1 /usr/lib/x86_64-linux-gnu/perl5/5.40 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.40 /usr/share/perl/5.40 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 8, <STDIN> line 9.)
debconf: falling back to frontend: Teletype
debconf: unable to initialize frontend: Teletype
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Noninteractive
Fetched 3926 kB in 0s (13.3 MB/s)
Selecting previously unselected package libunistring5:amd64.
(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 5644 files and directories currently installed.)
Preparing to unpack .../0-libunistring5_1.3-2_amd64.deb ...
Unpacking libunistring5:amd64 (1.3-2) ...
Selecting previously unselected package libidn2-0:amd64.
Preparing to unpack .../1-libidn2-0_2.3.8-2_amd64.deb ...
Unpacking libidn2-0:amd64 (2.3.8-2) ...
Selecting previously unselected package libp11-kit0:amd64.
Preparing to unpack .../2-libp11-kit0_0.25.5-3_amd64.deb ...
Unpacking libp11-kit0:amd64 (0.25.5-3) ...
Selecting previously unselected package libtasn1-6:amd64.
Preparing to unpack .../3-libtasn1-6_4.20.0-2_amd64.deb ...
Unpacking libtasn1-6:amd64 (4.20.0-2) ...
Selecting previously unselected package libgnutls30t64:amd64.
Preparing to unpack .../4-libgnutls30t64_3.8.9-3+deb13u2_amd64.deb ...
Unpacking libgnutls30t64:amd64 (3.8.9-3+deb13u2) ...
Selecting previously unselected package libpsl5t64:amd64.
Preparing to unpack .../5-libpsl5t64_0.21.2-1.1+b1_amd64.deb ...
Unpacking libpsl5t64:amd64 (0.21.2-1.1+b1) ...
Selecting previously unselected package wget.
Preparing to unpack .../6-wget_1.25.0-2_amd64.deb ...
Unpacking wget (1.25.0-2) ...
Selecting previously unselected package libusb-1.0-0:amd64.
Preparing to unpack .../7-libusb-1.0-0_2%3a1.0.28-1_amd64.deb ...
Unpacking libusb-1.0-0:amd64 (2:1.0.28-1) ...
Selecting previously unselected package publicsuffix.
Preparing to unpack .../8-publicsuffix_20250328.1952-0.1_all.deb ...
Unpacking publicsuffix (20250328.1952-0.1) ...
Setting up libp11-kit0:amd64 (0.25.5-3) ...
Setting up libunistring5:amd64 (1.3-2) ...
Setting up libtasn1-6:amd64 (4.20.0-2) ...
Setting up libusb-1.0-0:amd64 (2:1.0.28-1) ...
Setting up publicsuffix (20250328.1952-0.1) ...
Setting up libidn2-0:amd64 (2.3.8-2) ...
Setting up libgnutls30t64:amd64 (3.8.9-3+deb13u2) ...
Setting up libpsl5t64:amd64 (0.21.2-1.1+b1) ...
Setting up wget (1.25.0-2) ...
Processing triggers for libc-bin (2.41-12) ...
--2026-03-31 19:47:38-- https://packages.cloud.google.com/apt/pool/coral-edgetpu-stable/libedgetpu1-max_16.0_amd64_0ac21f1924dd4b125d5cfc5f6d0e4a5e.deb
Resolving packages.cloud.google.com (packages.cloud.google.com)... 142.251.218.142, 2607:f8b0:4005:801::200e
Connecting to packages.cloud.google.com (packages.cloud.google.com)|142.251.218.142|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 387960 (379K) [application/vnd.debian.binary-package]
Saving to: ‘libedgetpu.deb’

0K .......... .......... .......... .......... .......... 13% 1.50M 0s
50K .......... .......... .......... .......... .......... 26% 2.72M 0s
100K .......... .......... .......... .......... .......... 39% 3.45M 0s
150K .......... .......... .......... .......... .......... 52% 5.38M 0s
200K .......... .......... .......... .......... .......... 65% 6.17M 0s
250K .......... .......... .......... .......... .......... 79% 5.45M 0s
300K .......... .......... .......... .......... .......... 92% 7.87M 0s
350K .......... .......... ........ 100% 7.11M=0.1s

2026-03-31 19:47:39 (3.67 MB/s) - ‘libedgetpu.deb’ saved [387960/387960]

Traceback (most recent call last):
File "/app/wsl_test.py", line 9, in <module>
delegate = tflite.load_delegate("libedgetpu.so.1")
File "/usr/local/lib/python3.9/site-packages/tflite_runtime/interpreter.py", line 166, in load_delegate
delegate = Delegate(library, options)
File "/usr/local/lib/python3.9/site-packages/tflite_runtime/interpreter.py", line 73, in __init__
self._library = ctypes.pydll.LoadLibrary(library)
File "/usr/local/lib/python3.9/ctypes/__init__.py", line 452, in LoadLibrary
return self._dlltype(name)
File "/usr/local/lib/python3.9/ctypes/__init__.py", line 374, in __init__
self._handle = _dlopen(self._name, mode)
OSError: libedgetpu.so.1: cannot open shared object file: No such file or directory
Exception ignored in: <function Delegate.__del__ at 0x7f4e33a50160>
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/tflite_runtime/interpreter.py", line 109, in __del__
if self._library is not None:
AttributeError: 'Delegate' object has no attribute '_library'
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
SUBSYSTEM=="usb",ATTRS{idVendor}=="1a6e",ATTRS{idProduct}=="089a",GROUP="plugdev"
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="9302",GROUP="plugdev"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://github.com/google-coral/libedgetpu

Files: *
Copyright: Copyright 2018 Google, LLC <coral-support@google.com>
License: Apache-2.0
Loading