完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题1:RK3399pro使用python3读取USB摄像头数据问题
问题2:SSD模型输出之后,后处理时间太长
在这个过程中使用了pybind11之后,数据格式转换比较麻烦, 方法一: 如: void aftertreatment(py::array_t { // 获取input1的信息 //input1输入的是一个python3的numpy.ndarray的二维数组 py::buffer_info buf1 = input1.request(); unsigned char* outputClasses = (unsigned char*)buf1.ptr; int rows=buf1.shape[0]; int cols=buf1.shape[1]; //输出二维数组所有数据 for (int i=0; i for (int j=0; j printf("%.8lft",buf[i*rows+j]); } printf("n"); } } 其中使用了 py::buffer_info数据类型 ,其结构体如下 struct buffer_info { void *ptr; /* Pointer to buffer */ ssize_t itemsize; /* Size of one scalar */ std::string format; /* Python struct-style format descriptor */ ssize_t ndim; /* Number of dimensions */ std::vector std::vector }; 如此的话可以把二维数组转化成以为数据块,通过计算可以得到相应的位置 方法二: void aftertreatment(py::array_t { // 获取input1的信息 //input1输入的是一个python3的numpy.ndarray的二维数组 auto buf1= input1.mutable_unchecked(); int rows=buf1.shape(0); int cols=buf1.shape(1); for (int i=0; i for (int j=0; j printf("%.8lft",buf1(i,j)); } printf("n"); } } 这个方法比较简单粗暴,直接输出,然后通过便利二维数组的方法遍历数据 调试好C++代码后,使用脚本创建pyd/so库 最后使用rk3399pro的demo,项目example/mobilenet-ssd,完成实现。python3调用C++的后处理程序,相较于python3的后处理程序,需要600+ms,使用pybind11调用C++ 仅需要31ms就可以完成。 代码见附件。 生成python模块(.pyd/.so)方法:
python 调用C++代码: import ssh_handle result = ssd_handle.aftertreatment(input1) 问题3:优化C++ ——OpenMP使用 目前demo后处理(1917*91次for循环)维维持在31ms,尝试使用openMP优化 #pragma omp parallel num_threads(6) { #pragma omp parallel for for(int i=0;i { /*以下内容为for循环内容 自己补充*/ } } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
2352 浏览 0 评论
2753 浏览 1 评论
2239 浏览 1 评论
3573 浏览 1 评论
4332 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-22 23:37 , Processed in 0.501509 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号