




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
边缘计算算法SDK应用(基于RockX)边缘智能计算应用项目引导案例Rock-XSDK是基于RK3399Pro/RK180X平台的一套AI组件库。开发者通过Rock-XSDK提供的API接口能够快速构建AI应用。Rock-XSDK当前支持Python/C编程语言,支持运行于RK3399ProAndroid/Linux平台、RK180XLinux平台以及PCLinux/MacOS/Windows(需要接RK1808计算棒)。项目引导案例当前版本为1.2.0的版本,提供几大类别算法功能,主要包括目标检测,人脸,车牌,人体关键点等,具体如下:项目引导案例在RK3399Pro为核心的开发板平台上,SDK所提供的库和应用程序需要RKNN驱动版本为1.2.0以上。在开发板Android/Linux系统平台上运行Demo应用以后,通过日志能够看到如下的驱动信息,请确保DRV版本为1.2.0以上。系统依赖项目引导案例根据提供的RockX-*-py3-none-any.whlPythonRockX算法SDK安装包(默认开发板上已经安装1.2.0版本,慎重更新),新版本请到相关网站下载,将其上传到开发板中,在root用户下,利用pip3命令进行安装:安装wheel包pip3installRockX-*-py3-none-any.whl项目引导案例本项目将带着大家体验边缘计算算法SDK应用(基于RockX),主要任务有:目标检测算法接口应用人脸识别算法接口应用人体关键点算法接口应用车牌识别算法接口应用项目中所涉及的操作过程主要如下图所示:目标检测算法接口应用人脸识别算法接口应用人体关键点算法接口应用车牌识别算法接口应用目标检测算法接口的应用
边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08
目标检测算法接口的应用了解目标检测含义和应用场景;了解RockX目标检测算法;了解利用多线程调用算法。掌握USB摄像头采集图像;掌握目标检测算法接口的定义;掌握目标检测算法接口的调用并识别图片;掌握多线程方式实现视频流的目标检测。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08
目标检测算法接口的应用
此任务的主要内容是了解目标检测定义和应用场景,掌握RockX目标检测算法接口的定义与使用的相关知识,实现多线程调用算法进行图像识别,通过本次学习,掌握目标检测算法接口的应用。任务描述任务要求完成目标检测算法接口的定义和使用;完成多线程方式实现视频流的目标检测。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08
目标检测算法接口的应用任务分析应用目标检测算法接口会涉及到哪些步骤?如何使用多线程实现视频流的目标检测?任务分析与计划03任务计划表项目名称边缘计算算法SDK应用(基于RockX)任务名称目标检测算法接口的应用计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1
2
3
45678通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08
目标检测算法接口的应用RockX目标检测算法的简介204知识储备目标检测含义和应用场景11目标检测的含义2目标检测的应用场景04目标检测是指通过编写特定的算法代码,让计算机从一张图像中找出若干特定目标的方法。04目标检测的含义目标检测包含两层含义:1.判定图像上有哪些目标物体,解决目标物体存在性的问题;2.判定图像中目标物体的具体位置,解决目标物体在哪里的问题。04目标检测的含义目标检测和图像分类最大的区别在于目标检测需要做更细粒度的判定,不仅要判定是否包含目标物体,还要给出各个目标物体的具体位置。。04目标检测的含义目标检测图像分析1
目标检测的含义2目标检测的应用场景04目标检测作为场景理解的重要组成部分,广泛应用于现代生活的许多领域,如安全领域、军事领域、交通领域、医疗领域和生活领域04目标检测的应用场景现实中的例子很多,比如:骑手着装规范,包括人脸检测,餐箱检测,头盔检测等等场景目标识别,包括行人检测,办公区域桌椅检测,电梯按钮检测与识别等等合规检测,包括二维码检测,水印检测,logo识别等等场景文本识别,包括菜单识别,招牌识别,指示牌识别等等04目标检测的应用场景RockX目标检测算法的简介204知识储备目标检测含义和应用场景1RockX目标检测算法的简介04RockX目标检测库是集成在核心开发板上的一套python的接口库,可以直接调用,其检测性能为:RockX目标检测算法的简介04说明:mAP@IOU0.5=0.704表示IOU=0.5时对应的mAP=0.704。MSCOCO_VAL2017是目标检测公开数据集,使用该数据集中的5000张验证集测试,共91类别。
"person","bicycle","car","motorcycle","airplane","bus","train","truck","boat","trafficlight","firehydrant","stopsign","parkingmeter","bench","bird","cat","dog","horse","sheep","cow","elephant","bear","zebra","giraffe","backpack","umbrella","handbag","tie","suitcase","frisbee","skis","snowboard","sportsball","kite","baseballbat","baseballglove","skateboard","surfboard","tennisracket","bottle","wineglass","cup","fork","knife","spoon","bowl","banana","apple","sandwich","orange","broccoli","carrot","hotdog","pizza","donut","cake","chair","couch","pottedplant","bed","diningtable","toilet","tv","laptop","mouse","remote","keyboard","cellphone","microwave","oven","toaster","sink","refrigerator","book","clock","vase","scissors","teddybear","hairdrier","toothbrush"RockX目标检测算法的简介04目标检测是在图片中对可变数量的目标进行分类和查找。
主要难点:目标种类与数量问题目标尺度问题外在环境干扰问题形态、视角等变化RockX目标检测算法的简介04算法基本流程上面图表示两种方法,有候选框特征提取的方法,和特征提取直接回归的方法。两种方法目前用得比较多的都是深度学习的方法,但是这个框架同样也适用于传统方法RockX目标检测算法的简介04传统目标检测方法VS深度学习目标检测方法职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08
目标检测算法接口的应用05任务实施多线程方式实现视频流的目标检测2目标检测算法接口的定义和使用1目标检测算法接口的定义和使用05下面通过目标检测实验,利用OpenCV采集图片,识别图片中的目标物体,来诠释RockX目标检测算法接口的定义和使用42加载图片数据1导入相关的库3实例化算法接口调用目标检测函数5画出物品目标框,并绘制目标物品的名称目标检测算法接口的定义和使用05目标检测算法接口的定义和使用6将经过算法处理的图像显示目标检测算法接口的定义和使用05importtime#时间库importcv2#引入OpenCV图像处理库fromrockximportRockX#引入车牌识别算法接口库fromlib.ft2importft#中文描绘库1导入相关的库目标检测算法接口的定义和使用05第一种方式:OpenCV读取一张图片,这里提供的图片名称为obj.jpgcv2.imread("图片名称")2加载图片数据(1)读取一张图片图片使用OpenCV利用摄像头采集一张图片,或者使用OpenCV读取现有的图片目标检测算法接口的定义和使用05第二种方式:OpenCV打开摄像头采集一张图片,在之前的章节有介绍,例如以下案例:cap=cv2.VideoCapture(0)time.sleep(2)cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO)ret,frame=cap.read()cv2.imshow('image_win',frame)cv2.waitKey(200)cv2.imwrite("图片名称",frame)cap.release()cv2.destroyAllWindows()2加载图片数据目标检测算法接口的定义和使用05image_obj=cv2.imread("./images/obj.jpg")2加载图片数据利用OpenCV的imread()函数,进行读取一张图片目标检测算法接口的定义和使用05importipywidgetsaswidgets#jupyter画图库
fromIPython.displayimportdisplay#jupyter显示库imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据imgbox.value=cv2.imencode('.jpg',image_obj)[1].tobytes()#把图像值转成byte类型的值display(imgbox)#将盒子显示出来2加载图片数据(2)显示读取的图片利用以下函数显示读取的图片目标检测算法接口的定义和使用05in_img_h,in_img_w,ch=image_obj.shapeprint(in_img_w,in_img_h,ch)2加载图片数据获取图片的宽in_img_w,高in_img_h和通道数ch(3)获取图片信息目标检测算法接口的定义和使用05在RockX库中,包含了算法各种功能模式,实例化算法为:
object_det_handle=RockX(功能类型)功能类型,这里采用目标检测功能类型RockX.ROCKX_MODULE_OBJECT_DETECTION是目标检测功能类型3实例化算法接口object_det_handle=RockX(RockX.ROCKX_MODULE_OBJECT_DETECTION)目标检测算法接口的定义和使用05为了获取目标的位置,调用目标检测函数,通过对图像的检测,识别物体目标的位置信息rockx_face_detect(self,in_img,width,height,pixel_fmt)4调用目标检测函数参数说明:in_img:输入图片(numpyndarray)width:图片宽height:图片高pixel_fmt:图片pixelformat返回值说明:ret:状态码,0为成功,其他失败results:RockX对象的列表,就是说一张图可能包含多个目标对象,每个对象包含了物体目标的位置框信息等返回值说明:ret:状态码,0为成功,其他失败results:RockX对象的列表,就是说一张图可能包含多个目标对象,每个对象包含了物体目标的位置框信息等ret,results=object_det_handle.rockx_face_detect(image_obj,in_img_w,in_img_h,RockX.ROCKX_PIXEL_FORMAT_BGR888)目标检测算法接口的定义和使用05cv2.rectangle()的作用是根据坐标,描绘一个简单的矩形边框参数依次为:图片image,左上角位置坐标pt1,右下角位置坐标pt2,线条颜色color,线条粗细thicknesscv2.rectangle(image,pt1=(int(left),int(top)),pt2=(int(right),int(bot)),color=(0,255,0),thickness=3)5画出物品目标框,并绘制目标物品的名称(1)利用OpenCV在图像上添加文字和画出人脸框(2)引入中文绘画库,用于在图片上描绘中文字符fromlib.ft2importftimg=ft.draw_text(img,position,'{}'.format(obj_label),34,(255,0,0))ft.draw_text的作用是在图片的某个位置上添加文字信息,参数依次为:图片img,位置position,文字obj_label,字体大小font,字体颜色color目标检测算法接口的定义和使用05获取目标名称,是通过检测出的目标的ID值,在相对应的目标名称列表中寻找该值RockX.ROCKX_OBJECT_DETECTION_LABELS_91[result[0].cls_idx]5画出物品目标框,并绘制目标物品的名称(3)获取目标名称ROCKX_OBJECT_DETECTION_LABELS_91是91类物品的名称的集合列表result[0].cls_idx是识别后的结果,物品的ID值,ID和物品的类别名称在91类物品中是一一对应的这里绘画结果,都只采用获取到的第一个目标来说明,也就是results[0],如果有需要多个,数值可用变量代替目标检测算法接口的定义和使用05左上角的坐标为:(results[0].box.left,results[0].box.top)右下角的坐标为:(results[0].box.right,results[0].box.bottom)5画出物品目标框,并绘制目标物品的名称(4)获取目标的位置信息ifret==0:forresultinresults:obj_label=RockX.ROCKX_OBJECT_DETECTION_LABELS_91[result.cls_idx]cv2.rectangle(image_obj,(result.box.left,result.box.top),(result.box.right,result.box.bottom),(0,255,0),2)if(result.box.top-50)>0:image_obj=ft.draw_text(image_obj,(result.box.left,result.box.top-50),'{}'.format(obj_label),34,(0,0,255))else:image_obj=ft.draw_text(image_obj,(result.box.left,result.box.bottom),'{}'.format(obj_label),34,(0,0,255))else:print('识别失败')目标检测算法接口的定义和使用05importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据imgbox.value=cv2.imencode('.jpg',image_obj)[1].tobytes()#把图像值转成byte类型的值display(imgbox)#将盒子显示出来6将经过算法处理的图像显示利用jupyter的画图库和显示库,来显示获取的图片05任务实施多线程方式实现视频流的目标检测2目标检测算法接口的定义和使用142定义摄像头采集线程1引入相关的库3定义算法识别线程调用两个线程,启动视频流的目标检测5停止线程多线程方式实现视频流的目标检测05多线程方式实现视频流的目标检测利用多线程,使图像采集和算法识别同时运行,从而实现视频流的车牌识别,并且可以避免一些因花时间太久,导致的视频卡顿多线程实现的目标检测是针对多个物品的识别和实时画面的捕获。多线程方式实现视频流的目标检测05使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。程序的运行速度可能加快。在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。1引入相关的库多线程类似于同时执行多个不同程序,多线程运行有如下优点:多线程方式实现视频流的目标检测051引入相关的库importtime#时间库importcv2#引入OpenCV图像处理库fromlib.ft2importft#中文描绘库importthreading#这是python的标准库,线程库importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromrockximportRockX#引入算法库每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。多线程方式实现视频流的目标检测052定义摄像头采集线程结合上面的opencv采集图像的内容,利用多线程的方式串起来,形成一个可传参,可调用的通用类。这里定义了一个全局变量camera_img,用作存储获取的图片数据,以便于其他线程可以调用init初始化函数:实例化该线程的时候,会自动执行初始化函数,在初始化函数里面,打开摄像头,并设置分辨run函数:该函数是在实例化后,执行start启动函数的时候,会自动执行。在该函数里,实现了循环获取图像的内容请说说执行线程的几种方式?多线程方式实现视频流的目标检测052定义摄像头采集线程classCameraThread(threading.Thread):def__init__(self,camera_id,camera_width,camera_height):threading.Thread.__init__(self)self.working=Trueself.cap=cv2.VideoCapture(camera_id)#打开摄像头
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,camera_width)#设置摄像头分辨率宽度
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT,camera_height)#设置摄像头分辨率高度
defrun(self):globalcamera_img#定义一个全局变量,用于存储获取的图片,以便于算法可以直接调用
whileself.working:try:ret,image=self.cap.read()#获取新的一帧图片,ret为获取的状态值
ifnotret:time.sleep(0.1)continuecamera_img=imageexceptExceptionase:passdefstop(self):self.working=Falseself.cap.release()多线程方式实现视频流的目标检测053定义算法识别线程结合调用算法接口的内容和图像显示内容,利用多线程的方式整合起来,循环识别,对摄像头采集线程中获取的每一帧图片进行识别,并显示,形成视频流的画面。多线程方式实现视频流的目标检测054调用两个线程,启动视频流的目标检测camera_th=CameraThread(0,640,480)obj_detect_th=ObjDetectThread()camera_th.start()obj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同范本题目
- 农村水田租赁承包合同范本
- 企业汽车销售合同范本
- 代理买卖二手车合同范本
- 代领购房合同范本
- 一般经销合同范例
- 个人购货采购合同范本
- 关于装修贷款合同范本
- 升旗台合同范本
- 前台劳务派遣合同范本
- 第26课《诗词五首》作业设计统编版语文八年级上册
- 西方绘画艺术流派(最全)课件
- 预防保健科护理管理质量控制考核标准
- JCT548-2016 壁纸胶粘剂标准
- 气管切开患者的管理和康复治疗推荐意见(新版)解读
- 医院污水处理站维保服务项目
- 供应商绩效考核表 (季度)
- Python程序设计基础及实践(慕课版)PPT完整全套教学课件
- 《争做新时代好少年》主题班会课件(美德好少年)
- 雅思大作文写作课件
- 学生使用手机(2018内蒙古赤峰中考语文非连续性文本阅读试题及答案)
评论
0/150
提交评论