Как транслировать запись с вебкамеры через OpenCV cv2 в GUI Python EEL на HTML
у меня есть код OpenCV который работает через терминал и снимает через вебкамеру.
Мне нужно сделать что бы это работало в приложении GUI EEL Python
Соответственно там используется JS для работы которое совмещается с Python кодом.
У меня не получается запихать код Python где написана работа камеры OpenCV в HTML с использованием JS для работы GUI EEL
По сути простыми словами мне нужно сделать что бы съемка вебки транслировалась на HTML с использованием я так понимаю JS (JS не знаю) , учитывая все параметры которые я описал выше.
как это можно сделать? если ли какие то ещё способы?
Из кода что сделано у меня:
main.py
import eel
import numpy as np
import face_recognition
import cv2
import os
from datetime import datetime
eel.init('PO')
path = 'faces'
images = []
classNames = []
myList = os.listdir(path)
@eel.expose
def cameraa():
for cls in myList:
curImg = cv2.imread(f'{path}/{cls}')
images.append(curImg)
classNames.append(os.path.splitext(cls)[0])
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
encodeListKnown = findEncodings(images)
cap = cv2.VideoCapture(0)
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)
matchIndex = np.argmin(faceDis)
if matches[matchIndex]:
name = classNames[matchIndex]
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1 * 4, x2 * 4, y2 * 4, x1 * 4
cv2.rectangle(img, (x1, y1), (x2, y2), (208, 224, 64), 2)
cv2.rectangle(img, (x1, y2 - 35), (x2, y2), (208, 224, 64), cv2.FILLED)
cv2.putText(img, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 0), 2)
cv2.imshow("Cam", img)
cv2.waitKey(1)
eel.start('main.html', size=(1000,700))
main.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>main</title>
<script src="eel.js"></script>
<link rel='stylesheet' href="css/style.css">
</head>
<body>
<center>
<video id="vid" autoplay></video>
<button id="btn1" class="button">Data</button>
<script>
let video = document.getElementById('vid');
navigator.mediaDevices
.getUserMedia({
video: {width: 400, height: 400}
})
.then((stream) => {
video.srcObject = stream;
});
let res = await eel.cameraa();
document.getElementById('video').innerHTML = res
}
</script>
</body>
</html>