摘要:同時(shí)打印出了手上的每個(gè)結(jié)點(diǎn)的位置變化。解決方案使用國(guó)內(nèi)鏡像安裝這時(shí)候,考慮使用國(guó)內(nèi)鏡像安裝,會(huì)快很多。點(diǎn)擊下面的即可。
下面是我的關(guān)于Opencv的手勢(shì)識(shí)別代碼模型。該源碼來(lái)自于B站Opencv的大神教程
這個(gè)代碼可以復(fù)制后直接運(yùn)行,看出效果的。
#!/usr/bin/python3.7# coding=utf-8import cv2import mediapipe as mpimport time# 導(dǎo)入opencv模塊# 捕捉幀,筆記本攝像頭設(shè)置為0即可""" VideoCapture第一個(gè)參數(shù)就是攝像頭編號(hào)"""capture =cv2.VideoCapture(0,cv2.CAP_DSHOW)# 初始化(模型使用之前)mpHands =mp.solutions.handshands=mpHands.Hands()mpDraw=mp.solutions.drawing_utilspTime=0cTime=0# 循環(huán)顯示幀while True : success, img = capture.read() imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) results=hands.process(imgRGB) """在顯示圖片之前,我們需要對(duì)圖像進(jìn)行一些處理""" # 下面這個(gè)函數(shù),當(dāng)手放入攝像頭范圍內(nèi),就會(huì)返回相應(yīng)的Landmark值,否則返回的是None #print(results.multi_hand_landmarks) # 輸出手的每個(gè)坐標(biāo)(一只手幾十個(gè)點(diǎn)) if results.multi_hand_landmarks: print("讀取成功!") for handLms in results.multi_hand_landmarks: for id, lm in enumerate(handLms.landmark): print(id,lm) mpDraw.draw_landmarks(img, handLms,mpHands.HAND_CONNECTIONS) # 第三個(gè)參數(shù)的意思是,讓手中的節(jié)點(diǎn)連接。 cv2.imshow("Carmer", img) if cv2.waitKey(1) == ord("q"): # 按Q退出 break
這個(gè)代碼是封裝好的,都后面如果需要就是直接引用。不過(guò)也可以直接運(yùn)行這個(gè)程序,也同樣能出結(jié)果。
import cv2import mediapipe as mpimport timeclass 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) self.results = self.hands.process(imgRGB) # print(results.multi_hand_landmarks) if self.results.multi_hand_landmarks: for handLms in self.results.multi_hand_landmarks: if draw: self.mpDraw.draw_landmarks(img, handLms, self.mpHands.HAND_CONNECTIONS) return img def findPosition(self, img, handNo=0, draw=True): lmList = [] if self.results.multi_hand_landmarks: myHand = self.results.multi_hand_landmarks[handNo] for id, lm in enumerate(myHand.landmark): # print(id, lm) h, w, c = img.shape cx, cy = int(lm.x * w), int(lm.y * h) # print(id, cx, cy) lmList.append([id, cx, cy]) # if draw: 這部分代碼畫出了手上所有結(jié)點(diǎn),因?yàn)楸容^難看,就注釋掉了。 # cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED) return lmListdef main(): pTime = 0 cTime = 0 cap = cv2.VideoCapture(0) detector = handDetector() while True: success, img = cap.read() img = detector.findHands(img) lmList = detector.findPosition(img) if len(lmList) != 0: print(lmList[4]) cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3) cv2.imshow("Image", img) cv2.waitKey(1)if __name__ == "__main__": main()
同時(shí)打印出了手上的每個(gè)結(jié)點(diǎn)的位置變化。
Pycharm2021,Python3.7 .
報(bào)錯(cuò):
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.error: OpenCV(4.5.3) C:/Users/runneradmin/AppData/Local/Temp/pip-req-build-_xlv4eex/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
這個(gè)問(wèn)題,網(wǎng)上的一些解釋是,如果你導(dǎo)入的是一個(gè)靜態(tài)圖片,那么要么是你的斜杠寫錯(cuò),
或者是你的路徑中有中文,不妨換個(gè)沒(méi)有中文的路徑,或者修改圖片為英文試試。
但是我這里是攝像頭:
cap = cv2.VideoCapture(1) #這個(gè)是B站源碼中的攝像頭編號(hào)
使用B站大神源碼報(bào)錯(cuò)后,我把上面這行代碼改成下面這樣,就好了。
cap = cv2.VideoCapture(0)
在控制臺(tái)上使用pip指令下載是,經(jīng)常碰到超時(shí)問(wèn)題,本身文件不大,但是你的下載速度只有12kb/s甚至只有幾kb每秒
遇到的問(wèn)題例如下面這個(gè):
其實(shí)這個(gè)問(wèn)題就是因?yàn)槟愕南螺d速度太慢導(dǎo)致的。
這時(shí)候,考慮使用國(guó)內(nèi)鏡像安裝,會(huì)快很多。.點(diǎn)擊進(jìn)入國(guó)內(nèi)鏡像安裝教程
一般numpy,opencv-python都有國(guó)內(nèi)鏡像。不過(guò)我安裝mediatepipe時(shí),并沒(méi)有找到國(guó)內(nèi)鏡像,但是控制臺(tái)cmd使用下面這個(gè)指令太慢了。也是只有幾kb/s
pip install mediapipe
所以我選擇了去PyCharm去下載:
方式:
File—>Setting—>Project:python-project-Python Interpreter(Python解釋器)
點(diǎn)擊“+”,添加解釋器,然后在搜索框中搜索你需要的package即可。opencv-python,numpy,mediapipe都可以直接搜到。
點(diǎn)擊下面的Install Package即可。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/121061.html
摘要:十開(kāi)放模式識(shí)別項(xiàng)目開(kāi)放模式識(shí)別項(xiàng)目,致力于開(kāi)發(fā)出一套包含圖像處理計(jì)算機(jī)視覺(jué)自然語(yǔ)言處理模式識(shí)別機(jī)器學(xué)習(xí)和相關(guān)領(lǐng)域算法的函數(shù)庫(kù)。 一、開(kāi)源生物特征識(shí)別庫(kù) OpenBROpenBR 是一個(gè)用來(lái)從照片中識(shí)別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計(jì)算機(jī)視覺(jué)庫(kù) OpenCVOpenC...
摘要:可以針對(duì)筆者常用的數(shù)獨(dú)本文的實(shí)現(xiàn)都基于該,實(shí)現(xiàn)數(shù)獨(dú)的識(shí)別求解并把答案自動(dòng)填入。專家級(jí)別的平均秒完成求解包括圖像數(shù)字提取,識(shí)別過(guò)程,完成全部操作。步驟四數(shù)獨(dú)求解,生成答案,并生成需要填充的數(shù)字序列。 1 序 ??數(shù)獨(dú)是源自18世紀(jì)瑞士的一種數(shù)學(xué)游戲。是一種運(yùn)用紙、筆進(jìn)行演算的邏輯游戲。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個(gè)粗線宮(3*3...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
閱讀 3116·2021-10-12 10:20
閱讀 2835·2021-09-27 13:56
閱讀 806·2021-09-27 13:36
閱讀 1444·2021-09-26 09:46
閱讀 2433·2019-08-30 14:02
閱讀 2700·2019-08-28 18:14
閱讀 1280·2019-08-26 10:32
閱讀 1717·2019-08-23 18:25