如何申请建设网站首页,wordpress加跳转,自微网站首页,爱站网长尾挖掘工具【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。
B站视频链接#xff1a;已做成合集 抖音链接#xff1a;已做成合集 人体检测
人体检测是判断摄像头画面中有无出现人体#xff0c;常用于人体数量检测#xff0c;人流量监控以及安防监控等。… 【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。
B站视频链接已做成合集 抖音链接已做成合集 人体检测
人体检测是判断摄像头画面中有无出现人体常用于人体数量检测人流量监控以及安防监控等。 实验名称人体检测
实验平台01Studio CanMV K230
教程wiki.01studio.cc
from libs.PipeLine import PipeLine, ScopedTiming
from libs.AIBase import AIBase
from libs.AI2D import Ai2d
import os
import ujson
from media.media import *
from time import *
import nncase_runtime as nn
import ulab.numpy as np
import time
import utime
import image
import random
import gc
import sys
import aicube# 自定义人体检测类
class PersonDetectionApp(AIBase):def __init__(self,kmodel_path,model_input_size,labels,anchors,confidence_threshold0.2,nms_threshold0.5,nms_optionFalse,strides[8,16,32],rgb888p_size[224,224],display_size[1920,1080],debug_mode0):super().__init__(kmodel_path,model_input_size,rgb888p_size,debug_mode)self.kmodel_pathkmodel_path# 模型输入分辨率self.model_input_sizemodel_input_size# 标签self.labelslabels# 检测anchors设置self.anchorsanchors# 特征图降采样倍数self.stridesstrides# 置信度阈值设置self.confidence_thresholdconfidence_threshold# nms阈值设置self.nms_thresholdnms_thresholdself.nms_optionnms_option# sensor给到AI的图像分辨率self.rgb888p_size[ALIGN_UP(rgb888p_size[0],16),rgb888p_size[1]]# 显示分辨率self.display_size[ALIGN_UP(display_size[0],16),display_size[1]]self.debug_modedebug_mode# Ai2d实例用于实现模型预处理self.ai2dAi2d(debug_mode)# 设置Ai2d的输入输出格式和类型self.ai2d.set_ai2d_dtype(nn.ai2d_format.NCHW_FMT,nn.ai2d_format.NCHW_FMT,np.uint8, np.uint8)# 配置预处理操作这里使用了pad和resizeAi2d支持crop/shift/pad/resize/affine具体代码请打开/sdcard/app/libs/AI2D.py查看def config_preprocess(self,input_image_sizeNone):with ScopedTiming(set preprocess config,self.debug_mode 0):# 初始化ai2d预处理配置默认为sensor给到AI的尺寸您可以通过设置input_image_size自行修改输入尺寸ai2d_input_sizeinput_image_size if input_image_size else self.rgb888p_sizetop,bottom,left,rightself.get_padding_param()self.ai2d.pad([0,0,0,0,top,bottom,left,right], 0, [0,0,0])self.ai2d.resize(nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel)self.ai2d.build([1,3,ai2d_input_size[1],ai2d_input_size[0]],[1,3,self.model_input_size[1],self.model_input_size[0]])# 自定义当前任务的后处理def postprocess(self,results):with ScopedTiming(postprocess,self.debug_mode 0):# 这里使用了aicube模型的后处理接口anchorbasedet_post_preocessdets aicube.anchorbasedet_post_process(results[0], results[1], results[2], self.model_input_size, self.rgb888p_size, self.strides, len(self.labels), self.confidence_threshold, self.nms_threshold, self.anchors, self.nms_option)return dets# 绘制结果def draw_result(self,pl,dets):with ScopedTiming(display_draw,self.debug_mode 0):if dets:pl.osd_img.clear()for det_box in dets:x1, y1, x2, y2 det_box[2],det_box[3],det_box[4],det_box[5]w float(x2 - x1) * self.display_size[0] // self.rgb888p_size[0]h float(y2 - y1) * self.display_size[1] // self.rgb888p_size[1]x1 int(x1 * self.display_size[0] // self.rgb888p_size[0])y1 int(y1 * self.display_size[1] // self.rgb888p_size[1])x2 int(x2 * self.display_size[0] // self.rgb888p_size[0])y2 int(y2 * self.display_size[1] // self.rgb888p_size[1])if (h(0.1*self.display_size[0])):continueif (w(0.25*self.display_size[0]) and ((x1(0.03*self.display_size[0])) or (x2(0.97*self.display_size[0])))):continueif (w(0.15*self.display_size[0]) and ((x1(0.01*self.display_size[0])) or (x2(0.99*self.display_size[0])))):continuepl.osd_img.draw_rectangle(x1 , y1 , int(w) , int(h), color(255, 0, 255, 0), thickness 2)pl.osd_img.draw_string_advanced( x1 , y1-50,32, self.labels[det_box[0]] str(round(det_box[1],2)), color(255,0, 255, 0))else:pl.osd_img.clear()# 计算padding参数def get_padding_param(self):dst_w self.model_input_size[0]dst_h self.model_input_size[1]input_width self.rgb888p_size[0]input_high self.rgb888p_size[1]ratio_w dst_w / input_widthratio_h dst_h / input_highif ratio_w ratio_h:ratio ratio_welse:ratio ratio_hnew_w (int)(ratio * input_width)new_h (int)(ratio * input_high)dw (dst_w - new_w) / 2dh (dst_h - new_h) / 2top int(round(dh - 0.1))bottom int(round(dh 0.1))left int(round(dw - 0.1))right int(round(dw - 0.1))return top, bottom, left, rightif __name____main__:# 显示模式默认hdmi,可以选择hdmi和lcddisplay_modelcdif display_modehdmi:display_size[1920,1080]else:display_size[800,480]# 模型路径kmodel_path/sdcard/app/tests/kmodel/person_detect_yolov5n.kmodel# 其它参数设置confidence_threshold 0.2nms_threshold 0.6rgb888p_size[1920,1080]labels [person]anchors [10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326]# 初始化PipeLineplPipeLine(rgb888p_sizergb888p_size,display_sizedisplay_size,display_modedisplay_mode)pl.create()# 初始化自定义人体检测实例person_detPersonDetectionApp(kmodel_path,model_input_size[640,640],labelslabels,anchorsanchors,confidence_thresholdconfidence_threshold,nms_thresholdnms_threshold,nms_optionFalse,strides[8,16,32],rgb888p_sizergb888p_size,display_sizedisplay_size,debug_mode0)person_det.config_preprocess()clock time.clock()try:while True:os.exitpoint()clock.tick()imgpl.get_frame() # 获取当前帧数据resperson_det.run(img) # 推理当前帧person_det.draw_result(pl,res) # 绘制结果到PipeLine的osd图像print(res) # 打印结果pl.show_image() # 显示当前的绘制结果gc.collect()print(clock.fps()) #打印帧率#IDE中断注销相关对象释放资源except Exception as e:sys.print_exception(e)finally:person_det.deinit()pl.destroy()使用类说明PersonDetectionApp人体检测