利用文本探测(text-detection)手写一个文本区域mask的生成

前情描述 

        今天遇到这样一个需求:需要针对用户输入的图片生成对应文本区域的mask,按理说这应该是一个很容易实现的问题。

初步设想

        第一步、加载图片

        要生成对应区域的mask,首先要找到文本所在的位置,针对不同的图片,文本位置自然是不同的,所以text-detection文本探测就很必然要用到,于是就很自然的用到cv2以及easyocr,先将原图片加载进来:

def load_image(image_path):
    return cv2.imread(image_path)
        第二步、文本探测 

        然后用easyocr创建一个reader对象来读取图片中的文本(也就是文本探测)而后根据所得到的文本结果生成所需要的mask即可:

    image = load_image(image_path)
    reader = easyocr.Reader(['en', 'ch_sim'])  # Initialize EasyOCR reader

    # Perform text detection and recognition
    results = reader.readtext(image)
    detected_text = [result[1] for result in results]

    # Generate mask
    text_boxes = [result[0] for result in results]
    mask = generate_text_mask(image, text_boxes)
        第三步、生成mask 

        最后,将生成的mask保存即可:

    # Save mask
    mask_filename = "text_mask_with_replacement.png"
    save_mask(mask, mask_filename)
        第四步、注意事项 

        注意,在这里面之所以命名为text_mask_with_replacemet是因为后续有在mask区域写入文字的操作 ,因为本篇重在讲mask生成,而且写入的这个操作work效果并不好,所以不再特殊提起,希望读者明晰。

进一步思考

        生成到这里,打开mask一开,好家伙,黑白的mask,但是我需要的是灰白的呀!!!于是还得改,那怎么改呢?       

        首先,我是想文字区域是黑色,但是这得到的和我想要的完全相反,这可不行啊!诶,相反?我直接invert(反转)一下不就可以了吗,黑的变成了白的白的变成了黑的,说干就干:

    image = load_image(mask_filename)
    # Invert colors
    inverted_image = invert_colors(image)

    其中,具体函数如下:
    # Invert black and white colors in the image
    def invert_colors(image):
        inverted_image = cv2.bitwise_not(image)
        return inverted_image

        这样一来,黑的变成了白的,白的变成了黑的,看看效果!还可以。

         但是,项目需要的应该是灰色的mask,这黑色的mask在项目上跑,效果实在拉跨,所以我决定还是按照示例整一张灰色的mask出来,逻辑其实并不麻烦,只需要找到黑色区域,然后改成灰色的就可以了,在这里我用的是浅灰色:

    image = load_image(inverted_image_filename)
    # Convert black to light gray
    modified_image = convert_black_to_light_gray(image)

    其中,具体函数实现如下:

    def convert_black_to_light_gray(image):
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        mask = gray == 0
        image[mask] = [200, 200, 200]  # Light gray color
        return image

         工作做完了,我们来看看效果,果然和想象中的一样:

延伸阅读 

        哇塞,这文本探测也太棒了吧!!!

基于OpenCV的深度学习文本检测 - 知乎代码常言道:“一图胜千言”。在这篇文章中,我们将从字面上理解它,并试着在图片中找到单词!在之前的一篇关于 文本识别的文章中,我们讨论了Tesseract如何工作,以及如何将它与OpenCV一起用于文本检测和识别。这一…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/112909119

 完结撒花

        到此,就以自身项目实践为例子介绍了如何通过text-detection文本探测实现了文本位置探测以及对应位置mask的生成,因为实际项目中存在以文字替换图片中文字的细节,这部分并没有处理的很好,所以并没有把完整的代码放出来,最近也在尝试其他方法解决这个问题。但是如果谁需要完整的代码的话不妨评论留言,我把这部分代码私发给你。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值