前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[完整案例]编程实现动物头像定位-01

[完整案例]编程实现动物头像定位-01

作者头像
Tom2Code
发布2022-11-21 12:07:49
4260
发布2022-11-21 12:07:49
举报
文章被收录于专栏:Tom

今天的项目是对动物的头部进行定位

数据集一共有7000多张照片,是来自The Oxford-IIIT Pet Dataset,这个数据集是一个宠物图像数据集,包含了37种宠物,每种宠物200张左右宠物图片,该数据及同时包含宠物分类,头部轮廓标注和语义分割信息。

这是我们的图片文件,然后我们会在另外一个文件夹里发现很多xml文件

打开其中一个是这样的

没错,这就是与之对应的图片的注解,是xml格式的,其实就是一些键值对,并且有层级关系的,如果读者之前写过爬虫,也许很熟悉xml

首先我们编写代码,读取图片和xml注解,通过注解里给出的坐标信息对图片进行标注,然后依次创建dataset和dataloader然后再开始训练

代码语言:javascript
复制
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils import data
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import torchvision
from torchvision import transforms
import os
from lxml import etree
from matplotlib.patches import Rectangle
import glob
from PIL import Image

引入项目必要的库

代码语言:javascript
复制
pil_img=Image.open(r'D:\社交应用\QQ\3\FileRecv\3.)\Oxford-IIIT Pets Dataset\dataset\images\Abyssinian_1.jpg')

读取一张图片

并查看其shape

代码语言:javascript
复制
np_img=np.array(pil_img)
np_img.shape

3通道的 400*600的图片

然后我我们打开与之对应的描述文件也就是.xml结尾的

代码语言:javascript
复制
xml=open(r'D:\社交应用\QQ\30\FileRecv\Oxford-IIIT Pets Dataset\dataset\annotations\xmls\Abyssinian_1.xml').read()

打印其内容:

接下来我们使用etree对xml的内容进行解释,若是写过爬虫的读者定对这部分的代码不会感到陌生:

代码语言:javascript
复制
sel=etree.HTML(xml)
width=sel.xpath('//size/width/text()')[0]
height=sel.xpath('//size/height/text()')[0]
xmin=sel.xpath('//bndbox/xmin/text()')[0]
ymin=sel.xpath('//bndbox/ymin/text()')[0]
xmax=sel.xpath('//bndbox/xmax/text()')[0]
ymax=sel.xpath('//bndbox/ymax/text()')[0]

我们通过xpath去获取我们需要的值

可以看到读取成功

但是细心的伙伴可以发现这不是int类型的数据,不方便我们一会运算,所以我们强制转化成int类型

代码语言:javascript
复制
xmin=int(xmin)
xmax=int(xmax)
ymin=int(ymin)
ymax=int(ymax)

那么接下来就是绘图了

这里四个参数,按照笔者的理解则是:x的最小值和x的最大值,还有就是y的最小值和y的最大值,这样就可以在坐标系中确定两个点,这两个点可以确定一个矩形,而这个矩形在图片中就恰好可以确定该图片中动物头像的位置

好了废话不多说,我们直接画图

代码语言:javascript
复制
plt.imshow(img)
rect = Rectangle((xmin, ymin), (xmax-xmin), (ymax-ymin), fill=False, color='red')
ax = plt.gca()
ax.axes.add_patch(rect)
plt.show()

效果图:

可以看到,根据xml描述文件读取出来的坐标,成功的在图片中绘制出了 喵咪的头像,也即定位成功。

ok那么数据预处理 就暂且到此为止,我们下一章开始写模型和网络。

谢谢大家的观看。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom的小院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档