PHP如何调用地平线征程AI_发感知数据调决策接口优路径【良方】

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

php如何调用地平线征程ai_发感知数据调决策接口优路径【良方】

PHP 无法直接调用地平线(Horizon Robotics)征程(Journey)系列芯片的 AI 感知数据或“发感知数据调决策接口优路径”——这不是一个标准对外开放的 Web API,也不是 PHP 可以通过 curlfile_get_contents 调用的 HTTP 接口。

地平线征程 SDK 不提供 PHP 绑定

地平线官方发布的 horizon_sdkhbdk(Horizon Build Development Kit)以及运行时依赖(如 libhbirun.solibhbrt.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_createhbrt_model_infer 等函数
  • Python 服务建议用 flaskfastapi,监听本地 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_yolov5sample_lane_detection 示例,就以为加个 flask 包一层就能上线。实际踩坑点极多:

MotionGo

MotionGo

AI智能对话式PPT创作,输入内容一键即可完成

下载

立即学习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,也不该碰。

https://www.php.cn/faq/1979642.html

发表回复

Your email address will not be published. Required fields are marked *