Pythonはフェイスサインインシステムを実現します

この記事の例では、参照用のフェイスサインインシステムを実現するためのpythonの特定のコードを共有しています。具体的な内容は次のとおりです。

シンプルなフェイスサインイン/サインアウトシステム

管理者は、顔の操作を入力し、さまざまなチェックインステータステーブルをエクスポートできます。

普通の学生は、[顔認識](https://cloud.tencent.com/product/facerecognition?from=10680)でのみチェックインとチェックアウトの操作を行うことができます。

face_Recognizer.py

import cv2
import os
import numpy as np
from PIL import Image #pillow
import pyttsx3
import sys
import test.student_sql as connect #pyをインポートする
import test.recognizer_sql as baseConnect #pyをインポートする
import time
import json
def makeDir(engine):
flag=0if not os.path.exists("face_trainer"):print("事前トレーニング環境を作成する")
engine.say('最初の起動が検出され、環境が検出されず、環境が作成されています')
engine.say('事前トレーニング環境の作成')
os.mkdir("face_trainer")
engine.say('正常に作成されました')
engine.runAndWait()
flag=1if not os.path.exists("Facedata"):print("トレーニング環境を作成する")
engine.say('トレーニング環境の作成')
os.mkdir("Facedata")
engine.say('正常に作成されました')
engine.runAndWait()
flag=1return flag
def getFace(cap,path_id):
# ノートブックの内蔵カメラを呼び出すと、パラメーターは0になります。他のカメラがある場合は、パラメーターを1、2に調整できます。
# cap = cv2.VideoCapture(0)
# xmlファイルは独自のファイルパスです
face_detector = cv2.CascadeClassifier(r'F:\npyWorkspace\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
# face_id =input('\n enter user id:')print('\n Initializing face capture. Look at the camera and wait ...')
count =0while True:
# カメラから写真を読む
sucess, img = cap.read()
# グレースケール画像に変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔検出
faces = face_detector.detectMultiScale(gray,1.3,5)for(x, y, w, h)in faces:
cv2.rectangle(img,(x, y),(x+w, y+w),(255,0,0))
count +=1
# 画像を保存
cv2.imwrite("Facedata/User."+str(path_id)+'.'+str(count)+'.jpg', gray[y: y + h, x: x + w])
cv2.imshow('image', img)
# 絵を続けてください。
k = cv2.waitKey(1)if k ==27: #escキーでカメラを終了します
break
elif count  =100: #1000サンプルを取得したら、カメラを終了します
break
cv2.destroyAllWindows()
def getImagesAndLabels(path, detector):
imagePaths =[os.path.join(path, f)for f in os.listdir(path)] #結合機能の役割
faceSamples =[]
ids =[]for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L') # convert it to grayscale
img_numpy = np.array(PIL_img,'uint8')
id =int(os.path.split(imagePath)[-1].split(".")[1])
faces = detector.detectMultiScale(img_numpy)for(x, y, w, h)in faces:
faceSamples.append(img_numpy[y:y + h, x: x + w])
ids.append(id)return faceSamples, ids
def trainFace():
# フェイスデータパス
path ='Facedata'
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier(r'F:\npyWorkspace\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')print('Training faces. It will take a few seconds. Wait ...')
faces, ids =getImagesAndLabels(path, detector)
recognizer.train(faces, np.array(ids))
recognizer.write(r'face_trainer\trainer.yml')print("{0} faces trained. Exiting Program".format(len(np.unique(ids))))
def checkFace(cam,names,engine,sign_flag):
sex ={"female":"MS","male":"氏"}
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('face_trainer/trainer.yml')
cascadePath = r"F:\npyWorkspace\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)
font = cv2.FONT_HERSHEY_SIMPLEX
idnum =0
names =['yumengzhen','dujuanjuan','litingting','kangming','wangyizhe']
# cam = cv2.VideoCapture(0)
minW =0.1* cam.get(3)
minH =0.1* cam.get(4)while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(int(minW),int(minH)))for(x, y, w, h)in faces:
cv2.rectangle(img,(x, y),(x + w, y + h),(0,255,0),2)
idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])if confidence <100:
Name =connect.readName(idnum) #着信ID学生情報テーブルが見つかったリターン名を接続します
Sex =connect.readSex(idnum) #見つかったID学生情報テーブルを接続し、セックスを返します
StudentID =connect.readStudentID(idnum) #学生IDを返すために見つかった接続ID学生情報テーブル
# idnum = names[idnum] #データベースを使用して、学生情報テーブルのIDに対応する名前を読み取ります
confidence ="{0}%".format(round(100- confidence))if sign_flag=='0': #サインイン
say(engine,"ようこそ"+Name+ sex[Sex]+"サインインに成功")
baseConnect.insertd(idnum,Name,StudentID,Sex) #チェックイン情報をチェックインテーブルに挿入します
print("ようこそ"+Name+ sex[Sex]+"サインインに成功")else:say(engine,"ようこそ "+Name+ sex[Sex]+"正常にサインアウトする")
baseConnect.insertt(idnum,Name,StudentID,Sex) #チェックインテーブルにチェックアウト情報を挿入します
print("ようこそ"+Name+ sex[Sex]+"正常にサインアウトする")
cv2.imshow("img",img)
os.system("pause")returnelse:
idnum ="unknown"
confidence ="{0}%".format(round(100- confidence))
cv2.putText(img,str(idnum),(x +5, y -5), font,1,(0,0,255),1)
cv2.putText(img,str(confidence),(x +5, y + h -5), font,1,(0,0,0),1)
cv2.imshow('camera', img)
k = cv2.waitKey(10)if k ==27:break
cam.release()
cv2.destroyAllWindows()
def say(engine,str):
engine.say(str)
engine.runAndWait()
def admission(): #入力情報モジュール
# names ={"yumengzhen":0,"dujuanjuan":1,"litingting":2}say(engine,"学生IDを入力してください")
StudentID =input("学生IDを入力してください:")
# データベース情報テーブルを読み取り、名前に対応するIDを取得します
ID=connect.readIDbaseStudentID(StudentID) #入力名の学生情報テーブルを接続して、リターンIDを見つけます
if ID==-1:#生徒が見つかりませんでした。生徒情報を挿入してください
while True:say(engine,"学生情報が見つかりませんでした。0を入力してください。1を登録してください。再入力してください。")
op=input("\n生徒情報が見つからない場合は、番号を入力してください0登録済み生徒情報1再入力してください")if op=='0':
Name,studentID,Sex=input("学生情報を入力してください:名前studentIDセックス").split()
connect.insert(Name,studentID,Sex) #学生情報を挿入する
else:
StudentID =input("学生IDを入力してください:")
ID=connect.readIDbaseStudentID(StudentID) #入力名の学生情報テーブルを接続して、リターンIDを見つけます
if ID!=-1:breaksay(engine,"カメラを開く")
cam = cv2.VideoCapture(0)say(engine,"カメラを見て、顔のデータの収集を開始します")getFace(cam, ID) #実際に渡されるのはidです
cam.release()if __name__ =='__main__':
names ={"yumengzhen":0,"dujuanjuan":1,"litingting":2}
password="123456" #パスワード
engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate -20)
flag=makeDir(engine)
# trainFace()while True:if flag==1:
flag =0say(engine,"初めて使用するための顔情報はありません")say(engine,"新人情報を入力するかどうか")say(engine,"0を入力すると、他の手段を入力して終了することを意味します")
value =input("0:はいまたはその他:いいえ")if value=='0':while True:admission()say(engine,"新しい顔の情報を入力し続けますか")say(engine,"0を入力すると、他の手段を入力して終了することを意味します")
firstflag =input("0:はいその他:終了")if firstflag !='0':breaksay(engine,"収集後、トレーニングを開始します")trainFace()say(engine,"トレーニングを終了しました")
# say(engine,"ログイン方法を選択してください")say(engine,"サインインを開始するには、0マネージャーモード1に入ります。/サインアウトモード2学生サインインシステムを終了します")
user=input("\n0:マネージャーモード1:サインイン/サインアウトモード2:学生サインインシステムを終了します\n")if user=='0':say(engine,"管理者パスワードを入力してください")
pd=input("\n管理者パスワードを入力します:\n")
count=1while True:if count==3:say(engine,"間違ったパスワードを3回以上入力して、強制終了します")breakif password == pd:say(engine,"管理者モード")
# say(engine,"番号0を入力してサインインフォーム1をエクスポートし、個人サインインフォーム2をエクスポートして期間テーブル3をエクスポートし、情報フォーム4をエクスポートして顔情報5を入力して終了します")
op =input("\n0:すべてのクラスメートのサインインテーブル1をエクスポートします:個人サインインフォーム2をエクスポートする:すべての人員のタイムテーブルをエクスポートする3:学生情報テーブルのエクスポート4顔情報の入力5終了\n")if op =='0':
baseConnect.sign()#チェックインフォームのエクスポート
say(engine,"サインインテーブルを正常にエクスポートする")
pass
elif op =='1':say(engine,"エクスポートされた学生の学生IDを入力します")
StudentID=input("エクスポートされた学生の学生IDを入力します")
ID=connect.readIDbaseStudentID(StudentID)if ID==-1:say(engine,"学生情報なし")else:
baseConnect.peoson_sign(StudentID)#個人のサインインフォームをエクスポートする
Name =connect.readName(ID) #着信ID学生情報テーブルが見つかったリターン名を接続します
say(engine,"書き出す"+Name+"情報の成功")
elif op =='2':
baseConnect.total_time()#タイムテーブルのエクスポート
say(engine,"期間テーブルを正常にエクスポートします")
elif op =='3':
# 学生情報テーブルのエクスポート
connect.find_student_all()say(engine,"学生情報を正常にエクスポートする")
elif op =='4':while True:admission()say(engine,"新しい顔の情報を入力し続けますか")say(engine,"0を入力すると、他の手段を入力して終了することを意味します")
secondflag =input("0:はいその他:終了")if secondflag !='0':breaksay(engine,"収集後、トレーニングを開始します")trainFace()say(engine,"トレーニングを終了しました")
elif op =='5':say(engine,"管理者モードを終了しました")breakelse:say(engine,"入力フォームが間違っています。再入力してください")else:say(engine,"間違ったパスワードを再入力してください")
pd =input("\n管理者パスワードを入力します:\n")
count +=1;
elif user=='1':say(engine,"学生システムへのサインインへようこそ/サインアウトモード")
sign_flag=0;while True:say(engine,"サインインするには番号0を入力してサインアウトするには1")
sign_flag =input("\n0:サインイン1サインアウト\n")if sign_flag=='1' or sign_flag=='0':breakelse:say(engine,"正しい入力フォームを入力してください")say(engine,"顔認識を開始")say(engine,"カメラを開く")
cam = cv2.VideoCapture(0)checkFace(cam, names, engine,sign_flag)
elif user=='2':say(engine,"保存された情報")say(engine,"さようなら")
sys.exit(0)else:say(engine,"入力エラー、再入力してください")

