Dlib库教程(3)训练数据集(模型)和特定物体检测识别
1说明
1。1Dlib库,非常强大的一个库,有python接口。
1。2多用于人工智能、机器人、物体检测和识别、自动驾驶等热门领域。
1。3比如强大的人脸识别,当然训练自己的数据集和模型,可用于物体检测和识别,当然在各个领域都有广泛的使用空间,比如医学上,可以训练较大的数据集,用于肺炎或者癌症等疾病的检测。
1。4今天从一个简单的例子,来说明如何训练自己的数据集,并检测和识别。
1。5熟悉dlibpythonopencv等相关知识。
此张图片检测猫脸失败,由于训练数据集太少导致,不过,没关系
2检测和识别猫脸(结果倒置)
2。1效果图
2。2部分失败原因:
图片数据集太少,本次训练用的图片,仅有10张猫脸正照,而且差异不大。
当然,如何训练用的图片多,差异较大,当然可以,比如1万张等等。
2。3还可以训练一切自己感兴趣的东西,用于检测和识别。
【感兴趣的朋友可以继续,我手把手教你】
3前期准备
3。1《Dlib库教程(1):介绍、linux下的安装与避坑》
3。2《Dlib库教程(2):联合python的人脸检测、标记、识别》,可以不看这篇。
3。3准备gitclonehttps:github。comdaviskingdlib这个方法太慢了
3。4我采用浏览器下载dlibmaster包,解压在根目录下https:github。comdaviskingdlib
本机解压:homexgjdlibmaster本机cddlibmastertoolsimglabmkdirbuildcdbuildcmake。。注意点点cmakebuild。configReleasesudomakeinstall
3。5素材准备:图片来自网络,如有侵权请联系,定删。
homexgjDesktopdlibcatdetect我在桌面新建一个文件夹dlibcatdetect,下面再新建2个文件夹,cattrain文件夹和cattest文件夹。
把所有要训练的猫图片保存到cattrain文件夹(10张图片jpg),要测试的图片放到cattest文件夹(3张图片jpg),个文件夹里的图片不要一样,以免影响测试效果。
4图片标注:用imglab
4。1终端:cdhomexgjDesktopdlibcatdetectcdcattrainimglabccat。xml。注意点imglabcat。xml生成xml文件
4。2图示:
打标签的方法很简单,在imglab窗口下,先按住shift键,然后在猫身的左上方按下鼠标左键,
拖动到猫身右下方再放开鼠标,这样就在猫身位置上画出了一个矩形框,如下图所示。
针对每一张图片进行上述操作,结束后保存。如果数据集够大的话,确实是个体力活。
下图只是方法演示,请注意与猫脸有区别。
建议只对猫脸进行标注,图示原来标注整个猫的,后来因为图片太少,自己又从新标注猫脸了。
5训练数据集的代码
5。1cattrainself。py,放在文件夹下dlibcatdetect文件名:cattrainself。py使用方法:在文件夹下,打开终端,输入python3。8cattrainself。pycoding:utf8训练代码importosimportdlib训练的参数,可以根据实际情况进行修改optionsdlib。simpleobjectdetectortrainingoptions()options。addleftrightimageflipsTrueoptions。C5options。numthreads4options。beverboseTruecurrentpathos。getcwd()trainfoldercurrentpathcattraintrainxmlpathtrainfoldercat。xmlprint(starttraining:)最重要的一个函数dlib。trainsimpleobjectdetector(trainxmlpath,detector。svm,options)print(Trainingaccuracy:{}。format(dlib。testsimpleobjectdetector(trainxmlpath,detector。svm)))
5。2效果和过程省略。
6检测和识别代码检测代码catdetectself。pycoding:utf8在文件夹下,打开终端,输入python3。8catdetectself。py导入模块importosimportglobimportdlibimportcv2路径管控currentpathos。getcwd()加载测试文件夹testfoldercurrentpathcattest加载已经训练好的数据集或模型文件detectordlib。simpleobjectdetector(currentpathdetector。svm)读取测试图片forfinglob。glob(testfolder。jpg):print(Processingfile:{}。format(f))读取图片imgcv2。imread(f,cv2。IMREADCOLOR)颜色转换b,g,rcv2。split(img)img2cv2。merge(〔r,g,b〕)检测detsdetector(img2)print(Numberofcatsdetected:{}。format(len(dets)))获取侦测结果forindex,catinenumerate(dets):print(cat{};left{};top{};right{};bottom{}。format(index,cat。left(),cat。top(),cat。right(),cat。bottom()))leftcat。left()topcat。top()rightcat。right()bottomcat。bottom()绿色检测和识别框cv2。rectangle(img,(left,top),(right,bottom),(0,255,0),3)cv2。namedWindow(f,cv2。WINDOWAUTOSIZE)cv2。imshow(f,img)kcv2。waitKey(0)cv2。destroyAllWindows()
小结
本次只是演示操作流程和效果,当然如果差异较大的猫脸可能检测不出来,这与训练用的猫脸图片差异不大和数据集较少有关,这个不重要,自己可以增加训练的图集和猫脸的差异图片。
完美分享,本人亲测,一秒入门,适合收藏,慢慢调用。