CN112101059B - 一种条形码定位方法、装置、终端设备及存储介质 - Google Patents
一种条形码定位方法、装置、终端设备及存储介质 Download PDFInfo
- Publication number
- CN112101059B CN112101059B CN202010830433.5A CN202010830433A CN112101059B CN 112101059 B CN112101059 B CN 112101059B CN 202010830433 A CN202010830433 A CN 202010830433A CN 112101059 B CN112101059 B CN 112101059B
- Authority
- CN
- China
- Prior art keywords
- coordinate
- filtering
- preset
- bar code
- straight line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1439—Methods for optical code recognition including a method step for retrieval of the optical code
- G06K7/1443—Methods for optical code recognition including a method step for retrieval of the optical code locating of the code in an image
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1408—Methods for optical code recognition the method being specifically adapted for the type of code
- G06K7/1413—1D bar codes
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- General Health & Medical Sciences (AREA)
- Toxicology (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
本申请适用于条形码技术领域,提供一种条形码定位方法、装置、终端设备及存储介质。本申请实施例提供的条形码定位方法,通过获取条形码图像;对所述条形码图像进行直线检测,获得直线检测结果;然后对所述直线检测结果中的中心位置、角度、长度和离群点中的至少一种直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;最后根据所述直线过滤结果中所有直线的端点位置,定位所述直线过滤结果中的条形码区域,可以筛选出条形码图像中符合条形码特征的直线,并根据筛选出的所有直线的端点位置定位条形码区域,不受环境光线不足、条形码不全、条形码图像模糊、条形码被遮挡、条形码图像的背景复杂等问题的影响,鲁棒性强且准确度高。
Description
技术领域
本申请属于条形码(barcode)技术领域,尤其涉及一种条形码定位方法、装置、终端设备及存储介质。
背景技术
条形码技术是在计算机、光电和通信技术的基础上发展起来的一项综合性科学技术,是用于进行信息数据自动识别和输入的重要手段。由于条形码具备准确、快速、方便、经济等特点,被广泛应用于条码支付、商品编号唯一标识、资产盘点等领域。随着相机技术的发展,基于图像的条形码识别技术开始受到广泛关注。然而,使用相机识别条形码通常是在一个固定场景或者有人工手持相机调整的场合,当场景不固定或者人工无法介入时,可能存在环境光线不足、条形码不全、条形码图像模糊、条形码被遮挡等问题,使得相机无法准确定位条形码从而导致识别失败。目前主流的条形码定位技术是依赖于条形码丰富的边缘信息,通过提取条形码图像的边缘,计算梯度并过滤非垂直方向的边缘,来定位条形码图像中的条形码,该方法在条形码图像的背景复杂(例如,背景中存在具有条纹或边缘较多的物体)时很容易定位错误。
发明内容
有鉴于此,本申请实施例提供了一种条形码定位方法、装置、终端设备及存储介质,以解决现有技术中存在环境光线不足、条形码不全、条形码图像模糊、条形码被遮挡、条形码图像的背景复杂等问题时,相机无法准确定位条形码从而导致识别失败的问题。
本申请实施例的第一方面提供了一种条形码定位方法,包括:
获取条形码图像;
对所述条形码图像进行直线检测,获得直线检测结果;
对所述直线检测结果中直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种;
根据所述直线过滤结果中所有直线的端点位置,定位所述直线过滤结果中的条形码区域。
本申请实施例的第二方面提供了一种条形码定位装置,包括:
图像获取模块,用于获取条形码图像;
直线检测模块,用于对所述条形码图像进行直线检测,获得直线检测结果;
直线过滤模块,用于对所述直线检测结果中直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种;
定位模块,用于根据所述直线过滤结果中所有直线的端点位置,确定所述直线过滤结果中的条形码区域的位置。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例的第一方面所述的条形码定位方法的步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如本申请实施例的第一方面所述的条形码定位方法的步骤。
本申请实施例的第一方面提供的条形码定位方法,通过获取条形码图像;对所述条形码图像进行直线检测,获得直线检测结果;然后对所述直线检测结果中的中心位置、角度、长度和离群点中的至少一种直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;最后根据所述直线过滤结果中所有直线的端点位置,定位所述直线过滤结果中的条形码区域,可以筛选出条形码图像中符合条形码特征的直线,并根据筛选出的所有直线的端点位置定位条形码区域,不受环境光线不足、条形码不全、条形码图像模糊、条形码被遮挡、条形码图像的背景复杂等问题的影响,鲁棒性强且准确度高。
可以理解的是,上述第二方面至第四方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的条形码定位方法的第一种流程示意图;
图2是本申请实施例提供的条形码定位方法的第二种流程示意图;
图3是本申请实施例提供的条形码定位方法的第三种流程示意图;
图4是本申请实施例提供的矩阵的示意图;
图5是本申请实施例提供的条形码定位方法的第四种流程示意图;
图6是本申请实施例提供的第一直方图的示意图;
图7是本申请实施例提供的条形码定位方法的第五种流程示意图;
图8是本申请实施例提供的第二直方图的示意图;
图9是本申请实施例提供的条形码定位方法的第六种流程示意图;
图10是本申请实施例提供的条形码定位装置的结构示意图
图11是本申请实施例提供的终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
本申请实施例提供的条形码定位方法可以应用于具有摄像头或与摄像头、相机等摄像设备通信连接的机器人、相机、手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)等终端设备,本申请实施例对终端设备的具体类型不作任何限制。摄像头可以是可转动、可自动对焦的摄像头,例如,兼具可转动和可自动聚焦功能的云台摄像头、球形摄像头等。机器人可以是服务机器人、娱乐机器人、军用机器人、农业机器人等,其中,服务机器人和娱乐机器人具体可以是人形机器人、机器狗、机器猫等仿生机器人,也可以是机械臂或机械手,本申请实施例对机器人的具体类型不作任何限制。本申请实施例中的条形码是指一维条形码。
如图1所示,本申请实施例提供的条形码定位方法,包括如下步骤S101至步骤S104:
步骤S101、获取条形码图像。
在应用中,终端设备在需要识别物体上的条形码时,通过终端设备的摄像头拍摄物体上条形码所在区域的图像,获得条形码图像,条形码图像包括条形码区域和除条形码区域之外的背景区域,例如,商品包装袋的条形码图像包括条形码区域和除条形码区域之外的商品编号、商品成分表、生产日期、保质期等背景区域。
步骤S102、对所述条形码图像进行直线检测,获得直线检测结果。
在应用中,可以通过任意常用的直线检测算法来检测条形码图像中的直线,例如,霍夫变换(Hough Transfrom)直线检测算法、直线段检测(a Line Segment Detector,LSD)算法、快速直线检测(Fast Line Detector,FLD)算法等。直线检测结果为过滤掉直线之外的其他像素、仅包括直线的图像。
步骤S103、对所述直线检测结果中直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种。
在应用中,直线检测结果中除了包含条形码的条之外,还包含背景区域中的直线或类直线,因此,需要进一步的根据条形码的条的直线特征,来过滤直线检测结果中背景区域的直线或类直线。具体的,可以根据条形码的条的中心位置、角度、长度、离群点等特征,来过滤掉直线检测结果中不符合条形码中这些特征的特性的直线或类直线。中心位置是指直线检测结果中的直线的中心点的位置。角度是指直线检测结果中的直线相对于第一方向的角度,第一方向可以根据实际需要设置为条形码图像的水平方向或垂直方向,条形码图像的水平方向即为条形码图像的行像素所在的方向、垂直方向即为列像素所在的方向。离群点是指通过离群点检测算法,检测出的不属于条形码的条的像素点,离群点检测算法具体可以是基于高斯分布的一元离群点检测算法。直线过滤结果是过滤掉直线检测结果中不符合条形码中这些特征的特性的直线或类直线之后的图像。
在应用中,可以根据实际需要选择中心位置、角度、长度和离群点中的至少一种特征来过滤背景区域的直线或类直线。当选择其中的至少两个特征来过滤背景区域的直线或类直线时,这至少两个特征的使用顺序可以根据实际需要进行设置。例如,当选择中心位置、角度、长度和离群点这四个特征来过滤直线检测结果时,可以依次根据这四个特征来过滤直线检测结果。具体的,可以先根据中心位置过滤直线检测结果,获得第一过滤结果;再根据角度来过滤第一过滤结果,获得第二过滤结果;然后根据长度来过滤第二过滤结果,获得第三过滤结果;最后根据离群点过滤第三过滤结果,获得最终的直线过滤结果。
步骤S104、根据所述直线过滤结果中所有直线的端点位置,定位所述直线过滤结果中的条形码区域。
在应用中,对直线检测结果中不符合条形码区域的直线特征的特性的直线进行过滤之后,所获得的直线过滤结果仅包含条形码的条,根据直线过滤结果中所有直线的端点位置,即可定位条形码区域。由于条形码区域通常是形状规则的矩形或类矩形,因此,根据直线过滤结果中所有直线的端点位置,确定条形码区域的四个角点中的任意一组对角点的位置,即可实现对条形码区域的定位,为了进一步提高定位准确度,可以根据直线过滤结果中所有直线的端点位置,确定条形码区域的全部四个角点的位置。
如图2所示,在一个实施例中,步骤S103包括如下步骤S201至步骤S204:
步骤S201、对所述直线检测结果中中心位置周围预设区域内的直线数量少于预设数量的直线进行过滤,获得第一过滤结果。
在应用中,由于条形码是由若干宽度不完全相等的条组成,条形码中每个条周围都存在一定数量的其他条,因此,当直线检测结果中的某条直线的中心位置周围的直线数量较少时,可以认为该条直线不属于条形码区域,需要过滤掉。预设区域可以根据实际需要设置为一个预设像素大小的滑动窗口,使用该滑动窗口在直线检测结果的图像中滑动,对位于该滑动窗口中中心位置周围的直线数量较少的直线进行过滤。预设像素大小可以根据实际需要设置为M×M,预设数量可以根据实际需要设置为M,M应当小于或等于条形码中的条的数量;其中,M为奇数,例如,M=3或M=5。第一过滤结果是过滤掉直线检测结果中中心位置周围的直线数量较少的直线之后的图像。
如图3所示,在一个实施例中,步骤S201包括如下步骤S301至步骤S305:
S301、获取所述直线检测结果中每条直线的中心位置;
S302、创建与所述条形码图像大小相等的矩阵;
S303、将所述矩阵中与每条直线的中心位置对应的元素标记为预设数值、剩余元素标记为0;
S304、采用预设像素大小的滑动窗口遍历所述矩阵并在遍历过程中获取位于所述滑动窗口中的所有元素的数值之和;
S305、当位于所述滑动窗口中的所有元素的数值之和大于或等于预设数值与预设数量的乘积时,保留所述滑动窗口中标记为预设数值的元素对应的中心位置所在的直线,获得第一过滤结果。
在应用中,矩阵的大小与条形码图像的像素大小相等。预设数值可以根据实际需要设置为任意不等于0的数值,例如,1。当滑动窗口仅覆盖到位于条形码边缘区域的元素,会使得位于滑动窗口中的所有元素的数值之和小于预设数值与预设数量的乘积,此时若过滤掉滑动窗口中标记为预设数值的元素对应的中心位置所在的直线,会导致位于条形码边缘区域的条被误过滤,为了避免这种情况发生,在位于滑动窗口中的所有元素的数值之和大于或等于预设数值与预设数量的乘积时,采用保留滑动窗口中标记为预设数值的元素对应的中心位置所在的直线的方式,来避免符合要求的直线被误过滤。
如图4所示,示例性的示出了一个像素大小为26×26的矩阵;其中,矩阵中与每条直线的中心位置对应的元素标记为1,位于矩形框41中的元素(即位于第12行、第8列至第16列的元素)为位于条形码区域的元素;滑动窗口标示为一个像素大小为3×3矩形框42,位于滑动窗口42中的所有元素的数值之和为1、小于1×3,滑动窗口42中的元素1对应的中心位置所在的直线不保留、需要被过滤掉;当滑动窗口位于矩形框43所在的位置时,滑动窗口仅覆盖到位于条形码边缘区域的元素(即位于第12行、第8列和第9列的两个元素1)。
步骤S202、对所述第一过滤结果中相对于第一方向的角度与预设角度平均值之间的差异大于预设角度阈值的直线进行过滤,获得第二过滤结果;其中,所述第一方向为所述条形码图像的水平方向或垂直方向。
在应用中,当背景区域存在位于条形码区域的直线时,需要进一步的对第一过滤结果进行过滤,由于条形码中所有条都是相互平行的,因此,条形码中所有条相对于第一方向的角度都是相同的,当第一过滤结果中某条直线不符合条形码中条的角度要求时,可以认为该条直线不属于条形码区域,需要过滤掉。预设角度平均值可以根据实际需要设置为与第一过滤结果中所有直线相对于第一方向的角度分布特性相关的角度,例如,可以获取第一过滤结果中的所有直线相对于第一方向的角度,然后获得这些直线相对于第一方向的角度在多个连续的不同角度范围内的分布数量,最后将在某个角度范围内的分布数量最多的直线相对于第一方向的角度的平均值,作为预设角度平均值;具体的,多个连续的不同角度范围可以设置为0°~A°、A°~2A°、…、m A°~90°;其中,A°>0°,(m+1)A°=90°,A°表示预设角度,m为正整数。预设角度可以根据实际需要设置为大于0°的任意角度,例如,6°~8°中的任意角度。第二过滤结果是过滤掉第一过滤结果中不符合条形码中条的角度要求的直线之后的图像。
如图5所示,在一个实施例中,步骤S202包括如下步骤S501至步骤S506:
步骤S501、获取所述第一过滤结果中的所有直线相对于第一方向的角度;
步骤S502、获取所述所有直线相对于第一方向的角度中的最大角度和最小角度;
步骤S503、以所述所有直线相对于第一方向的角度为变量、预设角度为组距、所述最大角度和所述最小角度之差与所述预设角度的比值向上取整为组数,建立第一直方图;
步骤S504、获取位于所述第一直方图的峰值区域的所有角度的角度平均值;
步骤S505、分别获取所述第一过滤结果中的每条直线相对于第一方向的角度与所述角度平均值之间的绝对差值;
步骤S506、过滤所述第一过滤结果中相对于第一方向的角度与所述角度平均值之间的绝对差值大于预设角度差值的直线,获得第二过滤结果。
在应用中,第一直方图的组数的计算公式为:K1=ceil((Amax°-Amin°)/A°);其中,K1表示第一直方图的组数,ceil()表示向上取整函数,Amax°表示最大角度,Amin°表示最小角度,A°表示预设角度。假设最大角度为60°、最小角度为0°、组距为8°,则组数K1=ceil((60°-0°)/8°)=8。
在应用中,角度平均值的计算公式为:Aave=∑(A1°+A2°+…+AN°)/N;其中,Aave表示角度平均值,∑()表示求和公式,A1°、A2°、…、AN°表示位于第一直方图的峰值区域的所有角度,N表示位于第一直方图的峰值区域的所有角度的数量。
在应用中,任一直线相对于第一方向的角度与角度平均值之间的绝对差值的计算公式为Di=abs(Ai°-Aave);其中,Di表示任一直线相对于第一方向的角度与角度平均值之间的绝对差值,abs()表示绝对值函数,Ai°表示任一直线相对于第一方向的角度,Aave表示角度平均值。预设角度差值可以根据实际需要设置为一个小于或等于预设角度的值,例如,6°。
如图6所示,示例性的示出了一个第一直方图;其中,组距为8°,组数为8,各组的频数分别为1、2、6、2、0、0、1、1。
步骤S203、对所述第二过滤结果中长度与预设长度平均值之间的差异大于预设长度阈值的直线进行过滤,获得第三过滤结果。
在应用中,当背景区域存在相对于第一方向的角度与条形码区域中条相对于第一方向的角度相同的直线时,需要进一步的对第二过滤结果进行过滤,由于条形码中所有条的长度都相等或者大部分条的长度相等,因此,当第一过滤结果中某条直线不符合条形码中条的长度要求时,可以认为该条直线不属于条形码区域,需要过滤掉。预设长度平均值可以根据实际需要设置为与第二过滤结果中所有直线的长度分布特性相关的长度,例如,可以获取第二过滤结果中的所有直线的长度,然后获得这些直线的长度在多个连续的不同长度范围内的分布数量,最后将在某个长度范围内的分布数量最多的直线的长度的平均值,作为预设长度平均值;具体的,多个连续的不同长度范围可以设置为0~L、L~2L、…、n L~(n+1)L;其中,L表示预设长度,n为正整数。预设长度可以根据实际需要设置为大于0的任意长度,例如,2或3个像素长度。第三过滤结果是过滤掉第二过滤结果中不符合条形码中条的长度要求的直线之后的图像。
如图7所示,在一个实施例中,步骤S203包括如下步骤S701至步骤S706:
步骤S701、获取所述第二过滤结果中的所有直线的长度;
步骤S702、获取所述所有直线的长度中的最大长度和最小长度;
步骤S703、以所述所有直线的长度为变量、预设长度为组距、所述最大长度和所述最小长度之差与所述预设长度的比值向上取整为组数,建立第二直方图;
步骤S704、获取位于所述第二直方图的峰值区域的长度的长度平均值;
步骤S705、分别获取所述第二过滤结果中每条直线的长度与所述长度平均值之间的绝对差值;
步骤S706、过滤所述第二过滤结果中长度与所述长度平均值之间的绝对差值大于预设长度差值的直线,获得第三过滤结果;其中,所述预设长度差值小于所述预设长度。
在应用中,第二直方图的组数的计算公式为:K2=ceil((Lmax-Lmin)/L);其中,K2表示第二直方图的组数,ceil()表示向上取整函数,Lmax表示最大长度,Lmin表示最小长度,L表示预设长度。假设最大长度为20个像素长度、最小长度为5个像素长度、组距为3个像素长度,则组数K2=ceil((20-5)/3)=5。
在应用中,长度平均值的计算公式为:Lave=∑(L1+L2+…+LQ)/Q;其中,Lave表示长度平均值,∑()表示求和公式,L1、L2、…、LQ表示位于第二直方图的峰值区域的所有长度,Q表示位于第二直方图的峰值区域的所有长度的数量。
在应用中,任一直线的长度与长度平均值之间的绝对差值的计算公式为di=abs(Li°-Lave);其中,di表示任一直线的长度与长度平均值之间的绝对差值,abs()表示绝对值函数,Li表示任一直线的长度,Lave表示长度平均值。预设长度差值可以根据实际需要设置为一个小于或等于预设长度的值,例如,2个像素长度。
如图8所示,示例性的示出了一个第二直方图;其中,组距为3个像素长度,组数为5,各组的频数分别为1、2、5、2、0。
步骤S204、对所述第三过滤结果中离群点所在的直线进行过滤,获得直线过滤结果。
在应用中,当背景区域存在与条形码区域中条的长度相同的直线时,需要进一步的对第三过滤结果进行过滤。具体可以采用基于高斯分布的一元离群点检测算法,获取第三过滤结果中所有直线的中心位置在预设直角坐标系中的x坐标和y坐标,然后获取第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标标准差、x坐标平均值和x坐标标准差,过滤掉第三过滤结果中中心位置的y坐标与y坐标平均值之间的绝对差值大于第一预设倍数的y坐标标准差的直线,以及中心位置的x坐标与x坐标平均值之间的绝对差值大于第二预设倍数的x坐标标准差的直线。第一预设倍数和第二预设倍数可以根据实际需要进行设置,例如,第一预设倍数和第二预设倍数都为3。直线过滤结果是过滤掉第三过滤结果中中心位置为离群点的直线之后的图像。
如图9所示,在一个实施例中,步骤S204包括如下步骤S901至步骤S910:
步骤S901、获取所述第三过滤结果中的所有直线的中心位置在预设直角坐标系中的x坐标和y坐标,进入步骤S902;其中,预设直角坐标系的x轴方向为所述第一方向、y轴方向为垂直于所述第一方向的第二方向;
步骤S902、获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差,进入步骤S903;
步骤S903、判断所述y坐标方差是否小于预设y坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差的次数是否达到第一预设次数;若是,则进入步骤S906;否则,进入步骤S904;
步骤S904、当所述y坐标方差小于预设y坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差的次数达到第一预设次数时,分别获取所述第三过滤结果中每条直线的中心位置的y坐标与所述y坐标平均值之间的绝对差值,进入步骤S905;
步骤S905、过滤所述第三过滤结果中中心位置的y坐标与所述y坐标平均值之间的绝对差值大于预设y坐标差值的直线,并返回步骤S902;
步骤S906、当所述y坐标方差小于预设y坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差的次数达到第一预设次数时,获取所述所有直线的中心位置的x坐标平均值和x坐标方差,进入步骤S907;
步骤S907、判断所述x坐标方差是否小于预设x坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差的次数是否达到第二预设次数;若是,则进入步骤S910;否则,进入步骤S908;
步骤S908、当所述x坐标方差大于或等于预设x坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差的次数未达到第二预设次数时,分别获取所述第三过滤结果中每条直线的中心位置的x坐标与所述x坐标平均值之间的绝对差值,进入步骤S909;
步骤S909、过滤所述第三过滤结果中中心位置的x坐标与所述x坐标平均值之间的绝对差值大于预设x坐标差值的直线,并返回步骤S906;
步骤S910、当所述x坐标方差小于预设x坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差的次数达到第二预设次数时,将所述第三过滤结果中的剩余直线作为直线过滤结果。
在应用中,预设y坐标方差、预设x坐标方差、第一预设次数和第二预设次数都可以根据实际需要进行设置,例如,预设y坐标方差为30.0,预设x坐标方差为200.0,第一预设次数和第二预设次数都为3。
在应用中,任一直线的中心位置的y坐标与y坐标平均值之间的绝对差值的计算公式为:Dj=abs(yj-yave);其中,Dj表示任一直线的的中心位置的y坐标与y坐标平均值之间的绝对差值,abs()表示绝对值函数,yj表示任一直线的中心位置的y坐标,yave表示y坐标平均值。
在应用中,任一直线的中心位置的x坐标与x坐标平均值之间的绝对差值的计算公式为:dj=abs(xj-xave);其中,dj表示任一直线的的中心位置的x坐标与x坐标平均值之间的绝对差值,abs()表示绝对值函数,xj表示任一直线的中心位置的x坐标,xave表示x坐标平均值。
在一个实施例中,基于图9所对应的实施例,步骤S104包括:
获取所述直线过滤结果中所有直线的x坐标中的最大x坐标和最小x坐标;
获取所述直线过滤结果中所有直线的y坐标中的最大y坐标和最小y坐标;
确定条形码区域的第一角点的x坐标为所述最小x坐标、y坐标为所述最小y坐标,与所述第一角点互为对角点的第二角点的x坐标为所述最大x坐标、y坐标所述最大y坐标;和/或,确定条形码区域的第三角点的x坐标为所述最大x坐标、y坐标为所述最小y坐标,与所述第三角点互为对角点的第四角点的x坐标为所述最小x坐标、y坐标所述最大y坐标。
在应用中,根据直线过滤结果定位条形码区域需要确定条形码区域的四个角点中的任意一组对角点的位置,或者,确定条形码区域的全部四个角点的位置。条形码区域的四个角点包括:直线过滤结果中位于最小x坐标、最小y坐标处的第一角点,位于最大x坐标、最大y坐标处的第二角度,位于最大x坐标、最小y坐标处的第三角点,以及位于最小x坐标、最大y坐标处的第四角点;其中,第一角点和第二角点互为对角点,第三角点和第四角点互为对角点。
本申请实施例所提供的条形码定位方法可以准确的筛选出条形码图像中符合条形码特征的直线,并根据筛选出的所有直线的端点位置定位条形码区域,不受环境光线不足、条形码不全、条形码图像模糊、条形码被遮挡、条形码图像的背景复杂等问题的影响,鲁棒性强且准确度高,能够广泛应用于条码支付、商品编号唯一标识、资产盘点等领域,能够有效提高这些领域的准确度。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例还提供一种条形码定位装置,用于执行上述条形码定位方法实施例中的步骤。条形码定位装置可以是终端设备中的虚拟装置(virtual appliance),由终端设备的处理器运行,也可以是终端设备本身。
如图10所示,本申请实施例提供的条形码定位装置10包括:
图像获取模块101,用于获取条形码图像;
直线检测模块102,用于对所述条形码图像进行直线检测,获得直线检测结果;
直线过滤模块103,用于对所述直线检测结果中直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种;
定位模块104,用于根据所述直线过滤结果中所有直线的端点位置,确定所述直线过滤结果中的条形码区域的位置。
在应用中,数据存储装置中的各模块可以为软件程序模块,也可以通过处理器中集成的不同逻辑电路实现,还可以通过多个分布式处理器实现。
如图11所示,本申请实施例提供一种终端设备11包括:摄像头110、至少一个处理器111(图11中仅示出一个处理器)、存储器112以及存储在存储器113中并可在至少一个处理器111上运行的计算机程序113,处理器111执行计算机程序113时实现上述各个条形码定位方法实施例中的步骤。
在应用中,终端设备可包括,但不仅限于,摄像头、处理器、存储器。本领域技术人员可以理解,图11仅仅是终端设备的举例,并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
在应用中,处理器可以是中央处理单元(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在应用中,存储器在一些实施例中可以是终端设备的内部存储单元,例如终端设备的硬盘或内存。存储器在另一些实施例中也可以是终端设备的外部存储设备,例如终端设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器还可以既包括终端设备的内部存储单元也包括外部存储设备。存储器用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如计算机程序的程序代码等。存储器还可以用于暂时地存储已经输出或者将要输出的数据。
需要说明的是,上述装置/模块之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中,上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例的条形码定位方法。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述任一实施例的条形码定位方法。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质至少可以包括:能够将计算机程序代码携带到终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置、终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置、终端设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或模块的间接耦合或通讯连接,可以是电性,机械或其它的形式。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (9)
1.一种条形码定位方法,其特征在于,包括:
获取条形码图像;
对所述条形码图像进行直线检测,获得直线检测结果;
对所述直线检测结果中,中心位置周围预设区域内的直线数量少于预设数量的直线进行过滤,获得第一过滤结果;
对所述第一过滤结果中相对于第一方向的角度与预设角度平均值之间的差异大于预设角度阈值的直线进行过滤,获得第二过滤结果;其中,所述第一方向为所述条形码图像的水平方向或垂直方向;
对所述第二过滤结果中长度与预设长度平均值之间的差异大于预设长度阈值的直线进行过滤,获得第三过滤结果;
对所述第三过滤结果中离群点所在的直线进行过滤,获得直线过滤结果;
其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种;
根据所述直线过滤结果中所有直线的端点位置,定位所述直线过滤结果中的条形码区域。
2.如权利要求1所述的条形码定位方法,其特征在于,所述对所述直线检测结果中中心位置附近存在的直线少于预设数量的直线进行过滤,获得第一过滤结果,包括:
获取所述直线检测结果中每条直线的中心位置;
创建与所述条形码图像大小相等的矩阵;
将所述矩阵中与每条直线的中心位置对应的元素标记为预设数值、剩余元素标记为0;
采用预设像素大小的滑动窗口遍历所述矩阵并在遍历过程中获取位于所述滑动窗口中的所有元素的数值之和;
当位于所述滑动窗口中的所有元素的数值之和大于或等于预设数值与预设数量的乘积时,保留所述滑动窗口中标记为预设数值的元素对应的中心位置所在的直线,获得第一过滤结果。
3.如权利要求1所述的条形码定位方法,其特征在于,所述对所述第一过滤结果中相对于第一方向的角度与预设角度平均值之间的差异大于预设角度阈值的直线进行过滤,获得第二过滤结果,包括:
获取所述第一过滤结果中的所有直线相对于第一方向的角度;
获取所述所有直线相对于第一方向的角度中的最大角度和最小角度;
以所述所有直线相对于第一方向的角度为变量、预设角度为组距、所述最大角度和所述最小角度之差与所述预设角度的比值向上取整为组数,建立第一直方图;
获取位于所述第一直方图的峰值区域的所有角度的角度平均值;
分别获取所述第一过滤结果中的每条直线相对于第一方向的角度与所述角度平均值之间的绝对差值;
过滤所述第一过滤结果中相对于第一方向的角度与所述角度平均值之间的绝对差值大于预设角度差值的直线,获得第二过滤结果;其中,所述预设角度差值小于或等于所述预设角度。
4.如权利要求1所述的条形码定位方法,其特征在于,所述对所述第二过滤结果中长度与预设长度平均值之间的差异大于预设长度阈值的直线进行过滤,获得第三过滤结果,包括:
获取所述第二过滤结果中的所有直线的长度;
获取所述所有直线的长度中的最大长度和最小长度;
以所述所有直线的长度为变量、预设长度为组距、所述最大长度和所述最小长度之差与所述预设长度的比值向上取整为组数,建立第二直方图;
获取位于所述第二直方图的峰值区域的长度的长度平均值;
分别获取所述第二过滤结果中每条直线的长度与所述长度平均值之间的绝对差值;
过滤所述第二过滤结果中长度与所述长度平均值之间的绝对差值大于预设长度差值的直线,获得第三过滤结果;其中,所述预设长度差值小于或等于所述预设长度。
5.如权利要求1至4任一项所述的条形码定位方法,其特征在于,所述对所述第三过滤结果中离群点所在的直线进行过滤,获得直线过滤结果,包括:
获取所述第三过滤结果中的所有直线的中心位置在预设直角坐标系中的x坐标和y坐标;其中,预设直角坐标系的x轴方向为所述第一方向、y轴方向为垂直于所述第一方向的第二方向;
获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差;
当所述y坐标方差大于或等于预设y坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差的次数未达到第一预设次数时,分别获取所述第三过滤结果中每条直线的中心位置的y坐标与所述y坐标平均值之间的绝对差值;
过滤所述第三过滤结果中中心位置的y坐标与所述y坐标平均值之间的绝对差值大于预设y坐标差值的直线,并返回获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差;
当所述y坐标方差小于预设y坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的y坐标平均值和y坐标方差的次数达到第一预设次数时,获取所述所有直线的中心位置的x坐标平均值和x坐标方差;
当所述x坐标方差大于或等于预设x坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差的次数未达到第二预设次数时,分别获取所述第三过滤结果中每条直线的中心位置的x坐标与所述x坐标平均值之间的绝对差值;
过滤所述第三过滤结果中中心位置的x坐标与所述x坐标平均值之间的绝对差值大于预设x坐标差值的直线,并返回获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差;
当所述x坐标方差小于预设x坐标方差,或者,获取所述第三过滤结果中的所有直线的中心位置的x坐标平均值和x坐标方差的次数达到第二预设次数时,将所述第三过滤结果中的剩余直线作为直线过滤结果。
6.如权利要求5所述的条形码定位方法,其特征在于,所述根据所述直线过滤结果中所有直线的端点位置,定位所述过滤结果中的条形码区域,包括:
获取所述直线过滤结果中所有直线的x坐标中的最大x坐标和最小x坐标;
获取所述直线过滤结果中所有直线的y坐标中的最大y坐标和最小y坐标;
确定条形码区域的第一角点的x坐标为所述最小x坐标、y坐标为所述最小y坐标,与所述第一角点互为对角点的第二角点的x坐标为所述最大x坐标、y坐标所述最大y坐标;和/或,确定条形码区域的第三角点的x坐标为所述最大x坐标、y坐标为所述最小y坐标,与所述第三角点互为对角点的第四角点的x坐标为所述最小x坐标、y坐标所述最大y坐标。
7.一种条形码定位装置,其特征在于,包括:
图像获取模块,用于获取条形码图像;
直线检测模块,用于对所述条形码图像进行直线检测,获得直线检测结果;
直线过滤模块,用于对所述直线检测结果中直线特征不符合预设条件的直线进行过滤,获得直线过滤结果;其中,所述直线特征包括中心位置、角度、长度和离群点中的至少一种;
定位模块,用于根据所述直线过滤结果中所有直线的端点位置,确定所述直线过滤结果中的条形码区域的位置;
所述直线过滤模块,具体用于:
对所述直线检测结果中中心位置周围预设区域内的直线数量少于预设数量的直线进行过滤,获得第一过滤结果;
对所述第一过滤结果中相对于第一方向的角度与预设角度平均值之间的差异大于预设角度阈值的直线进行过滤,获得第二过滤结果;其中,所述第一方向为所述条形码图像的水平方向或垂直方向;
对所述第二过滤结果中长度与预设长度平均值之间的差异大于预设长度阈值的直线进行过滤,获得第三过滤结果;
对所述第三过滤结果中离群点所在的直线进行过滤,获得直线过滤结果。
8.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述的条形码定位方法的步骤。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的条形码定位方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010830433.5A CN112101059B (zh) | 2020-08-18 | 2020-08-18 | 一种条形码定位方法、装置、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010830433.5A CN112101059B (zh) | 2020-08-18 | 2020-08-18 | 一种条形码定位方法、装置、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112101059A CN112101059A (zh) | 2020-12-18 |
CN112101059B true CN112101059B (zh) | 2023-10-10 |
Family
ID=73753860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010830433.5A Active CN112101059B (zh) | 2020-08-18 | 2020-08-18 | 一种条形码定位方法、装置、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112101059B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446750A (zh) * | 2016-07-07 | 2017-02-22 | 深圳市华汉伟业科技有限公司 | 一种条形码读取方法及装置 |
CN109784328A (zh) * | 2018-12-19 | 2019-05-21 | 新大陆数字技术股份有限公司 | 定位条码的方法、终端及计算机可读存储介质 |
CN110807342A (zh) * | 2019-10-18 | 2020-02-18 | 珠海市杰理科技股份有限公司 | 条形码定位方法、装置、计算机设备和存储介质 |
-
2020
- 2020-08-18 CN CN202010830433.5A patent/CN112101059B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446750A (zh) * | 2016-07-07 | 2017-02-22 | 深圳市华汉伟业科技有限公司 | 一种条形码读取方法及装置 |
CN109784328A (zh) * | 2018-12-19 | 2019-05-21 | 新大陆数字技术股份有限公司 | 定位条码的方法、终端及计算机可读存储介质 |
CN110807342A (zh) * | 2019-10-18 | 2020-02-18 | 珠海市杰理科技股份有限公司 | 条形码定位方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112101059A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110473242B (zh) | 一种纹理特征提取方法、纹理特征提取装置及终端设备 | |
CN109146855B (zh) | 一种图像摩尔纹检测方法、终端设备及存储介质 | |
CN107729790B (zh) | 二维码定位方法及装置 | |
CN105894464B (zh) | 一种中值滤波图像处理方法和装置 | |
CN109215037B (zh) | 目标图像分割方法、装置及终端设备 | |
CN108090486B (zh) | 一种台球比赛中的图像处理方法及装置 | |
WO2019019595A1 (zh) | 图片匹配方法及电子设备方法、装置、电子设备及介质 | |
CN109685764B (zh) | 产品定位方法、装置及终端设备 | |
CN115759148B (zh) | 图像处理方法、装置、计算机设备及计算机可读存储介质 | |
CN111860060A (zh) | 目标检测方法、装置、终端设备及计算机可读存储介质 | |
CN111144337A (zh) | 火灾检测方法、装置及终端设备 | |
CN113744256A (zh) | 一种深度图空洞填充方法、装置、服务器及可读存储介质 | |
CN111047496A (zh) | 阈值确定方法、水印检测方法、装置和电子设备 | |
CN111383178A (zh) | 一种图像增强方法、装置及终端设备 | |
CN111563517A (zh) | 图像处理方法、装置、电子设备及存储介质 | |
CN108960246B (zh) | 一种用于图像识别的二值化处理装置及方法 | |
CN112101059B (zh) | 一种条形码定位方法、装置、终端设备及存储介质 | |
CN111768345A (zh) | 身份证背面图像的校正方法、装置、设备及存储介质 | |
CN111768346B (zh) | 身份证背面图像的校正方法、装置、设备及存储介质 | |
Kim et al. | Algorithm of a perspective transform-based PDF417 barcode recognition | |
CN112200004A (zh) | 图像检测模型的训练方法、装置及终端设备 | |
CN116030280A (zh) | 一种模板匹配方法、装置、存储介质及设备 | |
CN114419193B (zh) | 图像绘制方法、装置、电子设备及计算机可读存储介质 | |
CN113947529B (zh) | 图像增强方法、模型训练方法、构件识别方法及相关设备 | |
CN115829929A (zh) | 产品表面图像的缺陷检测方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |