PHP无法直接调用地平线征程芯片AI接口,因其SDK仅支持C/C++/Python(通过hbpython或ctypes)在征程Linux环境下调用;可行方案是用Python构建REST桥接服务,PHP通过curl调用该服务。

PHP 无法直接调用地平线(Horizon Robotics)征程(Journey)系列芯片的 AI 感知数据或“发感知数据调决策接口优路径”——这不是一个标准对外开放的 Web API,也不是 PHP 可以通过 curl 或 file_get_contents 调用的 HTTP 接口。
地平线征程 SDK 不提供 PHP 绑定
地平线官方发布的 horizon_sdk、hbdk(Horizon Build Development Kit)以及运行时依赖(如 libhbirun.so、libhbrt.so)均为 C/C++ 编写的原生库,仅支持在征程芯片(如 X3/X5)Linux 环境下通过 C/C++/Python(通过 ctypes 或官方 hbpython)调用。PHP 没有官方维护的 FFI 封装或扩展支持这些底层 AI 运行时。
- 你看到的“感知数据 → 决策 → 优路径”流程,实际运行在征程 SoC 的 BPU(Brain Processing Unit)+ ARM 上,由地平线
hbirun工具链加载.hb模型并执行,全程不暴露 HTTP/REST 接口 -
php -r "file_get_contents('http://localhost:8080/perception')"类请求必然失败——该地址根本不存在 - 强行用 PHP 的
exec()去调用hbirun命令行工具?不可行:模型加载、内存绑定、BPU 初始化必须在特定内核态上下文完成,普通用户态进程无法绕过地平线 runtime 的权限与资源管控
可行路径:用 Python 做桥接服务,PHP 调用其 HTTP 接口
若业务系统是 PHP 构建,又必须接入征程 AI 输出(如车道线检测、障碍物坐标、最优轨迹点),唯一工程上可落地的方式是:在征程设备端部署一个轻量 Python 服务,封装地平线 SDK 调用逻辑,对外暴露 REST 接口;PHP 通过 curl 请求该服务。
- Python 侧需使用地平线官方
hbpython(非 PyPI 包,随 HBDK 发布)或 ctypes 手动加载libhbrt.so,调用hbrt_model_create、hbrt_model_infer等函数 - Python 服务建议用
flask或fastapi,监听本地127.0.0.1:8000,接收图像 base64 或 JPEG 路径,返回 JSON 格式感知结果(如{"obstacles": [...], "lane_lines": [...], "optimal_path": [...]}) - PHP 中用
curl_init()发送 POST 请求,注意设置CURLOPT_UNIX_SOCKET_PATH(若走 Unix socket 提升性能)或确保 Python 服务监听在物理网卡(非仅 localhost)
import uvicorn from fastapi import FastAPI, File, UploadFile from starlette.responses import JSONResponse import numpy as np # 地平线 SDK 加载逻辑(略,需真实 HB environment) app = FastAPI()@app.post("/infer") async def infer_route(file: UploadFile = File(...)): img_bytes = await file.read()
调用 hbpython 推理(此处省略具体 SDK 调用)
result = {"obstacles": [{"id":1,"x":2.3,"y":15.7}], "optimal_path": [[0.0,0.0],[0.5,1.2]]} return JSONResponse(result)if name == "main": uvicorn.run(app, host="0.0.0.0", port=8000)
常见错误:误把开发板 demo 当成可远程调用接口
很多开发者看到地平线提供的
sample_yolov5或sample_lane_detection示例,就以为加个flask包一层就能上线。实际踩坑点极多:立即学习“PHP免费学习笔记(深入)”;
-
libhbrt.so依赖特定内核版本(如 Linux 4.19.x)、特定 glibc 版本(HBKD 3.29 要求 glibc ≥ 2.28),PHP 进程若跨环境调用(如 x86 宿主机调征程 ARM 设备),二进制不兼容直接Segmentation fault - 模型输入尺寸、归一化方式、输出后处理(NMS、插值、坐标系转换)必须与地平线工具链导出的
.hb模型严格一致,PHP 层若自行 resize 图像或改 dtype(如 float32 → uint8),结果完全失效 - 征程 runtime 默认启用内存锁定(
mlock),多次调用未释放会触发ENOMEM;Python 桥接层必须做模型单例 + 推理 session 复用,不能每次请求都hbrt_model_create
真正要跑通,得在征程设备上完整部署 HBKD 环境、交叉编译 Python、验证 hbpython 导入无报错,再写桥接逻辑——PHP 本身只是最外层的 HTTP 客户端,它不碰 BPU,也不该碰。











