使用百度大脑EasyDL创建吸烟监控模型

作者:wangwei8638

EasyDL定制物体检测模型,可以检测出图片里面的所有目标物体名称、位置。适用于一张图片中要识别多个物体,物体计数等场景中。在各检测物体之间差异明显的情况下,训练数据每个标签仅需覆盖20-100张图片,训练时间可能需要30分钟以上。

由于之前在做人体属性识别时,发现对是否抽烟的属性测试不理想。帖子地址:https://ai.baidu.com/forum/topic/show/943252

与官方沟通,认为吸烟图片数据集少,训练不够导致识别率低,所以自己用EasyDL做了一个专门训练吸烟属性的模型,本文介绍简要流程。

一.创建模型

1.进入控制台,选择定制化物体检测。

https://ai.baidu.com/easydl/image

2.创建模型,如图示:
在这里插入图片描述
3.输入名称及描述
在这里插入图片描述
4.在侧边栏数据中心点击创建数据集,输入名称
在这里插入图片描述
5.点击数据标注/上传,选择刚创建的数据集,点击上传图片
在这里插入图片描述
6.标注图片。按图示可视化界面,只需3步即可完成图片标注,非常简洁。注意每次最多上传20张图片。
在这里插入图片描述
二.训练模型

在侧边栏模型中心点击训练模型,添加参与训练的标签,点击开始训练
在这里插入图片描述
三.校验模型

在侧边栏模型中心点击校验模型,上传用于测试的图片,右侧可以看到识别结果
在这里插入图片描述
四.发布模型

在侧边栏模型中心点击发布模型,输入服务名称及接口地址,点击提交申请,即可申请发布模型。
在这里插入图片描述
发布结果稍后可在我的模型中查看,差不多一个工作日就有结果。当然要得到预测准确的模型,需要不断的优化迭代,重新发布。
在这里插入图片描述
五.模型调用

1.单人检测
在这里插入图片描述
返回结果: {“log_id”:1125331439121144977,“results”:[{“location”:{“height”:56,“left”:184,“to
p”:77,“width”:44},“name”:“smoke”,“score”:0.9822428226470947}]}

2.多人检测
在这里插入图片描述
返回结果:
在这里插入图片描述
可以看出,两个抽烟的位置均标出smoke标签。

调用代码:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import urllib3
import certifi
import os
import requests
import base64
import json
from pprint import pprint
import time
#client_id 为官网获取的AK, client_secret 为官网获取的SK
api_key = '************'
secret_key = '*******************'

class LandmarkRecognizer(object):
    def __init__(self, api_key, secret_key):
        self.access_token = self._get_access_token(api_key=api_key, secret_key=secret_key)
        self.API_URL = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/detection/ismoking' + '?access_token=' \
                      + self.access_token
    #获取token
    @staticmethod
    def _get_access_token(api_key, secret_key):
        api = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \
            '&client_id={}&client_secret={}'.format(api_key, secret_key)
        rp = requests.post(api)
        if rp.ok:
            rp_json = rp.json()
#            print(rp_json['access_token'])
            return rp_json['access_token']
        else:
            print('=> Error in get access token!')
    def get_result(self, params):
        rp = requests.post(self.API_URL, data=params)
        if rp.ok:
#            print('=> Success! got result: ')
            rp_json = rp.json()
#            pprint(rp_json)
            return rp_json
        else:
            print('=> Error! token invalid or network error!')
            print(rp.content)
            return None
    #识别人体吸烟属性
    def detect(self, img_path):
        #通过创建PoolManager进行证书验证
        http=urllib3.PoolManager(cert_reqs = 'CERT_REQUIRED',ca_certs = certifi.where()) 
        f = open(img_path, 'rb')
        access_token='24.1349658a1f8aecd61c3c74ef8755bc74.2592000.1558857660.282335-16115229'
        url='https://aip.baidubce.com/rpc/2.0/ai_custom/v1/detection/ismoking?access_token='+access_token
        strover = '识别结果:'
        img_str = base64.b64encode(f.read())
        #参数image:图像base64数据不需要urlencode
#        print(img_str)
        params={'image':''+str(img_str,'utf-8')+'','threshold':0.3}
        #对数据进行json序列化
        encoded_data = json.dumps(params).encode('utf-8')
#        print(encoded_data)
        request=http.request('POST', 
                      url,
                      body=encoded_data,
                      headers={'Content-Type':'application/json'})
#对返回的byte字节进行处理。Python3输出位串,而不是可读的字符串,需要进行转换
        result = str(request.data,'utf-8')
        print(result)

if __name__ == '__main__':
    recognizer = LandmarkRecognizer(api_key, secret_key)
    img = 'F:\paddle\smoke\s25.jpg'
    recognizer.detect(img)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值