百度飞桨-EasyDL
需求介绍
本人由于实习需要,需要快速训练完成一个可用的目标检测类模型,了解到百度飞桨的EasyDL具备这样的能力,通过试用发现,EasyDL在图像检测可以实现快速训练、快速部署应用。
简单介绍
EasyDL是百度大脑推出的零门槛AI开发平台,面向各行各业有定制AI需求、零算法基础或者追求高效率开发AI的企业用户。支持包括数据管理与数据标注、模型训练、模型部署的一站式AI开发流程,原始图片、文本、音频、视频等数据,经过EasyDL加工、学习、部署,可通过公有云API调用,或部署在本地服务器、小型设备、软硬一体方案的专项适配硬件上,通过SDK或API进一步集成。
开始训练
进入EasyDL零门槛AI开发平台,直接可以按照使用文档训练模型
- 创建模型
- 训练模型
- 校验模型
- 发布模型
可以发现模型的训练和发布全部是可视化,流程化,并且支持自定义训练轮数和自定义数据增广方式,对于入门级使用特别友好。
可以在 使用的过程中体验和加深使用者对于数据本身的思考。
模型发布
在模型训练完成后,能够快速的在联网电脑上进行网络访问和调用,在模型发布前需要参考发布文档做好准备工作。
接口赋权
登录EasyDL版控制台中创建一个应用,获得由appid,然后就可以参考接口文档正式使用.
创建完成
本地应用
在模型发布成功后,就可以在本地电脑利用python端的requests请求服务进行使用,本质是将图片上传云端,云端返回json文件,json文件中包含返回的目标检测得到的类型和位置,可以对打包进行解析.
本处结合官方的参考案例,给出解决样例.
def Api_rec():
# 目标图片的 本地文件路径,支持jpg/png/bmp格式
# IMAGE_FILEPATH = "【您的测试图片地址,例如:./example.jpg】"
# 可选的请求参数
# top_num: 返回的分类数量,不声明的话默认为 6 个
PARAMS = {"top_num": 10}
# 服务详情 中的 接口地址
# MODEL_API_URL = "【您的API地址】"
MODEL_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/detection/SketchAI1"
# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
ACCESS_TOKEN = "【 】"
API_KEY = "【 】"
SECRET_KEY = "【 】"
# 读取目标图片,将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段
with open(IMAGE_FILEPATH, 'rb') as f:
base64_data = base64.b64encode(f.read())
base64_str = base64_data.decode('UTF8')
PARAMS["image"] = base64_str
# 获取ACCESS_TOKEN
if not ACCESS_TOKEN:
print("ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")
auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}".format(
API_KEY, SECRET_KEY)
auth_resp = requests.get(auth_url)
auth_resp_json = auth_resp.json()
ACCESS_TOKEN = auth_resp_json["access_token"]
print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
else:
print("使用已有 ACCESS_TOKEN")
# 向模型接口 'MODEL_API_URL' 发送请求"
request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
response = requests.post(url=request_url, json=PARAMS)
response_json = response.json()
# 转换成字符打印查看
# response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
# print(response_str)
# 将json转化为dict解析返回的数据结果(需要具体情况具体分析)
# html_json = json.loads(response_str)
json_out = {}
labels_list = []
for j in response_json["results"]:
_temp = {}
_temp["name"] = j["name"]
_temp["x1"] = j["location"]["left"]
_temp["y1"] = j["location"]["top"]
_temp["x2"] = j["location"]["left"] + j["location"]["width"]
_temp["y2"] = j["location"]["top"] + j["location"]["height"]
labels_list.append(_temp)
json_out["labels"] = labels_list
json_out = json.dumps(json_out)
print(json_out, type(json_out))
最后感谢百度提供的这么好用的平台,如此简单地可以快速实现实用需求,帮助有探索兴趣的群体快速了解图像识别的工作流程,希望国内的人工智能环境发展的越来越好!