student_sql.py

学生

import pymssql as py
import pandas as pd
# データベースに接続し、学生テーブルを作成し、テーブルクエリを実行し、テーブルエントリを実行します
server ="DESKTOP-XXX"#データベースに接続するためのサーバーアドレス
user ="sa"#アカウントを接続する
password ="123"#接続パスワード
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor() #カーソルを取得
# テーブルを作成する
cursor.execute("""
IF OBJECT_ID('students','U') IS NOT NULL
DROP TABLE students
CREATE TABLE students(
ID INT NOT NULL,
name VARCHAR(100),
StudentID INT,
Sex VARCHAR(100))""")
conn.commit()
# 初めて実行するときにテーブルを作成します。その後、テーブルを再度作成する必要はありません。
def insert(Name, studentID, Sex):
count_students =0try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select count(ID) from students')for row in cursor:
count_students = row[0]print(row[0])
cursor.executemany("INSERT INTO students VALUES (%d, %s, %d,%s)",[(count_students+1, Name, studentID, Sex)])
# commitを呼び出す必要があります()自動送信をtrueに設定していない場合に、データを送信し続けるには
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")
except py.OperationalError:print("データエラー、入力したデータを確認してください")
# 学生情報テーブルのエクスポート
def find_student_all():try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
sql ="select * from students"
df = pd.read_sql(sql, conn)
df.to_excel('all.xlsx',index=False)print('ok')
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")
# find_student_all()
def readName(idnum):
Name =-1try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select Name from students where ID='+str(idnum))for row in cursor:if row[0]!=[]:
Name = row[0]
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")return Name
def readIDbaseStudentID(StudentID):
ID =-1try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select ID from students where StudentID='+str(StudentID))for row in cursor:if row[0]!=[]:
ID = row[0]
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")return ID
def readSex(idnum):
Sex =-1try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select Sex from students where ID='+str(idnum))for row in cursor:if row[0]!=[]:
Sex = row[0]
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")return Sex
def readID(name):
# 複数のID
ID =-1try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select ID from students where name='+'\''+str(name)+'\'')for row in cursor:if row[0]!=[]:
ID = row[0]
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")return ID
def readStudentID(idnum):
StudentID =-1try:
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor =conn.cursor()
cursor.execute(' select StudentID from students where ID='+str(idnum))for row in cursor:if row[0]!=[]:
StudentID = row[0]
conn.commit()
conn.close()
except py.InterfaceError:print("データベース接続エラー")
except py.ProgrammingError:print("データエラー、入力したデータを確認してください")return StudentID
# 接続を閉じます
# conn.close()
#
# # 注:接続中は、実行中のデータベース操作に対して1つのカーソルオブジェクトのみが表示されます。

