调用百度API实现图像多主体检测

目录

  • 1. 作者介绍
  • 2.百度API介绍与获取
    • 2.1 API介绍
    • 2.2 注册账号并获取API Key
  • 3.完整实验代码,测试结果
    • 3.1 调用API
    • 3.2框出主体部分,并标注标签和置信度
    • 3.3 测试结果

1. 作者介绍

邓富贵,男,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:dengfugui226@163.com

吴天禧,女,西安工程大学电子信息学院,2023级研究生,张宏伟人工智能课题组
研究方向:模式识别与智能系统
电子邮件:230411046@stu.xpu.edu.cn

2.百度API介绍与获取

2.1 API介绍

应用程序编程接口(英语:Application Programming Interface,简称:API),是一些预先定义的函数。
目的:让应用程序开发人员得以调用一组例程功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。
图像多主体检测API:检测出图片中多个主体的坐标位置,并给出主体的分类标签和标签的置信度得分,共计16大类,可用于图片打标、裁剪出对应主体进行二次开发。其效果图如下。
在这里插入图片描述

2.2 注册账号并获取API Key

(1)注册百度智能云账号,进入官网首页,搜索图像主体检测,点击
在这里插入图片描述

(2)跳转后点击查看详情
在这里插入图片描述

(3)跳转后点击立即使用
在这里插入图片描述

(4)跳转后点击应用列表,接着点击创建应用,获取你的API Key 和 Secret Key
在这里插入图片描述

3.完整实验代码,测试结果

3.1 调用API

import requests
import base64
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import numpy as np
from translate import Translator
API_KEY = "你的API_KEY"
SECRET_KEY = "你的SECRET_KEY"

def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/multi_object_detect"
# 二进制方式打开图片文件
f = open(r'C:\Users\86185\1.jpg', 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = get_access_token()
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())
    print(type(response.json()))

3.2框出主体部分,并标注标签和置信度

def cv2ImgAddText(img, text, left, top, textColor, textSize=20):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "STSONG.TTF", textSize, encoding="utf-8")
    # 绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

