rk3399 pro 人脸,姿态识别遇到的问题和相关优化

紧接上一篇,接下来介绍一下开发过程中的问题:
官方的例子都是图片的形式,很多人其实需要调用摄像头来处理人脸等,所以我们用到了opencv 和rockx sdk结合的方式。
利用本地的图片库和摄像头实时采集的数据进行人脸比对和实时的人脸角度的计算。
1.摄像头信息获取,我用的usb摄像头,利用opencv 的方式读取:VideoCapture capture(0);
2.困扰最大的问题:rockx_image_t 和opencv 的 mat 格式图像的转换,在查询了rockx_type.h 后了解到了rockx_image_t的结构体,所以转换如下:
rockx_image_t input_image2; // 定义rk 格式的 图像格式 frame 为opencv格式 mat frame;
input_image2.data = frame.data;
input_image2.width = frame.cols;
input_image2.height = frame.rows;
注意 width 和 frame的cols height 和 frame的rows 对应。别搞错了,笔者就是在这里刚好弄反了,折腾了好几个小时

3.其他都是常规操作,摄像头mat格式转换以后传给 人脸检测api 根据需要组合就可以
4.速度慢问题的解决 1.利用全局变量,例子中有很多内存空间的申请,把这个变为全局,不需要频繁申请和释放,2.检测到人脸后的后续操作可以放在一个for 函数里不用重复调用。
5.opencv的显示,给人脸部分画框,检测结果输出图像加文字等等 属于opencv的常规操作,csnd 上很多教程。
6.带opencv的编译问题。
程序头文件:
#include
#include
#include
#include
#include
#include
#include “rockx.h”
using namespace std;
using namespace cv;
编译命令:
g++ face_recongntion.cpp -o test -I …/include -L …/lib64 -lrockx -I/usr/include/opencv -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core

你可能感兴趣的:(ai,rk3399,程序人生)