recognizer_sql.py

import pymssql as py
import time
import pandas as pd
server ="DESKTOP-XXXX"#接続サーバーのアドレス
user ="sa" #アカウントを接続する
password ="123" #接続パスワード
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor() #カーソルを取得
def insertd(idnum,Name,StudentID,Sex): #サインイン
conn = py.connect(server, user, password,"student_message") #接続を取得します
timenow = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
cursor = conn.cursor()
cursor.execute("INSERT INTO qiandao VALUES (%d, %s,%d,%s, %s, %s, %s,%d )",(idnum,Name,StudentID,Sex,timenow,'0','0',0))
conn.commit()
# commitを呼び出す必要があります()送信されたデータを保持するには
def insertt(idnum,Name,StudentID,Sex): #サインアウト
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor()
cursor.execute("SELECT starttime FROM qiandao WHERE ID=%s and flag=%d",(idnum,0))
starttimeget = cursor.fetchone()
sat =str(tuple(starttimeget))
timenow = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
timeArray = time.strptime(sat,"('%Y-%m-%d %H:%M:%S',)")
timeStamp =int(time.mktime(timeArray))
timecout = time.time()- timeStamp
m, s =divmod(timecout,60)
h, m =divmod(m,60)
timepass =str(h)+'時間'+str(m)+'分'+str(s)+'2番目'print(timepass)
cursor.executemany("INSERT INTO qiandao VALUES (%d, %s,%d,%s, %s, %s, %s,%d )",[(idnum,Name,StudentID,Sex,'0', timenow, timepass,1)])
conn.commit()
def peoson_sign(StudentID):#学生情報テーブルのエクスポート_学生数によると
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor()
sql ="select * from qiandao where StudentID="+str(StudentID)
df = pd.read_sql(sql, conn)
df.to_excel(r'E:\01STUDY\20190701\work\openVersion\excel\studentID_sign.xlsx',index=False)print('ok')
conn.commit()
# peoson_sign(2016002105)
def sign():#チェックインフォームのエクスポート
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor()
sql ="select * from qiandao"
df = pd.read_sql(sql, conn)
df.to_excel(r'E:\01STUDY\20190701\work\openVersion\excel\sign_all.xlsx', index=False)print('ok')
conn.commit()
# sign()
def total_time():#タイムテーブルのエクスポート#sign()
conn = py.connect(server, user, password,"student_message") #接続を取得します
cursor = conn.cursor()
sql ="select * from qiandao where convert(nvarchar(max),count) != convert(nvarchar(max),0)"
df = pd.read_sql(sql, conn)
df.to_excel(r'E:\01STUDY\20190701\work\openVersion\excel\total_time.xlsx', index=False)print('ok')
conn.commit()
#
# if __name__=='__main':
# sign()
# # peoson_sign(2016002105)
conn.close()

