안녕하세요 여러분.
오늘은 흡연인식 + 얼굴인식 프로젝트를 공유해드리겠습니다. 많은 공공장소, 생산 현장, 학교에서 흡연이 금지되어 있지만, 흡연 금지를 시행하고 AI가 흡연 행위를 자동으로 식별하고 흡연자를 식별할 수 있도록 하는 것은 여전히 필요합니다.
타겟 검출 알고리즘을 이용해 흡연 행위를 판별하고, 흡연자의 얼굴을 추출하고, 얼굴 인식 알고리즘을 사용해 누가 흡연하고 있는지 판별합니다. 아이디어는 비교적 간단하지만 세부 사항은 여전히 조금 번거롭습니다.
프로젝트에 사용된 학습 데이터와 소스 코드가 패키지화되어 있습니다. 여전히 이전과 동일합니다. 댓글 섹션에서 확인하세요.
5,000개의 레이블이 지정된 흡연 데이터를 학습 데이터로 사용
하여 데이터세트 디렉터리에 배치했습니다.
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
두 번째 단계, ./models/yolov5s.yaml을 smoke.yaml에 복사하고, nc를 수정합니다.
nc: 1# number of classes
세 번째 단계는 yolov5s.pt 사전 훈련된 모델을 다운로드하여 {yolov5 디렉토리}/weights 디렉토리에 배치하는 것입니다
다음 명령을 실행하여 training
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
훈련이 완료된 후 다음 출력을 볼 수 있습니다.
올바르게 불러도 괜찮습니다.
훈련이 완료된 후 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]
담배를 식별할 수 있게 된 후에도 현재 흡연하고 있는지 여부를 판단해야 합니다.
담배 감지 프레임과 입 감지 프레임을 사용하여 IOU를 계산할 수 있습니다. 직설적으로 말하면 두 프레임이 교차하는지 여부를 판단하는 것입니다.
얼굴의 핵심 포인트를 사용하여 식별하는 입 감지 프레임.
얼굴 인식 알고리즘에는 성숙한 모델이 많이 있습니다. 직접 훈련할 필요는 없으며 데이터베이스를 직접 조정하면 됩니다.
여기서는 얼굴의 68개 핵심 포인트를 식별하고 이 68개 핵심 포인트를 기반으로 얼굴 특징을 추출할 수 있는 dlib 라이브러리를 사용하고 있습니다.
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)
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)
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 '未知'
이 프로젝트에는 더 많은 기능이 있습니다. 예를 들어 제가 제공한 영상에는 얼굴이 한 개밖에 없지만 실제 감시에는 얼굴이 여러 개 있을 것입니다. 이때, MOT 알고리즘을 이용하여 보행자를 추적한 후 흡연 여부를 개별적으로 식별할 수 있으며, 식별된 흡연 행위를 별도의 통계 영역에 생성하여 경고 및 처벌의 증거로 활용할 수 있습니다.
위 내용은 AI 흡연 금지는 괜찮습니다! 흡연인식 + 얼굴인식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!