Unity实现识别图像中主体及其位置

目录
  • EasyDL图像分割介绍
  • 创建应用
  • 创建模型

EasyDL图像分割介绍

创建应用

1.进入百度AI开放平台打开控制台:

2.在左上角打开产品服务列表,找到EasyDL零门槛AI开放平台:

3.打开EasyDL图像:

4.在公有云部署-应用列表中创建一个应用:

5.创建完成后获取到AppID、API Key、Secret Key:

创建模型

1.进入EasyGL图像分割:

2.创建模型:

3.创建数据集:

4.数据导入:

上传图片,图片的数量尽量多些

导入完成后查看并标注:

框选目标所在范围:

添加标签并为框选的目标设置标签:

设置完成后保存当前标注:

5.训练模型:(开始训练后需要等待一定时间)

6.发布模型:

发布完成后,拿到接口地址,来到Unity中,根据接口响应字段说明定义相应数据结构:

using System;

[Serializable]
public class ImageSegmentationResponse
{
    /// <summary>
    /// 唯一的log id 用于问题定位
    /// </summary>
    public int log_id;
    /// <summary>
    /// 标签数组结果
    /// </summary>
    public ImageSegmentationResult[] results;
}
[Serializable]
public class ImageSegmentationResult
{
    /// <summary>
    /// 标签名称
    /// </summary>
    public string name;
    /// <summary>
    /// 置信度
    /// </summary>
    public string score;
    /// <summary>
    /// 位置
    /// </summary>
    public Location location;
    /// <summary>
    /// 基于游程编码的字符串,编码内容为和原图宽高相同的布尔数组
    /// 若数组值为0,代表原图此位置像素点不属于检测目标,若为1,代表原图此位置像素点属于检测目标
    /// </summary>
    public bool[] mask;
}
[Serializable]
public class Location
{
    /// <summary>
    /// 目标定位位置的长方形左上顶点的水平坐标
    /// </summary>
    public int left;
    /// <summary>
    /// 目标定位位置的长方形左上顶点的垂直坐标
    /// </summary>
    public int top;
    /// <summary>
    /// 目标定位位置的长方形的宽度
    /// </summary>
    public int width;
    /// <summary>
    /// 目标定位位置的长方形的高度
    /// </summary>
    public int height;
}

在任意一个模块下载C#SDK,例如在图像识别中下载,它是包含EasyDL的API内容的:

有了SDK后,放入Unity中的Plugins文件夹中,封装调用函数,只需要将检测图片的字节数据作为参数,其中appID、apiKey、secretKey是在上面创建应用时获取到的,url是发布模型时获取到的:

using System;
using UnityEngine;

/// <summary>
/// 图像分割
/// </summary>
public class ImageSegmentation
{
    private const string appID = "";
    private const string apiKey = "";
    private const string secretKey = "";
    private const string url = "";

    public static ImageSegmentationResult[] SendRequest(byte[] bytes)
    {
        var client = new Baidu.Aip.EasyDL.EasyDL(appID, apiKey, secretKey);
        try
        {
            var response = client.requestImage(url, bytes);
            Debug.Log(response.ToString());
            ImageSegmentationResponse r = JsonUtility.FromJson<ImageSegmentationResponse>(response.ToString());
            return r.results;

        }
        catch (Exception error)
        {
            Debug.LogError(error);
        }
        return null;
    }
}

测试图片:

测试代码:

using System.IO;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Start()
    {
        ImageSegmentation.SendRequest(File.ReadAllBytes(Application.dataPath + "/1.jpg"));
    }
}

返回结果:

拿到了定位数据后,接下来将其区域绘制出来, 响应说明中解释(left,top)构成左上顶点,但是从返回值来看top为16,减去一个高度312的话,左下顶点的坐标已经是负数,这里姑且猜想它构成的是左下顶点:

首先创建一个Image来放置我们的测试图片,Canvas、Image大小也设为测试图片的大小640 * 359:

以下是测试脚本,将其挂载于Image测试:

