我最近一直在学习计算机视觉使用python,当做一个手探测器项目,我遇到了这个错误:-
Traceback (most recent call last):
File "c:\Users\idhant\OneDrive - 007lakshya\Idhant\Programming\Projects\MY MACHINE
LEARNING PROJECTS\Hand Tracking Module.py", line 64, in <module>
main()
File "c:\Users\idhant\OneDrive - 007lakshya\Idhant\Programming\Projects\MY MACHINE
LEARNING PROJECTS\Hand Tracking Module.py", line 41, in main
detector = handDetector()
File "c:\Users\idhant\OneDrive - 007lakshya\Idhant\Programming\Projects\MY MACHINE
LEARNING PROJECTS\Hand Tracking Module.py", line 13, in __init__
self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.detectionCon,
self.trackCon)
File "C:\Users\idhant\AppData\Roaming\Python\Python39\site-
packages\mediapipe\python\solutions\hands.py", line 114, in __init__
super().__init__(
File "C:\Users\idhant\AppData\Roaming\Python\Python39\site-
packages\mediapipe\python\solution_base.py", line 258, in __init__
self._input_side_packets = {
File "C:\Users\idhant\AppData\Roaming\Python\Python39\site-
packages\mediapipe\python\solution_base.py", line 259, in <dictcomp>
name: self._make_packet(self._side_input_type_info[name], data)
File "C:\Users\idhant\AppData\Roaming\Python\Python39\site-
packages\mediapipe\python\solution_base.py", line 513, in _make_packet
return getattr(packet_creator, 'create_' + packet_data_type.value)(data)
TypeError: create_int(): incompatible function arguments. The following argument types
are supported:
1. (arg0: int) -> mediapipe.python._framework_bindings.packet.Packet
Invoked with: 0.5
[ WARN:0] global D:\a\opencv-python\opencv-
python\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-
namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
我尝试了很多调试它,但没有成功:(,所以请帮助我,这是我写的代码:-
import cv2
import mediapipe as mp
import time
class handDetector():
def __init__(self, mode=False, maxHands = 2, detectionCon=0.5, trackCon = 0.5):
self.mode = mode
self.maxHands = maxHands
self.detectionCon = detectionCon
self.trackCon = trackCon
self.mpHands = mp.solutions.hands
self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.detectionCon,
self.trackCon)
self.mpDraw = mp.solutions.drawing_utils
def findHands(self, img, draw=True):
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = self.hands.process(imgRGB)
# print(results.multi_hand_landmarks)
if results.multi_hand_landmarks:
for handLms in results.multi_hand_landmarks:
if draw:
self.mpDraw.draw_landmarks(img, handLms, self.mpHands.HAND_CONNECTIONS)
return img
# for id, lm in enumerate(handLms.landmark):
# # print(id, lm)
# h, w, c = img.shape
# cx, cy = int(lm.x*w), int(lm.y*h)
# print(id, cx, cy)
# # if id == 4:
# cv2.circle(img, (cx, cy), 15, (255,0,255), cv2.FILLED)
def main():
pTime = 0
cTime = 0
cap = cv2.VideoCapture(0)
detector = handDetector()
while True:
success, img = cap.read()
img = detector.findHands(img)
cTime = time.time()
fps = 1/(cTime-pTime)
pTime = cTime
cv2.putText(img, str(int(fps)),(10, 70), cv2.FONT_HERSHEY_COMPLEX, 3, (255,0,255),3)
cv2.imshow("Image", img)
cv2.waitKey(1)
if __name__ == "__main__":
main()
我试过做一个类的手检测器,它做同样的事情来检测手,但我们也可以在我们的其他文件中使用它,这就是为什么我写了这段代码,并遇到了这个问题!
6条答案
按热度按时间gopyfrb31#
在
def __init__()
中,在代码:尝试为
Hands()
中的第三个参数添加模型复杂性,如下所示:所以
self.mpHands.Hands()
中共有五个参数下面是我的完整代码:
4smxwvx52#
我也遇到了同样的问题,只需将
model_complexity
添加到init
函数中,就可以开始了:hl0ma9xz3#
您需要在
handDetector()
类的__init__
方法中再分配一个参数。完整的代码可能如下所示:
ebdffaop4#
我不知道它是否有帮助,现在或可能为未来的参考。这是一个已知的问题,与最后一个版本的mediapipe。恢复到版本0.8.8将解决这个问题。
jyztefdp5#
这是一个缩进的问题,因为findHands()需要成为类handDetector()的一部分。
tsm1rwdh6#
解决方法:
问题出在代码的第6行。库更新后,您必须将一个整数值初始化为“detectionCon”。为了获得最佳结果,请初始化detectionCon = 1和trackCon = 0.5。
如果这解决了你的问题,请投上一票,这样其他人就可以很容易地看到它。