飞凌嵌入式
直播中

华仔stm32

3年用户 2982经验值
擅长:嵌入式技术
私信 关注
[技术]

【飞凌RK3588开发板试用】实现人脸检测

【目的】在实现视频监控的基础上,加入opencv的人脸检测模型,快速的实现人脸检测功能。

实现方式

1、到opencv下载训练好的公版模型:opencv/opencv at master (github.com)
下载好后解压,把\opencv-master\data\haarcascades文件下面的xml拷贝到static目录下面:

image.png

2、修改视频监控代码如下:

# 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器
# face_detect = cv2.CascadeClassifier(r'./static/haarcascade_frontalface_default.xml')
face_detect = cv2.CascadeClassifier(r'./static/haarcascade_frontalcatface.xml')
def get_image_dataurl():
    # (1).从摄像头读取数据, 读取成功 ret为True,否则为False,frame里面就是一个三维数组保存图像
    ret, frame = cap.read()
    # 灰度处理
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 多个尺度空间进行人脸检测   返回检测到的人脸区域坐标信息
    face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=8)
    # 绘制矩形和圆形检测人脸
    for x, y, w, h in face_zone:
        cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2)
        # cv2.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 255, 0], thickness=2)
    # 显示图片
    # (2).先将数组类型编码成 jepg 类型的数据,然后转字节数组,最后将其用base64编码
    r, buf = cv2.imencode(".jpeg", frame)
    dat = Image.fromarray(np.uint8(buf)).tobytes()
    img_date_url = JPEG_HEADER + str(base64.b64encode(dat))[2:-1]
    return img_date_url

添加代码后,重新启动服务,打开网页,当图像中出现人脸时就可以检测出来了:

image.png
image.png
CPU占用情况如下图,占用率非常小。
image.png

【小结】tornado的服务+opencv的很快就可以实现人脸检测。而且RK3588处理人脸检测也非常的轻松。

回帖(2)

dianzi

2023-3-9 14:51:39
华哥666  真人出镜
1 举报

tinnu

2023-3-16 08:33:04
有没有 RKNPU SDK 计划吖,3588 NPU性能这么赞,不试试可惜了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分