using System.IO;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Start()
    {
        var results = ImageSegmentation.SendRequest(File.ReadAllBytes(Application.dataPath + "/测试.jpg"));

        for (int i = 0; i < results.Length; i++)
        {
            var location = results[i].location;

            LineRenderer line = new GameObject("LineRenderer").AddComponent<LineRenderer>();
            line.positionCount = 4;
            line.loop = true;

            Vector2 leftTop = new Vector2(location.left, location.top);
            Vector2 rightTop = new Vector2(location.left + location.width, location.top);
            Vector2 leftBottom = new Vector2(location.left, location.top + location.height);
            Vector2 rightBottom = new Vector2(location.left + location.width, location.top + location.height);

            RectTransformUtility.ScreenPointToWorldPointInRectangle(transform as RectTransform, leftTop, Camera.main, out Vector3 point1);
            RectTransformUtility.ScreenPointToWorldPointInRectangle(transform as RectTransform, rightTop, Camera.main, out Vector3 point2);
            RectTransformUtility.ScreenPointToWorldPointInRectangle(transform as RectTransform, rightBottom, Camera.main, out Vector3 point3);
            RectTransformUtility.ScreenPointToWorldPointInRectangle(transform as RectTransform, leftBottom, Camera.main, out Vector3 point4);

            line.SetPosition(0, point1);
            line.SetPosition(1, point2);
            line.SetPosition(2, point3);
            line.SetPosition(3, point4);
        }
    }
}

emmm... 区域大概准确吧,可能测试的模型数据集足够丰富的话检测会更精确。

以上就是Unity实现识别图像中主体及其位置的详细内容,更多关于Unity的资料请关注我们其它相关文章!

(0)

