返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Unity实现识别图像中主体及其位置
  • 168
分享到

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

2024-04-02 19:04:59 168人浏览 独家记忆
摘要

目录EasyDL图像分割介绍创建应用创建模型EasyDL图像分割介绍 创建应用 1.进入百度ai开放平台打开控制台: 2.在左上角打开产品服务列表,找到EasyDL零门槛AI开放

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的资料请关注编程网其它相关文章!

--结束END--

本文标题: Unity实现识别图像中主体及其位置

本文链接: https://lsjlt.com/news/139913.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Unity实现识别图像中主体及其位置
    目录EasyDL图像分割介绍创建应用创建模型EasyDL图像分割介绍 创建应用 1.进入百度AI开放平台打开控制台: 2.在左上角打开产品服务列表,找到EasyDL零门槛AI开放...
    99+
    2024-04-02
  • Python中AI图像识别实现身份证识别
    目录需求分析步骤申请华为云OCR接口获取token调用身份证识别接口总结图像识别说白了就是把一张照片上面的文字进行提取,提供工作效率 需求分析 身份证识别主要是把一张身份证照片上面的文字信息进行提取,不用再使用人工去...
    99+
    2022-06-02
    Python 身份证识别 Python AI图像识别
  • Python中如何实现图像识别
    Python中如何实现图像识别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 安装Python 3.5.1或更高版本和pip(如果您已经安装了Python 3.5.1或...
    99+
    2023-06-17
  • python中opencv图像叠加、图像融合、按位操作的具体实现
    目录1图像叠加 2图像融合 3按位操作 1图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该...
    99+
    2024-04-02
  • 如何使用Python实现识别图像中人物
    小编给大家分享一下如何使用Python实现识别图像中人物,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境部署按照上一篇的安装部署就可以了。代码不废话,直接上代码...
    99+
    2023-06-26
  • Python实现识别图像中人物的示例代码
    目录前言环境部署代码总结前言 接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用 根据项目提供的demo代码,调整了一下功能,自己写了一个识别人脸...
    99+
    2024-04-02
  • PHP 开发中 Elasticsearch 实现图像识别与搜索的技巧
    导语:随着机器学习和人工智能的发展,图像识别技术在各个领域中得到了广泛的应用。在 PHP 开发中,使用 Elasticsearch 实现图像识别与搜索是一种高效且强大的方式。本文将介绍如何利用 Elasticsearch 实现图像识别与搜索...
    99+
    2023-10-21
    elasticsearch 图像识别 搜索技巧
  • Python+OpenCV实现图片及视频中选定区域颜色识别
    近期,需要实现检测摄像头中指定坐标区域内的主体颜色,通过查阅大量相关的内容,最终实现代码及效果如下,具体的实现步骤在代码中都详细注释,代码还可以进一步优化,但提升有限。 主要实现过程...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作