
Goes over the steel strip surface frame by frame and calls it on the spot.
Steel surface defect inspection that runs on the edge device: a fixed camera on the strip or the part, one OK/NG verdict per frame, delivered to the PLC and to the MES at the same time. Runs on a reComputer J30 / J40 (Orin) or on a reComputer R2000 Series with the Hailo-8 option (R2035-12).
Lines where the mount is fixed, the light is steady, and the defect covers enough pixels.

Cold-mill exits, inspection tables after the slitter. The verdict drives a reject or marking station.

Older lines that already have reject cylinders and alarm lamps. The verdict lands on a Modbus coil the PLC reads.

Trial runs on a new line. Record the line first, set thresholds and classes second.
Not a fit: cameras that move or get refocused, and stations where lighting varies. Accuracy differs sharply by defect class, so check the classes you care about first.
A fixed camera captures the frame, an inspection host makes the call (reComputer J30 / J40 Series, or reComputer R2000 Series with the Hailo-8 option), and the result goes to the PLC and MES you already run.

Three things per line: a fixed camera that produces the picture, one host that runs the detector and the OK/NG rule, and whatever consumes the verdict. Detection, the verdict rule, the MQTT broker, the Modbus TCP server and the commissioning page all sit on that one host — no image and no frame data leaves the line.
Any RTSP camera pointed at the strip or the part works. What the design constrains is the framing and the light, not the camera model.
The measured input was a synthetic video at 10 FPS, not a camera stream, so load-test with your own source before settling on a stream count.
One host per line runs the detector, the OK/NG rule and all three outputs. The logic is identical on both hosts; the accelerator and how the model arrives differ.
| Inspection host | Accelerator | Model delivery | Measured on hardware |
|---|---|---|---|
| reComputer J30 / J40 (Orin Nano 8GB / Orin NX 16GB) | Orin GPU | Built on the device at first deploy, 291 s measured | Accuracy, throughput, end-to-end latency and multi-stream capacity |
| reComputer R2000 Series with the Hailo-8 option (R2035-12) | Hailo-8 | Compiled off-device, downloaded at deploy time | Throughput, end-to-end latency and accuracy |
Two alternative detectors can be selected on Jetson only; Hailo-8 runs the default detector. An optional anomaly score, off by default, can be added to the MQTT message without changing the verdict.
The verdict reaches the PLC, the MES and a local page at the same time: the PLC reads it over Modbus TCP, the MES subscribes over MQTT, and a browser opens the page, all connecting to the inspection host directly. The data interface is listed under “What you get out of it” below.
What shows up on the screen beside the line once it is running.
An engineering benchmark on a public dataset; the dataset licence is still being confirmed.
| What the line gets | Typical | Device |
|---|---|---|
| Frame captured to the verdict on the Modbus coil | 9.3 ms P50 (9.5 ms P99) | reComputer J40 Series (J4012, Orin NX 16GB) |
| Defect detection accuracy (mAP50) | 0.7577 | reComputer J40 / J30 Series |
| Precision and recall at the deployed threshold | P 0.765 / R 0.697 | reComputer J40 Series |
| Streams one host carries at a 10 FPS line rate | 8 | reComputer J40 Series |
reComputer J30 Series measures 10.56 ms P50 on the same path; reComputer R2000 Series with the Hailo-8 option measures 11.61 ms P50 and 0.7091 mAP50.
Accuracy differs by defect class: scratches 0.97, crazing 0.36. Check the classes you care about before sizing a line on the overall figure.
Every validation image carries a defect, so measure the clean-strip false-alarm rate on your own line images. For per-device latency, multi-stream throughput and benchmark matrices, see Engineering Wiki · Surface Defect Inspection.
Once deployed, these three interfaces are the whole contract.
| Type | Where | Content |
|---|---|---|
| Modbus TCP | port 502, unit 1, Coil 0/1 + HR 0–7 | Coil 0 = NG, Coil 1 = OK. HR 0 primary defect class, HR 1 defect count, HR 2–5 primary box ×10000, HR 6–7 heartbeat seconds |
| MQTT | port 1883, <device-name>/inspection/<stream-id>/results | One JSON message per frame: verdict, reason, defect count, primary class, timings and every box with class, score and position |
| HTTP | port 8080, /preview.mjpg /healthz /events /snapshot.jpg | Read-only commissioning page: live preview with boxes, health counters, recent verdicts |
Registers are written before the coil, so a PLC that triggers on the coil reads the matching frame; with several streams on one host, Modbus carries the latest verdict only and per-stream results come from MQTT. Device name and stream id are set in the deploy step, so several lines share one broker. Box numbering is per frame and does not follow a defect across frames, and the optional anomaly score is a separate field that never changes the verdict.
The reusable unit is not "six classes of steel defect" — it is the chain camera → detector → OK/NG rule → Modbus + MQTT + commissioning page. Only the detector's classes and weights are bound to a product; everything downstream carries over.
| Layer | What porting costs you |
|---|---|
| Camera framing and lighting rules, the fixed-view requirement | reuse as-is |
| Both runtimes (TensorRT on Orin, INT8 on Hailo-8) and model delivery | reuse as-is |
| Shared post-processing behind every detector | reuse as-is |
| OK/NG rule and score threshold | retune, do not rewrite |
| Modbus register map, MQTT topics and message checks | reuse as-is |
| Optional anomaly channel | reuse as-is; recalibrate on your own OK images |
| Detector classes and weights | retrain on your own images |
Fits: surface defects on strip, sheet or parts where a PLC acts on an OK/NG signal within the line rate.
Tell us about your site — we work out the hardware, then you connect the data and follow the steps.
How many camera streams on one host? One line position is one camera stream. Capacity was measured on an Orin NX 16GB only, at 640² and 10 FPS per stream.
| Setup | Role | Device | Qty |
|---|---|---|---|
| IP Camera + reComputer J30 / J40 (Orin) | Inspection Host | reComputer J40 Series (Jetson Orin NX) / reComputer J30 Series (Jetson Orin Nano)(either one) | 1 |
| IP Camera | IP Camera | 1 | |
| IP Camera + reComputer R2000 (Hailo-8) | Inspection Host | reComputer Industrial R20 Series | 1 |
| IP Camera | IP Camera | 1 |
| Preset | Video source | Inspection host | Model delivery |
|---|---|---|---|
| IP Camera + reComputer J30 / J40 (Orin) | Your own RTSP camera | reComputer J40 (Orin NX 16GB) or J30 (Orin Nano 8GB) | Built on the device at first deploy, 291 s measured on Orin NX 16GB |
| IP Camera + reComputer R2000 Series (R2035-12, Hailo-8) | Your own RTSP camera | reComputer R2000 Series with the Hailo-8 accelerator option (R2035-12) | Compiled off-device and downloaded at deploy time |
Not until the dataset licence is confirmed. The detector is trained on a re-hosted copy of NEU-DET whose permission chain from the original authors is still being checked. Until then, the weights, compiled models and detection overlays cannot be used in customer deliverables.
Yes. The detector, the OK/NG rule, the Modbus server, the MQTT broker and the commissioning page all run on the inspection host. No part of the verdict path needs an outside service.
Over Modbus TCP on port 502, unit 1. Coil 0 = NG and Coil 1 = OK; HR 0–7 carry the primary defect class, defect count, primary box and heartbeat. Registers are written before the coil, so treat the coil as the trigger.
mAP50 is 0.7577 on reComputer J40 Series and 0.7091 on reComputer R2000 Series (R2035-12, Hailo-8), on the 290-image validation set. Per class it ranges from scratches 0.97 to crazing 0.36. The model has seen one dataset under one lighting condition, so a real line needs its own images.
This dataset cannot measure it, because every validation image carries a defect. Record your own line through the MQTT stream and set the threshold from that.
8 streams stable at 640² and 10 FPS each on reComputer J40 Series (J4012), degrading at 12 and failing at 24. Frames past the limit are dropped without an error. Several streams share one Modbus register block, so per-stream results come from MQTT.
Start with the default YOLOX-Tiny, the only detector with Jetson timings and a Hailo-8 build. D-FINE-S and RT-DETRv2-S are selectable on Jetson only and score close on mAP50. Hailo-8 supports neither of them.
It scores how unlike defect-free reference images a frame looks, as a separate field that never changes the verdict. Its image-level result in the shipped evaluation was close to random, so read it as a region-level signal. Recalibrate it on OK images from your own camera before enabling it.