
Snap the item at the bin and it tells you which one it goes in.
Trigger a shot at the bin and get back what the item is made of and which of the four Chinese municipal waste streams it belongs in — one MQTT message per item, decided on the device, plus a GPIO output for a flap or a lane indicator.
One item at a time in front of a fixed camera, with an answer someone acts on at once.

Sorting kiosks, food-waste rooms at the foot of a block. Photograph the item and name the bin.

Benches at recycling depots and transfer stations. An operator shows each item and keeps the record.

Office lobbies, school canteen entrances. The result drives the flap or the lane light over GPIO.
Not a fit: conveyor sorting with mechanical actuation, and street litter detection. One item per image, and this build outputs neither textile nor hazardous waste. Accuracy at a live point is lower than the dataset figure, so re-measure on site images.
A button or motion trigger starts the shot, a downward camera and a sorting host (reComputer J30 / J40 Series, or reComputer R2000 Series with the Hailo-8 option) make the call, and the result drives a flap or a lane light.

Three things at the bin: something that fires the trigger, a camera looking down into the drop area, and one host that classifies the item and publishes the result. The classification, the four-way lookup, the contract check and the MQTT broker all sit on that host — the image stays on the device, and what crosses the network is one JSON message per item.
One classification happens per trigger, from one of three sources:
Triggers arriving within 800 ms are merged into one. The camera is any USB or RTSP source looking down into the drop area, with one item filling a meaningful part of the frame.
One host per bin runs capture, the classifier, the four-way lookup, the local panel and the MQTT broker. The logic is identical on both hosts; the accelerator and how the model arrives differ.
| Sorting host | Accelerator | Model delivery | Measured on hardware |
|---|---|---|---|
| reComputer J30 / J40 (Orin Nano 8GB / Orin NX 16GB) | Orin GPU | Built on the device during deployment, 68 s on J4012 | Trigger to answer, 4.1 ms on J4012 |
| reComputer R2000 Series with the Hailo-8 option (R2035-12) | Hailo-8 | Compiled off-device, downloaded at deploy time | Material and four-way accuracy on the full validation set |
The optional open-vocabulary model, which adds item types by editing prompts, is offered on the Orin NX 16GB module only.
Each result leaves as an MQTT message from the broker on the sorting host, a local web page opened in a browser, and an in-process callback for a flap, relay or lane light. The bundled broker allows anonymous access for commissioning; add credentials before deployment. The data interface is listed under “What you get out of it” below.
What you see and operate in a browser once it is running.
An engineering benchmark on two public datasets, not a regulatory classification result.
| What the drop-off point gets | Typical | Device |
|---|---|---|
| Trigger to a bin answer | 4.1 ms per trigger | reComputer J40 Series (J4012, Orin NX 16GB) |
| Four-way top-1, 7417 validation images | 95.0% (95.1% on this device) | reComputer R2000 Series (R2035-12, Hailo-8) |
| Material top-1, 8 classes, same images | 88.8% (88.9% on this device) | reComputer R2000 Series (R2035-12, Hailo-8) |
Read the two top-1 figures together: glass, metal and plastic all go to the recyclable bin, so the four-way figure is higher.
Both datasets show single items on clean backgrounds. Accuracy at a live drop-off point will be lower; re-measure on site images before relying on it.
The four-way table is maintained by this project, not an authority's ruling. This build outputs neither textile nor hazardous waste.
Once deployed, these interfaces are the whole contract.
| Type | Where | Content |
|---|---|---|
| MQTT | port 1883, waste/<stream-id>/results | One JSON message per classification: material class and four-way category (English and Chinese), confidence, top-3, trigger source, inference and pipeline time, image reference, model details and taxonomy version |
| HTTP | port 8080, /trigger /preview.mjpg /healthz /events | Fire one capture-and-classify, live view, health counters, recent results with top-3 |
| GPIO callback | in-process | The four-way category for a flap, relay or lane light. No pin binding; the actuator switch is off by default |
The image is never in the message, only a reference to where it is stored. Messages are checked before publishing, and one that fails the check is counted and dropped.
The reusable unit is not "waste" — it is the chain trigger → one shot → single-item classifier → policy lookup table → MQTT event + actuator callback. Only the classifier weights and the lookup table are bound to this taxonomy; everything else carries over.
| Layer | What porting costs you |
|---|---|
| Trigger sources and debounce | reuse as-is |
| Both runtimes (TensorRT on Orin, INT8 on Hailo-8) and model delivery | reuse as-is |
| Message format and the pre-publish checks | reuse as-is |
| Policy lookup table (class → category) | reuse the mechanism, edit the table |
| HTTP panel, preview, health counters, GPIO callback | reuse as-is |
| Classifier weights and class list | retrain on your own images |
| Open-vocabulary prompts | rewrite the prompts, no training run |
Fits: returnable-container acceptance, material sorting at a collection kiosk, a category rule that differs by city or site.
Tell us about your site — we work out the hardware, then you connect the data and follow the steps.
Will the list of item types change after deployment? Adding a class to the baseline classifier means retraining. The optional open-vocabulary track adds one by editing prompts instead — at the cost of a much larger model and far more compute per image.
| Setup | Role | Device | Qty |
|---|---|---|---|
| Camera + reComputer J30 / J40 (Orin) | Sorting Host | reComputer J40 Series (Jetson Orin NX) / reComputer J30 Series (Jetson Orin Nano)(either one) | 1 |
| Camera | USB / IP Camera | 1 | |
| Camera + reComputer R2000 (Hailo-8) | Sorting Host | reComputer Industrial R20 Series | 1 |
| Camera | USB / IP Camera | 1 | |
| reCamera (SG2002) | Camera and Classifier | reCamera 2002 | 1 |
| reCamera Pro | Camera and Classifier | reCamera Pro | 1 |
| Camera + reComputer RK3588 | Sorting Host | reComputer RK3588 Series | 1 |
| Camera | USB / IP Camera | 1 |
| Preset | Camera | Where the classifier runs | Runtime |
|---|---|---|---|
| Camera + reComputer J30 / J40 (Orin) | Your own USB / RTSP camera | reComputer J30 (Orin Nano 8GB) or J40 (Orin NX 16GB) | TensorRT FP16, engine built on the device during deployment |
| Camera + reComputer R2000 Series (R2035-12, Hailo-8) | Your own USB / RTSP camera | reComputer R2000 Series with the Hailo-8 accelerator option (R2035-12) | Hailo-8, model compiled off-device and downloaded at deploy time |
| Camera + reComputer RK3588 | Your own USB / RTSP camera | reComputer RK3588 | RK3588 NPU, INT8 |
| reCamera (SG2002) | The camera itself | On the camera | Camera TPU, BF16 |
| reCamera Pro | The camera itself | On the camera | Camera NPU, INT8 |
Yes. Capture, classification, the four-way lookup, the HTTP panel and the MQTT broker all run on the sorting host. No part of the classification path needs an outside service.
No. The message carries only an image reference, and a message containing image data is rejected before publishing. What crosses the network is one JSON message per item.
On 7417 validation images, reComputer R2000 Series (R2035-12, Hailo-8) measured 95.1% four-way and 88.9% material top-1. Accuracy at a live drop-off point will be lower, so re-measure on your own site images. The four-way table is not an authority's ruling and must not be the sole basis for a charge or penalty.
Trigger-to-answer time, 4.1 ms, was measured on reComputer J40 Series (J4012). Accuracy on the full validation set was measured on reComputer R2000 Series (R2035-12, Hailo-8). The 95.0% and 88.8% figures are the same model's offline baseline on a development-machine CPU.
When you need to add item types without retraining, answer in Chinese or English from one image, or flag items outside the known list. The baseline is about 3 points more accurate and much faster. The open-vocabulary model is offered on the Orin NX 16GB module only.
The runtime passes the four-way category to a callback; wiring it to a pin, relay or driver is integration work. The actuator switch is off by default.
The runtime code and the open-vocabulary checkpoint are Apache-2.0. TrashNet is MIT and Garbage Classification 3 is CC BY 4.0; both allow redistribution with attribution. No dataset-derived image ships in this package.