def draw_bounding_boxes(image_path, detections):
    """
    在图片上绘制边界框,基于检测结果。
    :param image_path: 图片文件的路径。
    :param detections: 检测结果列表,每个结果包含分数、名称和位置信息。
    """
    # 加载图片
    image = cv2.imread(image_path)
    if image is None:
        print("未找到图片")
        return
    # 遍历检测结果并绘制
    for detection in detections['result']:
        score = detection['score']  # 置信度
        name = detection['name']    # 名称
        top = detection['location']['top']  # 上边界
        left = detection['location']['left']  # 左边界
        width = detection['location']['width']  # 宽度
        height = detection['location']['height']  # 高度
       
        # 在检测到的主体周围绘制红色矩形框
        cv2.rectangle(image, (left, top), (left + width, top + height), (0, 0, 255), 2)
        # 在矩形框上方添加文本(名称和置信度)
        image = cv2ImgAddText(image, f"{name}{score:.2f}", left, top - 40, textColor = (0, 0, 255), textSize = 40)  # 添加
        # cv2ImgAddText(图像, 文字内容, 字体左边开始位置, 字体上面开始位置, (R, G, B), 字体大小)
    # 显示结果图像
    cv2.namedWindow('检测结果', 0)
    cv2.imshow("检测结果", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    # 可选:将结果保存到文件
    cv2.imwrite("detections_output.jpg", image)
# 示例检测数据
detections = response.json()
# 调用函数,传入图片路径和检测数据
draw_bounding_boxes(r'C:\Users\86185\1.jpg', detections)

3.3 测试结果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/706952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLO检测算法(单检测器网络+多视频输入)设计与实现

在单摄像头目标检测的基础上,实现单网络多线程的实时目标检测。 1,应用场景 在安防领域,YOLO的多摄像头实时目标检测应用具有以下特点和优势: 实时性能: YOLO算法以非常高的速度运行,能够实现实时目标检测…

threejs开发之 测量工具

基于threejs做三维开发已经有几年了,经常会遇到写一下通用的工具,比如测量工具。 测量工具很有意思,估计大家认为这个不是很容易写吗,就是几个事件,然后绘制点线面,然后用three计算长度,展示出来…

力扣752. 打开转盘锁

Problem: 752. 打开转盘锁 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.用一个集合 deads 存储所有的“死锁”状态,一个集合 visited 存储所有已经访问过的状态,以避免重复访问,一个队列 q 进行广度优先搜索(BF…

出现“由于找不到msvcr120.dll,无法继继续执行代码”提示的问题处理方法

本文章针对出现“由于找不到msvcr120.dll,无法继续执行代码”的问题进行深入剖析,并提供了两种有效的解决方案,方便大家能快速恢复正常工作状态。 一.关于msvcr120.dll文件部分介绍 “由于找不到msvcr120.dll,无法继续执行代码”常发生在我们打开一个软…

毕业了!给学计算机朋友的 10 条血泪建议

大家好,我是程序员鱼皮。最近高考结束了,也有很多同学毕业了,首先祝福这些朋友在人生的新阶段一帆风顺。 刚参加完高考的朋友,面临的最大问题就是选专业,这段时间也有一些家长向我咨询:还能不能选计算机啦…

flutter开发实战-RichText富文本居中对齐

flutter开发实战-RichText富文本居中对齐 在开发过程中,经常会使用到RichText,当使用RichText时候,不同文本字体大小默认没有居中对齐。这里记录一下设置过程。 一、使用RichText 我这里使用RichText设置不同字体大小的文本 Container(de…

考研计组chap3存储系统

目录 一、存储器的基本概念 80 1.按照层次结构 2.按照各种分类 (41)存储介质 (2)存取方式 (3)内存是否可更改 (4)信息的可保存性 (5)读出之后data是否…

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版?

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版? 书接上文: ONLYOFFICE 协作空间服务器如何一键安装自托管私有化部署 讲的是如何把ONLYOFFICE协作空间服务器部署到自托管云服务器VPS上面,这里继续,在自己Windows电…

StarRocks详解

什么是StarRocks? StarRocks是新一代极速全场景MPP数据库(高并发数据库)。 StarRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果。 1.可以在Spark和Flink里面处理数据,然后将处理完的数据写到StarRo…

SQL入门到入土索引优化,聚合函数,数据备份与恢复,事务处理,查询、更新、插入和删除数据库

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

pdf书签怎么做?这三款软件轻松驾驭文档!

在数字化时代,PDF文件已成为我们工作、学习中的重要组成部分。然而,面对海量的PDF内容,如何快速定位关键信息,提高阅读效率呢?答案就是——制作PDF书签。今天,我将为大家介绍三款实用的软件,助你…

Ubuntu 的 apt 相关问题

错误:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease Couldnt create temporary file /tmp/apt.conf.KSeTlI for passing config to apt-key 原因 无法创建配置文件 /tmp/apt.conf.KSeTlI 并传递给 apt-key apt-key 等实际上并不是直接使…

失眠焦虑的解脱之道:找回内心的平静

🍃 在这个快节奏的时代,失眠与焦虑似乎成了许多人的隐形敌人。每当夜幕降临,它们便悄悄潜入心底,扰乱我们的思绪,让宁静的夜晚变得无比漫长。然而,生活总有办法让我们找回内心的平静,只需稍作调…

0613#111. 构造二阶行列式

时间限制&#xff1a;1.000S 空间限制&#xff1a;256MB 题目描述 小欧希望你构造一个二阶行列式&#xff0c;满足行列式中每个数均为不超过 20 的正整数&#xff0c;且行列式的值恰好等于x。你能帮帮她吗? 输入描述 一个正整数x。-1000 < x < 1000 输出描述 如果…

Android Studio新增功能:Device Streaming

今天将Android Studio升级到2023.3.1 Patch2。发现新增了Device Streaming功能。支持远程使用Google的物理设备调试程序。这样可以方便地在真实设备上测试自己的APP。这对于手头没有Google设备的开发者而言&#xff0c;确实方便很多。该功能目前处于测试阶段&#xff0c;在2025…

jsl+rs???企业信用系统,秒了~

文章目录 写在前面流程分析521412 加速乐第一次请求第二次请求第三次请求 瑞数看看效果秒了~ 本文仅供参考学习使用&#xff0c;不得用于非法盈利&#xff0c;如有侵权&#xff0c;请联系作者删 写在前面 好久没更新了&#xff0c;送给有缘人 目标网站&#xff1a;aHR0cHM6Ly9…

UbuntuServer22.04.4安装Nexus

文章目录 一、安装步骤二、登录Nexus设置系统参数1.登录Nexus2.先进入Nexus首页3.nexus3中央仓库改为阿里云 一、安装步骤 官网先下载https://help.sonatype.com/en/download.html 1.更新包列表 sudo apt update 2.安装Java,因为Nexus需要Java运行环境&#xff1a; sudo …

vue3 vant4 仿京东分类功能实现

Ⅰ- 壹 - 功能展示和使用需求 需求描述 基于vant 实现,仿京东分类功能实现样式交互等基本实现,细节可能需要优化 地址 https://gitee.com/wswhq/vue3-vant-temp/tree/master/src/view/ClassIfication 功能展示 Ⅱ - 贰 - 封装思路 不表述了自己看代码吧 Ⅲ - 叁 - 使用 …

【新手必看】修复Windows11蓝牙连接问题的7个方法!

在Windows11电脑操作中&#xff0c;用户经常会到蓝牙功能&#xff0c;如果蓝牙连接出现问题了&#xff0c;就会导致用户无法成功使用蓝牙。但是&#xff0c;许多新手用户不清楚要怎么操作才能解决蓝牙连接问题&#xff1f;会有不同的因素导致蓝牙连接出现问题&#xff0c;接下来…

WordPress、Typecho 站点如何让 CloudFlare 缓存加速

众所周知 WordPress、Typecho 都是著名动态博客站点(一个最简单的判断依据就是都要依赖结合数据库),这类站点在 CDN 缓存上都有一个致命的缓存弊端就是动静态请求的区分,理论上要让 CDN 绕过所有的动态请求,缓存所有的静态请求,否则就会造成前端登录和非登录状态的混乱,…