版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Flutter的视障人群辅助APPAssistingAPPforvisuallyimpairedpeoplebasedonFlutter摘要中国视障群体约有1731万人,平均不到100个人里就有一个视障人士。随着社会的发展进步,中国对特殊群体的公共保障越来越完善。在现实生活中,盲人最主要的需求就是出行,但是在室外的环境下盲人想独立出行还是一件难事,很多时候都需要人陪同,公共设施还是有待提升。深度学习的原理是利用明眼人标注的已知样本来学习一种规则进行预测未知的样本,这种理念和需要人陪同很相似。Flutter是跨平台的开发框架,可以利用它快速开发移动应用。本文实现的是一款结合深度学习、跨屏台开发框架的手机应用程序,能够帮助盲人在室外环境下出行。关键词:视障群体软件、深度学习、目标检测、跨平台开发AbstractThereareapproximately17.31millionvisuallyimpairedgroupsinChina,andthereisanaverageofonevisuallyimpairedpersonper100people.Withthedevelopmentofsociety,China'spublicsecurityforspecialgroupsisbecomingmoreandmoreperfect.Inreallife,themainneedoftheblindistotravel,butintheoutdoorenvironment,itisstilldifficultforblindpeopletotravelindependently.Manytimestheyneedtobeaccompanied,andpublicfacilitiesstillneedtobeimproved.Theprincipleofdeeplearningistouseaknownsamplemarkedbyabrighteyetolearnaruletopredictanunknownsample.Thisconceptisverysimilartotheneedforsomeonetoaccompany.Flutterisacross-platformdevelopmentframeworkthatcanbeusedtoquicklydevelopmobileapplications.Thisarticleimplementsamobileapplicationthatcombinesdeeplearningandacross-screenplatformdevelopmentframeworktohelpblindpeopletravelinoutdoorenvironments.Keywords: visuallyimpairedgroupsoftware,deeplearning,targetdetection,cross-platformdevelopment目录TOC\o"1-3"\h\u25609第一章研究背景与意义 研究背景与意义研究背景中国视障群体是全世界人口是最大的视障群体。据卫生部统计,中国有1731万的视障人士,数量是世界之首。其中视障人士也是占有障碍人士的很大一部分比例,受社会的广泛关注,但现有市场上对与视障群体的软硬件开发还没有得到人们的关注,与视障群体有关的产品少之又少。正因如此,视障群体更应该受到大家的广泛重视与关注、,需要社会给予关爱和帮助。使其提高生活质量。据2015年《中国互联网视障用户基本情况报告》中调查,一周出行1-6次不需要人陪伴的比率占到总调查人数的24%,需要人陪伴的46%,其中一周基本不出行的占比高达30%。盲人的出行障碍主要有无法辨别方向、出行过程中被障碍物遮挡等困难。盲道是现在盲人出行的一个辅助工具,但是现在的盲道占有率很高,视障群体实际使用过程并不友好,会出现前方有物体占用盲道,这些物体例如消防栓、垃圾桶等等。研究意义目标检测任务是人工智能图像处理方面的一个重要任务,目标检测的数据集一般为一张图片里物体的坐标以及物体的类别,通过神经网络的权重最后可以达到输入任意一张图片返回物体信息的效果。深度学习领域近年来随着硬件的升级更新,算力有了极大的提升,许多目标检测网络也在工业界发挥着至关重要的作用。Flutter是一个跨平台开发框架,它是非常新的平台,它的主要开发语言是Dart,dart和Java很相似。开发者可以用一套代码可以同时编译在安卓和苹果两个平台上。Flutter还提供了很多小插件、接口、小部件供开发者使用。Flutter开发的应用性能上并可以与原生的应用媲美,这为用户提供了友好的体验。本系统采用深度学习中的目标检测及跨平台开发框架Flutter为视障者们开发一个有好的、高效的视障辅助APP,让每一个人都能享受AI技术带来的便利。
研究现状与分析跨平台开发框架研究现状及分析近年来,消费者们已经从PC转向移动端来进行上网的操作,跨平台开发框架大多数应用在移动设备上,所以显得至关重要。跨平台开发技术可以增加代码的复用,降低开发时间于成本,实现一套代码,多个平台部署,在移动终端设备上也有许多框架大展身手例如Futter、ReactNative等,这些跨平台的开技术有的时候甚至超过了平台的原生语言ReactNative是Facebook开发的框架如图2.1.1,是使用JavaScript开发IOS和Android的前端样式,最初ReactNatives是用来开发IOS系统的,最近也支持了Android系统。该库现在可以为两个平台呈现移动UI。每当使用Swift/Objective-C或Java编写的应用程序有更新时,都需要重新编译整个应用程序,并且必须将新版本再次分发到AppStore。根据AppStore的审查程序,所有这一切可能需要几个星期。为了避免这种麻烦,ReactNative应用程序以不同的方式工作,本机应用程序能够找到特定的JavaScript代码,然后在实际设备上启动该应用程序时下载并编译该JavaScript代码。这样,可以立即完成应用程序更新,而无需一次又一次地向AppStore提交新版本。图2.1.1RN框架图Flutter是一个非常新的平台,该平台框架如图2.1.2所示但是它是一个很有发展的平台,已经吸引了已经发布了应用程序的大公司的关注。例如阿里巴巴开发的闲鱼,腾讯开发的Now直播等。与开发Web应用程序相比,它比较简单,并且与本地的应用程序相比,它具有开发快部署快的特点。Flutter的高性能和高生产率是通过以下几种技术实现的。与许多其他流行的移动平台不同,Flutter完全不使用JavaScript。Dart是编程语言。它可以编译为二进制代码,这就是为什么它以Objective-C,Swift,Java或Kotlin的本机性能运行的原因。Flutter不使用本机UI组件。起初听起来很尴尬。但是,由于组件是在Flutter本身中实现的,因此视图和的代码之间没有通信层。因此,游戏在智能手机中以最快的速度获得其图形效果。因此,按钮,文本,媒体元素,背景都由Flutter的图形引擎绘制。顺便说一句,Flutter的“Hello,World”应用程序的捆绑包非常小:iOS≈2.5Mb和Android≈4Mb。Flutter在ReactWeb框架的启发下使用了一种声明式方法,基于小部件(在网络世界中称为“组件”)构建其UI。为了从小部件中获取更多信息,通常仅在必要时才渲染它们,通常是当它们的状态已更改时。该框架还集成了Hot-reload,这对于Web来说很典型,但在本机平台上仍然缺少。这使Flutter框架可以自动重建窗口小部件树,从而可以快速查看更改的效果。图2.1.1Flutter框架图目标检测研究现状及分析卷积网络卷积神经网络是一种特殊的神经网络,用于处理具有已知网格状拓扑的数据。包括时间序列数据(可以认为是以规则的时间间隔采样的1D网格)和图像数据(可以认为是像素的2D网格)。卷积网络在实际应用中已经取得了巨大的成功。“卷积神经网络”表示该网络采用称为卷积的数学运算。卷积是一种特殊的线性运算。卷积与普通的神经网络非常相似-它们由具有可学习的权重和偏见的神经元组成。每个神经元接收一些输入,执行点积,并可选地跟随其非线性。卷积神经网络的起源是根据哺乳动物使用大脑中神经元的分层结构在视觉上感知周围世界的方式,这反过来又激发了工程师尝试在计算机视觉中开发类似的模式识别机制。在他们的假设中,在视觉皮层中,“复杂细胞”产生的复杂功能反应是由“简单细胞”产生的更为简单的反应构建而成的。例如,简单单元将对定向边缘等做出响应,而复杂单元也将对定向边缘做出响应,但具有一定程度的空间不变性。卷积神经网络可以描述人类如何识别物体和场景的图像、人类如何看待和识别物体,类似神经元的的感受野,其中一个细胞对来自其他局部细胞的输入总和做出响应,深度卷积神经网络的架构受到上述思想的启发。卷及网络还有空间不变性,我们大多数人可以在各种条件下识别特定的面孔,因为我们学习了抽象。因此,这些抽象对于大小,对比度,旋转,方向都是不变的。以汽车为例。人们如何识别它是汽车?我们基本上是在寻找汽车特有的特征。我们寻找车轮,前大灯,门,后行李箱,玻璃窗,引擎盖和其他与其他运输方式不同的功能。同样,在识别车轮的同时,我们寻找位于汽车主体下方的圆形物体,其颜色相对较暗,且质地粗糙。我们考虑了所有的小细节,它们共同构成了一些基本信息。这些小信息聚集在一起,形成了我们正在识别的对象所特有的特定特征。卷积网络分为三个结构:卷积层、连接层、池化层。卷积层:该卷积层与特征提取。这是使用一个矩阵(通常是滤波器矩阵)应用于特定矩阵(通常是图像矩阵)的特殊操作。该操作涉及将对应于图像矩阵的特定行和列的单元格的值与滤波器矩阵中相应单元格的值相乘。我们对滤波器矩阵范围内的所有单元格的值执行此操作,并将它们加在一起以形成输出。池化层:该层包括执行从一组值中提取特定值的过程,通常是所有值的最大值或平均值。这减小了输出矩阵的大小。例如,对于MAX-POOLING,我们取矩阵的2X2部分的所有值中的最大值。因此,我们实际上是采用表示该图像的该部分中存在特征的值。通过这种方式,我们摆脱了关于图像特定部分中特征存在的不想要的信息,而仅考虑需要知道的内容。通常在CNN体系结构中的连续卷积块之间定期插入池化层。它的功能是逐渐减小表示的空间大小,以减少网络中的参数和计算量。全连接层:该层构成卷积神经网络体系结构的最后一块,与分类任务有关。这实际上是一个完全连接的简单神经网络,由两个或三个隐藏层以及一个通常使用“Softmax回归”实现的输出层组成,该输出层可在众多类别中执行分类工作。目标检测目标检测是一种与计算机视觉和图像处理相关的计算机技术,用于检测数字图像和视频中某一类语义对象(如人、建筑物或汽车)的实例。早期工作是基于模板匹配技术和简单的基于零件的模型。后来,基于统计分类器的方法,例如神经网络,SVM,Adaboost,贝叶斯等。最初成功的目标检测器系列(均基于统计分类器)为以下大多数研究奠定了基础,这些研究在训练和评估以及分类技术方面均得到了发展。大多数对象检测系统都考虑相同的基本方案,通常称为滑动窗口,这是一种为了检测图像中不同比例和位置出现的窗口,它会进行详尽的搜索。该搜索利用了分类器(检测器的核心部分),该分类器指示给定的图像斑块是否与对象相对应。假设分类器基本上在给定的比例和补丁大小下工作,则输入图像的多个版本将以不同的比例生成,并且分类器用于对图像的每个缩小版本对给定大小的所有可能的补丁进行分类。目标检测在计算机视觉的许多领域都有应用,包括图像检索和视频监控。它广泛应用于图像标注、活动识别、人脸检测、人脸识别、视频对象共分割等计算机视觉任务中。它还用于跟踪对象,例如在足球比赛中跟踪球、或在视频中跟踪人等任务。SSD-MobileNet介绍SSD-Mobilenet是一种目标检测的神经网络。如图2.3.1中从上到下分别是MobileNetv1模型(统一输入大小为300x300)、chuanqi305的Mobilenet-SSD网络、VGG16-SSD网络。且默认都是用3x3大小的卷积核,除了MobileNet-SSD的Conv14_1、Conv15_1、Conv16_1、Conv17_1和VGG16-SSD的Conv8_1、Conv9_1、Conv10_1、Conv11_1用的是1x1大小的卷积核。图2.3.1同类产品研究现状及分析盲人出行途径有四个,分别是盲道、盲杖、明眼人的陪伴、导盲犬,下面我将分别介绍这四种。盲道是属于公共设施,他是靠地上的花纹提示盲人能不能行走,属于盲人主要的出行工具,盲道是非常重要的。但是设计时、使用时、会出现有固定或者非固定的东西被随意占用,各种电动车、私家车、杂物随意堆放,这种情况在现实生活中很常见。盲杖,盲杖就是盲人前行的第三只眼,可探索前方是否有障碍物,是否被物体阻挡。这种只能判断很近的物体,前方有无障碍物。明眼人的陪伴,对于有明眼人的陪伴,自然不需以上的辅助工具。导盲犬,导盲犬在当下必定还属奢侈存在,不是每一个盲人都能申请到导盲犬,申请导盲犬有着种种条件的限制。以上总结,各种设施有利有弊,但是当下互联网时代的盲人出行工具还没有。
实验环境搭建安装CUDA和CudnnCUDA是Nvidia创建的并行计算平台和应用程序编程接口(API)模型。它允许软件开发人员和软件工程师使用具有CUDA功能的图形处理单元进行通用处理—一种称为GPGPU(图形处理单元上的通用计算)的方法。在NVIDIACUDA深层神经网络库(cuDNN)是深层神经网络的GPU加速的库。cuDNN为标准例程提供了高度优化的实现,例如向前和向后卷积,池化,规范化和激活层。cuDNN是NVIDIADeepLearningSDK的一部分。下载安装文件。首先去英伟达官网下载cuda安装包(图3.1.1):图3.1.1cuda下载runfile(后缀为.run)文件来安装。安装cuda,cuda中含有nvidia的显卡驱动一般为专用的驱动非消费者级别的驱动,下载后点击安装即可。根据显卡的配置来进行下载安装AnacondaConda是一个在windows等系统上运行的包管理系统和环境管理系统,利用他可以进行多个环境之间的切换。Conda的安装也很简单只需要执行官网的脚本即可,他可以在不同环境之间进行包的预下载等操作,其中python是conda包管理系统的主要语言。从其官方网站下载最新版本的Anaconda安装程序bash脚本(如图3.2.1)图3.2.1Anaconda安装完成后输入condainfo-e查看有无安装成功新建一个环境condacreate-ncs_tf_py36python=3.6安装TensorflowTensorFlow是一个开源软件库。他是由谷歌公司中的谷歌大脑团队进行主要开发的,用于进行机器学习、深度学习等神经网络的研究、Tensorflow适用于生产环境下的部署、并且在很多工业设备上有着成功的案例。Tensorflow也是一个用于计算的开源库TensorFlow根据Apache2.0开源许可证发行。尽管可以访问基础C++API,但该API主要用于Python编程语言。与旨在深度学习的其他数值库(例如Theano)不同,TensorFlow则用于开发和生产系统。它可以在移动设备和数百台机器上的单个CPU系统,GPU和大规模分布式系统上运行。TensorFlow基本上是一个使用数据流程图进行数值计算的软件库,其中包括表示图中数学运算的节点和图中边缘表示的多维数据数组(称为张量在它们之间传递)。请注意,张量是TensorFlow中数据的中心单元。TensorFlow提供了多个API(应用程序编程接口)。它们可以分为两个主要类别:低级API:完整的编程控制,推荐给机器学习研究人员,提供对模型的精细控制,而TensorFlowCore是TensorFlow的低级API。进阶API:与TensorFlowCore相比,在TensorFlowCore上构建更容易学习和使用,从而使重复任务更容易且在不同用户之间更加一致。Tf.contrib是高级API的示例。TensorFlowLite,它运行在许多不同的硬件类型,包括移动电话,嵌入式Linux设备,以及微控制器经过专门优化过的模式。它变换TensorFlow模型转换成一个有效的形式解释使用,可引入优化提高二进制文件的大小和性能。TensorFlow精简版的设计,可以很容易地在设备上的网络“边缘”的执行机器学习,而不是将数据从服务器来回。对于开发商来说,在设备上进行机器学习可以用下面的改进有助于:潜伏期(无往返于服务器),隐私(没有数据离开设备),连接(无互联网连接)和电源(网络连接消耗功率)。使用模型优化工具包来减少模型的大小并提高其效率,同时将对精度的影响降到最低。使用TensorFlowLite的工作流程要完成以下步骤:1.选择一个模型,可以是自己的TensorFlow模型,在线查找模型,或从预训练模型中选择一个模型进行迁移学习或重新训练。2.转换模型。使用TensorFlowLite转换器和几行Python将其转换为TensorFlowLite格式。3.使用TensorFlowLite解释器,使用多种语言的api,部署到设备并在设备上运行模型。4.优化模型。使用我们的模型优化工具包来减小模型的大小并提高其效率,同时最大程度地减少对准确性的影响。在终端输入Pipinstalltensorflow-gpu安装AndroidStudioAndroidStudio是一个集成开发环境,用于编写适用于移动终端设备的程序,基于JetBrains的IntelliJIDEA软件构建,并专门为Android开发而设计。它可以在基于Windows,macOS和Linux的操作系统上下载。它替代了EclipseAndroid开发工具(ADT),作为本机Android应用程序开发的主要IDE。AndroidStudio是用于编写安卓程序的一个集成开发环境,可以用来编写手机、手表、电视等等使用安卓系统终端设备上的程序,他是从JetBrains的IntelliJIDEA来开发的可以软件,且专用于Android的开发,可以在Windows、Mac、Linux环境下来进行开发,同时也他也取代了早起安卓开发使用的Eclipse的环境,作为安卓开发者主要的集成开发环境下载AndroidStudio在此网址上/studio/install?hl=zh-cn启动AndroidStudioDMG文件。将AndroidStudio拖放到“Applications”文件夹中,然后启动AndroidStudio。选择是否想要导入之前的AndroidStudio设置,然后点击OK。AndroidStudio设置向导将引导一些的设置步骤,包括下载开发所需的AndroidSDK组件等等。安装Flutter环境下载FlutterSDK在网址上https://flutter.io/sdk-archive/#macos,选择Stablechannel。解压zip安装包添加flutter到环境变量中exportPATH=`pwd`/flutter/bin:$PATH运行flutterdoctor所有检查都成功时,安装完成。
详细设计与实现训练神经网络数据集COCO数据集是微软构建的一个数据集,其包含detection,segmentation,keypoints等任务。MSCOCO总共包含91个类别,每个类别的图片数量如下:COCO数据集和包括了很多任务、例如目标检测、目标分割、关键点等任务,COCO数据集是微软提供的一个大型数据集,其中目标检测任务共包含了91类、每个类别的情况如图4.1.1图4.1.1相比于ImageNet数据集COCO的总数还是比较少,但是每个类别的数量要多很多,这样也带来了很多好处没有长尾数据的情况。标注例子如图4.1.2图4.1.2训练模型这里我使用了tf版本ObjectdetectionAPI,这个库包含了时下比较热门的一些网络框架,例如FasterR-CNN、R-FCN和SSD等,这个库因为在经典的沙滩图片上进行测试,以及众多模型的结果,使得目标检测技术在计算机视觉领域收到极大的关注,也带动了各种目标检测框架开始流行。TensorFlowObjectdetectionAPI是在TensorFlow之上构建的开源框架,可轻松构建,训练和部署对象检测模型,此代码库可满足我们的计算机视觉需求,经典的沙滩图片一般作为示例(图4.1.2)。图4.1.2ObjectDetection也包括了许多最新的目标检测任务的网络框架:带有MobileNets的SSD(SingleShotMultiboxDetector)。带有IceptionV2的SSD.带有Resnet101的R-FCN(Region-BasedFullyConvolutionalNetworks)。带有Resnet101的FasterRCNN。带有Inception-Resenetv2的FasterRCNN。等等选用的是第一个MobileNets的SSD首先我们需要下载完整的tensorflowObjectDetectionAPI,使用git命令下载并编译好所需环境gitclone/tensorflow/models.gitmvmodelsgoogle_obj_detectioncdgoogle_obj_detection/researchpythonsetup.pybuildpythonsetup.pyinstallcdslimpipinstall-e.新建一个linux脚本文件以.sh为结尾vimenv_obj_detection.sh添加以下内容(设置显卡以及protoc)cd~/works/google_obj_detection/research/protocobject_detection/protos/*.proto--python_out=.exportPYTHONPATH=$PYTHONPATH:pwd:pwd/slimexportCUDA_VISIBLE_DEVICES=0准备训练数据训练自己的model,下载预训练的模型权重和配置做迁移学习模型权重地址:/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md配置文件地址:/tensorflow/models/tree/master/research/object_detection/samples/configs将模型解压后放到research文件夹内将模型配置文件放到任意位置(需要记住路径)修改模型配置文件num_classes:2class的数量batch_size:8几组数据组成一个序列(根据GPUram设定)fine_tune_checkpoint:../../模型文件路径train_input_reader:{tf_record_input_reader{input_path:../../}}路径填训练集路径eval_input_reader:{tf_record_input_reader{input_path:../../}}路径填训练集路径label_map_path:.../../标签路径修改config后就可训练了cdresearchpythontrain.py--logtostderr--train_dir=training/--pipeline_config_path=paint_on_air_mobilenet/ssd_mobilenet_v2_coco.config训练过程如图4.1.3图4.1.3训练过程训练结果会保存在train_dir指定的路径下模型转换TensorFlowLite转换器用于将TensorFlow模型转换为优化的FlatBuffer格式,以便TensorFlowLite解释器可以使用它们。FlatBuffer是高效的开源跨平台序列化库。它类似于协议缓冲区,区别在于FlatBuffer在访问数据之前不需要对辅助表示进行解析/解包步骤,从而避免了按对象分配内存。FlatBuffers的代码占用空间比协议缓冲区小一个数量级。TensorFlowLite转换器从TensorFlow模型生成TensorFlowLiteFlatBuffer文件(.tflite)。TensorFlowLite是一个可以提供将tf模型到flatbuffer格式的转换工具,转换成flatbuffer格式,tflite就可以使用他们,flatbuffer是一个跨平台搞笑的序列化库,类似于协议缓冲期,但是和协议缓冲期还有缺别,他不会在访问数据之前对其进行解包的操作,从而避免了按对象分配内存,flatbuffers占用的空间也小了一个量级。从而可以节省安卓或ios的本地资产空间,使应用程序更小,总的来说TnsorFlowLite转换器就是从从TensorFlow模型生成TensorFlowLiteFlatBuffer文件(.tflite)的一个转换工具。主要转化过程为图4.3.1图4.3.1主要转化过程通过以下代码进行转换(图4.3.2)图4.3.2Flutter开发语音播放数据准备这里我使用了讯飞语音的api进行tts(根据文字生成语音)。讯飞TTS的声音更接近真实人声,它们也是使用了一些深度学习的技术是语音更真实。讯飞也是一些大型企业的合作提供商。可以让语音技术结合AI变得更完善(如图)。注册讯飞语音开发平台用户获取API如图安装python的包环境cffi==1.12.3gevent==1.4.0greenlet==0.4.1pycparser==2.19six==1.12.0websocket==0.2.1websocket-client==0.56.0运行pythontts_ws_python3_demo.py这个文件的流程主要是上传文字,接受返回的pcm语音数据,转换成wav格式,其中讯飞提供的案例是语音生成文字,为了达到播报的目的,我做了改写,新增了两个功能,根据列表生成语音文件;将pcm格式语音转换成wav格式音频。会在tts_ws_python3_demo.py同级目录下产生文件(如图)图应用搭建Flutter开发深度学习应用应该使用很多插件以达到目的应该在pubspec.yaml中添加以下插件camera:^0.5.7+4tflite:^1.0.5audiofileplayer:^1.1.1assets_audio_player:^1.2.3关于camera这是一个适用于ios和Android的插件,他可以使flutter访问设备的相机。有三个特性:1、在手机上可以实现几乎实时的摄像。2、可以拍照保存到本地设备中3、录视频。4、从Dart添加对图像流的访问。需要的正是第四点功能从Dart添加对图像流的访问安装过程首先,将camera作为依赖项添加到pubspec.yaml文件中。在IOS中在ios/Runner/Info.plist中添加两行:<key>NSCameraUsageDescription</key><string>我可以使用相机吗?</string><key>NSMicrophoneUsageDescription</key><string>我可以使用麦克风吗?</string>在安卓中:在的android/app/build.gradle文件中将最低的Androidsdk版本更改为21(或更高版本)。关于tflite这是一个Flutter插件,他可以提供一个移动终端与tf模型的使用接口,用于在移动设备上进行模型的前向推导,以便之后的前端显示、对象检测等任务。在ios中在Xcode中打开ios/Runner.xcworkspace,单击Runner>Tagets>Runner>构建设置,搜索“将源编译为”,将值更改为Objective-C++在Android中在android/app/build.gradle添加以下设置aaptOptions{noCompress'tflite'noCompress'lite'}将模型文件、语音文件放到flutter的asset文件夹中作为本地资产,在pubspec.yaml中添加本地资产位置assets:-assets/ssd_mobilenet.tflite-assets/ssd_mobilenet.txt-assets/dingding.wav-assets/person.wav-assets/bicycle.wav-assets/car.wav-assets/motorcycle.wav-assets/airplane.wav-assets/bus.wav-assets/train.wav-assets/truck.wav-assets/boat.wav以下部分省略该软件是由4个lib文件组成,main是程序的入口,home是程序的界面第一屏也是一个stack的结构,camera是获取视频流用户预测返回信息的文件,bnd是在camera层上进行绘图的文件,接下来逐一介绍每个文件的内容与作用(如图)。图Main.dart这是一个入口文件,flutter会找到这个文件作为启动首要文件,这个文件会调用home.dart作为主页的显示Home.dart这是整个项目的集合文件,其中有一个按钮,点击之后会弹出一个Stack,上层是画框的显示,下层是视频流(如图)图camera.dart与bnd.dartcamera负责视频流处理,通过camera插件获取视频流。输出的CameraImage类具有4个成员:图像格式,高度,宽度以及最后一个由图像字节组成的平面。classCameraImage{finalImageFormatformat;finalintheight;finalintwidth;finalList<Plane>planes;}由于格式不同,iOS和Android上的输出CameraImage也不同:Android:planes是图像的Y,U和V平面的字节数组的列表。iOS:仅包含一个数组,其中包含图像的RGBA字节。知道格式对于正确解码图像并将其馈送到TensorFlowLite很重要。有了原始位图后,我们可以调整其大小以所需的输入大小,并将RGB值输入到输入张量中。使用tflite进行目标检测任务输入视频流处理过的张量返回,返回的信息下处理音频视频异步其中对视频流的操作如图,其中涉及到异步等操作,视频帧和音频帧存在着异步与等待的关系:图视频流的帧是跟手机的相机有关系的,一直是有输入的,一般来说是每秒25帧,但是其中很多帧都是相同的所以不必帧都进行检测,可以预先设定一个状态(是否在检测),如果是这正在检测就跳过这帧,如果没有在检测就跳过这个帧的处理。在检测中的时候会进行记录上一帧的物体,会对比上一帧与现在的帧的区别,然后通过语音播放出来,播放是异步的操作,其中异步的操作是等待音频播放后才会播放下一个音频内容,视频流处理的帧返回的信息有物体的名称,物体的长宽,位置信息,以及物体的置信度,其中会设定一个置信度的过滤器进行过滤一些置信度比较低的物体信息,还会涉设定一个小目标过滤器,负责过滤小目标,其原理是根据物体长宽处理成面积进行对整个屏幕的面积对比进行过滤。接近警报:为了提示物体的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省黄冈市麻城市顺河镇重点达标名校2026年学业水平考试生物试题含解析
- 2026年食品与饮品行业绿色包装选型指南与合规要求
- 河北省临城县重点中学2026届初三3月质检化学试题试卷含解析
- 日照市重点名校2026年高频错题卷(五)生物试题含解析
- 2026年大班幼儿任务意识与时间观念培养方案
- 2026年612老旧小区“微更新 海绵化”省级示范项目解析
- 2026年阿蒙森海海洋生态系统关键要素调查方案
- 航空业飞行经理面试技巧
- 电力行业技术人才选拔标准
- 人力资源公司招聘顾问的面试技巧及常见问题
- 回南天的安全隐患课件
- 企业销售团队激励方案及案例分析
- 跟单员沟通技巧培训
- 项目经理绩效考核评价模板
- 质量工具柏拉图培训
- 物业项目安全风险评估报告
- 给排水施工流程方案范本
- 圆通速递劳务合同范本
- DB33-T 936-2022 公路桥梁整体顶升技术规程
- 大型场馆预制清水混凝土看台板施工工艺研究
- 2025年旅游摄影服务合同协议
评论
0/150
提交评论