python - Python应用程序没有响应
问题描述
我正在尝试创建一个简单的应用程序,它可以了解我们的眼睛是否闭合。首先,我需要用于教学的数据,在此之前我想测试是否可以打印出这些值(参见下面的代码)。当我按下“q”键时,框架冻结并希望我输入另一个输入。之后,我按“q”或“w”键,应用程序开始没有响应。
我在 PyCharm IDE 中有 3 个警告,如下所示:
Name "left_eye_distance" can be undefined
Name "right_eye_distance" can be undefined
Name "nose_distance" can be undefined
我不知道它是否因为这些错误而没有响应,但我无法修复它。我的代码有问题吗?
import cv2
import dlib
detector = dlib.get_frontal_face_detector() # face detector
model = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") # face points
cap = cv2.VideoCapture(0) # get video capture from camera
f = open("dataset.csv", "r+")
# Mid-point of eye pupil covers
def mid(p1, p2):
return int((p1[0] + p2[0]) / 2), int((p1[1] + p2[1]) / 2)
# Get Right Eye Coordinates
def getRightEye():
p1_right, p2_right = points_list[37], points_list[38] # upper eye points
p3_right, p4_right = points_list[40], points_list[41] # lower eye points
# put circles in those points
cv2.circle(frame, (p1_right[0], p1_right[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p2_right[0], p2_right[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p3_right[0], p3_right[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p4_right[0], p4_right[1]), 3, (0, 0, 255), -1)
# get mid-point of both upper eye and lower eye
po_right = mid(p1_right, p2_right)
po_bottom_right = mid(p3_right, p4_right)
# create circles for mid-points
cv2.circle(frame, (po_right[0], po_right[1]), 3, (255, 0, 0), -1)
cv2.circle(frame, (po_bottom_right[0], po_bottom_right[1]), 3, (255, 0, 0), -1)
return po_bottom_right[1] - po_right[1]
# Get Left Eye Coordinates
def getLeftEye():
p1_left, p2_left = points_list[43], points_list[44] # upper eye points
p3_left, p4_left = points_list[47], points_list[46] # lower eye points
# put circles in those points
cv2.circle(frame, (p1_left[0], p1_left[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p2_left[0], p2_left[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p3_left[0], p3_left[1]), 3, (0, 0, 255), -1)
cv2.circle(frame, (p4_left[0], p4_left[1]), 3, (0, 0, 255), -1)
# get mid-point of both upper eye and lower eye
po_left = mid(p1_left, p2_left)
po_bottom_left = mid(p3_left, p4_left)
# create circles for mid-points
cv2.circle(frame, (po_left[0], po_left[1]), 3, (255, 0, 0), -1)
cv2.circle(frame, (po_bottom_left[0], po_bottom_left[1]), 3, (255, 0, 0), -1)
return po_bottom_left[1] - po_left[1]
# Get Nose Distance
def getNose():
return points_list[30][1] - points_list[27][1]
# Infinite loop
while True:
_, frame = cap.read() # read the capture
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # convert the captured frame to gray
faces = detector(gray) # get each detected faces in the frame
for face in faces: # for each face detected
points = model(gray, face) # get points in current face
points_list = [(p.x, p.y) for p in points.parts()] # put these face point shapes in a list both x,y coordinates
# Get Eye Coordinates
left_eye_distance = getLeftEye()
right_eye_distance = getRightEye()
nose_distance = getNose()
cv2.imshow("frame", frame) # show the frame on the screen
# key press loop
if cv2.waitKey(1) & 0xff == ord("q"):
result = input(" Enter input : ")
if result == "q":
break
elif result == "w":
left = input(" Input data for left eye : ")
right = input(" Input data for right eye : ")
print(f" Left Eye : {left_eye_distance} "
f"Right Eye : {right_eye_distance}, "
f"Nose : {nose_distance}\n")
cap.release() # capture ended
cv2.destroyAllWindows() # all windows closed
解决方案
推荐阅读
- javascript - 当在 url 中推送查询参数同时保持在同一路径上时,Vue.js 中的“NavigationDuplicated”异常是否有任何解决方法
- javascript - 中键点击标签栏打开新标签
- c# - C# .NET 验证功能不会影响两个输入字段
- r - 在 r 中的 sf MULTIPOLYGON 内生成样本
- postgresql - PostgreSQL 何时在后台创建临时表?
- android - 单击 fcm 通知而不是打开启动器活动时打开浏览器
- python - 使用不同的参数同时运行相同的函数
- python - 如何在没有 ValueError 的情况下将 np.max 用于空 numpy 数组:零大小数组到没有标识的缩减操作最大值
- python - 尝试在 Python 中自动重启程序
- php - preg_replace - 不要替换已经替换的零件