Python调用腾讯云人体分析实现识别行人

Python调用腾讯云人体分析实现识别行人

前言

正好我的作业需要做行人识别这件事,需要识别是人的朝向,网上搜索了解到腾讯云有现成的人体分析的接口,于是就结合百度和API文档,简单实现了功能,写这篇文章是为了记录一下这个功能以及实现,可能以后会用到。

过程分析

先上连接大家看一下腾讯的产品
腾讯云的人体分析网址

1.工具

腾讯云的API需要调用的是网上的图片,返回的结果是一串稍微复杂的信息(包括标识出人的框框,还有人的朝向等等)。我们只需要对这串返回的信息进行提取,提取出XY坐标就可以用python的画图工具框出图片上的人。

2.问题

python要画图只能对本地文件画图,而腾讯云的人体分析API需要的是线上的图片(即链接),所以这里我就把线上的图片下载下来放在本地,然后python就可以画图了,所以其实是同一张图。
解决办法:可以先找好图,然后调用腾讯云的对象存储接口将图片保存在云端,同时这个接口提供获取云端图片连接的函数,调用函数获取所有图片链接,这样人体分析的API就可以用了,而PYTHON可以用本地的文件画图就可以了。(可以参照我上一篇文章,把图片上传到对象存储的桶里)

3.步骤总结:

调用腾讯云人体分析API->对返回的数据进行处理并存储->用Python的第三方库画图,框出行人。

代码实现

python代码:
这个官方的调式里有,我这里加了python画图的代码,我只实现了一张照片的读取和框人,毕竟我刚学不久,大家见谅。

import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.bda.v20200324 import bda_client, models

from PIL import  ImageDraw, Image

try:

    cred = credential.Credential("你的SecretId", "你的SecretKey")
    httpProfile = HttpProfile()
    httpProfile.endpoint = "bda.tencentcloudapi.com"

    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    client = bda_client.BdaClient(cred, "你的接入地", clientProfile)

    req = models.DetectBodyRequest()
    params = {
        "AttributesOptions": {
            "Orientation": True
        },
        "MaxBodyNum": 10,
        "Url": "图片地址"

    }
    req.from_json_string(json.dumps(params))
	#resp就是返回的数据
    resp = client.DetectBody(req)
    #用print函数看一下返回数据的数据结构
    print(resp.to_json_string())

except TencentCloudSDKException as err:
    print(err)


#下面的代码是对返回的数据进行分析和框人
img = Image.open('本地图片地址')
img.show()
draw = ImageDraw.Draw(img)

#下面就要从腾讯云API返回的信息中获取坐标的代码
for  i in json.loads(resp.to_json_string())["BodyDetectResults"]:


    print(i)
    location = []#记录坐标

    for j in i["BodyRect"].values():

        location.append(j)

    #看一下坐标信息
    print(location)
    x1,y1,x2,y2=location[0],location[1],location[0]+location[2],location[1]+location[3];
    draw.rectangle([x1, y1, x2, y2], outline=(128, 0, 128), width=2)


img.show() #显示
img.save('保存图片地址+名')

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值