410730872王宣閔 期末報告 - https://gifs.com/gif/2222-K8mPox 以上為我的gif,因為我的電腦錄製一直失敗,故我使用網站的方式呈現 _________________________ https://openprocessing.org/sketch/1424836 這是我的網站 首先我使用rightWristImg=loadImage("11.jpg")這行來貼上我的自畫像 接下來是我的程式碼 ```javascript= let video; let poseNet; let pose; let skeleton; var rightEarImg,noseImg,rightWristImg,leftWristImg function preload(){ rightEarImg= loadImage("UoKfhYw.png") noseImg =loadImage("123.jpg") rightWristImg=loadImage("11.jpg") // leftWristImg=loadImage("11.jpg") } function setup() { createCanvas(640, 480); //createCanvas(windowWidth, windowHeight); video = createCapture(VIDEO); video.hide(); poseNet = ml5.poseNet(video, modelLoaded); //呼叫在ml5.js上的net函數,用此函數來判斷各位置,呼叫成功即執行function modelLoaded poseNet.on('pose', gotPoses); } function gotPoses(poses) { //console.log(poses); if (poses.length > 0) { pose = poses[0].pose; //把抓到的幾個點,都放置pose變數內 skeleton = poses[0].skeleton; //把相關於骨架的點都放到skeleton變數內 } } function modelLoaded() { //顯示pose model已經準備就緒 console.log('poseNet ready'); } function draw() { background(0); translate(video.width,0) //因為攝影機顯示的是反像的畫面,需要透過這兩條指令來做反轉 scale(-1,1) //因為攝影機顯示的是反像的畫面,需要透過這兩條指令來做反轉 image(video, 0, 0); //顯示你的畫面在螢幕上 if (pose) { let eyeR = pose.rightEye; //抓到右眼資訊,放到eyeR let eyeL = pose.leftEye; //抓到左眼資訊,放到eyeL let d = dist(eyeR.x, eyeR.y, eyeL.x, eyeL.y); //算出左右眼的距離,當作鼻子顯示圓的直徑 push() translate(pose.rightEar.x, pose.rightEar.y) //以找到的右耳位置當作座標原點 imageMode(CENTER); //圖片要以中心點為座標點 scale(-1,1) //左右翻轉 scale(0.1) //縮小到0.1 image(rightEarImg,0, 0) //顯示該圖片 pop() push() translate(pose.leftEar.x, pose.leftEar.y) //以找到的右耳位置當作座標原點 imageMode(CENTER); //圖片要以中心點為座標點 scale(0.1) //縮小到0.1 image(rightEarImg,0, 0) //顯示該圖片 pop() push() translate(pose.nose.x, pose.nose.y) //以找到的右耳位置當作座標原點 imageMode(CENTER); //圖片要以中心點為座標點 scale(0.1) //縮小到0.1 image(noseImg,0, 0) //顯示該圖片 pop() push() translate(eyeR.x-50,eyeR.y-40) //以找到的右耳位置當作座標原點 imageMode(CENTER); //圖片要以中心點為座標點 scale(0.11) //縮小到0.1 draw_1()//顯示該圖片 pop() push() translate(eyeL.x+50,eyeL.y-40) //以找到的右耳位置當作座標原點 imageMode(CENTER); //圖片要以中心點為座標點 scale(0.11)//縮小到0.1 scale(-1,1) draw_1()//顯示該圖片 pop() push() translate(pose.rightWrist.x, pose.rightWrist.y); imageMode(CENTER); //圖片要以中心點為座標點 scale(0.1) //縮小到0.1 image(rightWristImg,0, 0) //顯示該圖片 pop() //push() //translate(pose.leftWrist.x, pose.leftWrist.y); // imageMode(CENTER); //圖片要以中心點為座標點 //scale(1) //縮小到0.1 // image(leftWristImg,0, 0) //顯示該圖片 // pop() } } function drawKeypoints() { for (let i = 0; i < pose.keypoints.length; i++) { let x = pose.keypoints[i].position.x;//找出每一個點的x座標 let y = pose.keypoints[i].position.y;//找出每一個點的y座標 fill(0,255,0); ellipse(x,y,16,16); } //print(pose.keypoints.length) } function drawSkeleton() { for (let i = 0; i < skeleton.length; i++) { let a = skeleton[i][0]; let b = skeleton[i][1]; strokeWeight(2); stroke(255,0,0); line(a.position.x, a.position.y,b.position.x,b.position.y); } } function draw_1(){ translate(width/2,height/2); //以視窗中心為整個座標的(0,0) push() fill(255,211,33) ellipse(0,0,50) //(0,0)直徑為50的圓 fill('#FFC1E0') ellipseMode(CORNER) for(var i=0;i<16;i=i+1){ ellipse(30,-20,100,30) line(30,-5,120,-5) rotate(PI/8) } //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) //rotate(PI/8) //ellipse(30,-20,100,30) pop() } 謝謝老師