摘要:同時打印出了手上的每個結(jié)點的位置變化。解決方案使用國內(nèi)鏡像安裝這時候,考慮使用國內(nèi)鏡像安裝,會快很多。點擊下面的即可。
下面是我的關(guān)于Opencv的手勢識別代碼模型。該源碼來自于B站Opencv的大神教程
這個代碼可以復(fù)制后直接運行,看出效果的。
#!/usr/bin/python3.7# coding=utf-8import cv2import mediapipe as mpimport time# 導(dǎo)入opencv模塊# 捕捉幀,筆記本攝像頭設(shè)置為0即可""" VideoCapture第一個參數(shù)就是攝像頭編號"""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) """在顯示圖片之前,我們需要對圖像進(jìn)行一些處理""" # 下面這個函數(shù),當(dāng)手放入攝像頭范圍內(nèi),就會返回相應(yīng)的Landmark值,否則返回的是None #print(results.multi_hand_landmarks) # 輸出手的每個坐標(biāo)(一只手幾十個點) 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) # 第三個參數(shù)的意思是,讓手中的節(jié)點連接。 cv2.imshow("Carmer", img) if cv2.waitKey(1) == ord("q"): # 按Q退出 break
這個代碼是封裝好的,都后面如果需要就是直接引用。不過也可以直接運行這個程序,也同樣能出結(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é)點,因為比較難看,就注釋掉了。 # 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()
同時打印出了手上的每個結(jié)點的位置變化。
Pycharm2021,Python3.7 .
報錯:
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’
這個問題,網(wǎng)上的一些解釋是,如果你導(dǎo)入的是一個靜態(tài)圖片,那么要么是你的斜杠寫錯,
或者是你的路徑中有中文,不妨換個沒有中文的路徑,或者修改圖片為英文試試。
但是我這里是攝像頭:
cap = cv2.VideoCapture(1) #這個是B站源碼中的攝像頭編號
使用B站大神源碼報錯后,我把上面這行代碼改成下面這樣,就好了。
cap = cv2.VideoCapture(0)
在控制臺上使用pip指令下載是,經(jīng)常碰到超時問題,本身文件不大,但是你的下載速度只有12kb/s甚至只有幾kb每秒
遇到的問題例如下面這個:
其實這個問題就是因為你的下載速度太慢導(dǎo)致的。
這時候,考慮使用國內(nèi)鏡像安裝,會快很多。.點擊進(jìn)入國內(nèi)鏡像安裝教程
一般numpy,opencv-python都有國內(nèi)鏡像。不過我安裝mediatepipe時,并沒有找到國內(nèi)鏡像,但是控制臺cmd使用下面這個指令太慢了。也是只有幾kb/s
pip install mediapipe
所以我選擇了去PyCharm去下載:
方式:
File—>Setting—>Project:python-project-Python Interpreter(Python解釋器)
點擊“+”,添加解釋器,然后在搜索框中搜索你需要的package即可。opencv-python,numpy,mediapipe都可以直接搜到。
點擊下面的Install Package即可。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/121061.html
摘要:十開放模式識別項目開放模式識別項目,致力于開發(fā)出一套包含圖像處理計算機視覺自然語言處理模式識別機器學(xué)習(xí)和相關(guān)領(lǐng)域算法的函數(shù)庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...
摘要:可以針對筆者常用的數(shù)獨本文的實現(xiàn)都基于該,實現(xiàn)數(shù)獨的識別求解并把答案自動填入。專家級別的平均秒完成求解包括圖像數(shù)字提取,識別過程,完成全部操作。步驟四數(shù)獨求解,生成答案,并生成需要填充的數(shù)字序列。 1 序 ??數(shù)獨是源自18世紀(jì)瑞士的一種數(shù)學(xué)游戲。是一種運用紙、筆進(jìn)行演算的邏輯游戲。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個粗線宮(3*3...
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
閱讀 3212·2021-10-12 10:20
閱讀 2926·2021-09-27 13:56
閱讀 897·2021-09-27 13:36
閱讀 1501·2021-09-26 09:46
閱讀 2503·2019-08-30 14:02
閱讀 2750·2019-08-28 18:14
閱讀 1336·2019-08-26 10:32
閱讀 1779·2019-08-23 18:25