jetbot 06 之实时人脸表情检测

本文介绍了一种基于实时人脸检测的表情识别方法,通过多种模型(包括Keras、Facial Emotion Recognition及ONNX模型)实现表情识别,并展示了不同模型在Jetson Nano平台上的应用实例。

在实时人脸检测的基础上, 做表情的实时识别真的可以。 但要有好的效果 一要有好的模型,二要有很棒的图像预处理。

三检测的人要有丰富的表情, 目光呆滞🤪的程序狗恐怕也让会算法素手无策。。 当然可以找个表情丰富的妹子鉴定以下效果。

这里只讲 模型的应用, 开始。

项目github 地址:

https://github.com/walletiger/jetson_facial_emotion_examples

 

一 把人脸检测封装成库

#darknet_fd.py

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys

import cv2
import numpy as np
import time
from ctypes import *
from darknet import  detect_image
from darknet import  load_net_custom
from darknet import  load_meta
from darknet import  IMAGE
from darknet import network_width, network_height
from camera import JetCamera
import traceback 

class DarkNetFD(object):
    def __init__(self, config_path='yoloface-500k-v2.cfg', weight_path='yoloface-500k-v2.weights', meta_path='face.data'):
        self.net = load_net_custom(config_path.encode('utf-8'), weight_path.encode('utf-8'), 0, 1)
        self.meta = load_meta(meta_path.encode('utf-8'))
        self.thresh = .5
        self.hier_thresh = .5
        self.nms = .45

    def detect(self, img):
        image_list = [img]

        pred_height, pred_width, c = image_list[0].shape
        net_width, net_height = (network_width(self.net), network_height(self.net))
        img_list = []

        for custom_image_bgr in image_list:
            custom_image = cv2.cvtColor(custom_image_bgr, cv2.COLOR_BGR2RGB)
            custom_image = cv2.resize(
            custom_image, (net_width, net_height), interpolation=cv2.INTER_NEAREST)
            custom_image = custom_image.transpose(2, 0, 1)
            img_list.append(custom_image)

        arr = np.concatenate(img_list, axis=0)
        arr = np.ascontiguousarray(arr.flat, dtype=np.float32) / 255.0
        data = arr.ctypes.data_as(POINTER(c_float))
        im = IMAGE(net_width, net_height, c, data)

        ret_lst = detect_image(self.net, self.meta, im, self.thresh, self.hier_thresh, self.nms)
        ret_out_lst = []

        if ret_lst:
            for ret in ret_lst:
                x
实时目标检测或图像识别在 JetBot 小车上可以通过深度学习技术实现。JetBot 是英伟达推出的一款基于 NVIDIA Jetson Nano 的小型机器人平台,支持运行轻量级的深度学习模型进行实时视觉任务。 ### 硬件与软件环境 JetBot 搭载了 NVIDIA Jetson Nano 开发板,具备足够的算力运行卷积神经网络(CNN)模型[^3]。其操作系统通常为 Ubuntu Linux,并预装了必要的开发工具和深度学习框架如 TensorFlow Lite 和 PyTorch。 ### 实时目标检测方案 #### 使用预训练模型 可以利用迁移学习的思想,将预训练的目标检测模型(如 MobileNet-SSD、YOLOv5s 等)部署到 JetBot 上进行推理。这些模型在 COCO 数据集上已经训练完成,适合快速验证和应用[^1]。 ```python import torch from torchvision import transforms from PIL import Image import cv2 # 加载预训练模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 图像预处理 transform = transforms.Compose([ transforms.ToTensor() ]) # 读取摄像头数据 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break # 转换图像格式 img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img_pil = Image.fromarray(img) input_tensor = transform(img_pil).unsqueeze(0) # 推理 results = model(input_tensor) # 显示结果 detections = results.xyxy[0].numpy() for detection in detections: x1, y1, x2, y2, conf, cls = detection cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) cv2.imshow('Frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` #### 自定义训练模型 如果需要识别特定对象,可以使用自己的数据集对模型进行微调。NVIDIA 提供了 Transfer Learning Toolkit (TLT),可以在桌面端完成模型训练后导出优化后的模型并部署到 JetBot 上[^3]。 ### 性能优化技巧 为了提高实时性,可以采取以下措施: - **降低输入分辨率**:减小图像尺寸可显著减少计算量。 - **使用量化模型**:将浮点模型转换为 INT8 或 FP16 格式以加速推理。 - **异步处理**:将图像采集与推理过程分离,避免帧丢失。 - **GPU 加速**:确保所有计算操作都在 GPU 上执行。 ### 应用场景 除了基本的目标检测外,还可以扩展至其他计算机视觉任务,例如车道线检测人脸追踪、情绪识别等[^2]。这使得 JetBot 成为一个多功能的学习和实验平台。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walletiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值