IBox技术实现方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修订表
编号生成版本修订人修订章节与内容修订日期
1 1.0 曾海彬初稿2013/01/10
2 2.0 曾海彬第1、2、3、4、5章2013/02/22
3 3.0 曾海彬格式修改2013/03/12
4 4.0 郑子木格式修改2013/03/19
5 5.0 曾海彬格式修改2013/03/19
目录
1引言 (1)
1.1编写目的 (1)
1.2术语定义 (1)
1.3文档分工 (1)
2技术实现思路 (2)
2.1技术背景 (2)
2.2开发可行性 (2)
2.3技术优势 (3)
2.3为消费者打造的平台 (4)
2.4为食材商家打造的平台 (5)
3 系统实现模型 (6)
3.1 系统架构 (6)
3.1.1 软件架构 (6)
3.1.2 网络拓扑图 (7)
3.2 系统功能结构 (8)
3.2.1 系统功能模块 (8)
3.2.2 系统业务流程 (10)
3.3 系统接口描述 (11)
3.4 数据库描述 (11)
4 解决方案 (14)
4.1 硬件方面 (14)
4.1.1 物联网技术在IBox中的应用 (14)
4.1.2 基于ARM处理器平台的优势 (16)
4.2 软件方面 (17)
4.2.1 QT (17)
4.2.2 OpenCV (19)
4.2.3 基于图像识别的储存食物管理功能 (20)
4.2.4 基于数据挖掘算法的信息关联提示 (24)
4.3 解决方案目标 (27)
5 开发实施安排 (28)
5.1 工作任务安排 (28)
5.2 时间安排 (28)
参考文献 (30)
1引言
1.1编写目的
为明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。
本文档预期读者为项目经理(Project manager)、软件设计人员(Designer)、开发人员(Programmer)
1.2术语定义
1.3文档分工
技术负责人曾海彬完成技术实现思路、系统实现模型、解决方案、系统接口描述、数据库描述等本文档大部分内容。
2技术实现思路
2.1技术背景
随着我国国民经济的迅速发展,人民生活水平提高及城市化进程的推进,城乡人口流动数量激增,人们对个性化的家居需求也变得更加强烈。
在未来智能冰箱助手中,系统能够更加智能地管理用户的冰箱,监视食品质量,可以让用户通过手机或者ARM终端,随时随地了解冰箱里食物的数量、保鲜保质信息,而且能够根据用户的个人饮食习惯,提供健康食谱和营养建议。
现在越来越方便快捷的网络技术也逐渐走进家庭生活中的方方面面。
近年来在网络上出现了一些食材购置平台,以及各个用户与食材商家的综合信息交流平台。
这种服务信息网络能够灵活机动的购置食材、安排烹饪计划,优化客户体验,使用户的满意程度得到极大的提高。
基于以上背景,我们提出了基于图像识别和数据挖掘的智能冰箱助手,在实现管理冰箱食品信息的基础上结合图像识别技术和数据挖掘技术,实现更加方便、智能的智能冰箱助手。
2.2 ARM终端开发可行性
一、ARM终端开发可行性
智能冰箱助手作为一个智能家居应用,对于系统运行的算法速度要求比较高,不但要低成本低功耗,还有较高的实时性、稳定性、自纠错性,还要有过硬的安全性以及优良的可维护性。
基于以上考虑,我们硬件选用ARM中可作为消费电子的6410乃至更高系列,满足了性能较高、功耗低、成本低苛刻要求。
以飞凌ARM OK6410开发板的应用优势为例:
它适用于高端消费类电子产品,拥有8 Bit硬件纠错算法,很好的保证了智能冰箱助手运行的可靠性;支持SLC 1G Nand Flash ,快速、稳定的工业级芯片,可以提高IBox存取速率;它包括linux、WinCE、Android在内的操作系统且不断升级,将提供给用户最稳定的软件版本,以及最丰富的应用例程,并开放源码,用户可自由下载。
飞凌OK6410 ARM开发板支持有线和无线网卡,后期可连接智能家居云服务器进行更高效更精准的神经网络及数据挖掘运算。
二、QT开发
Qt是一个多平台的C++图形用户界面应用程序框架,由挪威TrollTech 公司出品。
它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能,具有下列优点。
(一)、优良的跨平台特性
Qt支持Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HP-UX,Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX 等操作系统,Qt的跨平台特性,是选择Qt的一个非常重要的原因。
(二)、面向对象
Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
(三)、丰富的API
Qt 包括多达400个以上的C++ 类,同时不断扩展。
拥有友好丰富的界面库。
(四)、高的开发效率
Qt采用C++作为开发语言,拥有广泛的开发基础,其运行效率也可以得到保证。
同时Qt属于开源项目,资料齐全,为广大开发者提供了免费又友好的集成开发环境,开发简单,学习方便。
2.3技术优势
一、高易用性:图像识别
与市场上的同类产品相比,我们的智能冰箱助手采用了图像识别技术,避免了用户将食品放进冰箱时要求进行繁琐的输入。
用户只需要将食物靠近安装在冰箱门旁边的红外线传感器,系统就可以感应到食物并拍下其图片,进行智能识别,用户只需在识别结果后进行确认即可。
图像识别操作避免了读卡器无法识别不同超市的不同条形码的限制,也不必将食物一一手动输入,具有较高的实用性。
二、服务整合
将食谱等功能和库存功能整合在一起,让用户可以更好地根据现有食物选择相应的食谱,同时也方便不同口味的用户快速查找到自己所偏好的食谱。
用户只需要将现有食物与特定的食谱绑定,便可方便地获取到比较符合自己品味和需求的食谱推荐,获得更好的用户体验。
二、低成本低功耗
一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度。
低功耗:在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2μA。
最大的集成度:复位电路、低电压检测、调压器、精确的RC振荡器等。
四、数据挖掘
数据挖掘,又称从数据中发现知识,简称KDD。
数据挖掘一般是指从大量的数据中自动搜索隐藏于其中的有着特殊关系的信息的过程。
是目前人工智能和数据库领域研究的热点问题。
近年来,业界对数据挖掘越来越关注,相应的算法理论不断提出,并在互联网领域和金融行业中成功地应用。
然而在物联网领域,智能家居上的应用却不多。
实际上,我们生活在数据时代。
每一个家庭在日常生活中产生的数据都是非常巨大的,如何从大量的数据中发现有价值的信息,并把这些信息转化为有组织的知识,或者产生智能的决策对于智能家居是非常有必要的。
数据挖掘提供了这么一种智能化信息处理的技术。
通过对家庭数据的分析,实现对这个家庭的个性化服务,产生更智能、更符合用户期望的决策,无疑是智能家居日后的趋势。
2.3为消费者打造的平台
冰箱,作为存储食物的直接电器,虽然后为用户对各种食物的存储提供了一个很好的方式,但这个方式也会让用户对食物的存储没有一个很好的归类以及及时的管理,同时如果让用户在杂乱的冰箱内搜索各种物品,最终仍无所获,那冰箱将不能很好地为用户带来方便。
如果此时用户可以先直接通过冰箱助手查看冰箱内的现有物品,数量,保质期,并且根据冰箱助手所提供的食谱功能,那么对于食物的获取和丰盛的一餐作足了准备,接下来的工作也将变得非常轻松。
2.4为食材商家打造的平台
人们的食物所需虽源源不断,但是与之相关的商家的数量之多以及他们之间竞争之激烈,往往使很多商家缺少固定的客户以及定期的货物更新。
作为一款服务于人们的日常生活以及饮食各需的系统,冰箱助手则可以为各个商家带来固定的客户群。
首先,冰箱助手的用户通过系统所匹配到的周围商家信息,用户可以很方便地定制特定商家的食品,并在需要的时候让商家及时送达,在为消费者带来便利的同时,也为各食品商家带来了与顾客的合作机会,在彼此互利的情况下,借助冰箱助手平台便可以很轻松地进行沟通和交流。
3 系统实现模型
3.1 系统架构
3.1.1 软件架构
如图所示(图3.1.1),该图为智能冰箱助手客气端系统框架。
该系统主要由八大模块组成:主页模块、库存模块、提醒模块、食谱模块、食谱推荐、存入模块、取出模块和购物模块。
其中的基本模块有四个:主页模块、库存模块、食谱模块和提醒模块。
另外的四个模块则是在这四个基本模块的基础上的一个扩展。
图3.1.1 智能冰箱助手客气端系统框架图
3.1.2 网络拓扑图
Internet
服务器
住宅
客户端
住宅住宅客户端客户端
3.2 系统功能结构 3.2.1 系统功能模块
智能冰箱助手
食品管理模块
用户个性模快
留言模块
用户数据分析
用户偏好设置第三方接口模块
食品信息管理
过期缺货提醒信息关联提示语音留言信息留言
银行接口商家接口食谱模块
食品识别
食谱信息浏览
食谱推荐
图3.1 IBox 系统功能模块图
+AddFoodItem()+DeleleFoodItem()+ModifyFoodItem()+GetOutdatedFood()
CFoodMgt +WriteInfoDatabase()+GetInfoFromDatabase()
-m_pDatabase
CDatabase -CheckOutDate()
+GetAllOutdatedFood()+GetMeatInfo()
+GetVegetablesInfo()+GetFruits()+GetDrinkInfo()
+GetAssociateMatrix()+GetDietaryInfo()
-OutdatedFoods CInfoContainer 1
1
*
1
111
1
*
1
+AssociateAnalysis()
+DietaryAnalysis()+NutritionAnalysis()CDataAnalyser
+Classifier()CClassification
+GetFeatureCoding()+ClearNoisyPoint()+SaveImage()
CImageProcess
+TakePhoto()+Scan()
-m_strImgFile : string -m_nIRSignal : bool CTakePhoto +CreateMeat()+CreateVeges()+CreateDrink()+CreateFruits()
CFoodCreater +SetFoodInfo()+GetFoodInfo()+GetAssociateInfo()-m_nFoodId -m_strName -m_pImage
-m_dProductDate -m_dQualityPeriod -m_strDesc
-m_nCategoryId -m_nTypeId CFood 11
*
0..1
CMeat
CVegetables
CDrink
CFruits
*1
0..10..1
*
*
1
1+BrowseDietary()
+DietaryRecommend()
CDietary 11
+WriteMessage()+ReadMessage()
CMessage 11
1
1图3.2 系统后台服务类图
3.2.2 系统业务流程
智能冰箱助手
查看冰箱内食品信息
食品信息
入库/出库操
作
启动摄像头
智能识别食
品
显示该食品以及与其关联的食品信息
数据分析
数据分析结果
留言功能
编辑留言查看留言
食谱查看食谱留言信息
食谱推荐
下载食谱
用户主页
用户个人偏好设置
用户数据分
析在线超市
在线商家接口
银行接口
3.3 系统接口描述
一、数据处理服务器系统接口
本接口将冰箱助手跟服务器连接起来,上传冰箱食品数据,在服务器端做分析,把分析结果返回给冰箱助手。
同时,服务器也提供食谱下载。
二、食材商家系统接口
本接口将冰箱助手和食材商家线上商店连接起来,实现线上购买食材。
三、网银、第三方支付系统接口
用户在网上购买食材时,可以方便地使用网银来付款,网银可以选择各大银行、信用社等等,同时应该支持支付宝、财付通等第三方支付,还可以尝试手机话费支付、ATM转账支付等形式。
现场购买车票的用户,可以在POS机刷卡支付。
3.4 数据库描述
一、食物信息存储
FoodInfo:存放食物信息
字段说明长度类型可否为空FoodId 食物信息ID 4 varchar 不可
Name 食物名称16 varchar 不可
Image 食物图片路径16 varchar 不可CategoryId 食物类型Id 4 varchar 不可
TypeId 食物种类Id 4 varchar 不可ProductDate 生产日期16 Date 不可QualityPeriod 保质期16 Date 不可Desc 补充描述16 varchar 可
CategoryInfo:存放食物类型信息
字段说明长度类型可否为空CategoryId 食物类型Id 4 Varchar 不可CategoryName 食物类型名称16 Varchatr 不可QualityPeriod 默认保质期16 Date 可Image 食物类型图片地址16 Varchar 不可Desc 描述16 Varchar 可
TypeInfo:食物种类信息
字段说明长度类型可否为空TypeId 食物种类Id 4 Varchar 不可TypeName 食物种类名称16 Varchar 不可Image 食物种类图片地址16 Varchar 不可Number 冰箱当前该种类数量 4 Numeric 不可NutritionId 营养成分Id 4 Varchar 不可NutritionInfo 营养描述200 Varchar 可
NutritionInfo:营养成分表
字段说明长度类型可否为空NutritionId 营养成分Id 4 Varchar 不可Protein 蛋白质 4 Numeric 不可Fat 脂肪 4 Numeric 不可Carbohydrate 碳水化合物 4 Numeric 不可Heat 热量 4 Numeric 不可InorganicSalt 无机盐类 4 Numeric 不可Calcium 钙 4 Numeric 不可Phosphorus 磷 4 Numeric 不可
Ferrum 铁 4 Numeric 不可
二、食谱信息存储
DietaryInfo:食谱信息表
字段说明长度类型可否为空DietaryId 食谱Id 4 Varchar 不可
Procedure 做法500 Varchar 不可
Desc 功效描述64 Varchar 可
DietaryId_TypeId:食谱食材表
字段说明长度类型可否为空DietaryId 食谱Id 4 Varchar 不可TypeIdInfo 所需食材Id串 4 Varchar 不可
三、数据分析信息
AssociateInfo:食品信息关联表
字段说明长度类型可否为空TypeId 种类Id 4 Varchar 不可
Support 支持度 4 Numeric 不可AssociateIdInfo 关联种类Id串50 Varchar 可
LogInfo:日志信息表
字段说明长度类型可否为空TID 日志Id 4 Varchar 不可
50 Varchar 不可
TypeIdInfo 食物种类Id串:记录每一次放
入或拿出冰箱的食物种类
4 解决方案
4.1 硬件方面
4.1.1 物联网技术在IBox中的应用
物联网,是通过各类传感设备收集环境信息数据后,挖掘并智能地对数据进行处理,达到改善人类生活,或提高生产力的物物间智能网络。
一、红外传感器捕捉在IBox中的应用
IBox中这样使用红外传感器:录入开始时,通过红外传感器捕捉食材靠近的信号,智能控制摄像头拍照的时机。
而红外传感器按其工作模式可大致分为主动式与被动式。
主动式红外探测器自带红外光源,通过对光源的遮挡、反射、折射等光学手段可以完成对被探测物体位置的判别。
被动式红外探测器本身没有光源,通过接受被探测物体的特征光谱辐射来测量被探测物的位置、温度或进行红外成像。
IBox采用了SHARP GP2Y0A02YK主动式电红外传感器,它成本低,安装比较方便,而且性能比较稳定,抗干扰能力强,灵敏度高,安全可靠。
可以实现探测食材的有无;传感器返回的模拟电压值与测量的距离值一一对应,可以测量食材的距离并显示距离。
综上,在设计中,我们选用搭载GP2Y0A02YK芯片的反射型红外发射接收器,比较适合做食材检测功能。
该传感器数据:
之前实验时我们采用的是单片机,考虑到检测的目的是将测得数据传给上位机,使其根据食材距离自动决策。
采用串行通信比较理想。
这个是采用单片机实验时的接口电路:
在IBox中,红外软件控制程序的思路是:在IO口发送红外发送命令,定时器在一定时间内计时。
在设定连接红外传感器的IO口寄存器读取经过模数转换后的IO口信息,计时结束再用串口关闭红外传感器。
检测部分利用红外发射管发射红外光,遇食材后经反射被红外接受管接收,产生电平转换,利用ARM I/O口检测红外检测模块电平输出,以此判断前方食材有无,检测到食材后,调用摄像头控制模块,最终以达到智能控制摄像头拍照时机的目的。
三、IBox中摄像头驱动
一般的USB摄像头驱动大体上可以二分为UVC cameras和non-UVC cameras:
IBox中对摄像头的选择:
non- UVC cameras通常情况下不比UVC cameras工作出色,前者的驱动并不遵循通用的协议,需要针对每种摄像头做出单独的处理,这往往需要一个逆向工程的探索过程。
UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分。
插入摄像头后就可以工作,而无须编译或安装额外的驱动。
IBox使用Linux3.0内核,可以直接支持UVC摄像头的驱动:内核开始支持UVC的版本,官方手册表明“Linux 2.6.26 and newer includes the Linux UVC driver natively.”。
综上,由于UVC cameras的驱动良好IBox使用UVC cameras。
在IBox中摄像头的驱动,需要在Linux内核选项中勾选UVC-driver,对内核进行编译。
确认文件系统dev文件夹中出现了video标识说明加载驱动成功,之后IBox将在OpenCV 下取得摄像头图像,并作图像识别处理。
详见本文档神经网络及OpenCV部分。
4.1.2 基于ARM处理器平台的优势
一、低功耗低成本
ARM本身就是一种高性能和低功耗达到微妙平衡的架构。
ARM体系结构采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗:
所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。
可用加载/存储指令批量传输数据,以提高数据的传输效率。
可在一条数据处理指令中同时完成逻辑处理和移位处理。
在循环处理中使用地址的自动增减来提高运行效率。
二、成熟的移植机制
本系统初期在PC机上进行开发,后期将移植到ARM终端上,这要求软硬件有成熟的移植机制。
ARM架构历年已久,在上个世纪已能搭载操作系统,近年来各式操作系统基本完全兼容。
硬件方面没有任何问题。
软件方面,我们采用Qt C++对软件进行开发。
Qt是一种出色的图形编程特性库,诞生已近10年,在ARM板的移植流程是:编译触摸屏库、编译Qt库、编译QWT,Sqlite工具库。
近几年先驱人员从PC到ARM的移植问题(包括兼容性问题、路径识别错误问题等)已一一得到解决,成熟的移植机制已经确立。
成为近期Linux C++界面开发移植的首选。
本团队从事过数次Qt4.7及其QWT,Sqlite数据库,WinCE6.0大型系统移植。
经验丰
富。
三、支持多种外设
本系统需要搭载摄像头,后期可能需要网卡等外设以连接网络服务器。
这要求我们的硬件必须能支持多种外设。
消费电子类板级支持的外设功能通常完全满足并且性能最贴近我们的需求,以ok6410为例:
(一)控制类:
JTAG接口,使用10*2插针连接器
内部实时时钟,带有后备锂电池座,断电后系统时间不丢失
4个串口,包括1个五线RS 232电平串口(DB9母座)和3个三线TTL电平串口(20pin
2.0mm间距插头座)
(二)外设类:
触摸板接口支持4线电阻式触摸板
高速SD卡座。
可以实现SD Memory功能和SDIO功能
CMOS摄像头接口,支持ITU-RBT601/656 8位模式,使用10*2插针连接
无线网卡接口(WIFI)及100M网口,采用DM9000AE,带连接和传输指示灯
配备USB HOST插口,支持USB1.1协议,可插鼠标、U盘等;USB Slave接口,支持USB2.0协议,使用Mini-USB插座,可与PC连接
3.5mm标准立体声音频插座。
其中包括1个音频输出插座,可与耳机连接;1个话筒输入插座;1个线路输入插座
4.2 软件方面
4.2.1 QT
1.Qt 概述
Qt是一个全面的C++应用程序开发框架。
它包含一个类库,和用于跨平台开发及国际化的工具。
Qt 是一个全面的开发框架,它包括广泛的特征,性能与工具,可以开发高性能,跨平台富客户端,以及服务器端的应用程序。
QT Library是一个拥有超过400 C++个类,同时不断扩展的库。
它封装了用于端到端应用程序开发所需要的所有基础结构。
优秀的Qt应用程序接口包括成熟的对象模型,内容丰富的集合类,图形有户界面编程与布局设计功能,数据库编程,网络,XML,国际化,OpenGL 集成等等。
QT Designer是一个功能强大的GUI 布局与窗体构造器,能够在所有支持平台上,以本地化的视图外观与认知,快速开发高性能的用户界面。
QT Linguist是一套用来消除国际化工作流程中所带来障碍的工具。
使用Qt语言家,开发小组可把应用程序的翻译转换外包给非技术性翻译人员,从而可增加精确度,大大加快本地化处理过程。
.
QT Assistant一个完全可自定义,重新分配的帮助文件或文档浏览器,它可与基于Qt 的应用程序运行。
使用Qt助手,开发小组同样能够很大程度上加快文档的处理过程。
2.跨平台的Qt
Qt 是用于本地化跨平台应用开发的领先性框架。
Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置。
通过使用Qt,开发小组们从主要的开发平台,可为主要操作系统创建本地化的应用程序。
Qt 可提供于下列平台:
Qt/Windows (Microsoft Windows XP, 2000, NT 4, Me/98)
Qt/Mac (Mac OS X)
Qt/X11 (Linux, Solaris, HP-UX, IRIX, AIX, 与其它许多Unix 变式)
Qt对不同平台(Unix, Windows, and Mac)的专门API进行了封装,如文件处理、网络(操作,协议),进程处理、线程、数据库访问等。
Qt 应用程序本地化运行–类似于本地化应用程序–在所有主要平台上,从单一源代码中汇编而成。
使用Qt 进行精确的平台非相关运行-编程后可在任何地方配置。
确立新的平台,仅需重新汇编一个单一源代码库而已。
3.简单使用Qt
Qt 开发员仅需要学会一种API来写入应用程序,该程序可在任何地方运行。
统一的跨平台API 让程序员们集中精力致力于可增值的技术革新,而无须担心维护和管理现有应用程序多版本的基础结构与界面。
健全与高性能的Qt
Qt 已由成千上成商业与开放源应用程序开发员,在多个操作系统与编译器上进行了战术测试,奠定了高性能与资源性应用程序的基础。
Qt 无须“虚拟器”,模拟层或大容量的运行时间环境。
它如本地化的应用程序一样,直接写入低级的图形函数,因而Qt程序能以源代码速度执行。
4.开放源的Qt
通过使用Trolltech的双重授权模式,Qt 在商业支持并行之有效的框架下,呈现出开放源的所有优势:开放源优势包括一个活动的开放源开发员社团。
由于Qt的不间断开发,以及完整的代码透明性,以允许Qt开发员进行“彻底深入地查看”,进行自定义并扩展Qt来满足其独特的需求。
商业产品的担保包括客户认可的产品支持,专门的Qt开发小组,以及一个第三方工具、组件与服务的成长生态体系。
5.嵌入式技术
新一代的Trolltech嵌入式技术,除把桌面式Linux变成嵌入式之外,更是扩展了Qt 强大而独特的优势。
当前的Qt/嵌入式产品对于需要快速运转的客户提供快捷,务实的市场路线。
4.2.2 OpenCV
OpenCV的全称是:Open Source Computer Vision Library。
OpenCV于1999年由Intel建立,现在由Willow Garage提供支持。
OpenCV是一个基于[1](开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。
它轻量级而且高效——由一系列 C 函数和少量C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
[2]最新版本是2.4.4。
OpenCV 拥有包括300 多个C函数的跨平台的中、高层API。
它不依赖于其它的外部库——尽管也可以使用某些外部库。
OpenCV 为Intel® Integrated Performance Primitives (IPP) 提供了透明接口。
这意味着果有为特定处理器优化的的IPP 库,OpenCV 将在运行时自动加载这些库
4.2.3 基于图像识别的储存食物管理功能
冰箱中存储的食物因为不同人的多次存放,会导致后续使用的人无法具体知道冰箱中还有哪些食物,不便于查找,也不能根据冰箱中的食物提供智能化的推荐功能。
因此本项目尝试使用机器视觉的技术,提取冰箱中常见的食物的图片特征,训练分类器,使得本项目冰箱助手可以模拟人一样智能地识别食物并进行有效方便的存储管理,为人们提供后续方便有效的推荐服务。
4.2.3.1储存食物图片特征提取
对于不同的食物,其图片在颜色、形状、纹理等特征上存在较大的差异,例如黄色长条形的香蕉、深红色的牛肉等,在这些外观特征上可以较快地分辨出来。
特征提取是机器视觉中的一个非常重要的概念。
它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。
特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。
在机器学习领域,通过特征提取之后的每一张图片可以用一个多维向量来表示,添加标签之后作为采集的图像样本进行后续分类器的训练。
在图像的特征提取方面的研究,常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。
目前已经有很多非常成熟的算法,例如具有缩放不变形、旋转不变形的SIFT 特征提取方法、几何和光学转化不变性的HOG特征提取方法、快速鲁棒性尺度不变特征提取SURF算法[BETG07]、基于图像像素统计分析的主成分分析方法(PCA)、Fourier变换法、窗口Fourier变换(Gabor)、小波变换法、最小二乘法、边界方向直方图法、基于Tamura纹理特征的纹理特征提取等。
不同的算法应用在不同的情况下,对后续的分类精度会有所影响。
虽然SIFT在旋转不变形及缩放不变形的特点基础上,使用高斯差分金字塔对拉普拉斯算子进行了简化,提高了搜索特征点的速度,且被认为是最有效的也是最常用的特征点提取算法,但是如果实际中不借助GPU或者专用的图像处理器,在现有的计算水平下仍然很难。