AI禁烟可还行!吸烟识别+人脸识别

WBOY
Freigeben: 2023-04-14 12:49:02
nach vorne
1918 Leute haben es durchsucht

哈喽,大家好。

今天给大家分享一个吸烟识别+人脸识别的项目。很多公共场所、生产场所和学校,都有禁烟的要求,做一个禁烟的监控,让AI自动识别吸烟行为,并识别是谁在吸烟,还是很有必要的。

用目标检测算法判断吸烟行为,提取吸烟者的人脸,用人脸识别算法判断谁在吸烟。思路比较简单,但细节处理起来还是稍微有些麻烦。

项目用到训练数据和源码,都已经打包好了。还是老样子,评论区获取。

1. 检测香烟

我用了 5k 张抽烟的标记数据,作为训练数据

图片

放在dataset目录下。

训练YOLOv5目标检测模型。

第一步,复制data/coco128.yaml为smoke.yaml,并修改数据集目录和类别配置信息

path: ../dataset/smoke # dataset root dir train: images/train# train images (relative to 'path') 128 images val: images/test# val images (relative to 'path') 128 images test:# test images (optional) # Classes names: 0: smoke
Nach dem Login kopieren

第二步,复制./models/yolov5s.yaml为smoke.yaml,修改nc

nc: 1# number of classes
Nach dem Login kopieren

第三步,下载yolov5s.pt预训练模型,放在{yolov5目录}/weights目录中

执行下面命令,训练即可

python ./train.py --data ./data/smoke.yaml --cfg ./models/smoke.yaml --weights ./weights/yolov5s.pt --batch-size 30 --epochs 120 --workers 8 --name smoke --project smoke_s
Nach dem Login kopieren

图片

训练完成后可以看到如下输出:

图片

准召还凑合。

训练完成后,可以找到best.pt位置,后面用它来做香烟检测。

model = torch.hub.load('../28_people_counting/yolov5', 'custom', './weights/ciga.pt', source='local') results = self.model(img[:, :, ::-1]) pd = results.pandas().xyxy[0] ciga_pd = pd[pd['class'] == 0]
Nach dem Login kopieren

图片

能识别到烟后,我们还需要判断,当前是否正在吸烟。

可以用香烟检测框与嘴部检测框计算IOU来判断,说白了,就是判断这两框是否有交集,若有,则认为当前正在吸烟。

图片

嘴部检测框,使用人脸关键点来识别。

2. 人脸识别

人脸识别算法有很多成熟的模型,我们不需要自己训练,直接调库即可。

我这里用的是dlib库,它可以识别人脸 68 个关键点,并根据这 68 个关键点,提取人脸特征。

图片

face_detector = dlib.get_frontal_face_detector() face_sp = dlib.shape_predictor('./weights/shape_predictor_68_face_landmarks.dat') dets = face_detector(img, 1) face_list = [] for face in dets: l, t, r, b = face.left(), face.top(), face.right(), face.bottom() face_shape = face_sp(img, face)
Nach dem Login kopieren

face_detector可以检测人脸,返回人脸检测框,face_sp基于人脸检测框,识别人脸 68 个关键点。

从这 68 个关键点中,我们便可以获取到嘴部检测框,用于判断是否正在吸烟。

最后,我们还是希望利用人脸识别算法,识别到谁在吸烟。

第一步,提取人脸特征

face_feature_model = dlib.face_recognition_model_v1('./weights/dlib_face_recognition_resnet_model_v1.dat') face_descriptor = face_feature_model.compute_face_descriptor(img, face_shape)
Nach dem Login kopieren

face_descriptor根据人脸 68 个关键点之间的位置、距离,维每张脸计算出一个特征向量。这个原理类似于我们之前分享的word2vec或者将视频映射到N维向量。

第二步,将现有人脸录入人脸库。我准备了 3 个影视剧中的吸烟行为

图片

从视频中裁剪出人脸,向量化后,写入人脸数据库(用文件代替)

图片

第三步,发生吸烟行为后,我们可以裁剪出吸烟者的人脸,并计算人脸向量,与人脸数据库的特征进行比对,找到最相似的人脸,返回对应的名字

图片

def find_face_name(self, face_feat): """ 人脸识别,计算吸烟者名称 :param face_feat: :return: """ cur_face_feature = np.asarray(face_feat, dtype=np.float64).reshape((1, -1)) # 计算两个向量(两张脸)余弦相似度 distances = np.linalg.norm((cur_face_feature - self.face_feats), axis=1) min_dist_index = np.argmin(distances) min_dist = distances[min_dist_index] if min_dist < 0.3: return self.face_name_list[min_dist_index] else: return '未知'
Nach dem Login kopieren

这个项目还有很多可以扩展的地方,比如:我提供的视频只有单张脸,实际监控中肯定是多张脸。这时候可以用MOT算法进行行人跟踪,然后再对每个人单独做吸烟识别

还有,可以单独做一个统计区,把识别到的吸烟行为保存,用作警告、处罚的证据。

Das obige ist der detaillierte Inhalt vonAI禁烟可还行!吸烟识别+人脸识别. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!