Analyzing Truck Load Using Image Recognition
All checks were successful
Build / build (push) Successful in 16s
All checks were successful
Build / build (push) Successful in 16s
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 2.9 MiB |
@@ -0,0 +1,65 @@
|
||||
+++
|
||||
title = "Analyzing Truck Load Using Image Recognition"
|
||||
date = 2026-02-12
|
||||
|
||||
[taxonomies]
|
||||
categories = ["Software"]
|
||||
|
||||
[extra]
|
||||
author = "Emil Miler"
|
||||
+++
|
||||
|
||||
A friend of mine asked for help expanding an image recognition system he is implementing at work. The [Roboflow](https://roboflow.com/) pipeline analyzes images of open trucks and tags all visible cargo with the appropriate label and dimensions.
|
||||
|
||||
The goal was to extend the output to display the percentage of the truck’s maximum capacity being used. To achieve this, I integrated a custom Python script into the existing pipeline.
|
||||
|
||||
<!-- more -->
|
||||
|
||||
Roboflow is a platform for managing image datasets, training computer vision models, and running image recognition workflows. My friend had already trained a functioning model before I got involved.
|
||||
|
||||

|
||||
|
||||
Since the system operates on 2D images, we can calculate only the rough two-dimensional surface coverage of the truck, not the full cargo volume. For their specific use case, however, this level of estimation is sufficient.
|
||||
|
||||
I extended the existing pipeline by adding a new branch with a custom script block called _Total Coverage_. This block allows for custom logic and can interact directly with the [Roboflow API](https://inference.roboflow.com/workflows/about/) to access workflow data and inference results.
|
||||
|
||||

|
||||
|
||||
Below is the Python script I implemented to extract the inference data and calculate both the total surface coverage and the number of detected objects.
|
||||
|
||||
```python
|
||||
def run(self, model_output) -> dict:
|
||||
object_count = len(model_output)
|
||||
truck_area = 0
|
||||
cargo_area = 0
|
||||
|
||||
for xyxy, mask, confidence, class_id, tracker_id, data in model_output:
|
||||
w = data.get("width", 0)
|
||||
h = data.get("height", 0)
|
||||
label = data.get("class_name", "").lower()
|
||||
area = w * h
|
||||
|
||||
if label == "truck":
|
||||
truck_area = area
|
||||
object_count -= 1
|
||||
else:
|
||||
cargo_area += area
|
||||
|
||||
coverage = round((cargo_area / truck_area * 100), 1) if truck_area > 0 else 0
|
||||
|
||||
return {
|
||||
"total_coverage": coverage,
|
||||
"object_count": object_count,
|
||||
}
|
||||
```
|
||||
|
||||
The tricky part was handling the `model_output` correctly, otherwise the logic is straightforward. Needless to say, this remains an estimation rather than a precise calculation. Here is an example of the script output in JSON format.
|
||||
|
||||
```json
|
||||
"truck_stats": {
|
||||
"total_coverage": 51.8,
|
||||
"object_count": 8
|
||||
},
|
||||
```
|
||||
|
||||
This was an interesting exercise, as it was my first time working with Roboflow and contributing to an image recognition project that is actively used in production.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
Reference in New Issue
Block a user