中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Face++ API實現手勢識別系統

發布時間:2021-06-03 16:15:14 來源:億速云 閱讀:145 作者:Leah 欄目:開發技術

使用Face++ API實現手勢識別系統?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1. 查看官方的API。找到Gesture API,先看一下是怎么說的。

使用Face++ API實現手勢識別系統

調用參數:

使用Face++ API實現手勢識別系統

使用Face++ API實現手勢識別系統

官方還給出了一些調用錯誤返回的參數的說明,有興趣的可以去官網看一下。

還給出了一個使用命令行調用API的實例:

使用Face++ API實現手勢識別系統

從實例上不難看出,向 https://api-cn.faceplusplus.com/humanbodypp/beta/gesture 發送請求,默認的參數有 api_key,api_secret,image_file。api_key和api_secret可以通過控制臺進行生成。

使用Face++ API實現手勢識別系統

接下來開始寫代碼的調用,Python版本的,其他版本的類似。

我們將API封裝成一個類 Gesture:

使用Face++ API實現手勢識別系統

將其中的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 = ["我最帥",
   "拳頭,停下",
   "我發誓",
   "數字5",
   "比心",
   "數字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]
 
 # 獲取到手勢對應的概率
 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類后接下來就是調用:先將官方給出的手勢的圖片保存起來,為了方便只保留單手的手勢,然后生成隨機數讀取手勢圖片,我們去模仿手勢,后臺顯示是正確手勢的概率以及具體的位置,如果圖像中沒有手勢則概率為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("進入學習手勢模式!")
 print("我們有13個手勢,來和我學吧!(每次結束后可以選擇輸入 Q\q 退出!)")
 while(True):
 pic_num = random.randint(0,12) # 生成顯示的圖片的編號(隨機數: 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) # 顯示要學習的手勢
 
 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
  
 # 此處應該有手勢識別
 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)
 # 獲取到手勢的坐標
 ge_rect = gesture.get_rectangle(gesture_rectangle_dict)
 print("您學習的手勢是:",ge_text)
 print("相似度達到:",ge_pro)
 print("具體位置:",ge_rect)
 
 
 # print("一輪學習結束,是否繼續學習?(Y/N)")
 # 退出程序,回到主菜單或者繼續
 commend = input("一輪學習結束,是否繼續學習?(Y/N):")
 print(commend)
 
 if( commend == 'N' or commend == "n"):
  break
gestureLearning()

使用Face++ API實現手勢識別系統

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

牙克石市| 益阳市| 昔阳县| 鄂托克前旗| 多伦县| 南陵县| 睢宁县| 洛浦县| 宜昌市| 定州市| 乳山市| 青川县| 金坛市| 将乐县| 大渡口区| 神池县| 巴南区| 临夏县| 新民市| 蕉岭县| 金沙县| 台江县| 佛山市| 西乡县| 治多县| 紫阳县| 筠连县| 天门市| 宁乡县| 济宁市| 成武县| 木兰县| 库尔勒市| 吴忠市| 金乡县| 五寨县| 普定县| 吴江市| 庄浪县| 朝阳县| 增城市|