精华内容
下载资源
问答
  • 现有的图像识别系统基本是面向计算机应用,其方案是:采用图像采集卡(或直接网络相机接入)、在PC机上运行图像处理算法来实现。但由于大部分图像识别系统要求数据量大、算法复杂、对实时性要求高,基于PC的应用系统...
  • 基于人体姿态的手语图像识别系统采用了软硬件相结合的方法。硬件部分主要是用于采集手语图像的单目摄像头。软件部分主要是通过ffmpeg对视频图像进行处理,然后在Anaconda下配置Python3.6的开发环境,再结合Cmake编译...

    一、软硬件环境

    基于人体姿态的手语图像识别系统采用了软硬件相结合的方法。硬件部分主要是用于采集手语图像的单目摄像头。软件部分主要是通过ffmpeg对视频图像进行处理,然后在Anaconda下配置Python3.6的开发环境,再结合Cmake编译OpenPose模型,最后在VScode编译器中结合OpenCV中的图像算法,实现了对手语图像识别系统所有程序的编译,通过wxFromBuilder框架整合设计了系统主界面。
    (1) 视频处理工具:ffmpeg-20181115
    (2) 集成开发环境:Microsoft Visual Studio Code、Anaconda3
    (3) 界面设计工具:wxFromBuilder
    (4) 编程语言环境:python3.6

    二、系统功能设计

    一个基于人体姿态研究的手语图像识别系统。根据OpenPose人体姿态开源模型和YOLOv3自训练手部模型检测视频和图像,再把数字特征进行分类器模型预测,将预测结果以文本形式展现出来。

    基于人体姿态的手语图像识别系统是由多模块组成的,主要分为训练模块和识别模块两个部分。

    在这里插入图片描述
    在这里插入图片描述

    1. 视频帧处理

    Python+Opencv2(三)保存视频关键帧

    在这里插入图片描述
    在这里插入图片描述

    2. OpenPose人体姿态识别

    Openpose人体骨骼、手势–静态图像标记及分类(附源码)
    Openpose人体骨骼、手势–静态图像标记及分类2(附源码)

    在这里插入图片描述
    由于仅靠人体姿态4和7关键点不足以识别手部位置,容易误判,因此在最终设计中引入了yolo手部识别。
    在这里插入图片描述

    3. yolov3手部模型训练

    项目结构主要分为两大部分:YOLOv3深度模型训练部分和YOLOv3和OpenPose手语姿态识别部分。

    训练模型思路:
    在这里插入图片描述

    环境:【GPU】win10 (1050Ti)+anaconda3+python3.6+CUDA10.0+tensorflow-gpu2.1.0
    训练模型:【Keras+TensorFlow+Yolo3】一文掌握图像标注、训练、识别(tf2填坑)
    识别:【Keras+TensorFlow+Yolo3】教你如何识别影视剧模型

    在这里插入图片描述

    模型训练参考代码:https://gitee.com/cungudafa/keras-yolo3
    yolo3识别这里参考于:https://github.com/AaronJny/tf2-keras-yolo3

    4. 人体姿态数字特征提取

    识别完整过程思路:
    在这里插入图片描述

    在OpenPose设计中阐述过求解距离和角度的公式及方法,最终因为个体差异每个人的骨骼可能不同,目前优化为距离比(即小臂3-4关键点的距离与脖子长度0-1关键点距离之比)。
    在这里插入图片描述
    基于 keras的yolo3训练部分项目结构如下表所示:

    keras-yolo3训练项目结构:

    名称类型内容
    yolov3.weights配置文件权重文件
    yolov3.cfg配置文件配置文件
    convert.py函数模型格式转换
    train.py函数模型训练
    voc_annotation.py函数voc格式标签
    yolo_annotations.py函数yolo格式标签
    yolo.py函数yolo方法接口
    model_data文件夹参数配置
    nets文件夹yolo网络
    utils文件夹图片加载工具类
    VOCdevkit文件夹VOC格式数据集
    logs文件夹h5训练的模型生成目录

    其中logs文件夹用于存放训练好的模型,VOCdevkit用于存放图片和标注信息。

    model_data文件夹内容:

    名称类型内容
    test.txt文本测试图片信息
    train.txt文本训练图片信息
    val.txt文本训练测试图片信息
    voc_class.txt文本标签样本名称
    yolo_anchors.txt文本先验参数
    yolo_weights.h5模型权重文件

    nets文件夹内容:

    名称类型内容
    darknet53.py函数卷积神经网络结构
    loss.py函数计算图像检测效果
    yolo3.py函数Yolov3网络识别算法

    5. beyes分类识别

    【Sklearn】入门花卉数据集实验–理解朴素贝叶斯分类器

    在这里插入图片描述
    识别部分代码结构:

    名称类型内容
    filesUtils文件夹文件批量处理
    model文件夹模型
    pose文件夹 人体姿态识别相关算法
    ui文件夹界面设计
    yolo3文件夹Yolov3手部识别相关算法
    beyes.py函数分类模型算法
    getKeyFrame.py函数提取视频关键帧
    pose_hand.py函数人姿和手部识别综合接口
    UI.py函数可视化界面
    yolo.py函数手部识别接口
    SaveImg_graphviz.py函数绘制函数关系图

    视频文件处理filesUtils文件夹:

    名称类型内容
    Image_classification.py函数图片分类
    VideoUtils.py函数视频压缩、移动、重命名
    ImgUtils.py函数图片压缩、移动、重命名
    videoConv.bat可执行程序视频批量处理可执行程序

    模型model文件夹:

    文件夹名称类型内容
    pose_cocopose_deploy_linevec.prototxt文本OpenPose人体姿态参数
    -pose_iter_440000.caffemodel模型OpenPose人体姿态模型
    yolov3coco_anchors.txt文本Yolo手部识别先验参数
    voc_classes.txt文本Yolo手部种类
    last1.h5模型Yolo手部识别模型
    train_model.pkl模型朴素贝叶斯分类模型

    基本算法pose和yolov3文件夹:

    文件夹名称类型内容
    posecoco.py函数人体姿态识别算法
    -data_process.py函数坐标信息转数字特征算法
    yolov3model.py函数手部识别算法
    -utils.py函数数据格式处理函数

    三、应用

    预期是通过手机移动端对视频进行采集处理并应用,详见视频

    在这里插入图片描述

    四、总结

    源码源码https://gitee.com/cungudafa/hand-keras-yolo3-recognize

    star三连哦~

    本文采用的是单人的骨骼识别,当然对多人骨骼标记分类是OpenPose的一大亮点,源码中没有扩展,Openpose多人骨骼特征点标记

    视频帧的提取准确性也不够高,扩展衍生为HMM序列,视频动态序列等方法。对于特征提取还可以结合手势动态轨迹特征,能够多维度的描述运动曲线。

    手语识别关键在于手语种类的划分,尤其是中国手语包含5600+词汇,因此NLP自然语言处理融合进来是很有必要的,因此任总而道远,有兴趣的朋友可以试试。

    手语识别不仅为聋哑朋友们日常交流提供方便,更是为人机交互发展做出贡献,有创新意义和价值背景,值得一试哦。


    备注:

    源码会开源放在gitee(目前源码项目有很多笔记过程,也很有价值,需要整理成封装版本,太忙了呀~~不然这个项目还有很多发挥空间)

    模型和视频资料涉及专业学习范畴和多人版权因素,未征得所有人授权,暂不提供

    相关学习内容还可以私聊,闲暇时可以给出经验指导意见。

    展开全文
  • 图像识别技术原理和神经网络的图像识别技术

    万次阅读 多人点赞 2019-03-03 19:44:58
    图像识别技术是信息时代的一门...简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用...

    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用广泛,人类的生活将无法离开图像识别技术,研究图像识别技术具有重大意义。

    1图像识别技术的引入

    图像识别是人工智能的一个重要领域。图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。图像识别,顾名思义,就是对图像做出各种处理、分析,最终识别我们所要研究的目标。今天所指的图像识别并不仅仅是用人类的肉眼,而是借助计算机技术进行识别。虽然人类的识别能力很强大,但是对于高速发展的社会,人类自身识别能力已经满足不了我们的需求,于是就产生了基于计算机的图像识别技术。这就像人类研究生物细胞,完全靠肉眼观察细胞是不现实的,这样自然就产生了显微镜等用于精确观测的仪器。通常一个领域有固有技术无法解决的需求时,就会产生相应的新技术。图像识别技术也是如此,此技术的产生就是为了让计算机代替人类去处理大量的物理信息,解决人类无法识别或者识别率特别低的信息。

    1.1图像识别技术原理

    其实,图像识别技术背后的原理并不是很难,只是其要处理的信息比较繁琐。计算机的任何处理技术都不是凭空产生的,它都是学者们从生活实践中得到启发而利用程序将其模拟实现的。计算机的图像识别技术和人类的图像识别在原理上并没有本质的区别,只是机器缺少人类在感觉与视觉差上的影响罢了。人类的图像识别也不单单是凭借整个图像存储在脑海中的记忆来识别的,我们识别图像都是依靠图像所具有的本身特征而先将这些图像分了类,然后通过各个类别所具有的特征将图像识别出来的,只是很多时候我们没有意识到这一点。当看到一张图片时,我们的大脑会迅速感应到是否见过此图片或与其相似的图片。其实在“看到”与“感应到”的中间经历了一个迅速识别过程,这个识别的过程和搜索有些类似。在这个过程中,我们的大脑会根据存储记忆中已经分好的类别进行识别,查看是否有与该图像具有相同或类似特征的存储记忆,从而识别出是否见过该图像。机器的图像识别技术也是如此,通过分类并提取重要特征而排除多余的信息来识别图像。机器所提取出的这些特征有时会非常明显,有时又是很普通,这在很大的程度上影响了机器识别的速率。总之,在计算机的视觉识别中,图像的内容通常是用图像特征进行描述。

    1.2模式识别

    模式识别是人工智能和信息科学的重要组成部分。模式识别是指对表示事物或现象的不同形式的信息做分析和处理从而得到一个对事物或现象做出描述、辨认和分类等的过程。

    计算机的图像识别技术就是模拟人类的图像识别过程。在图像识别的过程中进行模式识别是必不可少的。模式识别原本是人类的一项基本智能。但随着计算机的发展和人工智能的兴起,人类本身的模式识别已经满足不了生活的需要,于是人类就希望用计算机来代替或扩展人类的部分脑力劳动。这样计算机的模式识别就产生了。简单地说,模式识别就是对数据进行分类,它是一门与数学紧密结合的科学,其中所用的思想大部分是概率与统计。模式识别主要分为三种:统计模式识别、句法模式识别、模糊模式识别。

    2图像识别技术的过程

    既然计算机的图像识别技术与人类的图像识别原理相同,那它们的过程也是大同小异的。图像识别技术的过程分以下几步:信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。

    信息的获取是指通过传感器,将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息。

    预处理主要是指图像处理中的去噪、平滑、变换等的操作,从而加强图像的重要特征。

    特征抽取和选择是指在模式识别中,需要进行特征的抽取和选择。简单的理解就是我们所研究的图像是各式各样的,如果要利用某种方法将它们区分开,就要通过这些图像所具有的本身特征来识别,而获取这些特征的过程就是特征抽取。在特征抽取中所得到的特征也许对此次识别并不都是有用的,这个时候就要提取有用的特征,这就是特征的选择。特征抽取和选择在图像识别过程中是非常关键的技术之一,所以对这一步的理解是图像识别的重点。

    分类器设计是指通过训练而得到一种识别规则,通过此识别规则可以得到一种特征分类,使图像识别技术能够得到高识别率。分类决策是指在特征空间中对被识别对象进行分类,从而更好地识别所研究的对象具体属于哪一类。

    3图像识别技术的分析

    随着计算机技术的迅速发展和科技的不断进步,图像识别技术已经在众多领域中得到了应用。2015年2月15日新浪科技发布一条新闻:“微软最近公布了一篇关于图像识别的研究论文,在一项图像识别的基准测试中,电脑系统识别能力已经超越了人类。人类在归类数据库Image Net中的图像识别错误率为5.1%,而微软研究小组的这个深度学习系统可以达到4.94%的错误率。”从这则新闻中我们可以看出图像识别技术在图像识别方面已经有要超越人类的图像识别能力的趋势。这也说明未来图像识别技术有更大的研究意义与潜力。而且,计算机在很多方面确实具有人类所无法超越的优势,也正是因为这样,图像识别技术才能为人类社会带来更多的应用。

    3.1神经网络的图像识别技术

    神经网络图像识别技术是一种比较新型的图像识别技术,是在传统的图像识别方法和基础上融合神经网络算法的一种图像识别方法。这里的神经网络是指人工神经网络,也就是说这种神经网络并不是动物本身所具有的真正的神经网络,而是人类模仿动物神经网络后人工生成的。在神经网络图像识别技术中,遗传算法与BP网络相融合的神经网络图像识别模型是非常经典的,在很多领域都有它的应用。在图像识别系统中利用神经网络系统,一般会先提取图像的特征,再利用图像所具有的特征映射到神经网络进行图像识别分类。以汽车拍照自动识别技术为例,当汽车通过的时候,汽车自身具有的检测设备会有所感应。此时检测设备就会启用图像采集装置来获取汽车正反面的图像。获取了图像后必须将图像上传到计算机进行保存以便识别。最后车牌定位模块就会提取车牌信息,对车牌上的字符进行识别并显示最终的结果。在对车牌上的字符进行识别的过程中就用到了基于模板匹配算法和基于人工神经网络算法。
      3.2非线性降维的图像识别技术

    计算机的图像识别技术是一个异常高维的识别技术。不管图像本身的分辨率如何,其产生的数据经常是多维性的,这给计算机的识别带来了非常大的困难。想让计算机具有高效地识别能力,最直接有效的方法就是降维。降维分为线性降维和非线性降维。例如主成分分析(PCA)和线性奇异分析(LDA)等就是常见的线性降维方法,它们的特点是简单、易于理解。但是通过线性降维处理的是整体的数据集合,所求的是整个数据集合的最优低维投影。经过验证,这种线性的降维策略计算复杂度高而且占用相对较多的时间和空间,因此就产生了基于非线性降维的图像识别技术,它是一种极其有效的非线性特征提取方法。此技术可以发现图像的非线性结构而且可以在不破坏其本征结构的基础上对其进行降维,使计算机的图像识别在尽量低的维度上进行,这样就提高了识别速率。例如人脸图像识别系统所需的维数通常很高,其复杂度之高对计算机来说无疑是巨大的“灾难”。由于在高维度空间中人脸图像的不均匀分布,使得人类可以通过非线性降维技术来得到分布紧凑的人脸图像,从而提高人脸识别技术的高效性。

    3.3图像识别技术的应用及前景

    计算机的图像识别技术在公共安全、生物、工业、农业、交通、医疗等很多领域都有应用。例如交通方面的车牌识别系统;公共安全方面的人脸识别技术、指纹识别技术;农业方面的种子识别技术、食品品质检测技术;医学方面的心电图识别技术等。随着计算机技术的不断发展,图像识别技术也在不断地优化,其算法也在不断地改进。图像是人类获取和交换信息的主要来源,因此与图像相关的图像识别技术必定也是未来的研究重点。以后计算机的图像识别技术很有可能在更多的领域崭露头角,它的应用前景也是不可限量的,人类的生活也将更加离不开图像识别技术。

    图像识别技术虽然是刚兴起的技术,但其应用已是相当广泛。并且,图像识别技术也在不断地成长,随着科技的不断进步,人类对图像识别技术的认识也会更加深刻。未来图像识别技术将会更加强大,更加智能地出现在我们的生活中,为人类社会的更多领域带来重大的应用。在21世纪这个信息化的时代,我们无法想象离开了图像识别技术以后我们的生活会变成什么样。图像识别技术是人类现在以及未来生活必不可少的一项技术。
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
      AI可以识别图像,但它能理解标题吗?
    http://www.duozhishidai.com/article-10635-1.html
      图像识别经历了哪几个阶段,主要应用在哪些领域?
    http://www.duozhishidai.com/article-6461-1.html
      图像识别技术是什么,应用于智能家居哪些领域
    http://www.duozhishidai.com/article-133-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 同德图像识别系统作为模式识别核心技术之一,基于图像特征识别的与大小、位置、旋转无关的图像检索技术,可广泛用于移动图像检索系统,频频检索系统,增强现实(AR)系统等应用领域。 目前该项技术已经在公安部录像...
  • 导语:WolfgangBeyer的一篇优秀的博文,详细介绍了如何使TensorFlow搭建一个简单的图像识别系统。 本篇主要对该教程实践过程做了简单的整理。 实践目标 学习Tensorflow编程思想 实现简单的机器学习系统,...

    导语:WolfgangBeyer的一篇优秀的博文,详细介绍了如何使TensorFlow搭建一个简单的图像识别系统。
    本篇主要对该教程实践过程做了简单的整理。

    实践目标

    • 学习Tensorflow编程思想
    • 实现简单的机器学习系统,识别图像并打上正确的标签

    数据集:标准的CIFAR-10数据集

    • 10个不同的分类,每类包含6000幅图片。
    • 规格:32x32像素。

    机器学习框架流程

    首先,定义一个通用的数学模型将输入图像转换为输出标签
    这个模型的实际输出不仅仅依赖于图像本身,还依赖模型内建的参数。这些参数并不是由我们提供,而是由计算机通过学习获得

    这个过程可以被理解为一个参数的优化问题,主要步骤如下:

    1. 定义一个模型并提供初始的参数值
    2. 向模型输入图像数据集和已知的正确标签进行训练
    3. 模型重复校验,训练数据,持续调整参数值
    4. 直至找到合适的参数使模型输出尽可能多的正确结果
    5. 当训练完成,找到最优(接近最优的模型参数),该模型即可用于图像集以外的图像分类。

    上述学习过程即监督学习—输入包括数据以及标签

    工具及环境

    注意:cifar-10-batches-py需要解压到python源代码的目录下,其余工具及环境自行配置

    Tensorflow源码分析

    https://github.com/wolfib/image-classification-CIFAR10-tf

    代码分析过程中主要通过代码+注释的形式,请不要忽略注释。

    定义Tensorflow图

    在这个过程中不执行任何操作

    1. 导入需要的包

    # 为了python2和python3的兼容性
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    import numpy as np
    import tensorflow as tf
    import time
    import data_helpers  #包内函数主要用于加载和处理数据集的函数
    

    读取数据部分的函数单独放在data_helper.py文件中,负责读取包含数据集的文件,并把数据放入一个方便我们操作的数据结构中。

    2. 准备数据集

    data_sets = data_helpers.load_data() 
    

    load_data()将数据集进行处理,返回一个dictionary类型数据,便于训练时喂养模型使用:

    • images_train:将训练集转换为50000*3072的数组,其中3072=32像素×32像素×3个颜色通道rgb
    • lables_train:训练集的50000个标签(每个数字从0到9代表图像训练集的10个分类)
    • images_test:测试集(100003232*3)
    • lables_test:测试集的10000个标签
    • classes:10个文本标签,将数字转换成文字

    值得注意的是,load_data()函数将60000幅图像分为训练集和测试集。训练集包含50000幅图像,用于训练我们的模型。测试集包含1000幅图像,用于训练完成后检验模型的性能。

    3. 定义训练恒参

    # Parameter definitions
    batch_size = 100 #将数据集随机分批喂给模型,每批100个数据
    learning_rate = 0.005 #梯度优化时的学习速率
    max_steps = 1000 #训练次数
    

    4.定义模型内建参数

    # Define variables (these are the values we want to optimize)
    weights = tf.Variable(tf.zeros([3072, 10])) #3072*10的零矩阵
    biases = tf.Variable(tf.zeros([10])) #大小为10的列表
    

    内建参数就是我们在训练过程中想要优化的参数。我们将每幅图像以3072个浮点数(size=3027的列表)表示,作为输入;最终结果以10个浮点数(size=10的列表)表示每个种类的得分。

    5.定义placeholder用于接收数据集

    images_placeholder = tf.placeholder(tf.float32, shape=[None, 3072])
    labels_placeholder = tf.placeholder(tf.int64, shape=[None])
    

    placeholder主要在需要运行时给节点输入数据时使用。在这里相当于提供了一个接收训练数据输入的接口,每次训练需要输入数据时只需要使用feed_dict={images_placeholder: , labels_placeholder: }即可。

    6.定义用于描述模型预测结果的表达式

    logits = tf.matmul(images_placeholder, weights) + biases
    

    7.定义预测结果与真实值之间的损失量表达式

    loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,
      labels=labels_placeholder)) #tf.reduce_mean求损失值均值,softmax函数将logits转化为概率值,能表示特征的输出。
    

    将预测值与正确的分类标签进行比较,损失越小表示预测值越接近正确标签。

    8.定义对损失值做梯度下降优化的动作

    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
    

    9.定义计算准确率的表达式

    
    #tf.argmax(x,1)按行找,找到每一行中最大数值的下标,返回结果是一个列表
    #correct_prediction是一个布尔型
    correct_prediction = tf.equal(tf.argmax(logits, 1), labels_placeholder)
    
    #tf.cast(x,dtype)将x转换为dtype数据格式
    #计算平均准确度/平均分
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    

    执行Tensorflow图

    将操作的执行放在Session会话中进行。
    1.对所有变量完成初始化

    sess.run(tf.global_variables_initializer())
    

    2.循环迭代,每次随机抽取一批数据喂养模型

    for i in range(max_steps):
    
        # Generate input data batch
        indices = np.random.choice(data_sets['images_train'].shape[0], batch_size)
        images_batch = data_sets['images_train'][indices]
        labels_batch = data_sets['labels_train'][indices]
    
        # 每100次迭代,对模型训练数据批的当前精确率进行检查。直接调用先前定义的精确率操作来完成。
        if i % 100 == 0:
          train_accuracy = sess.run(accuracy, feed_dict={
            images_placeholder: images_batch, labels_placeholder: labels_batch})
          print('Step {:5d}: training accuracy {:g}'.format(i, train_accuracy))
    
        # Perform a single training step
        sess.run(train_step, feed_dict={images_placeholder: images_batch,
          labels_placeholder: labels_batch})
    

    每次训练随机抽取训练数据中的一批图像。每训练一批数据都会更新一遍模型的参数,因此批的大小代表了参数更新的频率。
    批的大小需要选择相对合适的值,如果太大,每次迭代参数的更新都需要大量的计算;如果太小,会造成高频率的参数更新,但更有可能向错误的方向频繁修正。
    在这个模型中,每次训练的数据大小为0-batch_size之间随机指定的一个值。

    3.训练完成后,使用测试数据集测试模型效果

    test_accuracy = sess.run(accuracy, feed_dict={
        images_placeholder: data_sets['images_test'],
        labels_placeholder: data_sets['labels_test']})
      print('Test accuracy {:g}'.format(test_accuracy))
    

    模型评估总结

    在命令行模式中,python softmax.py运行softmax.py脚本,通过打印的training accuracy,我们可以看到两点:

    1. 在这个测试集中训练模型的估计精度为31%左右。相比较随机猜测,该模型显然有一定的性能优势;但总的来说,该模型还比较低级,因为它只单独检测每个像素的颜色,对具体的图像比如线和形状等完全没有考虑。
    2. 对当前模型的性能而言,即使增加迭代训练次数也并不能改善模型的准确率。观察结果发现,训练的准确率随着迭代次数的增加并不是稳定上升,而是在一定范围内波动,说明当前数据量已经达到了模型的极限。
    展开全文
  • 上一篇文章是一篇关于使用TensorFlow和R语言的一个图像识别,今天就用shiny将它包装成一个小程序。shiny程序分为两个部分,一个是ui.R,一个是server.R。ui.R实现的是前端,server.R实现的是服务器端。我的ui.R是在...

    上一篇文章是一篇关于使用TensorFlow和R语言的一个图像识别,今天就用shiny将它包装成一个小程序。

    shiny程序分为两个部分,一个是ui.R,一个是server.R。ui.R实现的是前端,server.R实现的是服务器端。


    我的ui.R是在Windows系统上面写的,准备在写server.R的时候再在Linux上面写,因为总感觉在Windows下方便许多。为了使界面更加美观,我在ui.R里面也加了一点点的CSS,效果如下,感觉界面也差不多。


    Clipboard Image.png


    结果在Linux系统不知道怎么回事,CSS上面的背景图片加载不上了,底色也全是白色的,所以只能换成把背景改成单一色。


    Clipboard Image.png


    首先来大概演示一下效果,点击左边的点击选择图片,就会出现一个对话框再选择一张照片。这里我选择一张香蕉的照片来演示一下。这里识别时间多则20来秒,少则7,8秒。

    Clipboard Image.png

    运行结果如下图:


    Clipboard Image.png


    使用shiny可以使用很少代码做出一个非常棒的web项目。首先跟大家分享一下ui.R。

    1. ui.R

    library(shiny)# Define UI for application that draws a histogramshinyUI(
    
      fluidPage(
        includeCSS("style.css"),    # Application title
        div(style="text-align:center",headerPanel("图像识别")),    # Sidebar with a slider input for number of bins 
        sidebarLayout(
          sidebarPanel(
            fileInput("image",label="上传图片",accept=c(".png",".jpg"),buttonLabel="点击选择图片", placeholder ="未选择")
          ),      # Show a plot of the generated distribution
          mainPanel(
            plotOutput("distPlot")
          )
        )
      )
    )

    2. Linux系统css代码

    <head>
    <style>
    h{}
    body{
        background-color: #225E79;
    }
    </style>
    </head>

    3. Windows系统css代码

    <head>
    <style>
    h1 {
    }
    body {
      background-image: url(back.jpg); 
        background-size: 100% 100% auto;
        position:absolute; 
    background-repeat: no-repeat; 
    }
    </style>
    </head>

    back.jpg就是背景图片。

    4. server.R

    #
    # This is the server logic of a Shiny web application. You can run the 
    # application by clicking 'Run App' above.
    #
    # Find out more about building applications with Shiny here:
    # 
    #    http://shiny.rstudio.com/
    #
    
    library(shiny)
    library(tensorflow) #加载TensorFlow包
    library(magrittr) #数据处理包,可以使用管道函数
    library(jpeg)
    library(readr)
    library(ggplot2)
    library(grid) #图片处理的一个包,主要控制输出图形的大的外观和一些细节东西的排列
    names = read_delim("imagenet_classes.txt", "\t", escape_double = FALSE, trim_ws = TRUE,col_names = FALSE)
    slim= tf$contrib$slim #slim是一个使构建,训练,评估神经网络变得简单的库。
    # slim提供了很多计算机视觉方面的著名模型(VGG, AlexNet等),我们不仅可以直接使用,甚至能以各种方式进行扩展。
    shinyServer(
      function(input, output) {
     output$distPlot<-renderPlot(    {      inImages<-input$image      if(is.null(inImages))        return(NULL)      tf$reset_default_graph() #在每次运行中清除当前图形,以避免变量重复      #Session会话 张量的具体值和操作,会话关闭时,张量的任何具体值都会丢失      images = tf$placeholder(tf$float32, shape(NULL, NULL, NULL, 3))# 创建占位符      imgs_scaled = tf$image$resize_images(images, shape(224,224)) #设置图片大小      # slim$conv2d自带卷积功能+激励函数      fc8 = slim$conv2d(imgs_scaled, 64, shape(3,3), scope='vgg_16/conv1/conv1_1') %>%        slim$conv2d(64, shape(3,3), scope='vgg_16/conv1/conv1_2')  %>%        slim$max_pool2d( shape(2, 2), scope='vgg_16/pool1')  %>% #池化操作        slim$conv2d(128, shape(3,3), scope='vgg_16/conv2/conv2_1')  %>%        slim$conv2d(128, shape(3,3), scope='vgg_16/conv2/conv2_2')  %>%        slim$max_pool2d( shape(2, 2), scope='vgg_16/pool2')  %>%        slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_1')  %>%        slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_2')  %>%        slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_3')  %>%        slim$max_pool2d(shape(2, 2), scope='vgg_16/pool3')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_1')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_2')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_3')  %>%        slim$max_pool2d(shape(2, 2), scope='vgg_16/pool4')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_1')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_2')  %>%        slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_3')  %>%        slim$max_pool2d(shape(2, 2), scope='vgg_16/pool5')  %>%        slim$conv2d(4096, shape(7, 7), padding='VALID', scope='vgg_16/fc6')  %>%        slim$conv2d(4096, shape(1, 1), scope='vgg_16/fc7') %>%        # Setting the activation_fn=NULL does not work, so we get a ReLU        slim$conv2d(1000, shape(1, 1), scope='vgg_16/fc8')  %>%        tf$squeeze(shape(1, 2), name='vgg_16/fc8/squeezed')      tf$summary$FileWriter('/tmp/dumm/vgg16', tf$get_default_graph())$close() #保存在/tmp/dumm/vgg16目录下      restorer = tf$train$Saver()#创建一个Saver 来管理模型中的所有变量。      sess = tf$Session()      restorer$restore(sess, 'vgg_16.ckpt')#复原模型      img1<-readJPEG(inImages$datapath)      d=dim(img1)  #获取img1的维度      imgs =array(255*img1,dim = c(1,d[1],d[2],d[3]))      fc8_vals=sess$run(fc8,dict(images=imgs))      fc8_vals[1:5]      probs=exp(fc8_vals)/sum(exp(fc8_vals))      idx=sort.int(fc8_vals,index.return = TRUE,decreasing = TRUE)$ix[1:5]      g = rasterGrob(img1, interpolate=TRUE)  #图形进行栅格化      text = ""      for (id in idx) {        text = paste0(text, names[id,][[1]], " ", round(probs[id],5), "\n")      }      #annotate 添加文本注释      #annotation_custom 可以添加各种图形元素到ggplot图中      ggplot(data.frame(d=1:3)) + annotation_custom(g) +        annotate('text',x=0.05,y=0.05,label=text, size=7, hjust = 0, vjust=0, color='blue') + xlim(0,1) + ylim(0,1)    }  ) })

    使用shiny就这么简简单单的搭建一个系统处理,如果对网页编程懂的话还可以把界面做的更炫一些。

    转载请注明:

    作者:王亨

    公众号:跟着菜鸟一起学R语言

    原文链接:http://blog.csdn.net/wzgl__wh


    展开全文
  • VB图像识别系统(附源代码)

    热门讨论 2009-06-20 22:59:20
    具有学习功能的VB数字识别系统(附源代码)
  • 通过调研分析,我们发现尽管目前市场上已出现RFID芯片、碗盘颜色的智能识别方式,但仍存在成本高、灵活度低等问题,菜品图像识别相较于它们有着巨大优势。 与此同时,以深度学习为代表的人工智能技术飞速发展。与...
  • 自动识别戴口罩和未戴口罩的人
  • 基于机器视觉的混凝土裂纹图像识别系统
  • labVIEW图像识别

    2015-12-13 21:24:11
    基于labview的图像识别VI
  • 主要介绍如何使用python搭建:一个基于深度残差网络(ResNet)的图像识别垃圾分类系统
  • 图像识别系统源代码神经网络实现

    热门讨论 2009-09-09 19:53:05
    图像识别系统源代码,采用BP神经网络实现,好用,支持换肤,界面漂亮!
  • 这个程序可以识别出图片中的特定水果,是基于matlab 换一个原图的话也一样可以识别途中的某些物体 试过很好用
  • 图像识别的原理、过程、应用前景

    万次阅读 多人点赞 2019-02-01 15:03:13
    图像识别的原理、过程、应用前景1、图像识别技术的引入1.1图像识别技术原理1.2模式识别2、图像识别技术的过程3、图像识别技术的分析3.1神经网络的图像识别技术3.2非线性降维的图像识别技术3.3 图像识别技术的应用及...
  • [转] http://www.leiphone.com/news/201701/Y4uyEktkkwb5YhJM.html ... ...导语:这是Wolfgang Beyer的一篇博文,详细介绍了如何使用TensorFlow搭建一个简单的图像识别系统。本篇主要介绍图像识别
  • 人工智能-图像识别

    万次阅读 2019-04-18 15:23:38
    图像识别技术是信息时代的一门重要的...简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技...
  • 文章目录前言一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构最后如何获取源码和数据集 前言 如今,垃圾分类已成为社会热点话题。其实在2019年4月26日,我国住房和城乡建设部等部门就发布了《关于在全国...
  • 基于卷积神经网络的食物图像识别,提供数据集下载,使用python、TensorFlow等等。
  • 图像识别算法

    万次阅读 多人点赞 2019-08-15 17:36:40
    图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们...
  • 在人类图像识别系统中,对复杂图像的识别往往要通过不同层次的信息加工才能实现。图像识别技术是立体视觉、运动分析、数据融合等实用技术的基础,在导航、地图与地形配准、自然资源分析、天气预报、环境监测、生理...
  • 图像识别技术的应用及发展趋势

    万次阅读 2019-03-22 09:48:04
    图像识别技术的背景   移动互联网、智能手机以及社交网络的发展带来了海量图片信息,根据BI五月份的文章,Instagram每天图片上传量约为6000万张;今年2月份WhatsApp每天的图片发送量为5亿张;国内的微信朋友圈也...
  • Python构建图像分类识别

    万次阅读 2018-06-13 08:44:26
    Python构建图像识别系统机器学习用在图像识别是非常有趣的话题。我们可以利用OpenCV强大的功能结合机器学习算法实现图像识别系统。首先,输入若干图像,加入分类标记。利用向量量化方法将特征点进行聚类,并得出...
  • 图像识别的工作原理是什么?商业上如何使用它?

    千次阅读 多人点赞 2020-01-09 17:02:36
    图像识别市场估计将从2016年的159.5亿美元增长到2021年的389.2亿美元,在2016年至2021年之间的复合年增长率为19.5%。机器学习和高带宽数据服务的使用进步推动了这项技术的发展。 。电子商务,汽车,医疗保健和游戏...
  • java图像识别

    万次阅读 2018-06-05 12:20:07
    工商图片文字提取涉及到计算机视觉处理,也就是图像识别。本来是想用python写的,会方便点,但是那时候看项目的语言要求,好像不能使用python,只能用java写咯。java图像处理这方面还真不如python。由于底层涉及太多...
  • 图像识别

    千次阅读 2019-07-07 14:38:42
    图像识别主要用到了两个第三方的iOS框架:OpenCV和TesseractOCR,OpenCV用来做图像处理,定位到身份证号码的区域,TesseractOCR则是对定位到的区域内的内容进行识别。 OpenCV中的一些简单的处理图像的方法:灰度...
  • 机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)| 干货
  • 基于fpga的图像识别与跟踪系统的说明文档,对基于fpga的图像识别与跟踪系统的设计做了比较详尽的说明。
  • 人工智能 图片识别 图像识别

    万次阅读 2018-02-26 18:38:02
    图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。一般工业使用中,采用工业相机拍摄图片,然后再利用软件根据图片灰阶差做进一步识别处理。另外在地理学中指将遥感图像...
  • AI中的图像识别技术的原理及过程

    千次阅读 2020-05-07 10:27:30
    伴随着图像处理技术的飞速发展,推动了图像识别技术的产生和发展,并逐渐成为人工智能领域中重要的组成部分,并广泛地运用于面部识别、指纹识别、医疗诊断等等领域中,发挥重要作用。 这也给学生思考课题给了更多的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,051
精华内容 74,420
关键字:

图像识别系统