у меня такой вопрос, создал таблицу в БД SQLite, занес туда данные + фото. Сейчас программа считывает фото из папки, хочу реализовать, чтобы теперь после создание БД, при запуске программы, данные считывались из таблицы, а точнее имя фотографии. То есть суть программы, при запуске, включается веб камера и определяет человека, сейчас фото хранятся в папке, она все определяет прекрасно, но вот когда загрузил в бд, не могу понять, как сделать, чтобы она теперь из БД брала фото и так же сравнивала. Буду благодарен за любую помощь
Код программы:
import winsound
import numpy as np
import face_recognition
import cv2
import os
from PIL import ImageFont, ImageDraw, Image
import FindCloneApi
from datetime import datetime
path = 'KnownFaces'
images = []
classNames = []
cap = cv2.VideoCapture(0)
frequency = 2500 # Set Frequency To 2500 Hertz
duration = 1000 # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)
def face_detect():
myList = os.listdir(path)
print(myList)
for cls in myList:
curImg = cv2.imdecode(np.fromfile(f'{path}/{cls}', dtype=np.uint8), cv2.IMREAD_COLOR)
images.append(curImg)
classNames.append(os.path.splitext(cls)[0])
print(classNames)
def findEncodings(images):
encodeList = []
for img in images:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encode = face_recognition.face_encodings(img)[0]
encodeList.append(encode)
return encodeList
def markAttendance(name):
with open("Attendance.csv", "r+") as f:
myDataList = f.readlines()
nameList = []
for line in myDataList:
entry = line.split(',')
nameList.append(entry[0])
if name not in nameList:
now = datetime.now()
dtString = now.strftime("%H:%M:%S")
f.writelines(f'\n{name}, {dtString}')
encodeListKnown = findEncodings(images)
print("Декодирование закончено")
while True:
success, img = cap.read()
imgS = cv2.resize(img, (0, 0), None, 0.25, 0.25)
imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
facesCurFrame = face_recognition.face_locations(imgS)
encodeCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
for encodeFace, faceLoc in zip(encodeCurFrame, facesCurFrame):
matches = face_recognition.compare_faces(encodeListKnown, encodeFace)
faceDis = face_recognition.face_distance(encodeListKnown, encodeFace)
print(faceDis)
matchIndex = np.argmin(faceDis)
name = 'Unknown'
if matches[matchIndex]:
name = classNames[matchIndex]
print(name)
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1 * 4, x2 * 4, y2 * 4, x1 * 4
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.rectangle(img, (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
cv2.putText(img, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
markAttendance(name)
else:
filename = 'KnownFaces/face.jpg'
cv2.imwrite(filename, img)
print("Лицо сохранено")
#find_clone(filename)
cv2.imshow("WebCam", img)
cv2.waitKey(1)
def find_clone(img):
find = FindCloneApi.FindCloneAPI()
find.login()
find.upload(img)
name = 'KnownFaces/' + str(find.out()) + '.jpg'
os.rename(img, name)
face_detect()
face_detect()
Сейчас путь указан к папке path = ‘KnownFaces’
Вот код соединения и создание таблицы, все создается прекрасно, фото загружаются.
import sqlite3
conn = sqlite3.connect('rr.db')
cur = conn.cursor()
def convert_to_binary_data(filename):
# Преобразование данных в двоичный формат
with open(filename, 'rb') as file:
blob_data = file.read()
return blob_data
def insert_blob(emp_id, name, photo, resume_file):
try:
sqlite_connection = sqlite3.connect('rr.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_insert_blob_query = """INSERT INTO new_tt
(id, name, photo, resume) VALUES (?, ?, ?, ?)"""
emp_photo = convert_to_binary_data(photo)
resume = convert_to_binary_data(resume_file)
# Преобразование данных в формат кортежа
data_tuple = (emp_id, name, emp_photo, resume)
cursor.execute(sqlite_insert_blob_query, data_tuple)
sqlite_connection.commit()
print("Изображение и файл успешно вставлены как BLOB в таблиу")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
insert_blob(1, "Вадим", "Вадим.jpg", "resume_Vadim.docx")
insert_blob(2, "Костя", "Костя.jpg", "resume_Vadim.docx")
Само создание таблицы с полями
CREATE TABLE new_tt
(id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
photo BLOB NOT NULL,
resume BLOB NOT NULL);