把语义分割霸王Segment-Anything变成一个云服务会怎样?

前言

        几个月前接触到了Meta AI做的Segment-Anything这个项目,只能说碉堡了,像下图一样的风景照,往水面一点就把水面分割出来了。要是在以往的CV方法滤色,过滤水面是很麻烦的事情。

        那么有了这么一个神器,就可以做更多的视觉分割的操作了(比如分割监控画面中的水域,搭配YOLO来检测危险等等)。

限制与新的设想

        但是官方放出来的最小模型ViT-B SAM model也有358MB,默认模型更是高达2.4GB,在性能凑合,内存不大的边缘设备(比如树莓派或更小的Linux嵌入式系统)上的运行是一种灾难。

        所以我萌生了一种想法,将Segment-Anything封装成API,在带GPU的云服务器上运行,边缘设备只需要发送图像和标记点就可以获得语义分割后的掩膜。

        我使用Flask写了一个HTTP服务,在服务器上运行后,客户端只需要先发送OpenCV图像到服务器进行分析,然后发送标记点即可返回掩膜。简单的opencv-python程序演示如下:

用法

使用起来十分简单,只需在服务器部署服务端,然后客户端通过简单的HTTP请求即可获得语义分割后的掩膜,不需要边缘设备有高AI算力与大内存。

部署服务端

        在服务器安装标准的Segment-Anything,然后部署这个flask服务(代码仓库在文末)。

客户端使用

  1. 用opencv-python发送图像给Segment-Anything进行分析:

    import cv2
    import requests
    
    img = cv2.imread(img_path)
    img_byte = cv2.imencode('.jpg', img)[1].tobytes()
    requests.post(f'{server_address}/setimg', img_byte).content
  2. 发送标点给服务,即可返回编码后的掩膜,并解析:

    import cv2
    import requests
    
    img = cv2.imread(img_path)
    img_byte = cv2.imencode('.jpg', img)[1].tobytes()
    requests.post(f'{server_address}/setimg', img_byte).content

    这样就获得了一个掩膜的numpy矩阵(矩阵内数据类型为numpy.bool)。

        服务端代码我放在GitHub:https://github.com/Huge-Lee/segment-anything-flask,希望这个小项目能给大家的边缘AI开发提供帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值