参考链接:http://ai.baidu.com/forum/topic/show/595975
https://github.com/endernewton/tf-faster-rcnn
https://blog.csdn.net/weixin_42111393/article/details/83383720
1、用爬虫下载网络车牌图片(URL-百度图片搜索)。
# -*- coding:utf-8 -*-
import re
import uuid
import requests
import os
class DownloadImages:
def __init__(self, download_max, key_word):
self.download_sum = 0
self.download_max = download_max
self.key_word = key_word
self.save_path = '../data/plate_number/images/'
def start_download(self):
self.download_sum = 0
gsm = 80
str_gsm = str(gsm)
pn = 0
if not os.path.exists(self.save_path):
os.makedirs(self.save_path)
while self.download_sum < self.download_max:
str_pn = str(self.download_sum)
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&' \
'word=' + self.key_word + '&pn=' + str_pn + '&gsm=' + str_gsm + '&ct=&ic=0&lm=-1&width=0&height=0'
print (url)
result = requests.get(url)
self.downloadImages(result.text)
print ('下载完成')
def downloadImages(self, html):
img_urls = re.findall('"objURL":"(.*?)",', html, re.S)
print ('找到关键词:' + self.key_word + '的图片,现在开始下载图片...')
for img_url in img_urls:
print ('正在下载第' + str(self.download_sum + 1) + '张图片,图片地址:' + str(img_url))
try:
pic = requests.get(img_url, timeout=50)
pic_name = self.save_path + '/' + str(uuid.uuid1()) + '.jpg'
with open(pic_name, 'wb') as f:
f.write(pic.content)
self.download_sum += 1
if self.download_sum >= self.download_max:
break
except Exception as e:
print ('【错误】当前图片无法下载,%s' % e)
continue
if __name__ == '__main__':
downloadImages = DownloadImages(150, '车牌')
downloadImages.start_download()
2、人工删除不是车牌的图片、车牌模糊不清或者有遮挡的图片、车牌号不完整的图片。(车票号格式例子:粤A88888)
3、为了符合VOC数据集,要对图片重命名(其实也不一定非要重命名吧)。(000001.jpg~000100.jpg)
# coding=utf-8
import os
def rename(images_dir):
# 获取所有图像
images = os.listdir(images_dir)
i = 1
for image in images:
src_name = images_dir + image
# 以六位数字命名,符合VOC数据集格式
name = '%06d.jpg' % i
dst_name = images_dir + name
os.rename(src_name,dst_name)
i += 1
print ('重命名完成')
if __name__ == '__main__':
# 要重命名的文件所在的路径
images_dir = '../data/plate_number/images/'
rename(images_dir)
4、标注数据集:
- a.安装LabelImg
- b.Open Dir打开图像所在的文件夹data/plate_number/images/
- c.设置保存文件存放的位置
- d.点击Create RectBox标注车牌的位置,并打上标签plate_number
- e.点击save生成xml标签文件
5、制作与Pascal VOC2007同一格式的数据集(用于目标检测),其余的两个文件SegmentationClass和SegmentationObject直接忽略就可以了,这是用在图像分割的。
6、修改代码:主要是更改n_class类数
- a.lib/datatsets/pascal_voc.py
- b.tools/demo.py 两处修改
- c.lib/datasets/imdb.py
- d.修改训练迭代次数为10000次
7、训练时出现的问题有:
File “/tf-faster-rcnn/tools/…/lib/datasets/imdb.py”, line 108, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError
找到问题的原因,是矩形标注的问题。
解决方法:参考https://blog.csdn.net/10km/article/details/64641322https://blog.csdn.net/
注意:记得删除data目录下的cache文件夹,否则测试时会报错
8、测试结果:map=0.818