您好,登錄后才能下訂單哦!
使用Face++ API實現(xiàn)手勢識別系統(tǒng)?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
1. 查看官方的API。找到Gesture API,先看一下是怎么說的。
調(diào)用參數(shù):
官方還給出了一些調(diào)用錯誤返回的參數(shù)的說明,有興趣的可以去官網(wǎng)看一下。
還給出了一個使用命令行調(diào)用API的實例:
從實例上不難看出,向 https://api-cn.faceplusplus.com/humanbodypp/beta/gesture 發(fā)送請求,默認的參數(shù)有 api_key,api_secret,image_file。api_key和api_secret可以通過控制臺進行生成。
接下來開始寫代碼的調(diào)用,Python版本的,其他版本的類似。
我們將API封裝成一個類 Gesture:
將其中的key和secret替換成自己的就可以使用:
''' # -*- coding:utf-8 -*- @author: TulLing ''' import requests from json import JSONDecoder gesture_englist = ['big_v','fist','double_finger_up','hand_open','heart_d','index_finger_up','ok','phonecall','palm_up','rock','thumb_down','thumb_up','victory'] gesture_chinese = ["我最帥", "拳頭,停下", "我發(fā)誓", "數(shù)字5", "比心", "數(shù)字1", "好的呢,OK", "打電話", "手心向上", "愛你,520", "差評,不好的", "好評,Good,很棒", "勝利,開心"] # 將字典排序 def sort_dict(adict): return sorted(adict.items(),key= lambda item:item[1]) class Gesture(object): def __init__(self): self.http_url = 'https://api-cn.faceplusplus.com/humanbodypp/beta/gesture' self.key = '*****' self.secret = '******' self.data = {"api_key":self.key,"api_secret":self.secret} # 獲取手勢信息 def get_info(self,files): response = requests.post(self.http_url,data=self.data,files=files) req_con = response.content.decode('utf-8') req_dict = JSONDecoder().decode(req_con) #print(req_dict) if('error_message' not in req_dict.keys()) and (len(req_dict['hands'])): # 獲取 hands_dict = req_dict['hands'] #print(type(hands_dict)) # 獲取到手的矩形的字典 gesture_rectangle_dict = hands_dict[0]['hand_rectangle'] # 獲取到手勢的字典 gesture_dict = hands_dict[0]['gesture'] return gesture_dict,gesture_rectangle_dict else: return [],[]; # 獲取到手勢文本信息 def get_text(self,index): return gesture_chinese[index] # 獲取到手勢對應(yīng)的概率 def get_pro(self,gesture_dict,index): # print(gesture_dict) if(gesture_dict is None or gesture_dict == []): return 0 return gesture_dict[gesture_englist[index]] # 獲取到手勢的位置 def get_rectangle(self,gesture_rectangle_dict): if(gesture_rectangle_dict is None or gesture_rectangle_dict == []): return (0,0,0,0) x = gesture_rectangle_dict['top'] y = gesture_rectangle_dict['left'] width = gesture_rectangle_dict['width'] height = gesture_rectangle_dict['height'] return (x,y,width,height)
封裝好了Gesture類后接下來就是調(diào)用:先將官方給出的手勢的圖片保存起來,為了方便只保留單手的手勢,然后生成隨機數(shù)讀取手勢圖片,我們?nèi)ツ7率謩?,后臺顯示是正確手勢的概率以及具體的位置,如果圖像中沒有手勢則概率為0,位置為(0,0,0,0)。
''' # -*- coding:utf-8 -*- @author: TulLing ''' import sys sys.path.append("../gesture/") import os import random import cv2 as cv import time import LearnGesture def gestureLearning(): os.system("cls") print("進入學(xué)習(xí)手勢模式!") print("我們有13個手勢,來和我學(xué)吧!(每次結(jié)束后可以選擇輸入 Q\q 退出!)") while(True): pic_num = random.randint(0,12) # 生成顯示的圖片的編號(隨機數(shù): 0 - 13) print(pic_num) pic_path = '../gesture/pic/gesture' + str(pic_num) + ".jpg" # 生成圖片路徑 pic = cv.imread(pic_path) # 加載圖片 pic = cv.resize(pic,(120,120)) cv.imshow("PIC",pic) # 顯示要學(xué)習(xí)的手勢 print("即將打開攝像頭,你有5秒種的時間準備手勢,5秒種保持手勢!") write_path = "../gesture/pic/test.jpg" cap = cv.VideoCapture(1) while(True): _,frame = cap.read() cv.imshow("Frame",frame) key = cv.waitKey(10) if(key == ord('Q') or key == ord('q')): cv.imwrite(write_path,frame) cv.waitKey(200) cap.release() cv.destroyAllWindows() break # 此處應(yīng)該有手勢識別 files = {"image_file":open(write_path,'rb')} gesture = LearnGesture.Gesture() # 獲取到手勢文本 ge_text = gesture.get_text(pic_num) # 獲取手勢信息 gesture_dict,gesture_rectangle_dict = gesture.get_info(files) # 獲取手勢的概率 ge_pro = gesture.get_pro(gesture_dict,pic_num) # 獲取到手勢的坐標(biāo) ge_rect = gesture.get_rectangle(gesture_rectangle_dict) print("您學(xué)習(xí)的手勢是:",ge_text) print("相似度達到:",ge_pro) print("具體位置:",ge_rect) # print("一輪學(xué)習(xí)結(jié)束,是否繼續(xù)學(xué)習(xí)?(Y/N)") # 退出程序,回到主菜單或者繼續(xù) commend = input("一輪學(xué)習(xí)結(jié)束,是否繼續(xù)學(xué)習(xí)?(Y/N):") print(commend) if( commend == 'N' or commend == "n"): break gestureLearning()
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。