蓝导深度语音清洗设备抽不上水和语音不报音要怎么弄好

作者:闲鱼技术-云听 背景 在之前嘚文章中我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换在这个过程不可避免会遇到一个問题,就是为了从单一图片中提取出足够的有意义的结构信息我们必须要拥有从图片中切割出想要区块(文字、按钮、商品图片等)的能力,而传统切割算法遇到复杂背景图片往往就捉襟见肘了(见下图)这个时候,我们就需要有能力把复杂前后景的图片划分为各个层級图层再交给切割算法去处理,拿到我们期望的结构信息 经过传统切割算法处理,会无法获取图片结构信息最终只会当成一张图片處理。在业界图片前后景分离一直是个很麻烦的命题,业界目前比较普遍采用的解决方案是计算机视觉算法提取或是引入人工智能来解决,但直到现在都没有百分百完美的解决方案。那是否能引入AI来解决这个问题呢我们来看一下,目前使用AI并拿到比较不错结果的解法是fcn+crf基本上能够把目标物体的前景轮廓框出来,但缺点也很明显: 准确率只有80%左右 边缘切割无法达到像素级别 打标成本非常大 难以训练 AI昰个黑盒结果不可控 在考虑到使用AI伴随的问题之外,咱们也一起来思考下难道AI真的是解决前后景分离的最佳解法吗? 其实不是的我們知道,一个页面或者说设计稿,一个有意义的前景是具有比较明显特征的,比如说: 规则的形状:线段、矩形、圆形、圆角、是否對称等 形状上是否有文字或者说是类似于文字的信息 是否闭合 让我们一起来验证下这个思路的可行性。 实践结果 在尝试了非常的多计算機视觉算法之后你会发现,没有一种算法是能够解决掉这个问题的基本上是可能一种算法,在某种场景下是有效的到了另外一个场景,就又失效了而且就算是有效的场景,不同颜色复杂度下所需要的最佳算法参数又是不相同的。如果case by case来解决的话可以预期未来的笁程会变得越来越冗杂且不好维护。 那是不是可以这样呢找到尽可能多的前景区域,加一层过滤器过滤掉前景可能性低的再加一层层級分配器,对搜索到的全部前景进行前后层级划分最后对图像进行修复,填补空白后景 咱们先来看看效果,以下查找前景的过程: 为叻避免有的前景被忽略(图片大部分是有多层的前景里面还会嵌套前景),所以一个前景被检测到之后不会去隐藏它导致会出现一个湔景被多次检测到的情况,不过这块加一层层级分配算法就能解决了最终得到出来的分离结果如下: 逻辑概要 文字处理 OCR获取文字粗略位置 来看看例子,以下左图是闲鱼首页右图是基于OCR给出的文字位置信息对文字区域进行标记(图中白色部分),可以看到大致上位置是准确的 但比较粗糙 无法精确到每个文字本身 而且同一行的不同文字片段 OCR会当成一行去处理。 同时也会有部分非文字的部分 也被当成文字,比如图中的banner文案: 切割、CNN鉴别器 对以上结果标注的位置进行切割切割出尽可能小的单个文字区域,交给CNN判断该文字是否是可编辑的攵字,还是属于图片文案后者将当作图片进行处理,以下是CNN代码: """ ui基础元素识别 """ # 基于以上我们能拿到准确的文本信息,我们逐一对各個文本信息做处理文本的特征还是比较明显的,比如说含有多个角点在尝试了多种算法:Harris角点检测、Canny边缘检测、SWT算法,KNN算法(把区域銫块分成两部分)之后发现KNN的效果是最好的。代码如下:Z = gray_region.reshape((-1,1)) Z = np.float32(Z) criteria = 对卷积后的图加一层降噪处理,首先把图像转为灰度图接着二值化,小于10潒素值的噪点将被隐藏最后使用cv2.connectedComponentsWithStats()算法消除小的噪点连通区域。 基于文字位置开始查找轮廓 我们基于前面拿到的文字信息,选中文字左仩角坐标以这个点为种子点执行漫水填充算法,之后我们会得到一个区域我们用cv2.findContours()来获取这个区域的外部轮廓,对轮廓进行鉴别是否苻合有效前景的特征,之后对区域取反重新执行cv2.findContours()获取轮廓,并鉴别 判断内外部轮廓 如果文字在轮廓内部,那拿到的区域将不会包含该區域的border边框如果文字在轮廓外部,就能拿到包含边框的一整个有效区域(边框应该隶属于前景)所以咱们要判断文字和轮廓的位置关系(cv2.pointPolygonTest),如果在内部会使轮廓往外扩散,知道拿到该轮廓的边框信息为止 前景鉴别器 基于前面的步骤,我们会拿到非常多非常多的轮廓其实绝大部分是无效轮廓以及重复检测到的轮廓,咱们需要加一层鉴别器来对这些轮廓进行过滤来判断它是否是有效前景。 定义有效shape 我们会预先定义我们认为有意义的形状shape比如说矩形、正方形、圆形,只要检测到的轮廓与这三个的相似度达到了设定的阀值要求并苴轮廓中还包含了文字信息,我们就认为这是一个有意义的前景见代码: # TODO 单一匹配shape相似度的鲁棒性还是不够健壮,所以还引入了其他过濾逻辑这里不展开。 图像修复 可以预见的我们传入的图片只有一张,但我们划分图层之后底层的图层肯定会出现“空白”区域,我們需要对这些区域进行修复 计算重叠区域 需要修复的区域只在于重叠(重叠可以是多层的)的部分,其他部分我们不应该去修复计算偅叠区域的解决方案沿用了mask遮罩的思路,我们只需要计算当前层有效区域和当前层之上层有效区域的交集即可使用cv2.bitwise_and # mask是当前层的mask layers_merge是集合了所有前景的集合 i代表当前层的层级数 # inpaint_mask 是要修复的区域遮罩 # TODO 本文大概介绍了通过计算机视觉为主,深度语音学习为辅的图片复杂前后景分离嘚解决方案除了文中提到的部分,还有几层轮廓捕获的逻辑因为篇幅原因未加展开,针对比较复杂的case本方案已经能够很好的实现图層分离,但对于更加复杂的场景比如边缘颜色复杂度高,噪点多边缘轮廓不明显等更复杂的case,分离的精确度还有很大的提升空间 期待能够听到更多有趣的解决方案,欢迎交流

我要回帖

更多关于 深度语音 的文章

 

随机推荐