




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器学习原理与应用第7章计算机视觉技术本章学习目标(知识要点)了解计算机视觉发展历程、任务及关键技术掌握视觉图像表示、读取、存储及视频处理的方法和技术熟悉视觉中的图形计算、图像二值化、图像变换及形态处理方法;掌握LeNet、MobileNet及目标检测等典型算法及应用;目录
计算机视觉简介
计算机视觉基础
计算机视觉开发平台
典型算法
综合案例:基于深度神经网络的
人脸表情识别7.17.27.37.47.5◎计算机视觉简介◎计算机视觉基础◎计算机视觉开发平台◎典型算法◎综合案例:基于深度神经网络的人脸表情识别计算机视觉技术7.17.1计算机视觉简介计算机视觉(ComputerVision,CV)是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息做出选择、行动或提供策略建议等。其主要解决协助计算机“看”的问题,赋予发现、观察和理解的能力,对目标进行识别、跟踪和测量,并对图像做进一步的处理。计算机视觉发展历程1956年DavidHubel和TorstenWiesel 的单神经元在猫纹状体皮层的感受野工作。1963年LarryRoberts在《机器感知三维立体》(Machineperceptionofthree-dimensionalsolids)提出把视觉世界消减为简单几何形状。1978年DavidMarr提出了从底向上的场景理解视觉框架(分为算法实现、算法、表达三层)1980年日本科学家福岛邦彦提出具有深度结构的神经认知识别网络(Neocognitron)7.1计算机视觉简介1982年DavidMarr的《视觉:从计算的视角研究人的视觉信息表达与处理》1989年YannLeCun提出了卷积神经网络LeNet-5网络1997年,伯克利的JitendraMalik尝试解决视觉中的感知特征群集(perceptualgrouping)问题。2004年,PaulViola和MichaelJones提出了基于Viola-Jones检测器的人脸识别框架2006年,计算机视觉领域中建立标准数据集PascalVOC项目2012年-至今2012(AlexNet)、2014(R-CNN、VGGNet)、2015(FastR-CNN、GoogleNet)、2016(FasterR-CNN、ResNet、YOLO、SSD、ResNetv2、R-FCN)、2017(DenseNet、DCN、DPN、MaskR-CNN)、2018(SENetCornetNet、FSAF、EfficientNet、YOLOV3)、2020(VIT,VisionTransformers、GPT-3)、2023(GPT-4V、Gemini)、2024(LLaMA、Qwen2-VL、DeepSeek-VL2)、2025(DeepSeekR1)7.1计算机视觉简介计算机视觉关键技术常用的技术有:图像分割、图像增强、图像平滑、图像编码和压缩、图像边缘锐化等图像分割是计算机视觉的基础,属于图像理解的重要组成部分,其本质是对像素分类,通过像素的灰度值、颜色、空间纹理等特性,把图像分割成具有相似的颜色或纹理特性的若干不相交的子区域,并使它们对应不同的物体或物体的不同部分。图像分割常用的方法有基于阈值的分割法、基于区域的分割法、基于边缘检测的分割方法和基于深度学习的分割法。基于深度学习的分割法有如:基于特征编码的、VGGNet、ResNet、基于CNN的图像分割(Region-basedConvolutionalNeuralNetwork(R-CNN)、FasterR-CNN、MaskR-CNN、MaskScoringR-CNN)、基于RNN的图像分割(ReSeg、MDRNNs)、U-Net、基于上采样的分割等。7.1计算机视觉简介计算机视觉关键技术阈值根据目标和背景的选择,可分为单阈值和多阈值分割两种。基于阈值的方法计算简单高效,但只考虑像素灰度值特征,没有考虑空间特征,在鲁棒性、噪声适应性方面较差。图像增强通常采用灰度直方图技术调整图像的对比度,用于扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,增强图像中的有用信息,改善图像的识别效果。常用的算法有直方图均衡算法、小波变换算法、偏微分方程算法、基于色彩恒常性理论的Retinex算法。图像平滑是图像去噪常用的方法,是将图像中噪声所在像素点的像素值处理为其周围临近像素点的值的近似值,用于去除成像过程中因设备和环境所造成的图像失真等问题。7.1计算机视觉简介计算机视觉关键技术图像平滑处理常用方法有均值滤波(邻域平均法),方框滤波,高斯滤波,中值滤波,双边滤波、NLM(Non-Localmeans)算法、小波去噪和基于深度学习的方法等。图像编码和压缩是指通过图像编码技术,实现减少图像数据中的冗余信息的方法,对图像进行更加高效的格式存储和传输。图像压缩分为有损数据压缩和无损数据压缩两种。无损数据压缩通常有游程编码、熵编码法、自适应字典算法等。有损压缩通常有变换编码、分形压缩、色度抽样、区域编码、基于深度学习的方法等。图像压缩常使用峰值信噪比来衡量压缩的图像质量,峰值信噪比用来表示图象有损压缩带来的噪声。7.1计算机视觉简介计算机视觉关键技术图像边缘锐化是一种通过滤波加强图像的边缘对比度及灰度跳变的部分,提高地物边缘与周围像元之间的反差,突出图像上地物的边缘、轮廓,或某些线性目标要素的特征,使图像变得清晰,又称为边缘增强。图像边缘通常具有表面法向不连续性、深度不连续性、表面颜色不连续性、亮度不连续性等特性。它分为空间域处理和频域处理两类。如OpenCV中Laplacian高通滤波算子、USM(UnshrpenMask)算法等。7.1计算机视觉简介计算机视觉应用领域计算机视觉中常见的挑战任务有目标分类、目标识别、目标验证、目标检测、目标特征点检测、目标分割、目标鉴别等,基于这些任务产生了广泛的应用。如自动驾驶、人脸识别、自动图片识别、光学字符识别(OCR)、移动机器人视觉导航、医学辅助诊断、物体三维形状分析识别、工业机器视觉系统、自动化图像分析等,已经应用在零售、金融、司法、军队、公安、边检、政府、航天、电力、工厂、教育、医疗保健、制造业等行业。目录
计算机视觉简介
计算机视觉基础
计算机视觉开发平台
典型算法
综合案例:基于深度神经网络的
人脸表情识别7.17.27.37.47.5计算机视觉基础7.27.2.1图像表示图像表示通常图像可以用一个二维函数f(x,y)表示,其中x,y表示二维空间平面坐标,而在(x,y)空间坐标处的幅值f称为该点处的强度或灰度。当x,y和灰度值是有限的离散数值时,则可称该图像为数字图像(DigitalImage)。数字图像处理技术是计算机视觉的重要基础。为了产生一幅数字图像,我们需要把连续的感知数据转换成数字形式,这种转换包括两个过程:取样和量化。如图7-1和图7-2所示:图7-1传感器阵列获取数字图像的过程图7-2采样和量化7.2.1图像表示图像表示根据图像的通道数量,可将数字图像分为:单通道图像(黑白图像、灰度图像)彩色图像(三通道图像,四通道图像(含透明度))图7-3灰度图和彩图7.2.1图像表示如图7-3所示:黑白图像:只有黑白两种颜色的图像称为黑白图像或单色图像,每个像素只能是黑或白,没有中间过渡,故又称为二值图像。灰度图像:每个像素的信息由一个量化的灰度级来描述,如果每个像素的灰度值用一个字节来表示,灰度值级数就等于255级,每个像素可以是0-255之间的任何一个数。灰度图只有亮度信息,没有颜色信息。彩色图像:除了有亮度信息外,还包含有颜色信息。彩色图像的表示与所采用的颜色空间,即彩色的表示模型有关。对于多通道图像而言,其存储的颜色信息的编码方式高达上百种,常见为RGB格式。7.2.1图像表示在RGB颜色空间中,一幅彩色数字图像的各个像素的信息由RGB三原色通道构成,其中各个通道R(红色)、G(绿色)、B(蓝色)是在每个像素点都由不同的灰度级来描述,三者的共同作用,决定了图像的色彩和亮度。如图7-4所示:图7-4彩色图像模型7.2.2图像读取、存储图像操作图像读取、显示和存储是基本的操作,这些操作除了OpenCV2处理之外,还可以通过Python的图像库,如PIL(PythonImagingLibrary)、skimage(Scikit-Image)、matplotlib.image、keras.preprocessing等1.图像读取从磁盘中读取一张图像,并将它显示到GUI窗口中。在不使用库操作时实现图像编码解码、GUI图像显示等功能,较为比较复杂。OpenCV库为这个功能实现提供了简单操作,其操作流程如下图7-5所示:图7-5图像读存基本流程7.2.2图像读取、存储1.图像读取基本处理步骤(代码详见书及资源文件):(1)读取图片并显示图片基本信息(2)读取图像、输出图像的一些基本信息,程序输出结果详见书(3)图像显示操作(4)程序执行结果如图7-6所示(5)图像磁盘保存,使用函数imwrite把内存中图像矩阵序列化到磁盘文件中。图7-6图像显示imshow7.2.2图像读取、存储2.图像存储NumPy(NumericalPython)提供了高效存储、数据操作、数据缓存的接口,包含数字计算函数、矩阵计算函数等在Python中图像的操作实质上是对数组的操作,使用OpenCV读取的图像,返回的是一个np.ndarray数组类型的对象。每个数组有nidm(数组的维度)、shape(数组每个维度的大小)和size(数组的总大小)属性,以及属性dtype(数组的数据类型)。数组属性间表示关系如图7-7所示。图7-7数字属性7.2.3视频捕获及流保存1.视频流捕获视频流可以分为摄像头视频读入、本地视频读入两种在OpenCV中捕获摄像头视频流可通过CV2.VideoCapture视频捕获类,实现从视频硬件设备获取帧图像。通过构造函数可获得VideoCapture类的实例对象,通过实例对象VideoCapture的成员方法read来读取视频帧。捕获视频流的基本流程如图7-9所示:图7-9视频捕获基本流程7.2.3视频捕获及流保存1.视频流捕获基本的视频流捕获示例代码如下importcv2ascv
#获取本地默认的摄像头,如果你在Windows下使用USB摄像头那么id为1,如果在Linux系统下使用USB摄像头则应填“/dev/video1”。cap=cv.VideoCapture(0)#如果检测到摄像头已打开ifcap.isOpened():state,frame=cap.read()#抓取下一个视频帧状态和图像whilestate:#当抓取成功则进入循环state,frame=cap.read()#抓取每一帧图像cv.imshow('video',frame)#显示图像帧#等待键盘按下,超时25ms可通过设置等待超时时间来控制视频播放速度。k=cv.waitKey(25)&0xff#25ms内当有键盘按下时返回对应按键ASCII码,超时返回-1ifk==27orchr(k)==‘q’:#当按下Esc或者q建时退出循环。break7.2.3视频捕获及流保存2.视频流保存视频是由一帧一帧的图像连接而成,通常把一秒钟切换图像的次数称为帧率(FPS),如人眼感觉流畅的视频,通常需一秒中内切换24帧图像则其帧率为24FPS。通过OpenCV中的VideoWriter类API接口实现视频流的保存。视频流保存流程图如图7-10所示:图7-10视频流保存流程图7.2.4图形计算1.图像按位运算图像的基本运算有多种,如两幅图像可以相加、相减、相乘、相除、位运算、平方根、对数、绝对值等,还可以截取其中的一部分作为ROI(感兴趣区域)。所谓按位运算,就是对(彩色图像或灰色图像均可)图像像素的二进制形式的每个bit进行对应运算。按位运算包括AND、NOT、XOR、OR运算。它们的函数原型定义如图7-11所示:函数cv2.bitwise_and将两幅图像src1与src2每个像素值进行位与,并返回处理后的图像。函数cv2.bitwise_not将输入图像src每个像素值按位取反,并返回处理后的图像。图
7-11算术运算函数原型7.2.4图形计算2.图像加法使用函数cv2.add()可进行图像的加法运算,对于要相加的两张图需要保证图像的shape一致。此外图像的加法运算还可以通过Numpy实现。在OpenCV的加法是一种饱和操作,而Numpy中加法是一种模操作。如例所示:x=np.uint8([250])y=np.uint8([10])print(cv2.add(x,y)[[255]]#250+10=260=>255print(x+y)[[4]]#250+10=260%256=47.2.4图形计算3.图像通道拆分及合并有时需要对图像的单个通道进行特殊操作,就需要把BGR拆分成三个单独的通道,操作完单个通道后,还可将三个单独的通道合并成一张BGR图,通道拆分及合并操作如下b,g,r=cv2.split(img)img=cv2.merge((b,g,r))#使用python切片来完成通道分割和替换功能b=img[:,:,:1]g=img[:,:,1:2]r=img[:,:,2:3]img[:,:,2:3]=rimg[:,:,1:2]=gimg[:,:,0:1]=b7.2.5图形值化及平滑1.图像二值化在图像处理中,图像二值化是指将图像上的灰度值按照某种方式设置为0或255,得到一张黑白二值图像的过程。在二值化图像当中,只存在黑色和白色二种颜色。图像二值化可以使边缘变得更加明显,如图7-12所示。在图像处理中,二值化操作通常应用在如掩模、图像分割、轮廓查找等中。图7-12数字图像二值化7.2.5图形值化及平滑1.图像二值化在图像处理中,图像二值化是指将图像上的灰度值按照某种方式设置为0或255,得到一张黑白二值图像的过程。在二值化图像当中,只存在黑色和白色二种颜色。图像二值化可以使边缘变得更加明显,如图7-12所示。在图像处理中,二值化操作通常应用在如掩模、图像分割、轮廓查找等中。1)简单阈值二值化简单阈值二值化是指设置一个全局阈值,通过该阈值对灰度图像素值进行归类设置。具体做法是,像素点灰度值小于等于阈值时将该点置0(反转置maxval),大于阈值置maxval(反转置0)。如下生成灰度渐变图:7.2.5图形值化及平滑1.图像二值化在图像处理中,图像二值化是指将图像上的灰度值按照某种方式设置为0或255,得到一张黑白二值图像的过程。在二值化图像当中,只存在黑色和白色二种颜色。图像二值化可以使边缘变得更加明显,如图7-12所示。在图像处理中,二值化操作通常应用在如掩模、图像分割、轮廓查找等中。1)简单阈值二值化简单阈值二值化是指设置一个全局阈值,通过该阈值对灰度图像素值进行归类设置。具体做法是,像素点灰度值小于等于阈值时将该点置0(反转置maxval),大于阈值置maxval(反转置0)。small=np.array(range(0,256),np.uint8).reshape(16,16)如下生成灰度渐变图:7.2.5图形值化及平滑2)全局阈值二值化使用全局阈值二值化上述渐变灰度图,代码如下:ret,small_thresh=cv.threshold(small,127,200,cv.THRESH_BINARY)二值化效果如图7-15所示二值化后的像素分布情况如图7-16所示图7-15二值化后结果图7-16二值化图像素分布7.2.5图形值化及平滑3)自适应阈值二值化自适应阈值二值化同简单阈值二值化不同之处在于,简单阈值使用一个全局阈值来二值化,而自适应阈值使用每个块中的平均值或加权平均值作为阈值,简单阈值优势是在处理速度和某些特定场景的二值化表现,而自适应阈值对局部过曝场景中具有优势。因此在实际应用场景中需要根据场景特点选择合适的二值化处理函数,一般是先使用简单阈值调参,然后考虑使用自适应阈值二值化。自适应阈值二值化和全局阈值二值化的对比效果,如图7-17所示,左一为原灰度图;右二为原灰度图使用简单阈值二值化图——thresh=127;左三为原灰度图使用自适应二值化图——邻域均值;右四为原灰度图使用自适应二值化图——高斯加权均值。图7-17二值化效果对比7.2.5图形值化及平滑4)OTSU二值化OTSU是一种确定图像二值化分割阈值的算法,又称最大类间差法或大律算法。在OpenCV中使用标志位cv.THRESH_OTSU表示使用OTSU得到全局自适应阈值来实现图像二值化。OTSU对灰度图进行二值化示例代码如下:ret,th1=cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)ret就是OTSU计算出来全局自适应阈值。测试图片如图7-18所示,该图存在大量的噪声。它的直方图如图7-19所示,可以看到直方图存在两个波峰。图7-18测试图图7-19测试图的直方图7.2.5图形值化及平滑4)OTSU二值化使用OTSU对测试图二值化后的结果如图7-20图7-20OTSU二值化效果7.2.5图形值化及平滑2.图像平滑1)均值滤波均值滤波是平滑线性滤波器中的一种,具有平滑图像过滤噪声的作用。均值滤波的思想是使用滤波器模板w所包含像素的平均值去覆盖中心锚点的值。滤波计算公式为:滤波计算过程如图7-21所示,经过均值滤波操作后中间锚点83变成了76。
图7-21均值滤波原理7.2.5图形值化及平滑
7.2.5图形值化及平滑
7.2.5图形值化及平滑2.图像平滑2)加权均值滤波均值滤波/加权均值滤波可以实现如下要点:(1)能平滑图像\模糊图像;(2)能去除小尺寸亮点、去除噪声;(3)可以连通一些缝隙,如字符缝隙;(4)使用函数cv.blur()、cv.boxFilter()均可实现均值滤波。运行结果如图7-23和图7-24所示,从中可以看到随着模板尺寸增大,那些小尺寸的白色亮点就会逐渐消失。图7-23不同核大小的均值滤波效果图7-24不同核大小的均值滤波后二值化7.2.5图形值化及平滑2.图像平滑3)中值滤波中值滤波是一种基于统计排序的非线性滤波器。能有效抑制噪声的非线性噪声如椒盐噪声,平滑其它非脉冲噪声,减少物体边界细化或粗化的失真。与线性滤波器均值滤波相比,均值无法消除椒盐噪声,中值滤波却可以轻松去除。中值滤波容易断开图像中的缝隙,如字符缝隙。均值滤波可以连通图像中的缝隙。中值滤波原理:滤波输出像素点g(x,y)表示滤波模板domain定义的排列集合的中值,其基本步骤如下:(1)滤波模板domain与像素点f(x,y)重合,如图7-25所示将domain中心与83所在g(2,2)位置重合。(2)滤波器模板domain为0/1矩阵,与domain中元素1对应的像素才参与排序;7.2.5图形值化及平滑2.图像平滑3)中值滤波(3)参与排序的像素点升序排序,如图2-33所示确认参与排序的像素升序排序73,74,74,75,77,79,79,80,83,其中值为77(4)g(x,y)排序集合的中值为77,g(2,2)=77,将83替换为77图7-25中值滤波原理7.2.5图形值化及平滑2.图像平滑3)中值滤波在OpenCV中使用cv2.medianBlur来进行中值滤波。下面给出中值滤波示例代码。importcv2ascvimg=cv.imread('./mouse.jpg')#中值滤波blur=cv.medianBlur(img,5)cv.imshow('img',img)cv.imshow('blur',blur)cv.waitKey(0)cv.destroyAllWindows()
#提高理解small=img[10:20,20:30:,:1]print(small.reshape(10,10))print('*'*60)small_b=cv.medianBlur(small,3)#边缘填充:复制原图中最临近的行或者列print(small_b)图7-26中值滤波运行结果7.2.5图形值化及平滑2.图像平滑4)高斯滤波高斯滤波是计算邻域内所有像素灰度的高斯加权平均值,然后去替换中心点的像素。高斯滤波和均值滤波的主要区别在于邻域权重值的分布,高斯滤波权重值符合正态分布;均值滤波权重不符合正态分布。二者权重分布如图7-27所示:图7-27高斯权重分布7.2.5图形值化及平滑2.图像平滑4)高斯滤波高斯滤波原理计算过程为:高斯运算结果矩阵=高斯权重矩阵*对应像素矩阵,如图7-28所示:对应像素矩阵锚点为高斯运算结果矩阵求和,即上述将这9个值加起来,就是中心点的高斯滤波的值。如图7-29所示。图7-28高斯滤波过程图7-29中心点83的高斯滤波结果7.2.5图形值化及平滑2.图像平滑4)高斯滤波边界点默认的处理方式是边缘拷贝如图7-30所示:图7-30边界点处理7.2.5图形值化及平滑2.图像平滑4)高斯滤波图7-31去除高斯型噪声7.2.6图像变换及形态操作
图7-32图像平移描述矩阵7.2.6图像变换及形态操作1.图像变换1)图像平移1—原图2—左平移默认0填充3—左平移自定义填充4—左平移镜像填充5—左平移溢出填充7.2.6图像变换及形态操作1.图像变换2)图像缩放图像缩放是指将一副图像放大或缩小得到新图像。对一张图像进行缩放操作,可以按照比例缩放,亦可指定图像宽高进行缩放。放大图像实际上是对图像矩阵进行拓展,而缩小实际上是对图像矩阵进行压缩。OpenCV使用函数cv.resize进行图像缩放。3)图像旋转旋转是二维上的操作,是指将一块区域的像素,以指定的中心点坐标,按照逆时针方向旋转指定角度得到旋转后的图像。在OpenCV中进行图像旋转,需使用cv.getRotationMatrix2D先构造出旋转描述矩阵,然后将构造出来的旋转描述矩阵传递到函数cv.warpAffine中进行几何变换7.2.6图像变换及形态操作1.图像变换4)图像仿射变换仿射变换是二维上的线性变换(乘以矩阵)再加上平移(加上一个向量),如图7-35所示Img1先经过旋转(线性变换),再进行缩放(线性变换),最后进行平移(向量加)就可得到Img2。图7-35仿射变换7.2.6图像变换及形态操作1.图像变换4)图像仿射变换下面给出仿射变换示例代码:#原图变换的顶点
从左上角开始
逆时针方向填入pts1=np.float32([[50,50],[400,50],[50,400]])#目标图像变换顶点
从左上角开始
逆时针方向填入pts2=np.float32([[100,100],[300,50],[100,400]])#构建仿射变换描述矩阵M=cv.getAffineTransform(pts1,pts2)#进行仿射变换dst=cv.warpAffine(img,M,(cols,rows))图7-36仿射变换结果7.2.6图像变换及形态操作1.图像变换5)图像透视变换透视变换本质是将图像投影到一个新的视平面,仿射变换可理解为透视变换的一种特殊形式。仿射变换(affinetransform)与透视变换(perspectivetransform)在图像还原、图像局部变化处理方面有重要意义。仿射变换是2D平面变换,透视变换时3D空间变换。仿射变换需要事先知道原图中三个顶点坐标,而透视变换需要事先知道原图中四点坐标(任意三点不共线)。透视变换用于车牌矫正,找到车牌区域四个顶点坐标左上记为点A,右上记为点B,左下记为点C,右下记为点D。现在假设原图中四点坐标为A(88,92)、B(218,118)、C(84,125)、D(211,160)。找坐标四点坐标中x和y最大最小值记为x_min,x_max,y_min,y_max。目标图四点映射坐标为A(x_min,y_min)、B(x_max,y_min)、C(x_min,y_max)、D(x_max,y_max)。7.2.6图像变换及形态操作1.图像变换5)图像透视变换下面给出矫正示例代码,供参考。#原图中车牌四顶点坐标pts1=np.float32([(88,92),(218,118),(84,125),(211,160)])#矫正后车牌四顶点坐标pts2=np.float32([(88,118),(218,118),(88,160),(218,160)])#构建透视变换描述矩阵M=cv.getPerspectiveTransform(pts1,pts2)#进行透视变换——图像校正dst=cv.warpPerspective(img,M,(w,h))图7-38透视变换倾斜矫正7.2.6图像变换及形态操作2.图像形态操作形态学操作是基于形状的一系列图像处理操作。通过将结构元素作用于输入图像来产生输出图像。基本的形态学操作包含腐蚀与膨胀。通过形态学操作可以实现消除噪声、分割独立的图像元素,以及连接相邻的元素,寻找图像中的明显的极大值区域或极小值区域。1)腐蚀腐蚀原理:使用一个3X3的全一矩阵去腐蚀一张灰度图,中心锚点的值就会被替换为对应核中最小的值。如图7-39所示:OpenCV中使用函数cv.erode来进行腐蚀操作。图7-39腐蚀原理7.2.6图像变换及形态操作2.图像形态操作2)膨胀膨胀原理:使用一个3X3的全一矩阵去膨胀一张灰度图,中心锚点的值就会被替换为对应核中最大的值。如图2-51所示:OpenCV中使用函数cv.dilate来进行膨胀操作。图7-42膨胀原理7.2.6图像变换及形态操作2.图像形态操作3)形态学操作除了上述的基本操作之外,形态学操作还包含开运算、闭运算、形态学梯度、礼帽和黑帽。这些操作使用函数cv.morphologyEx完成。函数cv.morphologEx需要传递结构化内核可通过函数cv.getStructuringElement来获得7.2.7图像检测轮廓检测方法一类是利用传统的边缘检测算子检测目标轮廓另一类是从人类视觉系统中提取可以使用的数学模型完成目标轮廓检测。
基于边缘检测的轮廓检测方法是一种低层视觉行为,它主要定义了亮度、颜色等特征的低层突变,通过标识图像中亮度变化明显的点来完成边缘检测,因此很难形成相对完整和封闭的目标轮廓。边缘检测通常将图像与微分算子卷积。比如借助于Sobel算子、Canny算子等,此方法没有考虑视觉中层和高层信息,因此很难得出完整的、连续的轮廓边缘,仅仅使用这类方法很难得出完整的目标轮廓,这种过程往往复杂且精度难以保证,甚至在含有大量噪声或者纹理的情况下,无法提取轮廓。图像轮廓是指具有相同颜色或灰度值的连续点连接在一起的曲线,轮廓查找在形状分析和物体识别应用十分重要。7.2.7图像检测1.轮廓检测主要过程求取图像(灰度或彩色)中物体轮廓的过程主要有四个步骤。(1)首先对输入图像做预处理,通用的方法是采用较小的二维高斯模板做平滑滤波处理,去除图像噪声,采用小尺度的模板是为了保证后续轮廓定位的准确性,因为大尺度平滑往往会导致平滑过渡,从而模糊边缘,大大影响后续的边缘检测。(2)对平滑后的图像做边缘检测处理,得到初步的边缘响应图像,其中通常会涉及到亮度、颜色等可以区分物体与背景的可用梯度特征信息。(3)对边缘响应做进一步处理,得到更好的边缘响应图像。这个过程通常会涉及到判据,即对轮廓点和非轮廓点做出不同处理达到区分轮廓点和非轮廓点的效果,从而得到可以作为轮廓的边缘图像。(4)若是此步骤之前得到的轮廓响应非常好时,该步骤往往是不用再考虑的。然而在实际应用过程中,上一步骤得到的结果往往是不尽人意的。因此,此过程往往起着至关重要的作用,最后对轮廓进行精确定位处理。7.2.7图像检测1.轮廓检测主要过程图像轮廓查找常用步骤如下:(1)读入图像,小尺寸核图像去噪(均值、中值、高斯)(2)图像灰度化,图像二值化(简单全局阈值、自适应阈值、OTSU大津法阈值)(3)图像背景较为复杂还需使用(Canny、Sobel)等算子提取边缘信息(4)使用函数cv.findContours()进行轮廓查找。7.2.7图像检测2.图像轮廓近似方法图像轮廓是指具有相同灰度值的边界,它会储存形状边界上所有点的(x,y)坐标,但是需要将所有的边界坐标点都储存起来吗?参数method传递给函数findControus()保存边界点,如果该参数被设置为cv2.CHAIN_APPROX_NONE,则所有边界点的坐标都会被保存。如果参数被设置为cv2.CHAIN_APPROX_SIMPLE那么只会保留边界点的端点,比如边界是一条直线时只保留直线的两个端点,边界是一个矩形时只保留矩形的是个顶点。如果将这些边界点画出来,就是下面这样了。cv2.CHAIN_APPROX_NONE,使用绿色线画出,cv2.CHAIN_APPROX_SIMPLE,使用红色点画出。如图7-48所示图7-48轮廓近似方法7.2.7图像检测3.边界矩形有两类边界矩形,直边界矩形,旋转边界矩形。直边界矩形(就是没有旋转的矩形),使用函数cv2.boundingRect()可以获得到,因为直边界矩形不考虑矩形旋转,所以直边界矩形的计算出来面积不是最小。旋转边界矩形,这个矩形计算出来面积最小,因为他考虑了矩形的旋转。使用函数cv2.minAreaRect()可以获得,函数返回一个Box2D结构,其中包含旋转矩形左上角坐标(x,y),矩形的宽高(w,h),以及旋转角度。但是绘制一个矩形需要四个角点,可以通过函数cv2.boxPoints()将Box2D结果转换成(x,y,w,h)。如下代码显示了常用的边界矩形的计算方法,最终效果如图7-51所示:#直边界矩形x,y,w,h=cv2.boundingRect(contours[0])img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2,cv.LINE_AA)#旋转矩形rect=cv.minAreaRect(contours[0])box=cv.boxPoints(rect)box=0(box)img=cv.drawContours(img,[box],0,(0,0,255),2,cv.LINE_AA)图7-51边界矩形7.2.7图像检测4.轮廓层次结构轮廓查找函数cv2.findContours()中有一个轮廓提取模式的参数,函数返回结果包含二个数组,第一个是轮廓,第二个是层次结构。一个轮廓可能会在另外一个轮廓的内部,也可能会和其他的轮廓并列。一个轮廓在另一个轮廓内部,这种情况下称外部轮廓为父轮廓,内部的轮廓称为子轮廓。按照这种轮廓分层关系,就可以确定一个轮廓和其他轮廓之间是怎样连接的,比如它是不是某个轮廓的子轮廓或父轮廓,它是不是某个轮廓的下一个轮廓或上一个轮廓。像这种分层关系就是轮廓之间的层次关系。以图7-52为例:图7-52轮廓层次结构目录
计算机视觉简介
计算机视觉基础
计算机视觉开发平台
典型算法
综合案例:基于深度神经网络的
人脸表情识别7.17.27.37.47.5◎
ARM嵌入式人工智能开发平台◎嵌入式GPU人工智能开发平台◎计算机视觉综合开发平台计算机视觉开发平台7.37.3计算机视觉开发平台计算机视觉开发平台是为解决用户缺乏处理海量视觉数据所需的算力和计算机视觉软件开发资源而生,它通过提供开发和计算资源,使用户通过应用程序编程接口(API)连接到服务,并使用它们来开发计算机视觉应用程序。根据应用领域的不同,计算机视觉开发平台有:纯软件应用的平台软硬件结合应用的平台(嵌入式视觉开发平台)纯软件应用视觉开发平台提供的应用服务,通常有人脸人体、文字识别、图像识别、视频理解、图像生成、目标检测等。软硬件结合的视觉开发平台通常面向工业制造、电子半导体生产、机器人、汽车自动驾驶、无人机、安防监控等领域,提供的服务有图像识别、图像检测、图像跟踪、视觉定位、物体测量、物体分拣等应用。7.3.1ARM嵌入式人工智能开发平台ARM是采用精简指令集(RISC)的一种架构,在低功耗处理器设计,尤其是面向移动领域的体积较小的处理器设计方面具有显著优势。根据不同类型计算,基于ARM的设计分为Cortex-A(面向高性能计算)、Cortex-R(面向实时操作处理)、Cortex-M(面向低功耗、低成本系统,常用于IoT)和Neoverse(面向基础设施服务器,有V、N和E系列)。Cortex-ACortex-MCortex-RNeoverse7.3.1ARM嵌入式人工智能开发平台ARM计算库是面向Cortex-ACPU和MaliGPU架构提供优化的底层机器学习函数集合,其主要包含:基本运行、数学和二元运算符函数、颜色处理(转换、通道提取等)、卷积过滤器(Sobel、Gaussian等)、Canny边缘、金字塔(如Laplacians)、SVM(支持向量机)、卷积神经网络构造块(激活、卷积、全连接、局部连接、归一化、池化、Softmax)等,集成了ARM计算库的深度学习框架有Caffe和Mxnet。ARM计算库的github下载链接为:/ARM-software/ComputeLibrary.7.3.1ARM嵌入式人工智能开发平台QeexoAutoML是由已被TDK收购的Qeexo公司开发的一个全自动端到端机器学习平台,用户通过它可以利用传感器数据,为高度受限的环境快速创建机器学习解决方案,如物联网、可穿戴设备、汽车及移动终端等领域的应用。支持的算法有:GBM、XGBoost、RandomForest、LogisticRegression、CNN、RNN、ANN、LocalOutlierFactor、andIsolationForest、LogisticRegression等。在QeexoAutoML中,应用机器学习的步骤一般包含创建工程、选择传感器或目标设备、采集或上传数据、自动机器学习和下载部署机器学习包,如图7-55所示,在步骤4中自动机器学习的过程分为7个小步,分别为数据预处理、提取特征、选择模型、优化超参数、验证模型、模型转换以及编译部署模型包,这些传统机器学习流程中需要大量重复工作的过程都通过QeexoAutoML实现了自动化学习。7.3.1ARM嵌入式人工智能开发平台图7-55QeexoAutoML学习过程7.3.2嵌入式GPU人工智能开发平台GPU是graphicsprocessingunit的缩写,中文称为图形处理单元或视觉处理器、图像处理芯片,是一种专门用于在个人电脑、工作站或一些移动设备上进行图形计算处理的微处理器。当前典型的有NVIDIAGPU、AMDGPU等,嵌入式GPU人工智能开发平台主要应用于设备。CUDA是NVIDIA专为图形处理单元(GPU)上的通用计算开发的并行计算平台和编程模型,CUDA工具包中包含多个库(如cuRAND、nvGRAPH、cuFFT等).借助CUDA使得开发者能够利用GPU的强大性能显著加速计算应用。CUDA-X是NVIDIA开发的面向人工智能和高性能计算的GPU加速库,包含了深度学习库、图像视频处理库、并行算法刻库、数学库、合作伙伴库等,深度学习库有cuDNN、TensorRT、Riva、DeepStreamSDK、DALI,其中cuDNN是面向深度神经网络的原生GPU加速库,支持ResNet,ResNext,EfficientNet,EfficientDet,SSD等,以及Caffe2、TensorFlow、PyTorch、PaddlePaddle、mxnet、torch等深度学习框架7.3.2嵌入式GPU人工智能开发平台此外,NVIDIAJetPackSDK还提供了面向边缘设备的AI开发套件,硬件有NvidiaJetsonTX、NVIDIAJetsonOrinNX16GB等,软件套件当前最新版本有JetPack5.1。其关系和应用如图7-56所示。而AMD的嵌入式边缘计算开发平台最新的有AMDEPYCEmbedded3000和7000系列。图7-56Jetson、CUDA-X关系及应用7.3.3计算机视觉综合开发平台计算机视觉综合开发通常根据业务模式的不同,分为基于本地的开发模式和基于云端的开发模式两种,但在实际应用中,考虑成本和算力资源等因素,当前多以基于云端的开发模式应用为主。国内比较成熟的计算机视觉综合开发平台有:百度EasyDL、阿里云达摩院视觉智能开放平台、腾讯AI开放平台、旷视科技Face⁺⁺、京东NeuHubAI开放平台等国外的有:微软Azure计算机视觉开发平台、Facebook的FBLearnerFlow、亚马逊的AmazonRekognition、谷歌的MLKit等。7.3.3计算机视觉综合开发平台虽然上述的各类计算机视觉开发平台提供的视觉API服务各有侧重和差异。它们的相同点是:1)具有基本的视觉任务功能,如OCR文字识别、人脸识别等;2)类似的云端开发流程,包含创建模型→准备数据→训练数据→部署模型应用,即数据管理→模型构建→模型部署与应用这几个不同的阶段;3)提供在线API和离线SDK两种使用模式,部署模式既可以在云端部署,也可以在本地服务器或本地设备端部署。不同点是:各个平台集成视觉应用开发的侧重点和资源丰富性差异较大,支持边缘设备开发的较少,当前以百度EasyDL资源和应用案例最为丰富,且支持专业教学友好,其次为阿里云达摩院视觉智能开放平台、腾讯AI开放平台、旷视科技Face⁺⁺等平台。目录
计算机视觉简介
计算机视觉基础
计算机视觉开发平台
典型算法
综合案例:基于深度神经网络的
人脸表情识别7.17.27.37.47.5◎
LeNet算法◎MobileNets算法◎目标检测算法典型算法7.47.4典型算法对计算机视觉算法来说,一般包含五个步骤:特征感知图像预处理特征提取特征筛选推理预测与识别除了早期的传统的主成分分析法(PCA)、拉普拉斯特征图法、局部保值映射法(LPP)、稀疏表示法、波兹曼机、神经网络降维法、MCP模型等方法之外,在基于CPU过渡到基于GPU的深度学习技术推动的过程中,出现的典型算法有LeNet、LSTM、深度置信网络(DeepBeliefNetwork)、MobileNet、AlexNet、ResNet等。7.4.1
LeNet算法LeNet算法是一个基于反向传播的,用来解决手写数字图片识别任务的卷积神经网络(CNNs)。LeNet经历了5个版本演化,分别LeNet1,LeNet2,..,LeNet5。CNNs架构采用了三个具体的思想:1)局部接受域,2)约束权重,3)空间子抽样。基于局部接受域,卷积层中的每个单元接收来自上一层的一组相邻单元的输入。通过这种方式,神经元能够提取基本的视觉特征,如边缘或角落。然后,这些特征被随后的卷积层合并,以检测更高阶的特征。7.4.1
LeNet算法LeNet1算法最初的LeNet1网络结构如图7-56所示。除了输入和输出之外,包含了三层,分别为卷积层、池化层、全连接层。输入是归一化的16*16的图片,输出是10个单元(每单元一个类别),其网络参数如图7-57所示图7-56LeNet1网络结构图7-57LeNet1网络参数7.4.1
LeNet算法LeNet5算法LeNet5不包含输入层,有7层,如图7-59所示,卷积层用Cx表示,子采样层用Sx表示,全连接层用Fx表示,x是层号。初始输入是32*32图片,总共有340908个连接,60000个训练自由参数。
图7-58LeNet5网络结构7.4.1
LeNet算法LeNet5算法图7-59C3与S2中前3个图相连的卷积结构7.4.1
LeNet算法LeNet5算法LeNet5的损失函数用MLE(MaximumLikelihoodEstimation)进行计算,表示如下:图7-60LeNet5识别数字4的过程
7.4.1
LeNet算法LeNet5算法层序号层名输入大小输出大小卷积核大小输入通道数输出通道数步长参数数连接数1C1(CONV)32*3228*285*51611561223042S2(POOL1)28*2814*142*26621258803C3(CONV)14*1410*105*5616115161516004S4(POOL2)10*105*55*5161623220005C5(CONV)5*51*15*516120148120481206F6120*184*1
11110164101647Output(Sigmoid)84*110*1
表7-1LeNet5网络参数7.4.1
LeNet算法LeNet5算法构建及应用采用Keras搭建LeNet5网络进行学习训练入门CNN,使用Keras搭建LeNet5可以分为模型选择、构建网络、编译、网络训练、预测这几个步骤。Keras中有Sequential模型(单输入单输出)和Model模型(多输入多输出),本节选用Sequential模型,数据集选用mnist集合。#1.导入数据并处理#mnist工具读取数据,输入数据维度是(num,28,28)(x_train,y_train),(x_test,y_test)=mnist.load_data()#数据重塑为tensorflow-backend形式,训练集为60000张图片,测试集10000张图片x_train=x_train.reshape(x_train.shape[0],28,28,1)x_test=x_test.reshape(x_test.shape[0],28,28,1)#把标签转为one-hot编码y_train=to_categorical(y_train,num_classes=10)y_test=to_categorical(y_test,num_classes=10)
#2.构建网络#选择顺序模型model=Sequential()#padding值为valid的计算情况,见上面#给模型添加卷积层、池化层、全连接层、压缩层,使用softmax函数分类7.4.1
LeNet算法model.add(Conv2D(input_shape=(28,28,1),filters=6,kernel_size=(5,5),padding='valid',activation='tanh'))model.add(MaxPool2D(pool_size=(2,2),strides=2))model.add(Conv2D(input_shape=(14,14,6),filters=16,kernel_size=(5,5),padding='valid',activation='tanh'))model.add(MaxPool2D(pool_size=(2,2),strides=2))model.add(Flatten())model.add(Dense(120,activation='tanh'))model.add(Dense(84,activation='tanh'))model.add(Dense(10,activation='softmax'))#显示网络主要信息model.summary()3.编译模型#定义lossfunction、优化器、训练过程中计算准确率pile(loss='categorical_crossentropy',optimizer=SGD(lr=0.01),metrics=['accuracy'])4.训练模型history=model.fit(x_train,y_train,batch_size=128,epochs=30,validation_data=(x_test,y_test))print(history.history.keys())5.预测评价score=model.evaluate(x_test,y_test,verbose=0)print('Testloss:',score[0])print('Testaccuracy:',score[1])
7.4.2
MobileNets算法
7.4.2
MobileNets算法1.MobileNetV1图7-61标准卷积操作过滤图7-62深度卷积过滤
图7-66标准卷积与深度可分离卷积7.4.2
MobileNets算法2.MobileNetV2MoibleNetV1算法在深度卷积训练过程中存在着ReLU运算在高维度(15-30)空间中捕获保存信息的能力强(信息丢失少),而在低维度(2-3)空间中捕获保存信息能力差(信息丢失多)的问题,换句话说,也就是深度神经网络仅有处理输出通道中非零部分的线性分类的能力,即ReLU的非线性转换把所有x≤0都处理为0,会导致信息丢失。针对此情况,MobileNetV2引入了带有残差的瓶颈深度可分离卷积(bottleneckdepth-separableconvolutionwithresiduals),1)如图所示,在卷积块中插入线性瓶颈(Linearbottleneck)层来捕获低维度空间信息,即把最后输出连接的非线性转换ReLU替换为线性激活函数,进行线性操作,减少信息损失。2)设计反向残差(Invertedresiduals),如图所示,在输入之后先连接线性瓶颈层,接着通过逐点卷积实现升维,然后在高维度信息空间通过非线性转换ReLU6提取特征,最后再通过逐点卷积进行降维。7.4.2
MobileNets算法2.MobileNetV2图7-65带有线性瓶颈的深度分离卷积图7-68反向残差模块7.4.2
MobileNets算法2.MobileNetV2MoibleNetV2的卷积块结构和MoibleNetV1的卷积块结构对比如下图7-69所示,区别在于。
MoibleNetV2在输入之后有增加的1×1的逐点卷积和非线性转换ReLU6。
MoibleNetV1中逐点卷积之后的ReLU6在MoibleNetV2中换成了线性操作。MoibleNetV2中线性瓶颈层之间有直接短连接,在步长为1时,上一个输入和下一个输入之间除了有卷积块输入之外,还有短连接输入,但在步长为2时,则由于输入特征图大小和输出特征图大小不一致,则没有短连接输入。图7-69MobileNetV1和MobileNetV2的结构7.4.2
MobileNets算法3.MobileNetV3MobileNetV3模型根据适用资源大小的高低不同,有MobileNetV3-Large和MobileNetV3-Small两个版本类型,它采用了模型结构搜索的思路,其改进主要如下。1)综合MobileNetV1深度可分离卷积、MobileNetV1的反向残差和线性瓶颈。2)引入增加SE模块(Squeeze-and-Excite)和平台感知的神经架构搜索(platform-AwareNAS)。3)重新设计了耗时模块MobileNetV2网络端后部的最后几层,并引入新的激活函数h-swish替换了ReLU6。MobileNetV3的SE模块7.4.2
MobileNets算法3.MobileNetV34.MobileNetV3构建及应用(详见书253页及代码资源包)MobileNetV2网络端后部和MobileNetV3网络端后部设计比较7.4.3
目标检测算法目标检测任务的目标是检测出图像中所有实例的所属的预定义类别,并用矩形框标出实例在图像中的初步位置,它是目标分类任务的一个延伸,即不仅对目标进行分类,还需找到目标在图像中的位置。当前目标检测算法的发展仍面临着一些挑战性问题,主要有:类别内目标变化多样,识别检测不易,如遮挡、姿态、光照、视角、缩放、旋转、模糊等对目标外观的影响。类别数量可用种类过少,数据不平衡,缺乏高质量的标注数据。模型计算效率,尤其是大模型需要大量的计算资源,受限于移动边缘等设备。1.目标检测算法分类传统目标检测和基于深度学习技术的目标检测两种,基于深度学习的目标检测又分为两阶段目标检测、一阶段目标检测。7.4.3
目标检测算法1.目标检测算法分类传统目标检测和基于深度学习技术的目标检测两种,基于深度学习的目标检测又分为两阶段目标检测、一阶段目标检测。图7-70目标检测方法发展历程7.4.3
目标检测算法1.目标检测算法分类传统的目标检测典型算法有:VJ检测器(ViolaJonesDetectors)、HOG检测器、可变形组件模型DPM(DeformablePart-basedModel)等。VJ检测器继承了传统检测方法中的滑动窗口,通过积分图、特征选择和检测级联三种技术结合的方式,实现实时人脸检测。方向梯度直方图检测器是尺度不变特征变换SIFT(scale-invariantfeaturetransform)算法的改进,通过设计HOG描述符,在图像局部区域中添加特定方向梯度的方式创建单元块及使用归一化重叠块的方式,提取特征,对行人进行监测。DPM模型可以看作方向梯度直方图检测器的延伸,其包含训练和推理,训练过程可看做目标分解部分的学习,推理过程是对检测的不同部分进行组合。7.4.3
目标检测算法2.基于深度学习的目标检测算法基于深度学习的目标检测算法主要有:二个阶段目标检测方法单个阶段目标检测方法它们的相同点是两类都是基于CNN结构而发展的方法。不同点是二个阶段是按照从粗到细的粒度进行阶段过程检测处理,粗粒度的阶段重点在于检测目标,提升召回能力,细粒度的阶段是在粗的阶段识别基础上,提升改进位置检测,而单个阶段目标检测则是溶于一个阶段过程完成检测,目标检测器结构简单,速度快。二个阶段目标检测方法中典型的有R-CNN、SPP-Net、FastRCNN、FasterRCNN、FPN(FeaturePyramidNetworks)、R-FCN等,7.4.3
目标检测算法2.基于深度学习的目标检测算法它们内部结构及差异对比如图7-71所示,从图可以看出,一般在目标检测器中都会包含一个用于从输入图像中提取特征的核心结构组件,这些核心结构组件常用的有AlexNet、VGG、GoogleNet/Inception、ResNets、ResNeXt、CSPNet、EfficientNet等。图7-71二阶段目标检测方法内部结构差异对比7.4.3
目标检测算法2.基于深度学习的目标检测算法单个阶段目标检测算法有YOLO(YouOnlyLookOnce)、SSD(SingleShotMultiBoxDetector)、RetinaNet、CenterNet、EfficientDet等。它们的内部结构及其差异对比如图7-72所示。与上述二个阶段目标检测将检测问题作为分类问题不同是,单个阶段目标检测算法如YOLO是将检测问题作为回归问题处理,直接预测图像像素作为目标及边框属性。此外,单个阶段目标检测算法中各个算法中的核心结构组件也各不相同,如YOLO采用GoogleNet,SSD采用VGG-16等图7-72一阶段目标检测方法内部结构差异对比7.4.3
目标检测算法3.目标检测算法数据集及评价常用于目标检测任务的数据集有PASCALVOC2007/2012、ILSVRC2014/2017、MS-COCO2015/2017、Objects365-2019、OID-2020,它们的统计信息如表7-3所示表7-3典型目标检测数据集及统计
目标检测算法的性能评价指标有准确率(Precision)、召回率(Recall)、平均正确率AP(AveragePrecision)、全类平均正确率(mAP)、每个窗口的误检率(FPPW)、每个图片的误检率(FPPI)等。目录
计算机视觉简介
计算机视觉基础
计算机视觉开发平台
典型算法
综合案例:基于深度神经网络的
人脸表情识别7.17.27.37.47.5综合案例:基于深度神经网络的人脸表情识别7.47.5
综合案例:基于深度神经网络的人脸表情识别脸部表情是人类表达情感的最直接方式之一,当前对人的脸部表情所表示的情感分了6类,分别为高兴(happy)、沮丧(sad)、愤怒(angry)、害怕(fear)、surprise(惊讶)、disgust(厌恶)、neural(中立)。本案例通过基于深度神经网络CNN模型实时在线识别人的脸部表情变化,判别人的情绪是属于这6类情绪中哪一个类别,模型训练使用的数据集为FER-2013情感数据集和IMDB数据集。本节基于深度学习框架TensorFlow和Python语言实现了基于深度神经网络的人脸表情识别,实现主要分为四个部分:模型结构搭建、模型参数训练、保存训练结果模型、调用已训练保存的模型实时在线进行人脸表情识别。其模型参数训练架构如图7-73所示,主要代码如下所示:7.5
综合案例:基于深度神经网络的人脸表情识别主要代码见书p265:1.定义创建模型网络根据模型结构初始化深度学习网络算法相关参数,包括卷积层、批归一化(BatchNormalization)、激活函数(ReLU)、全局池化(GlobalAveragePooling)等2.训练网络模型训练深度学习网络算法模型,包括定义训练参数、训练数据生成、训练模型等。3.运行人脸表情识别模型调用上述已训练好保存的网络模型进行人脸表情识别,包括设置参数、模型加载、获取实时视频流、人脸表情识别预测等信息。4.运行结果运行结果显示,在运行人脸表情识别模型过程中,模型通过识别摄像头获取的实时视频流图像,稳定识别、预测人脸表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军队文职人员招聘之军队文职管理学考前冲刺模拟试卷A卷含答案
- 2025年军队文职人员招聘之军队文职公共科目题库检测试卷B卷附答案
- 2025年消防设施操作员之消防设备高级技能能力提升试卷B卷附答案
- 采购分包资源配置合同(2篇)
- 2023年全国硕士研究生考试《管理类联考综合能力》试题真题及答案
- 2025年党史竞赛知识题库70题及答案
- 会计学成本会计模拟试题集
- 各行业各年度数据对比表格
- 泰坦尼克号的文化价值和社会反思:高中语文教学教案
- 经济学微观经济学知识点归纳与解析
- 河北张家口中国化工集团盛华化工公司“11.28”重大爆燃事故调查报告
- 《知识产权法教程(第八版) 》 课件 王迁 第1-9章 总论、著作权法律制度概述-专利法律制度概述
- 07SG111-1 建筑结构加固施工图设计表示方法
- 屋顶分布式光伏发电EPC项目 投标方案(技术方案)
- 网约车停运损失费起诉状模板
- 中国急性缺血性卒中诊治指南(2023)解读
- A型肉毒素治疗知情同意书 注射知情同意书
- 混凝土采购项目整体供货方案
- 血液透析导管溶栓及护理
- 公司外聘人员管理制度
- 慢病联合用药病
评论
0/150
提交评论