yolov10 - veka-server/onnx-php GitHub Wiki

yolov10

model sources : https://huggingface.co/onnx-community/yolov10m

require_once(__DIR__.'/../vendor/autoload.php');

Onnx\Library::setFolder(__DIR__.'/../');
Onnx\Library::install();


$ia = new class extends \Onnx\Task\Vision {

    protected array $tags = [
        0 =>  "person",
        1 =>  "bicycle",
        2 =>  "car",
        3 =>  "motorcycle",
        4 =>  "airplane",
        5 =>  "bus",
        6 =>  "train",
        7 =>  "truck",
        8 =>  "boat",
        9 =>  "traffic light",
        10 =>  "fire hydrant",
        11 =>  "stop sign",
        12 =>  "parking meter",
        13 =>  "bench",
        14 =>  "bird",
        15 =>  "cat",
        16 =>  "dog",
        17 =>  "horse",
        18 =>  "sheep",
        19 =>  "cow",
        20 =>  "elephant",
        21 =>  "bear",
        22 =>  "zebra",
        23 =>  "giraffe",
        24 =>  "backpack",
        25 =>  "umbrella",
        26 =>  "handbag",
        27 =>  "tie",
        28 =>  "suitcase",
        29 =>  "frisbee",
        30 =>  "skis",
        31 =>  "snowboard",
        32 =>  "sports ball",
        33 =>  "kite",
        34 =>  "baseball bat",
        35 =>  "baseball glove",
        36 =>  "skateboard",
        37 =>  "surfboard",
        38 =>  "tennis racket",
        39 =>  "bottle",
        40 =>  "wine glass",
        41 =>  "cup",
        42 =>  "fork",
        43 =>  "knife",
        44 =>  "spoon",
        45 =>  "bowl",
        46 =>  "banana",
        47 =>  "apple",
        48 =>  "sandwich",
        49 =>  "orange",
        50 =>  "broccoli",
        51 =>  "carrot",
        52 =>  "hot dog",
        53 =>  "pizza",
        54 =>  "donut",
        55 =>  "cake",
        56 =>  "chair",
        57 =>  "couch",
        58 =>  "potted plant",
        59 =>  "bed",
        60 =>  "dining table",
        61 =>  "toilet",
        62 =>  "tv",
        63 =>  "laptop",
        64 =>  "mouse",
        65 =>  "remote",
        66 =>  "keyboard",
        67 =>  "cell phone",
        68 =>  "microwave",
        69 =>  "oven",
        70 =>  "toaster",
        71 =>  "sink",
        72 =>  "refrigerator",
        73 =>  "book",
        74 =>  "clock",
        75 =>  "vase",
        76 =>  "scissors",
        77 =>  "teddy bear",
        78 =>  "hair drier",
        79 =>  "toothbrush"
    ];

    protected $rescale_factor = 0.00392156862745098 ;
    protected $format = 'rgb';
    protected $height = 640;
    protected $width = 640;
    protected $shape = 'bchw'; /* batch channel height width */
    protected mixed $modelNameOrPath = __DIR__.'/../.transformers-cache/onnx-community/yolov10m/onnx/model_quantized.onnx' ;

    protected function postprocess($result) {
        $output_name = $this->model->outputs()[0]['name'];

        $predictions = $result[$output_name][0];

        $reshaped_input_sizes = [640, 640](/veka-server/onnx-php/wiki/640,-640); // Exemple de dimensions reformatées
        $newHeight = $reshaped_input_sizes[0][0];
        $newWidth = $reshaped_input_sizes[0][1];
        $imageWidth = 640; // Exemple de largeur d'image originale
        $imageHeight = 640; // Exemple de hauteur d'image originale
        $xs = $imageWidth / $newWidth;
        $ys = $imageHeight / $newHeight;

        $t = [];
        foreach ($predictions as $prediction) {
            [$xmin, $ymin, $xmax, $ymax, $score, $id] = $prediction;

            if ($score < 0.5) continue;

            // Convertit en coordonnées d'image originales
            $bbox = array_map(function($value, $scale) {
                return number_format($value * $scale, 2);
            }, [$xmin, $ymin, $xmax, $ymax], [$xs, $ys, $xs, $ys]);

            $t[] = [
                'id' => $id
                ,'label' => $this->tags[$id]
                ,'score' => $score
                ,'bbox' => $bbox
            ];
        }

        return $t;
    }

};

$ia->loadModel();
$tags = $ia->getTags( __DIR__ . '\images\sexy.jpg');
var_dump($tags);