资源描述
中软卓越杯安卓软件应用创意大赛基于移动设备的饮食健康应用-食拍技术路线与实现方案指导老师:张修军团队名:21克青春队员:蒋开强,刘雪超,肖梦坦,周瑜,陈永杰时间:2013-6-2533版权所有:中软卓越杯安卓软件应用创意大赛【成都学院21克青春参赛队】版本目录:版本号日期描述作者Version 1.02013-7-4初步文档完成周瑜Version 1.12013-7-20技术模块完善蒋开强Version 1.22013-7-29文档完善周瑜目录1.食拍平台架构42.Android端52.1 Android端技术路线52.1.1界面展示和用户交互52.1.2图片处理52.1.3条形码处理62.1.3异步处理技术72.2 Android端实现方案82.2.1用户数据的分析82.2.2系统计划机理113.WEB端技术203.1 WEB端技术路线203.1.1 MVC模式203.1.2WEB架构213.2WEB端实现方案243.2.1通信协议243.2.2数据处理253.2.3数据调用基本过程264.数据库274.1 数据库技术路线274.1 数据库实现方案284.1.1 数据库的连接284.1.2 解决数据量大的问题294.1.3 备份与恢复30 第四届中国大学生服务外包创新创业大赛1. 食拍平台架构食拍采用基于移动平台以及B/S系统架构。食拍分为三层:界面服务层、业务逻辑服务层、数据库访问层,彼此之间通过互联网标准通讯。 图1-1 食拍系统架构图如图1-1所示l 客户端:用户通过手机客户端对食物和袋装食品进行拍照扫描,采集食物图片和条形码,并进行图片的处理提取特征值和分析出条形码通过http协议传输到服务器,并且与服务器上数据进行匹配。l 并将数据上传到服务器,用户可以在浏览器上查看自己的信息以及结合自身的情况查看排行榜,健康商城等。l 服务器:根据客户端上传的数据查询数据,并反馈给用户。同时记录用户的个人信息以及平时用户的产生的数据,进行统计分析。给出用户合理健康科学的饮食建议。l 数据库:存储菜和食品的数据,同时保存用户的信息数据,以及系统日志。2. Android端2.1 Android端技术路线2.1.1界面展示和用户交互 l Activity:控制活动的,包括对视图进行管理。l View:显示界面,实现人机交互l Notification:提供了一种一致的和非打断性的机制来通知用户。l Service:让应用程序可以在程序间共享数据。l Net:提供网络连接,与服务端进行数据交换2.1.2图片处理 Android端我们把用户的拍摄的图片进行处理,我们采用Gray World和 灰度共生矩阵 图片识别的核心算法对图片提取颜色和纹理特征值,通过特征值的融合提高图片识别的准确率,同时把图片保存在用户本地,方便用户收藏和查看。为了保证应用的流畅度,我们将对图片进行压缩处理,并保持图片的完整度。下面展示图片识别流程:图2-1像颜色信息获取与比较过程 2.1.3条形码处理为了更大化的满足用户的需求和增加用户的体验感,我对用户平时吃的零食等袋装食物进行条形码扫描,得到袋装食物的成分信息。每一个袋装食物都有自己的唯一标示的条形码,通过调用手机的摄像头对条形码进行扫描,识别条形码,然后将识别到的条形码放到数据库匹配,找到对应食物。2.1.3异步处理技术图2-2异步处理技术我们系统中很多地方都需要向服务器请求数据,或者进行图片处理时候由于过程比较复杂和流程比较长这时候系统将一直等待响应,因此我们通过Service android的后台服务来进行,用户在这个时间间隔里可以进行其他的操作这些都需要异步处理技术以提供用户的体现,和增加系统的效率。同时提高用户的体验感。2.2 Android端实现方案图2-3 数据采集流程手机端主要进行拍照和扫条形码,对图片的处理分析,提取特征值。通过Http协议将处理数据发送到服务器端,有服务器对用户数据进行处理,并且对数据库进行操作,获取数据返回到客户端,展示给用户。2.2.1用户数据的分析一切软件用户至上,在应用中如:统计、提醒、推荐、计划等多个地方都与用户的信息、食物的成分、密切相关。同时为了系统中数据的科学性和真实性,我们对用户的数据进行科学的分析。2.2.1.1用户信息分析:基本注册信息包含:性别(男为xy,女为xx)、生日(及年龄N岁)、身高(h)、体重(M)、运动量(由下面列出选择表)。1)BMI值计算:其中M=体重 单位:千克(kg)h=身高 单位:米 (M)根据世界卫生组织定下的标准,亚洲人的BMI评判标准(表1)类型男女偏轻203435注:特别要强调的是,不是每个人都适用BMI 的,如果你属于有以下的情况那么BMI的指数对你不适用:1. 未满18岁。2. 是运动员。3. 正在做重量训练。4. 怀孕或哺乳中。5. 身体虚弱或久坐不动的老人。根据未成年人的特征,我们特别查找了相关数据,归纳计算出未成年人BMI值判断表,详细请见附录一,针对这几种不同情况下,我们后面会采用不同的最佳预热算求取最佳值。717岁儿童青少年超重肥胖判断标准(BMI切点,kg/m2)(表2)性别年龄超重肥胖女718.9BMI=17.2BMI=18.9819.9BMI=18.1BMI=19.9921.0BMI=19.0BMI=21.01022.1BMI=20.0BMI=22.11123.3BMI=21.1BMI=23.31224.5BMI=21.9BMI=24.51325.6BMI=22.6BMI=25.61426.3BMI=23.0BMI=26.31526.9BMI=23.4BMI=26.91627.4BMI=23.7BMI=27.41727.7BMI=23.8BMI=27.7男719.2BMI=17.4BMI=19.2820.3BMI=18.1BMI=20.3921.4BMI=18.9BMI=21.41022.5BMI=19.6BMI=22.51123.6BMI=20.3BMI=23.61224.7BMI=21.0BMI=24.71325.7BMI=21.9BMI=25.71426.4BMI=22.6BMI=26.41526.9BMI=23.1BMI=26.91627.4BMI=23.5BMI=27.41727.8BMI=23.8BMI=27.82.2.1.2运动量的判断:G1:长时间坐在办公室、教室里、很少运动或是完全没有运动的人G2:偶尔会运动或散步、逛街、踏青等每周大约少量运动1-3次的人G3:有持续运动的习惯,或是会上健身房,每周运动3-5次的人G4:热爱运动,每周运动6-7次,或是工作量相当大的人G5:工作或生活作息需要大量劳动,相当消耗能量的人 由系统提供出上述5种状态,由用户根据自身情况,选择不同运动量。该值为后面最佳预热计算提供基础。2.2.2系统计划机理2.2.2.1最佳热量预算(Z)最佳热量预算是为每个人量身订制的最佳每日所需食物热量摄入值。既能保证摄入热量值满足身体所需,又能帮助用户更好的控制摄入量。根据热量平衡原理可知:SQ(摄取量)XH时,M处于上升趋势;SQ=XH时,M保持不变。而SQ=XS(饮食摄取量)消耗热量=基础代谢+身体活动总消耗量+食物热效应转化为数学公式:XH=BMR+SH+SR。2.2.2.1.1基础代谢基代谢率(BMR)是指人体在非活动状态下,维持生命所需的最低能量。 这些能量主要用于维持人体各器官的机能,如呼吸、心跳、氧气运送、腺体分泌、排泄等等这些就被称为基础代谢率BMR。基础代谢率对减肥有非常大的影响,每天适量的运动有助于提高身体的基础代谢率,而极端节食会降低人的基础代谢率。通过性别,年龄,身高和体重能粗略计算基础代谢率。基础代谢率BMR计算公式: 女性=655 + (9.6 x 体重) + (1.7 x 身高) - (4.7 x 年龄) 男性=66 + (13.7 x 体重) + (5.0 x 身高) - (6.8 x 2.2.2.2身体活动总消耗(SH)我们每天从起床张开眼睛那一刻,身体就会开始燃烧能量,包括你刷牙洗脸、走路去搭公车、坐地铁、应付一天上班上课的精力等等,都会消耗你的卡路里能量,而这些最基本的热量。每个人的每日所需热量,会因为工作类型以及生活习惯的不同而不同,因此,想要知道自己的所需热量,就要先根据你的生活习惯选出适合的计算方式。其中G1=0.2;G2=0.3;G3=0.5;G4=0.07;G5=0.9。身体活动总消耗计算公式:身体活动总消耗=基础代谢率*G+运动额外消耗量SH=BMR*G+Y各类运动每小时消耗能量表(表3)单位:大卡/小时单位:大卡/小时午睡48跳有氧运动252看电影66慢走255看电视72骑马276工作76打桌球300开车82跳舞300念书88体能训练300逛街110健身减肥操300插花114打网球352洗衣服114滑雪354烫衣服120仰卧起坐432遛狗130跳绳448洗碗136打拳450泡澡168爬楼梯480买东西180快走555骑脚踏车184慢跑655打高尔夫球186快跑700打扫228练武术790 2.2.2.3食物热效应(SR)食物热效应(thermic effect of food,TEF)是指由于进食而引起能量消耗增加的现象。人体在摄食过程中,除夹菜、咀嚼等动作消耗的热量外,因为要对食物中的营养素进行消化吸收及代谢转化,还需要额外消耗能量。营养学家把这种因为摄食而引起的热能的额外消耗称为食物热效应,又叫食物的特殊动力作用。食物热效应计算公式: 食物热效应=(BMR+活动量)*10%=食物摄取量*10%SR=(BMR+Y)*10%=XS*10%根据以上公式可以得出最佳热量预算公式:本文提供了根据以上公式算得的各类人群每日最佳热量预算表,如下表(表4):类别能量(Kcal)类别能量婴儿不分性别男女初生6个月120/kg体重孕妇(46个月)+200712个月100/kg体重孕妇(79个月)+200儿童男女乳母+8001岁11001050老年前期男女2岁12001150453岁13501300G1220019004岁14501400G2240021005岁16001500G3270024006岁17001600G43000-7岁18001700老年8岁19001800609岁20001900G12000170010岁21002000G22200190011岁22002100G32500210012岁2300220070岁少年G11800160013岁24002300G22000180016岁2800240080岁以上16001400成年G124002100G226002300G3300027002.2.3热量控制值:根据前面计算得出的BMI值,判断用户身体状况类型,每天热量总摄取量需要保证基础代谢率的情况下,如果根据BMI值判断出用户超重,不同程度超重的用户选择不同的减少热量摄取,其中:A=+100;B=-200;C=-300;D=-350;E=-400;F=-500。综合以上公式,从每日最佳预热算值中扣除热量控制值,即为计划每日摄入量。计算公式如下:每日计划摄取量=每日最佳热量预算+热量控制值(其中0为x或y,i为A,B.F)运动计划根据用户自身习惯提供运动计划,可以采取各种类型的计划。为什么要做运动运动就是指长时间进行运动(耐力运动),使得心(循环系统)、肺(呼吸系统)得到充分的有效刺激,提高心、肺功能。从而让全身各组织、器官得到良好的氧气和营养供应,维持最佳的功能状况。运动对减肥带来的效果,并不仅仅是我们表面看到的每小时消耗200或300大卡那么简单,它的最大效果在于可以提高我们的身体代谢消耗,这才是我们看中的。 运动计划方案按照自己喜好为自己订制运动方案,按照计划每次提醒是否已经完成任务。这里的运动所消耗热量可以画成运动曲线图,归纳入能量曲线图中,方便更好的统计作用;运动消耗量记为Y。提醒方面,根据每周摄入量超过本周计划量30%时,提醒建议运动进行转化。提醒系统与系统计划直接联系的提醒系统搭建:一日三餐拍照分析结果:三餐时间的设定,如果吃饭的时间不对,会影响消化和吸收情况,会事倍功半。所以作如下设定:早餐7:009:00;午餐12:0012:30;晚餐18:0018:30。早餐,此时间段,你的消化功能也已经开始运转,胃肠道苏醒,能最高效地消化吸收食物中的营养成分,是早餐的最佳时间。午餐,这个时间段身体能量需求最大的时候,是吃午餐的最佳时间。此时你体内胃肠道的消化积极性已经远不如早餐的时候,所以用餐时需要细嚼慢咽,万万不能一边盯着电脑一边吃午餐。不仅容易发胖,营养也无法吸收。晚餐,晚餐要在睡前4个小时解决,这是食物在胃肠道中完全消化吸收所需的时间。否则带着未消化的食物入睡,不仅会堆积脂肪,而且会降低睡眠质量。根据查阅资料,早中晚进餐摄取热量比例为3:4:3。程序自动将计划每日摄入量按比例分配到三餐时 间,当拍照时间为以上时间段时记为该餐摄入量,如果超过或低于计划量20%时,卡路里量进度条显色,系统提示超量或过低。统计图下的提醒建议:已有统计图分为营养成分图、能量趋势图、运动趋势图、标准对比图、饮食时间分布图。能量趋势图,统计一周的能量摄取量,如果未完成上周计划,则发起相关提醒。饮食时间分布图,可以直观反映出饮食规律,可以根据以上统计图,给出统计性建议。周期性,针对性的系统建议。由系统提供随机性建议。例如健康小习惯、小贴士。2.2.4存在问题食物识别的时候,需要提取实物图片的颜色特征值和纹理特征值,在提取特征值的时候需要对颜色的进行颜色直方图的分离,分离颜色的三原色R,G,B,在提取颜色的可能存在颜色的特征值的误差。导致食物识别的准确率。提取实物纹理特征值的时候由于只是提取的表面的原因,食物内部成分不能明确,以及实物图片只是一个二维图像不能从各个角度分离图片的纹理特征值。这样造成食物识别的不准确。 由于食物体积在开发前期没有进行三维建模,再提及计算过程中,切法准确度,造成食物体积不不准确,最终计算的食物卡路、脂肪、蛋白质等食物成分只是一个范围,精确了不是很高。图2-4食物成分分析与对比图2.2.5数据SQLite图2-5 SQLiteSQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。SQLite提供本地数据的存储,可以存储最近的运动记录,系统设置,数据缓存等数据。3. WEB端技术3.1 WEB端技术路线3.1.1 MVC模式WEB端主体框架采用MVC的设计模式,通过视图,控制器,模型的分离减少了代码的耦合度,由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。图3-1 MVC模型图3-2 MVC模式3.1.2WEB架构图3-3 服务端系统架构图WEB应用系统大多采用J2EE(Java 2 Platform Enterprise Edition)的多层框架结构模型,WEB应用框架技术是一种针对某一特定应用领域的面向对象软件复用技术由特定应用领域的软件体系结构所决定的软件构架。1) Struts框架Struts框架是基于MVC(Model-View-Controller,模型视图控制器)模式的框架.采用Java语言编写,它继承了MVC设计模式的特性,对应用系统的用户界面显示和数据的后端业务逻辑代码进行了抽象,并且整合了Servlet与JSP在WEB应用系统开发上的优势。在Struts框架中,模型由实现业务逻辑的JavaBean组件构成,控制器由Action以及Struts-config.xml配置文件来实现,视图由一组JSP文件构成。2) Spring框架Spring框架由一个容器,一个配置和组织组件的框架,一组内置的为事务、持久化和WEB用户接口提供的服务组成,是一个轻量的控制反转(Inversion of Control,IoC)和面向方面(Aspect-oriented Programming,AOP)的容器框架:轻量:完整的Spring框架可在一个大小1 MB多的JAR文件里发布。并且Spring所需的处理开销也很小。控制反转:Spring通过一种称作控制反转(IoC)的技术促进了松耦合。控制反转就是指由容器通过配置文件来管理业务对象之间的依赖关系,而非传统方式中由代码方式来直接操控。控制反转的实质,是控制管理权由程序代码转到了外部容器,控制权的转变即是所谓的反转。面向方面:Spring包含对面向方面编程的丰富支持,允许通过分离应用的业务逻辑与系统服务进行内聚性的开发。应用对象只做它们应该做的,完成业务逻辑,并不负责其它的系统关注点。容器:Spring包含管理应用对象的配置和生命周期,可以配置每个bean如何被创建。框架:Spring中,应用对象被声明式地组合,典型地是在一个XML文件里,Spring提供了很多基础功能(事务管理、持久性框架集成等等),并留有应用逻辑开发。3) Hibernate框架Hibernate是一种Java语言环境下的对象/关系映射(Object- Relational,OR) 解决方案。它为面向对象的实体模型到关系型数据库之间的映射,提供了一个极为方便的开源框架。Hibernate使用数据库和配置文件来为应用程序提供持久化(持久化是指和数据库相关的各种操作)服务。Hibernate配置文件有两种格式:一种是XML格式的文件Hibernate.cfg.xml,一种是Java属性文件Hibernate.Properties,采用键=值的形式。在应用系统的开发中,Hibernate配置文件中包含了JDBC连接数据库的驱动信息。在应用程序访问数据库时,首先读取Hibernate配置文件,再通过配置文件找到持久化类的XML映射文件,根据该映射文件得到相应的持久化类,从而可以对类进行操作。也就是将持久化对象中的属性与数据库表中的字段对应起来。通过持久化对象完成对数据库表中的数据的增加、修改、查询和删除操作。3.2WEB端实现方案3.2.1通信协议我们用HTTP协议实现客户端与服务端的连接。HTTP协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。图3-4 HTTP协议图3-5 XMPP协议XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户用应用程序或给一个配好系统添加功能。由于HTTP协议时需要客户端发送请求,服务端才会发送数据,但我们系统中有如聊天系统等需要实施的功能使用http协议就不是很合适,因此我们还使用了XMPP协议配合HTML协议完成聊天功能以及系统活动、运动咨询和定点广告的推送功能。3.2.2数据处理1. 字符数据处理图3-6 Json的数据结构JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。3.2.3数据调用基本过程图3-7 数据调用基本过程4. 数据库4.1 数据库技术路线图4-1 JDBC架构JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。4.1 数据库实现方案4.1.1 数据库的连接图4-2 连接数据库流程与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。 用户可绕过JDBC管理层直接调用Driver方法。这在以下特殊情况下将很有用:当两个驱动器可同时连接到数据库中,而用户需要明确地选用其中特定的驱动器。但一般情况下,让DriverManager类处理打开连接这种事将更为简单。4.1.2 解决数据量大的问题图4-3 数据库数据量与性能的关系图随着时间的推移,用户数量的增加,数据库中存储用户的运动数据就会越来越,数据库表中数据量达到一定程度后就会影响数据库的响应时间,最终会导致用户体验的下降,因此,为了解决越来越多的数据的问题,我们使用分期,分种类进行数据的存储,不同的运动模式,不同的时间(以一个月尾节点)进行数据存储。4.1.3 备份与恢复图4-4 数据库备份图备份策略一:直接拷贝数据库文件直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下 sql 语句:flush tables with read lock;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。备份策略二:使用mysqlhotcopy备份数据库mysqlhotcopy 是一个 perl 程序,最初由tim bunce编写。它使用 lock tables、flush tables 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy 只能用于备份 myisam表。本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。
展开阅读全文