Ubuntu下使用Python调用海思API

Ubuntu下使用Python调用海思API Sunshine 2025-11-18 10:28:22 88

前言

​ Ubuntu系统下使用Python调用海思API,本文介绍使用pybind11的方式;从VPSS获取视频帧并使用python opencv处理后发送给VO显示。

1. 板端环境部署

①.烧录Ubuntu固件后,安装软件

#安装python
apt install python3.10-dev
#apt remove python3.10-dev    

#安装pip3
apt install python3-pip -y

#板端安装
#apt install python3-opencv
apt remove python3-opencv

#安装无GUI版
pip install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple

#建议安装无GUI版本的opencv,python在import速度相对快一些

执行下面命令显示版本号,说明安装成功。

 python3 -c "import cv2; print(cv2.__version__)"

2. 程序移植

①.拷贝板端python头文件至mpp下的src/pymodule/include

/usr/include/python3.10
/usr/include/aarch64-linux-gnu/python3.10

将两个文件下放到src/pymodule/include下;也可以用/usr/include/aarch64-linux-gnu/python3.10/pyconfig.h覆盖/usr/include/python3.10/pyconfig.h。

②.下载pybind11头文件

拷贝该项目下的pybind11/include/pybind11至src/pymodule/include。

③.VPSS获取视频帧并使用python opencv处理后发送给VO显示

④.编译

⑤.板端验证

a.先运行vio程序开启两个VPSS通道(通道深度为1),VO显示4分屏。

b.python获取vpss视频帧,使用opencv保存图片:

import sys
import cv2
import numpy as np

import sample_pymodule

def test_sample_module():
    VPSS_GRP = 0
    VPSS_CHN = 1
    VO_LAYER = 0
    VO_CHN = 1

    frame = sample_pymodule.py_vpss_get_chn_frame(VPSS_GRP, VPSS_CHN)
    print("frame.shape =", frame.shape, "dtype =", frame.dtype)

    # do something for frame

    # 转灰度
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 二值化(阈值128)
    _, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)

    # 转回三通道
    binary_bgr = cv2.cvtColor(binary, cv2.COLOR_GRAY2BGR)

    cv2.imwrite("./output/output_frame.jpg", frame)
    ret = sample_pymodule.py_vo_send_frame(VO_LAYER, VO_CHN, binary_bgr, VPSS_GRP, VPSS_CHN)
    print("py_vo_send_frame ret =", ret)

    sample_pymodule.py_vpss_release_chn_frame(VPSS_GRP, VPSS_CHN)

if __name__ == "__main__":
    print("py module test")
    test_sample_module()

c.python获取vpss视频帧,opencv处理送给vo实时显示:

import sys
import cv2
import numpy as np
import time

import sample_pymodule

def test_sample_module():
    print("开始循环读取并处理帧... 按 Ctrl+C 退出")

    VPSS_GRP = 0
    VPSS_CHN = 1
    VO_LAYER = 0
    VO_CHN = 1

    while True:
        try:
            # 获取一帧
            frame = sample_pymodule.py_vpss_get_chn_frame(VPSS_GRP, VPSS_CHN)
        except Exception as e:
            print("获取帧失败:", e)
            continue

        try:
            # do something for frame
            # 转灰度
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

            # 二值化(阈值128)
            _, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)

            # 转回三通道
            binary_bgr = cv2.cvtColor(binary, cv2.COLOR_GRAY2BGR)

            try:
                sample_pymodule.py_vo_send_frame(VO_LAYER, VO_CHN, binary_bgr, VPSS_GRP, VPSS_CHN)
            except Exception as e:
                print("VO 输出失败:", e)

        finally:
            # 无论成功与否都要释放
            try:
                sample_pymodule.py_vpss_release_chn_frame(VPSS_GRP, VPSS_CHN)
            except Exception as e:
                print("释放帧失败:", e)

if __name__ == "__main__":
    print("py module test")
    try:
        test_sample_module()
    except KeyboardInterrupt:
        print("\n已手动中断")


声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Sunshine
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Sunshine
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区