You can simply use pip to install the latest version of cvzone.
pip install cvzone
1.face_detection
from cvzone.FaceDetectionModule import FaceDetector
import cv2
cap = cv2.VideoCapture(0)
#ret=cap.set(3,2560)
#ret=cap.set(3,720)
detector = FaceDetector()
while True:
ret, img = cap.read()
#cv2.imwrite("./temp/3/1.jpg",img)
img, bboxs = detector.findFaces(img)
if bboxs:
# bboxInfo - "id","bbox","score","center"
center = bboxs[0]["center"]
cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
"""
Face Detection Module
By: Computer Vision Zone
Website: https://www.computervision.zone/
"""
import cv2
import mediapipe as mp
class FaceDetector:
"""
Find faces in realtime using the light weight model provided in the mediapipe
library.
"""
def __init__(self, minDetectionCon=0.5):
"""
:param minDetectionCon: Minimum Detection Confidence Threshold
"""
self.minDetectionCon = minDetectionCon
self.mpFaceDetection = mp.solutions.face_detection
self.mpDraw = mp.solutions.drawing_utils
self.faceDetection = self.mpFaceDetection.FaceDetection(self.minDetectionCon)
def findFaces(self, img, draw=True):
"""
Find faces in an image and return the bbox info
:param img: Image to find the faces in.
:param draw: Flag to draw the output on the image.
:return: Image with or without drawings.
Bounding Box list.
"""
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
self.results = self.faceDetection.process(imgRGB)
bboxs = []
if self.results.detections:
for id, detection in enumerate(self.results.detections):
bboxC = detection.location_data.relative_bounding_box
ih, iw, ic = img.shape
bbox = int(bboxC.xmin * iw), int(bboxC.ymin * ih), \
int(bboxC.width * iw), int(bboxC.height * ih)
cx, cy = bbox[0] + (bbox[2] // 2), \
bbox[1] + (bbox[3] // 2)
bboxInfo = {"id": id, "bbox": bbox, "score": detection.score, "center": (cx, cy)}
bboxs.append(bboxInfo)
if draw:
img = cv2.rectangle(img, bbox, (255, 0, 255), 2)
cv2.putText(img, f'{int(detection.score[0] * 100)}%',
(bbox[0], bbox[1] - 20), cv2.FONT_HERSHEY_PLAIN,
2, (255, 0, 255), 2)
return img, bboxs
def main():
cap = cv2.VideoCapture(0)
detector = FaceDetector()
while True:
success, img = cap.read()
img, bboxs = detector.findFaces(img)
if bboxs:
# bboxInfo - "id","bbox","score","center"
center = bboxs[0]["center"]
cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)
cv2.imshow("Image", img)
cv2.waitKey(1)
if __name__ == "__main__":
main()
2 face mesh
from cvzone.FaceMeshModule import FaceMeshDetector
import cv2
cap = cv2.VideoCapture(0)
detector = FaceMeshDetector(maxFaces=2)
while True:
success, img = cap.read()
img, faces = detector.findFaceMesh(img)
if faces:
print(faces[0])
cv2.imshow("Image", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
"""
Face Mesh Module
By: Computer Vision Zone
Website: https://www.computervision