相关推荐

  • Unity实现OCR文字识别功能

    首先登陆百度开发者中心,搜索文字识别服务: 创建一个应用,获取AppID.APIKey.SecretKey秘钥信息: 下载C# SDK,将AipSdk.dll动态库导入Unity: 本文以通用文字识别为例,查阅官方文档,以下是通用文字识别的返回数据结构: 在Unity中定义相应的数据结构: using System; /// <summary> /// 通用文字识别 /// </summary> [Serializable] public class GeneralOcr { //

  • Unity 百度AI实现Logo商标识别

    接口介绍: 该请求用于检测和识别图片中的品牌LOGO信息.即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中LOGO的名称.位置和置信度.当效果欠佳时,可以建立子库(在百度开发者中心控制台创建应用并申请建库)并通过调用logo入口接口完成自定义logo入库,提高识别效果. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是Logo商标识别接口返回数据参数详情: 定义数据结构: using System; ///

  • Unity实现车型识别的示例代码

    接口介绍: 该请求用于检测一张车辆图片的具体车型.即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片的车辆品牌及型号. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是车型识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 车型识别 /// </summary> [Serializable] public class CarDetect { /

  • Unity接入百度AI实现果蔬识别

    接口介绍: 识别近千种水果和蔬菜的名称,适用于识别只含有一种果蔬的图片,可自定义返回识别结果数,适用于果蔬介绍相关的美食类APP中. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是果蔬识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 果蔬识别 /// </summary> [Serializable] public class Ingredient

  • Unity接入百度AI实现通用物体和场景识别

    接口介绍: 可识别超过10万类常见物体和场景,接口返回大类及细分类的名称,并支持获取识别结果对应的百科信息:还可使用EasyDL定制训练平台,定制识别分类标签.广泛适用于图像或视频内容分析.拍照识图等业务场景. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是通用物体和场景识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 通用物体和场景识别 /// </s

  • Unity接入百度AI实现货币识别

    接口介绍: 识别图像中的货币类型,以纸币为主,正反面均可准确识别,接口返回货币的名称.代码.面值.年份信息:可识别各类近代常见货币,如美元.欧元.英镑.法郎.澳大利亚元.俄罗斯卢布.日元.韩元.泰铢.印尼卢比等. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是货币识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 货币识别 /// </summary>

  • Unity实现植物识别示例详解

    接口介绍: 可识别超过2万种常见植物和近8千种花卉,接口返回植物的名称,并支持获取识别结果对应的百科信息:还可使用EasyDL定制训练平台,定制识别植物种类.适用于拍照识图.幼教科普.图像内容分析等场景. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是植物识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 植物识别 /// </summary> [S

  • Unity实现识别图像中主体及其位置

    目录 EasyDL图像分割介绍 创建应用 创建模型 EasyDL图像分割介绍 创建应用 1.进入百度AI开放平台打开控制台: 2.在左上角打开产品服务列表,找到EasyDL零门槛AI开放平台: 3.打开EasyDL图像: 4.在公有云部署-应用列表中创建一个应用: 5.创建完成后获取到AppID.API Key.Secret Key: 创建模型 1.进入EasyGL图像分割: 2.创建模型: 3.创建数据集: 4.数据导入: 上传图片,图片的数量尽量多些 导入完成后查看并标注: 框选目标所在范围

  • Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install pytesseract ④安装autopy3: 先安装wheel:pip install wheel 下载autopy3-0.51.1-cp36-cp36m-win_amd64.whl[点击打开链接] 执行命令:pip install E:\360安全浏览器下载\autopy3-0.51.1-cp36

  • Python实现识别图像中人物的示例代码

    目录 前言 环境部署 代码 总结 前言 接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用 根据项目提供的demo代码,调整了一下功能,自己写了一个识别人脸的工具代码. 环境部署 按照上一篇的安装部署就可以了. 代码 不废话,直接上代码. #!/user/bin/env python # coding=utf-8 """ @project : face_recognition @author : 剑客阿良_ALiang @file : te

  • Python使用Keras OCR实现从图像中删除文本

    目录 介绍 处理 实现 Keras ocr简介 cv2修复函数 汇总 结尾 介绍 本文将讨论如何快速地从图像中删除文本,作为图像分类器的预处理步骤. 删除文本可能有多种或多种原因,例如,我们可以使用无文本图像进行数据增强. 在本教程中,我们将使用OCR(光学字符识别)检测图像中的文本,并在修复过程中填充照片中丢失的部分以生成完整的图像——以删除我们检测到的文本. 处理 为了从图像中删除文本,我们将执行以下三个步骤: 1.识别图像中的文本,并使用KerasOCR获取每个文本的边界框坐标. 2.对于

  • OpenCV识别提取图像中的水平线与垂直线

    本文实例为大家分享了OpenCV识别提取图像中的水平线与垂直线,供大家参考,具体内容如下 1).原理 图像形态学操作时候,可以通过自定义的结构元素实现结构元素 对输入图像一些对象敏感.另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出.通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作.得到想要的结果. -膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 -腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值 常见的形状:矩形.园.直线

  • 使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的昆虫图片数据集了,新图片中很多图片很大,但是图片中的昆虫却很小,所以我就想着先处理一下图片,把图片中的昆虫裁剪下来,这样除去大部分无关背景,应该可以提高识别率. 原图片举例(将红色矩形框部分裁剪出来)): step1:加载图片,转成灰度图 image = cv2.imread("353.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) step2:用Sob

  • Android图片处理:识别图像方向并显示实例教程

    在Android中使用ImageView显示图片的时候发现图片显示不正,方向偏了或者倒过来了. 解决这个问题很自然想到的分两步走: 1.自动识别图像方向,计算旋转角度: 2.对图像进行旋转并显示. 一.识别图像方向 首先在这里提一个概念EXIF(Exchangeable Image File Format,可交换图像文件),具体解释参见Wiki. 简而言之,Exif是一个标准,用于电子照相机(也包括手机.扫描器等)上,用来规范图片.声音.视屏以及它们的一些辅助标记格式. Exif支持的格式如下:

  • python识别图像并提取文字的实现方法

    前言 python图像识别一般基础到的就是tesseract了,在爬虫中处理验证码广泛使用. 安装 安装教程网上大都差不多,Windows下确实比较麻烦,涉及到各种路径.环境变量甚至与linux不同的路径分隔符,所以这里的安装是基于Centos7. 1. 依赖安装 yum install -y automake autoconf libtool gcc gcc-c++ 2. 安装leptonica Leptonica主要用于图像处理和图像分析 原则上所有的库文件都是可以直接用yum安装的,如果想

  • 如何理解与识别Linux中的文件类型

    前言 众所周知,在 Linux 中一切皆为文件,包括硬盘和显卡等.在 Linux 中导航时,大部分的文件都是普通文件和目录文件.但是也有其他的类型,对应于 5 类不同的作用.因此,理解 Linux 中的文件类型在许多方面都是非常重要的. 如果你不相信,那只需要浏览全文,就会发现它有多重要.如果你不能理解文件类型,就不能够毫无畏惧的做任意的修改. 如果你做了一些错误的修改,会毁坏你的文件系统,那么当你操作的时候请小心一点.在 Linux 系统中文件是非常重要的,因为所有的设备和守护进程都被存储为文

  • pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率

    我用的是Anaconda3 ,用spyder编写pytorch的代码,在Anaconda3中新建了一个pytorch的虚拟环境(虚拟环境的名字就叫pytorch). 以下内容仅供参考哦~~ 1.首先打开Anaconda Prompt,然后输入activate pytorch,进入pytorch. 2.输入pip install tensorboardX,安装完成后,输入python,用from tensorboardX import SummaryWriter检验是否安装成功.如下图所示: 3.

随机推荐