opencv调用摄像头识别脸部眼部唇部微笑的代码编写
时间: 2023-07-27 17:07:37 浏览: 58
以下是使用OpenCV调用摄像头进行人脸、眼睛、唇部和微笑识别的Python代码示例:
```python
import cv2
# 加载人脸、眼睛和微笑分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取视频帧
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 遍历每个检测到的人脸
for (x,y,w,h) in faces:
# 在检测到的人脸周围画一个矩形框
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
# 在人脸区域检测眼睛
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
# 在人脸区域检测微笑
smiles = smile_cascade.detectMultiScale(roi_gray,scaleFactor=1.5,minNeighbors=15,minSize=(25, 25))
for (sx,sy,sw,sh) in smiles:
cv2.rectangle(roi_color,(sx,sy),(sx+sw,sy+sh),(0,0,255),2)
# 在人脸区域检测唇部
lips = gray[y+int(h/2):y+h, x:x+w]
lips = cv2.medianBlur(lips, 9)
_, lips = cv2.threshold(lips, 30, 255, cv2.THRESH_BINARY_INV)
lips, contours, _ = cv2.findContours(lips, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if cv2.contourArea(cnt) > 100:
(x, y, w, h) = cv2.boundingRect(cnt)
cv2.rectangle(roi_color, (x, y+int(h/2)), (x+w, y+h), (255, 0, 0), 2)
# 显示视频帧
cv2.imshow('Video', frame)
# 按'q'键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
```
上述代码中,`haarcascade_frontalface_default.xml`、`haarcascade_eye.xml`和`haarcascade_smile.xml`分别是人脸、眼睛和微笑分类器的文件。你可以在OpenCV官网上下载这些文件。
请注意,这只是一个简单的示例代码,人脸、眼睛和微笑检测的精度可能不完美,你可以根据自己的需求进行调整和优化。