【摸魚神器】基於python的BOSS識別系統
import os
import cv2
import sys
import time
import numpy as np
import face_recognition
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication,QLabel
# 全域性變數
path = './data' # 人像儲存路徑
showflag = True # 是否實時顯示影像
# 利用 PyQt5 開啟全屏視窗,實現視窗替換效果
def lock_screen(image_path='lock.jpg'):
app = QApplication(sys.argv)
pixmap = QPixmap(image_path)
screen = QLabel()
screen.setPixmap(pixmap)
screen.showFullScreen()
sys.exit(app.exec_())
# 讀取本地肖像庫,建立識別白名單
def load_portrait(path=path):
'''
path :肖像庫路徑
'''
# 訊息提示
print('>>> 本地影像庫讀取中,請稍後 ',end='')
for i in range(5):
print('.', end='')
time.sleep(0.3)
# 建立白名單
white_map = {}
for name in os.listdir(path):
filepath = '%s/%s'%(path, name)
avg_coding = np.zeros(128)
n = 0
for file in os.listdir(filepath):
if '.jpg' in file:
image = face_recognition.load_image_file('%s/%s'%(filepath, file))
encoding = face_recognition.face_encodings(image)[0]
avg_coding += encoding
n += 1
avg_coding /= n
white_map[name] = avg_coding
print('>>"%s" 人臉資料載入完成! '%name)
return white_map
# 人臉識別,判斷當前畫面的人像是否與白名單中的匹配
def recognize(frame, white_map):
'''
frame: 捕獲的攝像頭幀
white_map: 人像庫白名單
'''
# 根據白名單,提取肖像編碼
known_face_encodings = list(white_map.values())
known_face_names = list(white_map.keys())
# 影像預處理(包括大小調整、格式轉換)
frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # 調整影像大小,以減小計算需求
frame = frame[:, :, ::-1] # BGR->RGB
# 計算人臉的編碼值
face_locations = face_recognition.face_locations(frame)
face_encodings =外匯跟單gendan5.com face_recognition.face_encodings(frame, face_locations)
# 計算的編碼與白名單比較,獲得其匹配的名字
face_names = []
for face_encoding in face_encodings:
# 預設為 " 未知 "
name = ' 未知 '
# 匹配
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
if True in matches:
index = matches.index(True)
name = known_face_names[index]
face_names.append(name)
return face_names, face_locations
if __name__ == '__main__':
# 載入白名單
white_map = load_portrait(path)
# 開啟攝像頭
video_capture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 採集影像
flag = 0
while True:
flag %= 3
_, frame = video_capture.read()
if flag == 0: # 每 3 幀處理因此(提高處理速度,防止影片卡頓)
face_names, face_locations = recognize(frame, white_map)
if ' 未知 ' in face_names: # 如果有白名單之外的人
lock_screen()
break
flag += 1
if showflag:
# 將人臉框出
for (top, right, bottom, left), name in zip(face_locations, face_names):
# 改變座標位置(因為處理時原圖被縮小了 4*4 )
top *= 4
right *= 4
bottom *= 4
left *= 4
# 矩形框
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# 加上姓名
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
# 顯示影像
cv2.imshow('monitor', frame)
# 按 Q 退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2890835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Chrome外掛:提醒你正在摸魚,摸魚的時候知道自己在摸魚,減少摸魚的時間和頻率。Chrome
- Thief-Book:上班摸魚看小說必備神器
- 基於深度學習的手勢識別系統(Python程式碼,UI介面版)深度學習PythonUI
- 基於語音識別的會議記錄系統
- MATLAB——基於影像相減的紙牌識別系統Matlab
- 基於深度學習的人臉性別識別系統(含UI介面,Python程式碼)深度學習UIPython
- 捕魚船識別檢測預警系統
- 【摸魚神器】一次搞定 vue3的 路由 + 選單 + tabsVue路由
- 基於施工現場安全的安全帽識別系統
- 基於Matlab的車牌識別系統(帶介面、模板庫)Matlab
- 【摸魚神器】UCode Cms管理系統 內建超好用的程式碼生成器 解決多表連線痛點
- 網課摸魚
- 基於百度雲的OCR識別(Python)Python
- opencv python 基於KNN的手寫體識別OpenCVPythonKNN
- opencv python 基於SVM的手寫體識別OpenCVPython
- 語音識別--kaldi環境搭建(基於Ubuntu系統)Ubuntu
- 一款上班摸魚神器!還不會被老闆發現
- 基於 OpenCv 和 Python 的手指識別及追蹤OpenCVPython
- 旅行的意義 | 摸魚系列
- 2020/11/2 摸魚
- SSH Exporter:基於Prometheus的遠端系統效能監控神器ExportPrometheus
- 一款摸魚神器!幫助你利用上班時間背單詞!
- 基於OCaml的識別程式
- 神器!使用Python 輕鬆識別驗證碼Python
- 基於mtcnn/facenet/tensorflow實現人臉識別登入系統CNN
- 不能摸魚的工作不是好工作?
- 【摸魚神器】UI庫秒變LowCode工具——列表篇(二)維護json的小工具UIJSON
- iTerm2摸魚指北
- 上班摸魚,線上答疑
- 【摸魚神器】UI庫秒變LowCode工具——列表篇(一)設計與實現UI
- 打工人不再為難打工人!這款神器,竟是摸魚黨上班必備!
- 【摸魚神器】UI庫秒變低程式碼工具——表單篇(一)設計UI
- 基於感知機的人名-性別預測系統 —— Python實現Python
- 【專案】Python人臉識別(GUI介面)—— 基於pyopencvPythonGUIOpenCV
- 基於MATLAB公式識別Matlab公式
- 摸魚時間聊聊目前的現狀
- 上班摸魚與網路安全
- NEC向喬治亞提供基於面部識別技術的城市監控系統