1.一种基于简化二维码标签识别的超市购物车的商品推荐系统,其特征在于,所述商品推荐系统包括两大模块:图像部分模块,对图案标签的设计而言,设计一个图案用于识别,该图案具有定位码,用于锁定图案的位置以及判断图案的方向,对于定位码图像的定位与识别而言,通过定位图案,再生成轮廓树,进行解析其中的数据部分,得到数据并提取被标签商品的信息;
商品推荐模块,根据识别结果,基于关联性、热度、价位的综合考虑对消费者进行商品推荐。
2.如权利要求1所述的基于简化二维码标签识别的超市购物车的商品推荐系统,其特征在于,所述图像部分模块包括:标签图案生成单元,借鉴QR code的结构来生成标签图像,所使用的标签图像分为定位码区域和数据存储区域,包含以下三个部分:
1)最外层的框,是一个边长为26单位,厚度1单位的空心正方形,用于包围标签图案的所有内容,用以区分不同的标签图案;
2)分为4个子部分,每个子部分又可以分为一个边长为6单位,厚度1单位的空心正方形和一个边长为2单位的实心正方形,其中每个正方形对应一个角落,分别用于确定标签图案四个角落对应的位置;
3)由一个宽度为1单位,长度为8单位的实心矩形组成,该部分用于判断标签图案的朝向;
数据存储区域总共有8*8+4*5*8=224个平方单位的面积,总共可以存储224个二进制数据,先把商品编号转成若干位二进制,其中二进制位为1的以黑色表示,二进制位为0的用白色表示;如果商品编号长度小于224,则按行从上到下,从左到右重复填充以增加识别准确率;
标签图案的识别单元,用于确定位置、形变还原和提取信息;
S1 确定位置过程为:对输入的图像进行二值化处理,基于二值图像进行标签图案的定位,如下:S1-1 确定轮廓,步骤如下:
1-1-1 寻找二值图像中编号为1-14的轮廓,并且建立起轮廓树;
1-1-2 遍历轮廓树中的所有节点,对于每个节点,判断以该节点为根节点的子树,是否符合设定结构;如果符合,则判断为标签图案的定位码;
S1-2:根据轮廓矩计算得到四个角正方形中心点的坐标,通过选取定位码四个角落中正方形的中心点后计算获取当前点具体的坐标,步骤为:
1-2-1 对某一轮廓A,其中心坐标(xc,yc)由以下式子计算得到:其中m00即为轮廓A中所有点的个数,m10即轮廓A的矩是所有点的x坐标和,m01是轮廓A所有点的y坐标和;
1-2-2 四个角正方形中心点的坐标如图5中的红色点:
在得到轮廓中心坐标后,把轮廓3,4,5的中心坐标求平均得到左上角正方形中心坐标,依次地,从轮廓6,7,8的中心坐标得到右上正方形中心坐标,从9,10,11的中心坐标得到左下正方形中心坐标,从12,13,14的中心坐标得到右下正方形中心坐标;
S2:形变还原过程如下:
S2-1:基于4个角正方形中心点坐标(x,y)以及变换后的坐标计算透视变换矩阵用以进行透视变换,得到一个未确定方向的24*24像素二值标签图案,步骤为:
2-1-1 对这4个点变换后的坐标(xp,yp)按左上,右上,左下,右下顺序,取值分别为(52,
52),(52,260),(260,52),(260,260),基这四个点的关系得到3*3透视变换矩阵M,然后根据(xp,yp,1)=(x,y,1)M进行透视变换,对于透视变换的结果,取点(0,0),(0,311),(311,0),(311,311)所围成的边长为312的正方形的区域作为结果,该区域即为所求的标签图案所在的区域,透视变换矩阵计算以及进行透视变换步骤可以使用openCV中的getPerspectiveTransform函数以及warpPerspective实现;
2-1-2 将312*312像素的正方形标签图形缩放成24*24像素大小的图像,考虑312*312像素图像中坐标为(x*13+6,y*13+6)的点的值,若该值大于或等于256/2,则将255作为24*
24像素图像中点(x,y)的值,否则取0值;
S2-2:确认该标签图案的方向并且进行旋转,使其获得正确的朝向;首先利用编号15的轮廓确定该标签图案的朝向,该部分轮廓由8个黑色的像素格组成,通过统计4处位置黑色(像素值为0)的像素格的数量,数量最多的位置则为图形轮廓15所在位置,并以此来判断旋转角度情况;判断完了所需要的旋转角度之后,对于非正确位置的情况,通过对图像乘以旋转矩阵进行旋转,从而便得到朝向正确的24*24像素二值标签图案的新坐标,过程如下:对于任意一个原图像上的坐标(x,y),生成一个1*3的矩阵(x,y,1),并且通过将这个矩阵和一个3*2的旋转矩阵相乘,得到一个新的1*2的矩阵(x’,y’),并将坐标(x’,y’)作为该点旋转后的新坐标,需要旋转的情况分为以下3种:
1)顺时针旋转90度
在这种情况下,对于初始点(x,y),旋转后的新点坐标为(y,23-x),通过简单计算可以得到此时的旋转矩阵M1表示如式(1)所示:
2)顺时针旋转180度
在这种情况下,对于初始点(x,y),旋转后的新点坐标为(23-x,23-y),通过简单的计算得到这时候的旋转矩阵M2表示如式(2)所示:
3)顺时针旋转270度
在这种情况下,对于初始点(x,y),旋转后的新点坐标为(23-y,x),通过简单的计算得到这时候的旋转矩阵M3表示如式(3)所示:S3:信息提取过程如下:根据设计的数据存储区位置以及存储规则,从上到下,对于每一行,从左到右,读取每一个像素格中的二进制数据;因为存在大量重复的数据,使用ID_BIT×2的矩阵bit_value_cnt来存储二进制编号中每一位的0和1值出现的次数,其中ID_BIT值即用来表示商品编号的二进制位的个数,然后把每一位确定为出现次数多的值,即如果1的次数多于0的次数则该位为1,否则为0,最后把得到的二进制转化为10进制便可得到标签图案对应的商品编号。
3.如权利要求1或2所述的基于简化二维码标签识别的超市购物车的商品推荐系统,其特征在于,商品推荐模块中,推荐商品分为3个部分,第一部分为基于购物记录的关联商品的推荐,在通过FP-growth算法获得频繁二项集之后,得到二项对应的提升度来表示物品之间的关系的评分;
第二部分是基于商品种类之间关联关系的推荐,以商品种类销售记录用FP-growth算法找出相关联的种类,记录评分较高的关联种类,基于销量和价格水平比率获得商品权重后进行随机推荐;
第三部分:对关联类别以及相同类别中的商品,基于销量和价格水平比率获得商品权重后进行随机推荐。
4.如权利要求3所述的基于简化二维码标签识别的超市购物车的商品推荐系统,其特征在于,所述FP-growth算法是用来有效地发现频繁项集的算法,对于频繁项集的评估,有以下三个标准,其中,X,Y表示需要分析的2个商品,P(A)表示A出现的概率;
支持度如以下公式所示,表示该组的两个商品同时出现的概率:
Support(X,Y)=P(XY)
置信度如以下公式所示,表示商品Y出现后商品X出现的条件概率:
提升度如以下公式所示,表示在其中一个数据出现的条件下,另外数据的出现概率的提升率:某一类别所有商品的权重item_weight,根据以下步骤得到:第一步:通过商品销量来初始化权重,记sale_cnti为ID是i的商品的销售总量,item_weighti代表的是id为i的商品的权重,则其初始值item_weight_initi为:item_weight_initi=1+sale_cnti
第二步:通过价格水平调整权重,首先,对于每个商品,计算该类商品的平均价格,以及每个商品价格与同类商品平均价格之比rate;
假设rate0为数据库中某物品与其同类商品平均价格的比值,rate1为购物车中被检测出的商品与其同类商品的平均价格的比值,则rate3计算为:对于数据库中每个商品i,累加其价格水平比率的影响参数item_weight_coei,可以根据以下公式得到:item_weight_coei←item_weight_coei+max(1,10*(max(0,2-rate3)))随后根据以下公式来确定最终的item_weighti:
以上公式中found_items_num表示参与推荐的商品数量;
根据所得到的商品权重来随机获取推荐商品:枚举每一个需要进行推荐的种类,根据该类所有商品的权值item_weight进行随机选择,即权重越大,被选中的概率越大,步骤为:建立“权重和”数组SZ,该数组为一维数组,数组中的第i项的值为第i个商品的权重累加“前缀和”数组中第i-1项的值,且“前缀和”数组中的第一项的值等于item_weight数组中的第一项,由于商品的权值始终为正数,可知当前数组后一项的值必定比前一项的值要大;
对于第Z类商品的“前缀和”数组有如下的递推式:
SZ,i=SZ,i-1+item_weight[i],i>1
SZ,i=item_weight[i],i=1
同时,以sum_SZ来表示种类为Z的商品的权值和,同时也为SZ数组的最后一项;
之后,生成一个随机数R的取值范围为[1,sum_SZ],对于种类Z而言,其对应的“前缀和”数组SZ中的值组成的数列为递增数列,则可使用二分查找快速地找出目标商品t,且t满足以下递推公式:SZ,t-1<R≤SZ,t,t>1
0<R≤SZ,t,t=1。