网站首页 > 基础教程 正文
1 说明
=====
1.1 Dlib库,非常强大的一个库,有python接口。
1.2 多用于人工智能、机器人、物体检测和识别、自动驾驶等热门领域。
1.3 比如强大的人脸识别,当然训练自己的数据集和模型,可用于物体检测和识别,当然在各个领域都有广泛的使用空间,比如医学上,可以训练较大的数据集,用于肺炎或者癌症等疾病的检测。
1.4 今天从一个简单的例子,来说明如何训练自己的数据集,并检测和识别。
1.5 熟悉dlib+python+opencv等相关知识。
2 检测和识别猫脸(结果倒置)
=======================
2.1 效果图
2.2 部分失败原因:
图片数据集太少,本次训练用的图片,仅有10张猫脸正照,而且差异不大。
2.3 还可以训练一切自己感兴趣的东西,用于检测和识别。
【感兴趣的朋友可以继续,我手把手教你】
3 前期准备
========
3.1 《Dlib库教程(1):介绍、linux下的安装与避坑》
3.2 《Dlib库教程(2):联合python的人脸检测、标记、识别》,可以不看这篇。
3.3 准备
git clone https://github.com/davisking/dlib
#这个方法太慢了
3.4 我采用浏览器下载dlib-master包,解压在根目录下
https://github.com/davisking/dlib
本机解压:/home/xgj/dlib-master
#本机
cd dlib-master/tools/imglab
mkdir build
cd build
cmake .. #注意点点
cmake --build . --config Release
sudo make install
3.5 素材准备:图片来自网络,如有侵权请联系,定删。
#
/home/xgj/Desktop/dlib-cat-detect #我在桌面新建一个文件夹dlib-cat-detect,下面再新建2个文件夹,cat_train文件夹和cat_test文件夹。
把所有要训练的猫图片保存到cat_train文件夹(10张图片jpg),要测试的图片放到cat_test文件夹(3张图片jpg),2个文件夹里的图片不要一样,以免影响测试效果。
4 图片标注:用imglab
=================
4.1 终端:
cd /home/xgj/Desktop/dlib-cat-detect
cd cat_train
imglab -c cat.xml . #注意点
imglab cat.xml #生成xml文件
4.2 图示:
打标签的方法很简单,在imglab窗口下,先按住shift键,然后在猫身的左上方按下鼠标左键,
拖动到猫身右下方再放开鼠标,这样就在猫身位置上画出了一个矩形框,如下图所示。
针对每一张图片进行上述操作,结束后保存。如果数据集够大的话,确实是个体力活。
下图只是方法演示,请注意与猫脸有区别。
5 训练数据集的代码
===============
5.1 cat_train_self.py,放在文件夹下dlib-cat-detect
#文件名:cat_train_self.py
#使用方法:在文件夹下,打开终端,输入
#python3.8 cat_train_self.py
# -*- coding: utf-8 -*-
#训练代码
import os
import dlib
# 训练的参数,可以根据实际情况进行修改
options = dlib.simple_object_detector_training_options()
options.add_left_right_image_flips = True
options.C = 5
options.num_threads = 4
options.be_verbose = True
current_path = os.getcwd()
train_folder = current_path + '/cat_train/'
train_xml_path = train_folder + 'cat.xml'
print("start training:")
# 最重要的一个函数
dlib.train_simple_object_detector(train_xml_path, 'detector.svm', options)
print("Training accuracy: {}".format(
dlib.test_simple_object_detector(train_xml_path, "detector.svm")))
5.2 效果和过程省略。
6 检测和识别代码
#检测代码
#cat_detect_self.py
# -*- coding: utf-8 -*-
#在文件夹下,打开终端,输入
#python3.8 cat_detect_self.py
#导入模块
import os
import glob
import dlib
import cv2
#路径管控
current_path = os.getcwd()
#加载测试文件夹
test_folder = current_path + '/cat_test/'
#加载已经训练好的数据集或模型文件
detector = dlib.simple_object_detector(current_path + "/"+"detector.svm")
#读取测试图片
for f in glob.glob(test_folder+'*.jpg'):
print("Processing file: {}".format(f))
#读取图片
img = cv2.imread(f, cv2.IMREAD_COLOR)
#颜色转换
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
#检测
dets = detector(img2)
print("Number of cats detected: {}".format(len(dets)))
#获取侦测结果
for index, cat in enumerate(dets):
print('cat {}; left {}; top {}; right {}; bottom {}'.format(index, cat.left(), cat.top(), cat.right(), cat.bottom()))
left = cat.left()
top = cat.top()
right = cat.right()
bottom = cat.bottom()
#绿色检测和识别框
cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)
cv2.namedWindow(f, cv2.WINDOW_AUTOSIZE)
cv2.imshow(f, img)
k = cv2.waitKey(0)
cv2.destroyAllWindows()
小结
本次只是演示操作流程和效果,当然如果差异较大的猫脸可能检测不出来,这与训练用的猫脸图片差异不大和数据集较少有关,这个不重要,自己可以增加训练的图集和猫脸的差异图片。
完美分享,本人亲测,一秒入门,适合收藏,慢慢调用。
猜你喜欢
- 2025-03-10 go语言text/template标准库
- 2025-03-10 Python 的os和shutil包简介
- 2025-03-10 前端代码质量-圈复杂度原理和实践
- 2025-03-10 近2万字详解JAVA NIO2文件操作,过瘾
- 2025-03-10 这两个Python库,轻而易举就能实现MP4与GIF格式互转,太好用了
- 2025-03-10 Python技巧之实现智能文件整理,轻松分类图片、文档、视频等
- 2025-03-10 Python之Pandas使用系列(八):读写Excel文件的各种技巧
- 2025-03-10 Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来
- 2025-03-10 深入理解 Linux 位置无关代码 PIC
- 2025-03-10 什么是微调?如何用微调模型完成图像分类?
- 05-14CSS基础知识(一) CSS入门
- 05-14CSS是什么? CSS和HTML有什么关系?
- 05-14什么是CSS3?
- 05-14CSS如何画一个三角形?
- 05-14初识CSS——CSS三角制作
- 05-14Wordpress建站教程:给图片添加CSS样式
- 05-14HTML和HTML5,css和css3的区别有哪些?
- 05-14Html中Css样式Ⅱ
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)