版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
猜拳小達人一、任務(wù)目標知識目標1、了解TensorFlow.js框架2、了解神經(jīng)網(wǎng)絡(luò)模型3、了解圖像分類技能目標1、能夠熟練安裝瀏覽器插件2、具有使用TensorFlow.js框架的能力素質(zhì)目標1、具有良好的職業(yè)道德2、具有持續(xù)學習的能力二、任務(wù)指南步驟1:插件下載將壓縮包下載到本地電腦并解壓。步驟2:WebServer插件安裝與配置1、首先確認電腦上安裝了Chrome瀏覽器。如沒有安裝,可以雙擊安裝包ChromeSetup.exe,安裝Chrome瀏覽器。安裝完成后打開Chrome,再進行插件安裝。2、安裝插件方法一:1)打開Chrome,從右上角打開設(shè)置,從側(cè)邊欄選擇擴展程序。2)進入chrome瀏覽器的擴展程序界面,并將開發(fā)者模式打開。3)修改“ofhbbkphhbklhfoeikjpcbhemlocgigb_0.5.2_.crt”文件的拓展名,將其改為“ofhbbkphhbklhfoeikjpcbhemlocgigb_0.5.2_.zip”,具體如下圖所示:4)將上圖中的zip文件直接拖到擴展程序頁面,出現(xiàn)下圖所示的插件,即安裝完成。方法二:1)按照方法一,將文件擴展名改成zip后,點擊zip文件,然后右鍵選擇解壓到文件夾中,如下圖:2)在擴展程序頁面點擊“加載已解壓的擴展程序”,然后選擇解壓后的文件夾即可。方法三:從應(yīng)用商店直接安裝插件(注意:使用該方法的前提是:你的電腦可以正常連接谷歌)。1)通過Google搜索找到下圖:2)單擊“WebServerforChrome”,打開后,選擇啟動應(yīng)用,即可。注意:如果在以上安裝過程中,插件上顯示“錯誤”,一般不影響任務(wù)的正常運行,可以先嘗試后續(xù)的任務(wù)步驟。步驟3:新建本地文件夾在本地電腦中新建一個文件夾,用于存儲后續(xù)任務(wù)的源碼,比如D盤TensorFlow_JS。步驟4:插件配置1)打開本地電腦中的WebServer插件。比如下圖是win10系統(tǒng)中搜索WebServer應(yīng)用并打開。2)單擊CHOOSEFOLDER,選擇步驟3創(chuàng)建的文件夾TensorFlow_JS,另外,Options中的配置可參照下圖進行。步驟5:打開瀏覽器打開Chrome瀏覽器,并在Chrome中打開下方的URL地址::8887/,即可打開步驟3創(chuàng)建的文件夾。到這里,WebServer插件的安裝與配置就完成了。步驟6:源碼下載1、下載壓縮包“猜拳PK.zip”。2、解壓到插件配置的對應(yīng)目錄(TensorFlow_JS目錄下)。其中包含了運行猜拳游戲的tensorflow.js腳本代碼以及前端html文件。步驟7:源碼解讀1、retrain.html,在該文件中設(shè)計猜拳游戲中出現(xiàn)的按鈕、布局等。想要實現(xiàn)網(wǎng)頁中的按鈕進行實際操作,就需要編寫相應(yīng)的腳本代碼來實現(xiàn),即編寫html實際調(diào)用的js腳本。在js腳本中我們要實現(xiàn)圖像數(shù)據(jù)的采集、識別模型的訓練以及驗證。2、webcam.js,該腳本用于調(diào)用本機攝像頭來捕捉手勢圖像,構(gòu)建手勢數(shù)據(jù)集。核心代碼如下://用攝像頭捕捉的畫面來創(chuàng)建圖像對應(yīng)的像素值的張量。constwebcamImage=tf.browser.fromPixels(this.webcamElement);3、rps-dataset.js,該腳本主要有兩個函數(shù),一是對不同手勢用例添加時的處理,二是將數(shù)據(jù)類別處理成tenforflowjs能處理的tensor形式。核心代碼如下://當某一類手勢中添加了一個樣本時,通過調(diào)用concat并將軸參數(shù)設(shè)置為0來將新樣本連接到現(xiàn)有樣本集this.xs=tf.keep(oldX.concat(example,0));//將每一類手勢對應(yīng)的標簽(整數(shù))轉(zhuǎn)換為one-hot表示形式tf.tensor1d([this.labels[i]]).toInt(),numClasses)}));4、index.js,該腳本主要用來構(gòu)建、訓練手勢識別模型,核心代碼如下://模型訓練代碼示例asyncfunctiontrain(){dataset.ys=null;dataset.encodeLabels(3);//模型結(jié)構(gòu):兩層全連接網(wǎng)絡(luò)層densemodel=tf.sequential({layers:[tf.layers.flatten({inputShape:mobilenet.outputs[0].shape.slice(1)}),tf.layers.dense({units:100,activation:'relu'}),tf.layers.dense({units:3,activation:'softmax'})]});//設(shè)置優(yōu)化器constoptimizer=tf.train.adam(0.0001);//編譯模型pile({optimizer:optimizer,loss:'categoricalCrossentropy'});letloss=0;//使用fit函數(shù)開始訓練model.fit(dataset.xs,dataset.ys,{epochs:10,callbacks:{onBatchEnd:async(batch,logs)=>{loss=logs.loss.toFixed(5);console.log('LOSS:'+loss);}}});}步驟8:打開網(wǎng)頁1、確認插件已開啟,同步驟4,搜索本機應(yīng)用程序,找到WebServeforChrome應(yīng)用->點擊WebServer服務(wù)->開始服務(wù)。2、檢查以上html、js文件在同一文件夾下。3、在Chrome瀏覽器中打開retrain.html網(wǎng)頁,看到攝像頭開啟提醒,選擇“允許”,如下圖:步驟9:采集“石頭”手勢攝像頭開啟后,我們就可以采集數(shù)據(jù)了。在頁面中可以看到“石頭”、“布”、“剪刀”按鈕,也就是我們下面要采集這三種手勢的圖片。??在三個按鈕上方,可以看到攝像頭實時捕捉的畫面。該步驟采集“石頭”手勢,操作步驟如下:1)握拳,放在攝像頭下,確保畫面里捕捉到了拳頭手勢。2)點擊“石頭”按鈕3)確認“石頭”按鈕下方的“石頭用例”次數(shù)加14)變換不同角度、不同大小的拳頭手勢,重復前三步,觀察“石頭用例”數(shù)目,達到50次以上即可。步驟10:采集“布”手勢該步驟采集“布”手勢,操作步驟如下:1)出布,放在攝像頭下,確保畫面里捕捉到了布的手勢。2)點擊“布”按鈕3)確認“布”按鈕下方的“布用例”次數(shù)加14)變換不同角度的布手勢,重復前三步,觀察“布用例”數(shù)目,達到50次以上即可。步驟11:采集“剪刀”手勢該步驟采集“剪刀”手勢,操作步驟如下:1)比剪刀手勢,放在攝像頭下,確保畫面里捕捉到了剪刀手勢。2)點擊“剪刀”按鈕3)確認“剪刀”按鈕下方的“剪刀用例”次數(shù)加14)變換不同角度的剪刀手勢,重復前三步,觀察“剪刀用例”數(shù)目,達到50次以上即可。三種手勢數(shù)據(jù)采集完成后,訓練集就生成了。在捕捉手勢圖像時,分別點擊“石頭”、“布”、“剪刀”按鈕,就是給圖像打分類標簽的過程,即數(shù)據(jù)標注。確認三種手勢都有一定量的數(shù)據(jù)即可。步驟12:手勢識別模型訓練點擊頁面中的“訓練神經(jīng)網(wǎng)絡(luò)”按鈕,開始手勢識別模型的訓練。查看訓練的過程或者進度,可在頁面空白處右鍵,選擇“檢查”,選擇“控制臺”選項卡,可看到如下界面:LOSS就是模型訓練過程中的損失,隨著訓練次數(shù)的增加,讓模型朝著損失越來越小的方向去改進。當網(wǎng)頁上方出現(xiàn)如下圖所示的彈框,表示模型訓練完成。步驟13:進行猜拳PK游戲模型訓練完成后,就可以進行猜拳游戲了,在游戲過程中,將會調(diào)用訓練好的手勢識別模型對攝像頭下你給出的手勢進行識別,然后將識別結(jié)果和計算機出的手勢進行比較。1)確認攝像頭是開啟狀態(tài)2)在攝像頭下給出任意一種手勢3)點擊“開始PK”按鈕,進入猜拳游戲狀態(tài)4)可以看到按鈕下方輸出了你的手勢識別結(jié)果、計算機出拳結(jié)果及PK結(jié)果5)再次點擊“開始PK”,可以繼續(xù)猜拳游戲。在PK環(huán)節(jié)中攝像頭捕捉到你出的手勢,然后調(diào)用訓練好的手勢識別模型識別出你出的手勢是布、石頭或剪刀,此時識別的結(jié)果可能不是每次都正確,準確率更多取決于訓練數(shù)據(jù)的好壞與多少。實訓內(nèi)容任務(wù)一:安裝與配置WebServerforChrome插件。任務(wù)二:部署猜拳游戲,并在瀏覽器中正常運行。任務(wù)三:采集剪刀石頭布三種手勢至少各100張圖像。完成手勢識別模型的訓練。進行至少三組猜拳PK,并保留截圖。四、實訓環(huán)境本項目在個人電腦本地環(huán)境中完成。操作系統(tǒng):Windows系統(tǒng)或MacOSX系統(tǒng)。五、實訓評價口罩識別系統(tǒng)一、任務(wù)目標知識目標1、了解人工智能的概念2、了解神經(jīng)網(wǎng)絡(luò)模型3、了解人工智能應(yīng)用的實現(xiàn)流程技能目標1、具備圖像標注的能力2、具備基于Torch框架實現(xiàn)目標檢測模型的訓練和預(yù)測素質(zhì)目標1、具有良好的職業(yè)道德2、具有持續(xù)學習和追求創(chuàng)新的能力二、任務(wù)指南步驟1:標注圖像數(shù)據(jù)?1、點擊右上方黃色文件夾圖標,進入data-sets目錄,下載壓縮包mask.zip到本地,然后解壓,可以看到標注工具labelImage.exe。2、打開圖像文件夾??為了便于批量標注,將保存原始圖像的文件夾打開,然后逐張圖像進行標注即可,具體見下圖。開始標注之前,你也可以使用壓縮包mask.zip中派Lab提供的人臉圖像素材,也可以自己搜集相關(guān)圖片進行標注。3、圖像標注使用“CreateRectBox”,在口罩上畫一個矩形框,并填寫label為“mask”;4、保存標注文件使用“save”功能生成一個標注結(jié)果xml文件,并保存到磁盤目錄中,默認是存放在被標注圖片的同級目錄中后綴為xml的同名文件。點擊“NextImage”,就可以打開該文件夾下的下一張圖片。步驟2:解壓數(shù)據(jù)資源進入data-sets目錄,可以看到壓縮包“MaskDetect.zip”,包含了該項目的標注好的圖像數(shù)據(jù)集以及封裝好的代碼庫,使用下面的命令將其解壓到當前目錄中。!unzip-o-q./data-sets/MaskDetect.zip-d./步驟3:導入相關(guān)包該任務(wù)實現(xiàn)的源碼都封裝在“train.py”中,可以使用下面的命令將其導入環(huán)境中,在后續(xù)的步驟中可以調(diào)用它內(nèi)部的方法。#導入train包,用于神經(jīng)網(wǎng)絡(luò)模型訓練importtrain#導入yolo包,調(diào)用其中的檢測方法fromyoloimportYOLOimportcv2fromPILimportImage#導入matplotlib,用于畫圖顯示frommatplotlibimportpyplotasplt步驟4:數(shù)據(jù)預(yù)處理1、處理標注文件在步驟1中,我們標注了一批人臉戴與不戴口罩的數(shù)據(jù),標注結(jié)果均是xml文件,下面我們要對其做進一步的處理,提取有用信息。調(diào)用process_xml方法,配置好圖像路徑、標注文件的路徑、以及結(jié)果保存路徑即可。2、獲取訓練數(shù)據(jù)集、驗證數(shù)據(jù)集#定義圖片路徑images_path='./face_mask_datasetes/train_mask/images/'#定義標注圖片路徑annotations_path='./face_mask_datasetes/train_mask/annotations'#定義txt標注文件路徑annotations_txt_path='model_data/mask_train.txt'#從train包中調(diào)用process_xml()函數(shù)對xml文件進行處理cess_xml(images_path,annotations_path,annotations_txt_path)#定義圖片路徑images_val_path='./face_mask_datasetes/val_mask/images/'#定義標注圖片路徑annotations_val_path='./face_mask_datasetes/val_mask/annotations'#定義txt標注文件路徑annotations_val_txt_path='model_data/mask_val.txt'#從train包中調(diào)用process_xml()函數(shù)對xml文件進行處理cess_xml(images_val_path,annotations_val_path,annotations_val_txt_path)#從train包中調(diào)用process_traindata()函數(shù),#根據(jù)以上步驟的文件路徑,將數(shù)據(jù)集劃分為訓練與測試train_lines,val_lines=cess_traindata(annotations_txt_path,annotations_val_txt_path)步驟5:加載預(yù)訓練模型由于從頭訓練一個好模型需要時間較久,我們提前預(yù)訓練了一個口罩識別模型./model_data/yolov4_maskdetect_weights1.pth,我們可以使用標注的數(shù)據(jù)在此模型上繼續(xù)迭代,得到一個效果更好的模型。??調(diào)用load_premodel函數(shù),配置好模型路徑、類別標簽文件路徑即可。運行結(jié)果中顯示“Finished!”加載完成。Cuda=False#不啟用Cuda#定義模型文件路徑model_path="model_data/yolov4_maskdetect_weights1.pth"#定義模型分類類別classes_path='model_data/mask_classes.txt'#從train包中調(diào)用load_premodel()函數(shù)進行預(yù)訓練模型讀取model,net,yolo_losses=train.load_premodel(model_path,classes_path,Cuda)步驟6:訓練口罩識別模型調(diào)用train_model方法,配置好訓練集、驗證集、迭代次數(shù)、學習率、模型結(jié)構(gòu)等參數(shù)即可。注:使用cpu環(huán)境訓練時,把Batch_size設(shè)小一點,否則容易報出超出內(nèi)存的錯誤。#參數(shù)配置lr=1e-3#學習率Batch_size=1#批大小Init_Epoch=0#初始訓練批次Freeze_Epoch=2#凍結(jié)批次Cosine_lr=True#學習率配置參數(shù)#從train包中調(diào)用train_model()函數(shù)進行模型訓練best_model_weights=train.train_model(train_lines,val_lines,model,lr,Init_Epoch,Freeze_Epoch,Batch_size,Cosine_lr,net,yolo_losses,Cuda)步驟7:讀取測試圖片#定義圖片路徑image_path='face_mask_datasetes/val_mask/images/songzuer.jpg'#打開圖片文件image=Image.open(image_path)步驟8:調(diào)用口罩識別模塊#實例化YOLOyolo=YOLO()#對yolo調(diào)用detect_image()函數(shù),進行口罩識別r_image=yolo.detect_image(image)步驟9:保存并顯示檢測結(jié)果#定義圖片保存命名r_image_file=str(image_path).split('.')[0]+'_result.png'#保存圖片r_image.save(r_image_file)#讀取圖片img=cv2.imread(str(r_image_file))#展示圖片plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))plt.show()實訓內(nèi)容任務(wù)一:圖像標注工具的使用任務(wù)二:使用labelimage標注至少3張人臉口罩圖像任務(wù)三:訓練口罩識別模型任務(wù)四:使用訓練好的模型對戴口罩和不帶口罩的圖像進行檢測,并輸出結(jié)果四、實訓環(huán)境本項目在個人電腦本地環(huán)境中完成。操作系統(tǒng):Windows系統(tǒng)或MacOSX系統(tǒng)。五、實訓評價體育運動的姿態(tài)檢測一、任務(wù)目標知識目標1、了解姿態(tài)檢測2、了解MediaPipe3、了解人工智能應(yīng)用的實現(xiàn)流程技能目標1、具備熟練處理圖像和視頻的能力2、具備熟練使用MediaPipe工具進行姿態(tài)檢測素質(zhì)目標1、具有良好的職業(yè)道德2、具有持續(xù)學習和追求創(chuàng)新的能力二、任務(wù)指南步驟1:資料下載步驟1-2,用于體驗姿態(tài)檢測。先下載相關(guān)資料;從側(cè)邊欄選擇文件夾圖表,點擊文件夾data-sets,下載姿態(tài)識別.zip并解壓。??步驟2:瀏覽器配置\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self"??chrome瀏覽器打開:chrome://flags/#unsafely-treat-insecure-origin-as-secure
進行如下圖兩步設(shè)置復制網(wǎng)址進文本框2.點擊Disable選項卡,選擇Enable步驟3:打開網(wǎng)頁\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self"??打開WebServer,選擇剛剛解壓的文件夾。通過WebServer打開index.html,網(wǎng)頁加載速度取決于電腦配置,請耐心等待。??
可調(diào)參數(shù)說明自拍模式:打開則對相機或視頻圖片輸入進行垂直翻轉(zhuǎn)處理。模型復雜度:0,1或2。標記的準確性和計算延遲通常會隨著模型的復雜性而增加。默認為1。平滑標點:過濾不同輸入圖像中的地標以減少抖動。開啟畫面分割:如果設(shè)置為true,除了姿勢界標之外,該解決方案還生成分割掩碼。平滑分割:過濾不同輸入圖像的分割掩碼以減少抖動。最小姿態(tài)檢測置信度:人檢測模型中的最小置信度值。最小姿態(tài)跟蹤置信度:跟蹤模型的最小置信度值(設(shè)置為更高的值可以提高識別的穩(wěn)定性與準確性,但代價是更高的延遲。)
網(wǎng)頁樣例視圖??如果攝像頭拍攝距離有限無法進行全身的拍攝,可以選擇下載該小節(jié)資源中提供的demo.mp4并在瀏覽器中進行上傳。??注意:每次調(diào)整參數(shù)都需要再次加載模型。步驟4:解壓資源文件并安裝MediaPipe步驟4-8是對圖片中的運動姿態(tài)進行檢測。\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self"???1、點擊頁面右側(cè)側(cè)邊欄文件夾圖標,進入“data-sets”,可以看到壓縮包“姿態(tài)檢測.zip”,包含了該項目的數(shù)據(jù)集以及封裝好的代碼庫,使用下面的命令將其解壓到當前目錄中。!unzip-o-q./data-sets/姿態(tài)檢測.zip-d./安裝mediapipe#安裝MediaPipe!pipinstallmediapipe步驟5:將模型解壓到所需的位置shutil._unpack_zipfile("modules.zip","/opt/conda/lib/python3.9/site-packages/mediapipe")步驟6:導入相關(guān)包cv2用來讀取圖片numpy用來做運算util里面有封裝好的函數(shù)mediapipe是實現(xiàn)姿態(tài)識別所用到的庫matplotlib用來查看圖片importcv2importnumpyasnpfromutilimport*importmediapipeasmpimportmatplotlib.pyplotaspltimportshutil步驟7:讀取待檢測對象并顯示npack_zipfile("modules.zip",#通過opencv讀取圖片name="1.png"image=cv2.imread(name)#將opencv讀取的BGR圖片轉(zhuǎn)換為RGBimage_rgb=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)#展示圖片plt.imshow(image_rgb)plt.show()步驟8:調(diào)用模型對圖像進行姿態(tài)檢測我們將MediaPipePose的檢測過程放入了make_image函數(shù),所以在這里我們使用了MediaPipe并繪制姿態(tài)標點。defmake_image(image):""":paramimage:圖片return:經(jīng)過姿態(tài)檢測并標點的圖片"""#進行姿態(tài)檢測annotated_image=make_image(image)#展示檢測完畢的圖片plt.imshow(annotated_image)plt.show()步驟9:調(diào)用函數(shù)計算關(guān)節(jié)角度步驟9-13是對圖片中的深蹲姿勢進行檢測。根據(jù)三個坐標(x1,y1),(x2,y2),(x3,y3),我們?nèi)绾斡嬎汴P(guān)節(jié)角度?調(diào)用angle函數(shù)進行角度計算,函數(shù)說明:調(diào)用angle函數(shù)進行角度計算,函數(shù)說明:angle(point_a,point_b,point_c):根據(jù)三點坐標計算夾角,返回角點b的夾角值。#輸入三個測試坐標,b點夾角應(yīng)該是90°c1=[0,1]#[x1,y1]c2=[0,0]#[x2,y2]c3=[1,0]#[x3,y4]#調(diào)用angle()進行角度計算angle(c1,c2,c3)步驟10:調(diào)用函數(shù)給圖片添加文字我們通過imread讀取圖片,然后進行顏色通道轉(zhuǎn)換。接下來通過調(diào)用cv2AddChineseText()方法在圖片“1.png”的(250,50)的位置上添加文字"添加文字",并設(shè)置顏色(0,0,0)即黑色。cv2AddChineseText(img,text,position,textColor=(0,255,0),textSize=30)參數(shù)說明如下:img:要處理的圖片text:要添加的文字position:文字放置坐標,輸入格式:(0,0)textColor:文字顏色,輸入格式:(B,G,R),默認為綠色。textSize:字體大小,默認為30。#通過opencv讀取圖片name="1.png"image=cv2.imread(name)#將opencv讀取的BGR圖片轉(zhuǎn)換為RGBimage=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)#指定圖片,指定文字,指定字體,指定字體大小,指定顏annotated_image=cv2AddChineseText(image,"添加文字",(250,50),(0,0,0))#展示繪制好的圖片plt.imshow(annotated_image)plt.show()步驟11:讀取關(guān)節(jié)坐標計算膝關(guān)節(jié)彎曲角度需要三個的點的坐標,而調(diào)用關(guān)節(jié)點需要用到關(guān)節(jié)點的英文名稱,我們可以參照以下示意圖:23:左髖部,LEFT_HIP24:右髖部,RIGHT_HIP25:左膝蓋,LEFT_KNEE26:右膝蓋,RIGHT_KNEE27:左腳踝,LEFT_ANKLE28:右腳踝,RIGHT_ANKLE#配置MediaPipe的姿態(tài)識別解決方案mp_pose=mp.solutions.pose#使用MediaPipe的姿態(tài)識別解決方案withmp_pose.Pose(static_image_mode=True,min_detection_confidence=0.5,model_complexity=2)aspose:#標記姿態(tài)結(jié)果results=cess(image)#讀取圖片長寬w,h,_=image.shape#讀取所有點的坐標landmarks=results.pose_landmarks.landmark#通過索引讀取單個位置的坐標left_23=[int(landmarks[mp_pose.PoseLandmark.LEFT_HIP].x*w),int(landmarks[mp_pose.PoseLandmark.LEFT_HIP].y*h)]print("23:左髖部,LEFT_HIP坐標:",left_23)步驟12:將步驟4、5、6合并到一個函數(shù)中除了步驟4、5、6功能的合并之外,我們添加了顏色變化,如果這個深蹲姿勢是標準的,有一些更醒目的提示,比如說亮綠色。反之,如果是不標準的,我們可能希望有一些提醒色,比如黃色。defcompute_advanced(annotated_image,results):"""輸入:進行過姿態(tài)檢測的圖片與姿態(tài)檢測結(jié)果輸出:對膝關(guān)節(jié)角度進行標點后的圖片"""#讀取圖片長寬image_height,image_width,_=annotated_image.shape#步驟6:生成并打印所需坐標names=["左髖部","左膝蓋","左腳踝","右髖部","右膝蓋","右腳踝"]#我們將步驟五的坐標讀取放進了get_coord()函數(shù)coords=get_coord(results,image_width,image_height)foriinrange(6):print(names[i],"坐標:",coords[i])#步驟4:計算兩個關(guān)節(jié)的角度angle_left=angle(coords[0],coords[1],coords[2])angle_right=angle(coords[3],coords[4],coords[5])#步驟5:在圖片上添加兩個關(guān)節(jié)的角度ifangle_left<=90:#標準:顯示綠色annotated_image=cv2AddChineseText(annotated_image,"左膝彎曲角度:"+str(int(angle_left)),tuple((coords[1][0]-100,coords[1][1]-50)),(0,255,0),40)else:#不標準:顯示黃色annotated_image=cv2AddChineseText(annotated_image,"左膝彎曲角度:"+str(int(angle_left)),tuple((coords[1][0]-100,coords[1][1]-50)),(0,255,220),40)ifangle_right<=90:#標準,顯示綠色annotated_image=cv2AddChineseText(annotated_image,"右膝彎曲角度:"+str(int(angle_right)),tuple((coords[4][0]-100,coords[4][1]-25)),(0,255,0),40)else:#不標準:顯示黃色annotated_image=cv2AddChineseText(annotated_image,"右膝彎曲角度:"+str(int(angle_right)),tuple((coords[4][0]-100,coords[4][1]-25)),(0,255,220),40)returnannotated_image步驟13:對圖片中的深蹲姿勢進行檢測調(diào)用make_image_advance函數(shù),它可以輸入自定義的一些圖像處理函數(shù),并在完成姿態(tài)檢測后進行處理。make_image_advance函數(shù)是從until文件中導入的函數(shù)。defmake_image_advance(image,func,**kwargs):參數(shù)說明如下:image:圖片func:對圖片進行操作的函數(shù)。該函數(shù)輸入一張圖片和姿態(tài)檢測的結(jié)果kwargs:上述函數(shù)的其他輸入返回值:經(jīng)過姿態(tài)檢測并標點的圖片,再根據(jù)func對圖片進行操作后的圖像。??接下來我們進行圖片讀取,并將上一步驟中的compute_advanced函數(shù)輸入進make_image_advance()函數(shù),這樣就可以在對圖像進行姿態(tài)檢測后,繪制我們自己想加上去的內(nèi)容,比如膝蓋彎曲角度。name="1.png"image=cv2.imread(name)annotated_image=make_image_advance(image,compute_advanced)plt.imshow(annotated_image)plt.show()步驟14:定義函數(shù)對視頻幀深蹲姿勢進行檢測步驟14-15開始對視頻中的深蹲姿勢進行檢測,調(diào)用make_image_advance函數(shù),它可以輸入自定義的一些圖像處理函數(shù),并在完成姿態(tài)檢測后進行處理。make_image_advance函數(shù)是從until文件中導入的函數(shù)。defmake_image_advance(image,func,**kwargs):參數(shù)說明如下:image:圖片func:對圖片進行操作的函數(shù)。該函數(shù)輸入一張圖片和姿態(tài)檢測的結(jié)果kwargs:上述函數(shù)的其他輸入返回值:經(jīng)過姿態(tài)檢測并標點的圖片,再根據(jù)func對圖片進行操作后的圖像。??接下來我們進行圖片讀取,并將上一步驟中的compute_advanced函數(shù)輸入進make_image_advance()函數(shù),這樣就可以在對圖像進行姿態(tài)檢測后,繪制我們自己想加上去的內(nèi)容,比如膝蓋彎曲角度。defcompute_img(image,i):"""img:輸入一張圖片,當前幀的圖片i:輸入幀數(shù),當前是第幾幀輸入:對輸入圖片按照代碼進行處理后的圖像"""annotated_image=make_image_advance(image,compute_advanced)returnannotated_image步驟15:對運動視頻進行深蹲標準檢測調(diào)用make_video函數(shù),并將上一步的compute_img函數(shù)作為參數(shù)傳遞。make_video函數(shù)原型:make_video(videoname,func,**kwargs):參數(shù):paramvideoname:視頻名稱;paramfunc:處理函數(shù);返回值:經(jīng)過姿態(tài)檢測并標點的視頻,再根據(jù)func對視頻進行操作。操作完成后,我們再次通過側(cè)邊欄的文件夾處下載out.mp4進行查看,可以看到視頻畫面中隨著人的動作變化,深蹲動作的檢測結(jié)果也在變化,綠色文字表示動作標準,黃色動作表示還沒達到標準狀態(tài)。make_video("demo.mp4",compute_img)實訓內(nèi)容任務(wù)一:姿態(tài)檢測體驗任務(wù)二:對圖片中的運動姿態(tài)進行檢測任務(wù)三:對圖片中的深蹲姿態(tài)進行檢測任務(wù)四:對視頻中的深蹲姿態(tài)進行檢測四、實訓環(huán)境本項目在個人電腦本地環(huán)境中完成。操作系統(tǒng):Windows系統(tǒng)或MacOSX系統(tǒng)。五、實訓評價創(chuàng)意美術(shù)體驗——基于OpenCV制作蘋果橙一、任務(wù)目標知識目標1、了解OpenCV2、了解圖像拼接與圖像金字塔技能目標1、具有使用cv2處理圖像的能力2、具有使用圖像金字塔進行圖像融合的能力素質(zhì)目標1、具有追
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨裝值班員操作規(guī)程知識考核試卷含答案
- 有色礦石磨細工安全宣教知識考核試卷含答案
- 飼料配方師班組管理考核試卷含答案
- 會展服務(wù)師安全生產(chǎn)意識強化考核試卷含答案
- 高爐上料工安全宣貫測試考核試卷含答案
- 重冶固體原料輸送工安全專項評優(yōu)考核試卷含答案
- 輕冶沉降工復試競賽考核試卷含答案
- 2024年山東省濟寧教育學院輔導員考試參考題庫附答案
- 粉末冶金制品制造工崗前理論能力考核試卷含答案
- 催化劑制造工安全文化能力考核試卷含答案
- GB/T 19342-2024手動牙刷一般要求和檢測方法
- 物業(yè)收費技巧培訓
- 電子技術(shù)基礎(chǔ)(模擬電子電路)
- 內(nèi)蒙古自治區(qū)通遼市霍林郭勒市2024屆中考語文最后一模試卷含解析
- 復方蒲公英注射液的藥代動力學研究
- 單純皰疹病毒感染教學演示課件
- 廣東省中山市2023-2024學年四年級上學期期末數(shù)學試卷
- 地質(zhì)勘查現(xiàn)場安全風險管控清單
- 松下panasonic-經(jīng)銷商傳感器培訓
- 中醫(yī)舌、脈象的辨識與臨床應(yīng)用課件
- 建設(shè)工程項目施工風險管理課件
評論
0/150
提交評論