技术专栏
Ubuntu下使用Python调用海思API
前言
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已手动中断")

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据相关专栏
-
浏览量:6249次2022-06-01 09:36:28
-
浏览量:10568次2020-12-07 23:36:10
-
浏览量:1449次2023-05-08 14:24:53
-
浏览量:3035次2020-08-04 15:11:02
-
浏览量:3066次2024-01-19 17:42:50
-
浏览量:3094次2018-04-22 20:46:42
-
浏览量:6066次2021-04-16 15:01:12
-
浏览量:4846次2021-12-03 16:40:57
-
浏览量:2322次2020-08-03 11:18:53
-
浏览量:3433次2020-07-31 16:50:14
-
浏览量:2745次2021-12-07 09:35:55
-
浏览量:3629次2020-08-03 11:02:46
-
浏览量:4363次2020-07-27 15:12:15
-
浏览量:5257次2020-06-19 15:56:33
-
浏览量:3067次2023-07-28 10:26:21
-
浏览量:3078次2017-10-30 16:42:44
-
浏览量:5537次2021-03-18 09:43:14
-
浏览量:4363次2020-03-03 22:16:15
-
浏览量:4654次2018-09-15 17:23:42
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
Sunshine
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注

微信扫码分享
QQ好友