python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用...

1. 概括

EasyDL是百度AI中一个自动化的深度学习模型训练和服务平台

使用EasyDL训练得到模型,在python下调用对应模型的api,可以实现对图片上传至云端进行识别,并接收返回的识别结果,再使用opencv通过返回的结果在图片上进行绘制,框出目标物体,还可以得到其中心坐标值

进一步,其提供了多种部署方式,后面还可以将模型部署到私有云或者本地,可以更方便的拓展使用

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第1张图片

2. 使用EasyDL训练模型

使用EasyDL的链接,使用之前需要先注册或登录百度账号,使用百度网盘账号登录也可以,都需要实名才能使用

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第2张图片

点击开始训练,使用经典版,这里以物体检测为例

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第3张图片

先进入我的模型,然后创建模型,填写相关信息即可,下一步,然后就可以可到新的模型已经创建

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第4张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第5张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第6张图片

需要新创建一个数据集,选择下面的选项之后上传照片,要求图片命名不要有中文名,并且图片的场景最好和后面要识别的场景一样,多个角度,多个光线,25+张照片就可以,不过最好有40+,上传完成之后,点击确认并返回

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第7张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第8张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第9张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第10张图片

可以看到数据集的状态还在处理中,等待处理完成即可;然后点击后面的标注,对需要训练的图片进行标注需要识别的目标物体;先添加标签,不能使用中文名,然后将目标物体框起来,再点击对应的便签即可

通过多个标签可以做到识别多个目标的目的,然后按下面的保存;接着需要手动点上方图片进行选择下一张需要标注的图片,以此方法对所有图片进行标注即可,完成后回到我的模型页面

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第11张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第12张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第13张图片

回到我的模型页面,选择下面的训练,选择需要训练的模型,这里以公有云部署为例,添加数据集,开始训练之后,可以在我的模型页面看到训练的状态,还可以设置短信提醒,40张照片的训练预计30分钟左右

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第14张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第15张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第16张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第17张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第18张图片

训练完成之后,可以对模型进行检验,然后进行申请上线,这个过程可能也有点久,快的话当天可以完成,最慢就是第二天,可能会有百度云的客服打电话过来询问(类似于推广告吧),最好接一下,说明你是在学习,测试一下,准备做项目,如果她继续问更深入信息,你就说不方便透露,如果有需要再和你们联系就好了

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第19张图片

3.在python调用EasyDL的api

审核结束,然后在我的模型页面,点击服务详情,就可以看到模型的url(后面会用到),然后点击立即使用

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第20张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第21张图片

在EasyDL经典版控制台创建应用,填写相关信息即可,然后在应用详情页获取AK和SK

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第22张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第23张图片

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第24张图片

接着需要获取access_token,使用到上文的AK和SK,及应用详情里的API Key和Secret Key,复制以下链接,将AK和SK修改成自己的(注意是没有【】的),然后用浏览器打开该链接,即可得到access_token,获取access_token这部分也可以在代码中实现

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】

0800894ce535524d7f2b497b129921ae.png

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第25张图片

以下是官方提供的python示例,需要注意的是python3中使用的不是urllib2

# encoding:utf-8

import urllib2

'''

easydl物体检测

'''

request_url = "【接口地址】"

params = "{\"image\":\"sfasq35sadvsvqwr5q...\"}"

access_token = '[调用鉴权接口获取的token]'

request_url = request_url + "?access_token=" + access_token

request = urllib2.Request(url=request_url, data=params)

request.add_header('Content-Type', 'application/json')

response = urllib2.urlopen(request)

content = response.read()

if content:

print content

按照服务API的说明,针对V1版(YOLOV3)的服务,编写调用代码(Python3)。需要注意的是与其他图像识别服务不同的是定制化图像识别服务以json方式请求。

下面是我的代码,仅供参考,如有错误,还望指正!

import time

import base64

import urllib3,json

import cv2

test_img_path = "E:/study/python/test4.jpg"

save_img_path = "E:/study/python/resule.jpg"

#access_token = "24.ee098060f9d444677770e289b6d8780b.*****************" #自己的access_token

#module_url = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/d********' #当审核通过后,可以在我的模型页面,进入服务详情可以查看到

def img_show(name,img_path):

img = cv2.imread(img_path)

print('shape:',img.shape)

img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_NEAREST)

cv2.imshow(name ,img)

cv2.waitKey(0)

def draw_result_img(originfilename,results,resultfilename):

from PIL import Image, ImageDraw,ImageFont

image_origin = Image.open(originfilename)

draw = ImageDraw.Draw(image_origin)

setFont = ImageFont.truetype('C:/windows/fonts/simhei.ttf', 66)

for result in results:

location = result['location']

top_x,top_y = location['left'],location['top']

button_x,button_y = (location['left']+location['width']),(location['top']+location['height'])

center_x,cenrer_y = int(top_x+(location['width']/2)),int(top_y+(location['height']/2))

print('目标物体中心坐标:',center_x,cenrer_y)

draw.rectangle((top_x,top_y,button_x,button_y),outline = "red")

draw.ellipse((center_x-10,cenrer_y-10, center_x+10,cenrer_y+10), fill = (255, 0, 0))

draw.text((top_x,top_y), result['name']+', Score:'+str(round(result['score'],3)),"yellow",font=setFont)

image_origin.save(resultfilename, "JPEG")

img_show('result',save_img_path)

def get_test_img():

img_show('test_img',test_img_path)

with open(test_img_path, 'rb') as f:

img = base64.b64encode(f.read())

#img参数进行一下str转换

params={'image':''+str(img,'utf-8')+''}

#对参数params数据进行json处理

encoded_data = json.dumps(params).encode('utf-8')

return encoded_data

def get_result():

encoded_data = get_test_img()

url = "{}?access_token={}".format(module_url,access_token)

begin = time.perf_counter()

request = urllib3.PoolManager().request('POST',

url,

body = encoded_data,

headers={'Content-Type':'application/json'})

#对返回的byte字节进行处理。Python3输出位串,而不是可读的字符串,需要进行转换

content = str(request.data,'utf-8')

end = time.perf_counter()

if content:

data = json.loads(content)

utime = end - begin

return data,utime

else:

return False

data,utime = get_result()

results = data['results']

print(results)

print('处理时长:'+'%.2f'%(utime)+'秒')

draw_result_img(test_img_path,results,save_img_path)

python爬虫功能、识别200张图片中的物体_关于在一张图片中查找目标物体的方法 —— EasyDL和opencv结合使用..._第26张图片

原文链接:https://blog.csdn.net/fengge2018/article/details/105048268

你可能感兴趣的:(python爬虫功能,识别200张图片中的物体)