智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

上次我嘗試做了一個(gè)給眼鏡加特效,針對(duì)的是靜態(tài)圖像,具體文章參考 https://ai.baidu.com/forum/topic/show/942890 。

這次我嘗試在視頻中加眼鏡特效,并且加上手勢(shì)識(shí)別,不同的手勢(shì)佩戴不同的眼鏡。接下來(lái)將介紹手勢(shì)識(shí)別接口,并介紹如何接入。

手勢(shì)識(shí)別接口

接口描述

識(shí)別圖片中的手勢(shì)類(lèi)型,返回手勢(shì)名稱(chēng)、手勢(shì)矩形框、概率分?jǐn)?shù),可識(shí)別24種常見(jiàn)手勢(shì),適用于手勢(shì)特效、智能家居手勢(shì)交互等場(chǎng)景。

支持的24類(lèi)手勢(shì)列表:拳頭、OK、祈禱、作揖、作別、單手比心、點(diǎn)贊、Diss、我愛(ài)你、掌心向上、雙手比心(3種)、數(shù)字(9種)、Rock、豎中指。

注:

•上述24類(lèi)以外的其他手勢(shì)會(huì)劃分到other類(lèi)。

•除識(shí)別手勢(shì)外,若圖像中檢測(cè)到人臉,會(huì)同時(shí)返回人臉框位置。

人體分析的請(qǐng)求方式和人臉識(shí)別的請(qǐng)求方式有所不同,具體的使用說(shuō)明參見(jiàn)文檔 https://ai.baidu.com/docs#/Body-API/27495b11

請(qǐng)求格式

POST 方式調(diào)用,請(qǐng)求 URL 為 https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture ,Content-Type 為 application/x-www-form-urlencoded,然后通過(guò) urlencode 格式化請(qǐng)求體。

請(qǐng)求參數(shù)


智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

返回說(shuō)明

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

返回示例


{"log_id":4466502370458351471,"result_num":2,"result":[{"probability":0.9844077229499817,"top":20,"height":156,"classname":"Face","width":116,"left":173},{"probability":0.4679304957389832,"top":157,"height":106,"classname":"Heart_2","width":177,"left":183}]}

實(shí)例

1. 創(chuàng)建應(yīng)用

由于戴眼鏡是使用的人臉識(shí)別的接口,手勢(shì)識(shí)別是人體分析的接口,因此為了將手勢(shì)識(shí)別應(yīng)用到戴眼鏡特效中,需要在創(chuàng)建人臉識(shí)別應(yīng)用時(shí)勾選人體分析的手勢(shì)識(shí)別。

首先進(jìn)入“控制臺(tái)”的“人臉識(shí)別”,然后“創(chuàng)建應(yīng)用”。

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

然后填上“應(yīng)用名稱(chēng)”和“應(yīng)用描述”,并且接口勾選上“人體分析”下的“手勢(shì)識(shí)別”。

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

之后點(diǎn)擊“立即創(chuàng)建”,創(chuàng)建好之后我們就能夠獲取到應(yīng)用的 “API key” 和 “Secret key”,用于后面獲取 “token key”。

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

2.獲取 token key

通過(guò) API Key 和 Secret Key 獲取的 access_token。更多關(guān)于 access_token 的獲取方法參考 http://ai.baidu.com/docs#/Auth/top。

下面代碼是 python3 獲取 access_token 的代碼

defget_token_key():#client_id為官網(wǎng)獲取的AK,client_secret為官網(wǎng)獲取的SKclient_id='【百度云應(yīng)用的AK】'#APIkeyclient_secret='【百度云應(yīng)用的SK】'#Secretkeyurl=f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials'\f'&client_id={client_id}&client_secret={client_secret}'headers={'Content-Type':'application/json;charset=UTF-8'}res=requests.post(url,headers=headers)token_content=res.json()assert"error"notintoken_content,f"{token_content['error_description']}"token_key=token_content['access_token']returntoken_key3.調(diào)用手勢(shì)識(shí)別接口調(diào)用手勢(shì)識(shí)別接口的python3代碼實(shí)現(xiàn)如下:defget_hand_info(image_base64,token_key):request_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture"params_d=dict()params_d['image']=str(image_base64,encoding='utf-8')access_token=token_keyrequest_url=request_url+"?access_token="+access_tokenres=requests.post(url=request_url,data=params_d,headers={'Content-Type':'application/x-www-form-urlencoded'})data=res.json()assert'error_code'notindata,f'Error:{data["error_msg"]}'returndata正確調(diào)用接口獲取到數(shù)據(jù)之后,我們可以得到一些想要的信息。例如:獲取檢測(cè)的類(lèi)別的數(shù)量、各個(gè)類(lèi)別的類(lèi)別名以及邊框。defget_hand_num(data):returndata['result_num']defget_hand_cls_and_bbox(data):result=list()cls_list=list()hand_num=get_hand_num(data)foriinrange(hand_num):res_dict=data['result'][i]cls=res_dict['classname']cls_list.append(cls)bbox=[res_dict['left'],res_dict['top'],res_dict['width'],res_dict['height']]res=[cls]+bboxresult.append(res)returnresult,cls_list