その他の教材については、「管理システム開発」のトピックに注意してください。

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

Pythonはフェイスサインインシステムを実現します
Pythonは名刺管理システムを実現
Python3は名刺管理システムを実現
Pythonはエクスプレス価格クエリシステムを実現します
Pythonは学生管理システムの開発を実現します
Pythonは宇宙船戦争を実現します
Pythonは写真のステッチを実現します
Pythonはオンライン翻訳を実現します
Pythonは戦車戦を実現
Pythonはオンライン翻訳機能を実現します
Pythonは駐車場管理システムを実現
Pythonはリンゴを食べるゲームを実現します
Pythonは推測ゲームを実現します
Pythonは3Dマップの視覚化を実現します
Pythonは車の管理システムを実装しています
Pythonは写真のバッチ命名を実現します
Pythonは学生のパフォーマンス評価システムを実装しています
pythonによる学生管理システムの実装
Python名刺管理システムの開発
PythonはAIフェイスチェンジ機能を実装しています
Python版名刺管理システム
Pythonはオンラインマイクロブログデータの視覚化を実現します
python学生管理システムの実装
Pythonは実際の銀行システムを実装しています
Pythonは画像認識カー機能を実現
Pythonはudp送信画像機能を実現します
Pythonはコンソール出力カラーフォントを実現します