1.环境配置
2.数据集获取
3.训练集获取
4.训练
5.调用测试训练结果
6.代码讲解
本文是第二篇,调用官方例子并获取数据集。
上一节里面记得我们需要配置PYTHONPATH,大家应该发现,每次运行程序之前,都必须执行一次
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
为了解决这个问题,我们在运行以下命令
sudo gedit ~/.bashrc
在最后一行添加以下内容
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
其中,我们需要把两个pwd分别替换为绝对路径到research目录,例如/home/xueaoru/models/research。
接下来我们运行下官方的识别例子,
在命令行下打开jupyter notebook
jupyter notebook
前提是你已经安装了jupyter notebook,你装的anaconda的话就已经装好了,否则你就
sudo pip install jupyter
然后到object_detection 路径下打开官方的object_detection_tutorial.ipynb文件,然后逐个执行,中间会下载相关的预训练模型和数据集,耐心等待即可。
如果中途出现报错,一般是没有安装相应的库,那就很简单了,根据报错看缺什么库,然后pip安装。比如缺少xxx,就pip insrall xxx。
执行到最后效果是这样的:
下一步我们就要准备自己的数据集了。
ubuntu 上一般装个cheese就可以打开摄像头了,执行以下命令安装cheese
sudo apt-get install cheese
安装完之后我们打开它,然后前后移动对小车录像,也可以用手机录像,只不过手机录出来的更加清晰罢了,咱比赛的时候用的摄像头没那么清晰。对红色灯管的小车和蓝色灯管的小车分别从远近旋转角度进行拍摄,拿到两个mp4文件。
下一步从mp4文件里提取图片,每隔5帧提取一次图片。
用python执行以下代码:
import cv2 as cv import os FILEPATH = "/home/xueaoru/pics/out" VIDEOPATH = "/home/xueaoru/projects/srm" VIDEONAME = "car1.mp4" cap = cv.VideoCapture(os.path.join(VIDEOPATH,VIDEONAME)) sp = 5 ci = 0*sp while(1): ret,frame = cap.read() if ret!=True: break #out = frame out = cv.resize(frame,(640,480)) #cv.imshow("frame",out) k = cv.waitKey(1) & 0xFF if ci%sp ==0: cv.imwrite(os.path.join(FILEPATH,"image"+str(ci//sp + 1)+".jpg"),out) ci = ci + 1 if k == 27: break cap.release() cv.destroyAllWindows()
需要注意,我们需要根据情况更改里面的FILEPATH、VIDEOPATH、VIDEONAME。
这时候我们就拿到了640*480的很多图片了。如图:
到这一步差不多就搜集完了,然后就是标准的打标签了。
我们需要下载一个工具来帮助我们打标签:
git clone https://github.com/tzutalin/labelImg.git
git下来之后进入该目录下执行以下语句
sudo apt-get install pyqt5-dev-tools sudo pip3 install -r requirements/requirements-linux-python3.txt make qt5py3 python3 labelImg.py
就能打开labelImg
或者更简单的,你直接pip安装就可以了
pip install labelImg
labelImg
一样可以打开labelImg,打开图像目录进行标注吧,右键可以选择标注,其中还有快捷键,w是标注,a是上一张图,d是下一张图,保存的默认是xml文件,这正是我们需要的。
在上面所有的工作完成之后,我们就拿到了所有标注的数据集xml.