案例代碼與說(shuō)明

整個(gè)案例的核心代碼如下:(由于人臉識(shí)別的 QPS 為 2,因此在顯示圖像時(shí)使用了 cv2.waitKey(500),所以這個(gè)應(yīng)用看起來(lái)不是很流暢)

importcv2fromutilimportpic_base64,get_face_info,get_face_location,get_face_num,frame2base64,get_hand_infofrompprintimportpprintimportutilimportface_utilimportgesture_utilimportosimportrandomtoken_key='【獲取的tokenkey】'glasses_img=['images/glasses/'+imgforimginos.listdir('images/glasses')]glasses=cv2.imread('images/glasses/glasses6.png',cv2.IMREAD_UNCHANGED)cap=cv2.VideoCapture(0)whileTrue:_,image=cap.read()detect_img=image.copy()gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)image_base64=frame2base64(image)face_data=get_face_info(image_base64,token_key)hand_data=get_hand_info(image_base64,token_key)_,cls_list=util.get_hand_cls_and_bbox(hand_data)ifface_data:location=get_face_location(face_data)face_num=util.get_face_num(face_data)landmark4=util.get_landmark4(face_data)ifutil.compare_hand(cls_list,'Heart_single'):detect_img=gesture_util.draw_heart_single(detect_img)ifutil.compare_hand(cls_list,'Ok'):detect_img=gesture_util.draw_firework(detect_img)ifutil.compare_hand(cls_list,'One'):glasses=cv2.imread(glasses_img[1],cv2.IMREAD_UNCHANGED)detect_img=gesture_util.draw_one(detect_img)ifutil.compare_hand(cls_list,'Two'):glasses=cv2.imread(glasses_img[2],cv2.IMREAD_UNCHANGED)detect_img=gesture_util.draw_two(detect_img)ifutil.compare_hand(cls_list,'Three'):glasses=cv2.imread(glasses_img[3],cv2.IMREAD_UNCHANGED)detect_img=gesture_util.draw_three(detect_img)ifutil.compare_hand(cls_list,'Four'):glasses=cv2.imread(glasses_img[4],cv2.IMREAD_UNCHANGED)detect_img=gesture_util.draw_four(detect_img)ifutil.compare_hand(cls_list,'Five'):glasses=cv2.imread(glasses_img[5],cv2.IMREAD_UNCHANGED)detect_img=gesture_util.draw_five(detect_img)ifutil.compare_hand(cls_list,'Fist'):glasses=cv2.imread(glasses_img[random.randint(0,len(glasses_img)-1)],cv2.IMREAD_UNCHANGED)ifutil.compare_hand(cls_list,'ILY'):detect_img=gesture_util.draw_love(detect_img)detect_img=face_util.wear_glasses(detect_img,glasses,face_num,landmark4)detect_img=cv2.flip(detect_img,1)else:detect_img=cv2.flip(detect_img,1)#fori,clsinenumerate(cls_list):#ifcls!='Face':#cv2.putText(detect_img,cls,(50,50+100*i),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,255),2)cv2.imshow('pic',detect_img)key=cv2.waitKey(500)&0xFFifkey==ord('q'):breakcap.release()cv2.destroyAllWindows()

該代碼主要識(shí)別數(shù)字1-5、比心、OK、單手我愛(ài)你和拳頭手勢(shì),數(shù)字1-5對(duì)應(yīng)不同類(lèi)型的眼鏡,拳頭代表隨機(jī)更換眼鏡,比心會(huì)在界面上畫(huà)出心?,OK會(huì)在界面上展示一些煙花,單手我愛(ài)你展示愛(ài)你的表情。

下面是一些截圖展示:

one:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

two:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

three:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

four:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

five:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

OK:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

比心:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

我愛(ài)你:

智能家居手勢(shì)識(shí)別,只需百度AI即可搞定

項(xiàng)目代碼地址: https://github.com/busyboxs/baiduAIFace ,修改好自己的 API key 和 Secret Key 之后直接執(zhí)行 camera_face 即可。(作者:busyboxs

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2019-07-16
智能家居手勢(shì)識(shí)別,只需百度AI即可搞定
上次我嘗試做了一個(gè)給眼鏡加特效,針對(duì)的是靜態(tài)圖像,具體文章參考 https://ai.baidu.com/forum/topic/show/942890 。

長(zhǎng)按掃碼 閱讀全文