기계 학습을 통해 Animal Crossing 캐릭터가 제스처에 반응하도록 만들기
19283 단어 machinelearningpythontutorialapi
개요
제스처를 학습하기 위해 GoogleTeachable Machine의 모델을 훈련함으로써 우리는 손을 휘두르거나 얼굴을 만들어 해당 반응 명령을 Animal Crossing의 API에 보낼 수 있습니다.
리버스 엔지니어링 Animal Crossing의 API
전화의 NSO 앱을 사용하면 게임에 반응 명령을 보낼 수 있습니다. mitmproxy 이라는 도구를 사용하여 전화에서 어떤 요청이 전송되는지 알 수 있고 반응 명령을 시뮬레이션할 수 있습니다.
brew install mitmproxy
또는 pip install mitmproxy를 사용하십시오.
mitmproxy 실행
mitmproxy
또는 웹 인터페이스를 선호하는 경우 mitmweb을 실행하십시오.
mitmweb
휴대 전화에 mitmproxy 인증서를 설치하십시오.
휴대폰이 컴퓨터와 같은 인터넷에 연결된 상태에서 http://mitm.it/을 방문하여 인증서를 설치합니다. 전화기의 인터넷 설정에서 컴퓨터의 IP 주소를 가리키는 수동 프록시를 추가하십시오.
Mac에서 IP 주소 확인하기
수동 프록시 설정
http://mitm.it에서 인증서 다운로드
정보 > 인증서 신뢰 설정 > 인증서 활성화
Nintendo Switch 앱을 통해 요청 보내기
이제 폰에서 NSO 앱을 실행하고 동물의숲 앱으로 놀아보세요. mitmproxy 터미널을 통해 들어오는 휴대폰의 요청 데이터가 표시되어야 합니다. 전화에서 반응을 보내 반응 요청 형식을 찾을 수 있습니다.
메시징 및 반응에 대한 요청 엔드포인트는 api/sd/v1/messages입니다. 그것을 클릭하면 이 게시물 요청의 쿠키와 양식 데이터를 볼 수 있습니다.
게시물 데이터는 다음과 같습니다.
{
"body": "Smiling",
"type": "emoticon"
}
Tip: Press q in the mitmproxy terminal to return to the request list.
제가 수집한 반응 유형은 다음과 같습니다: Hello, Greeting, HappyFlower, Negative, Apologize, Aha, QuestionMark...
List of Reaction Values
Note: I don't have all the reactions in my game right now. It would be great if anyone could provide the other reaction values!
닌텐도 스위치 API에 액세스하기
Nintendo Switch API에 액세스하려면 인증 토큰을 사용하여 Nintendo 서버에 여러 번 요청해야 합니다.
전체 자습서:
Nintendo Switch REST API 소개
Mathew Chan ・ 11월 17 '20 ・ 10분 읽기
#javascript
#webdev
#api
#tutorial
성공적인 인증은 다음 세 가지 값을 제공합니다.
전화의 NSO 앱을 사용하면 게임에 반응 명령을 보낼 수 있습니다. mitmproxy 이라는 도구를 사용하여 전화에서 어떤 요청이 전송되는지 알 수 있고 반응 명령을 시뮬레이션할 수 있습니다.
brew install mitmproxy
또는 pip install mitmproxy를 사용하십시오.
mitmproxy 실행
mitmproxy
또는 웹 인터페이스를 선호하는 경우 mitmweb을 실행하십시오.
mitmweb
휴대 전화에 mitmproxy 인증서를 설치하십시오.
휴대폰이 컴퓨터와 같은 인터넷에 연결된 상태에서 http://mitm.it/을 방문하여 인증서를 설치합니다. 전화기의 인터넷 설정에서 컴퓨터의 IP 주소를 가리키는 수동 프록시를 추가하십시오.
Mac에서 IP 주소 확인하기
수동 프록시 설정
http://mitm.it에서 인증서 다운로드
정보 > 인증서 신뢰 설정 > 인증서 활성화
Nintendo Switch 앱을 통해 요청 보내기
이제 폰에서 NSO 앱을 실행하고 동물의숲 앱으로 놀아보세요. mitmproxy 터미널을 통해 들어오는 휴대폰의 요청 데이터가 표시되어야 합니다. 전화에서 반응을 보내 반응 요청 형식을 찾을 수 있습니다.
메시징 및 반응에 대한 요청 엔드포인트는 api/sd/v1/messages입니다. 그것을 클릭하면 이 게시물 요청의 쿠키와 양식 데이터를 볼 수 있습니다.
게시물 데이터는 다음과 같습니다.
{
"body": "Smiling",
"type": "emoticon"
}
Tip: Press q in the mitmproxy terminal to return to the request list.
제가 수집한 반응 유형은 다음과 같습니다: Hello, Greeting, HappyFlower, Negative, Apologize, Aha, QuestionMark...
List of Reaction Values
Note: I don't have all the reactions in my game right now. It would be great if anyone could provide the other reaction values!
닌텐도 스위치 API에 액세스하기
Nintendo Switch API에 액세스하려면 인증 토큰을 사용하여 Nintendo 서버에 여러 번 요청해야 합니다.
전체 자습서:
Nintendo Switch REST API 소개
Mathew Chan ・ 11월 17 '20 ・ 10분 읽기
#javascript
#webdev
#api
#tutorial
성공적인 인증은 다음 세 가지 값을 제공합니다.
Nintendo Switch REST API 소개
Mathew Chan ・ 11월 17 '20 ・ 10분 읽기
#javascript
#webdev
#api
#tutorial
_g_token 쿠키
_park_session 쿠키
인증 전달자 토큰
import requests
user_auth_app_head = {
'Host': 'web.sd.lp1.acbaa.srv.nintendo.net',
'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; Pixel Build/NJH47D; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'Connection': 'keep-alive',
'Referer': 'https://web.sd.lp1.acbaa.srv.nintendo.net/?lang=en-US&na_country=US&na_lang=en-US',
'Authorization' : 'tmp',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-us'
}
def sendReaction(reaction_value):
data = {
'body': reaction_value,
'type': 'emoticon'
}
res = post_AC_NSOJSON(user_auth_app_head, data, 'https://web.sd.lp1.acbaa.srv.nintendo.net/api/sd/v1/messages')
if res is not None:
if 'status' in res:
if res['status'] == 'success':
return 'Reaction sent!'
elif 'code' in res:
if res['code'] == '4102':
refresh_tokens()
return sendReaction(reaction_value)
if res['code'] == '3002':
return 'Reaction not found'
if res['code'] == '1001':
return 'Animal Crossing Session Not Connected'
return res
def post_AC_NSOJSON(header, body, url):
h = header
h['Authorization'] = 'Bearer ' + tokens['ac_b']
pcookie = {}
pcookie['_gtoken'] = tokens['ac_g']
pcookie['_park_session'] = tokens['ac_p']
r = requests.post(url, headers=h, cookies=pcookie, json=body)
thejson = json.loads(r.text)
return thejson
테스트하고 작동하는지 확인하십시오 :)
sendReaction('Aha')
가르칠 수 있는 기계
GoogleTeachable Machine은 음성, 사진 및 비디오를 인식하도록 모델을 교육하는 사용하기 쉬운 온라인 도구입니다. 기계 학습이 처음이라면 를 시청하는 것이 좋습니다.
먼저 포즈 프로젝트를 만듭니다.
포즈 샘플을 위해 웹캠을 선택합니다. 일등석 중립 이름을 지정하고 제스처없이 자신을 녹음하십시오. 그런 다음 박수를 치거나 손을 흔드는 것과 같은 추가 수업을 추가합니다. 원하는 만큼 창의적이 될 수 있습니다.
완료되면 기차를 누릅니다. 학습이 완료되면 미리보기 패널에서 모델을 테스트할 수 있습니다. 만족스러우면 미리보기 패널 위의 모델 내보내기를 누르고 TensorFlow 모델을 다운로드합니다.
간단한 사용자 인터페이스를 위해 제공된 Tensorflow.js Sample Script을 사용할 수 있습니다. 샘플 스크립트를 빈 html 파일에 복사하고 Node.js를 통해 제공합니다.
npm install http-server -g
cd my-pose-model
http-server
API 호출을 predict() 함수 안에 삽입합니다. API 엔드포인트는 반응을 보내기 위해 Python 서버로 연결되어야 합니다.
const confidence = 0.8; // Confidence range is 0 to 1
async function predict() {
...
const prediction = await model.predict(posenetOutput);
for (let i = 0; i < maxPredictions; i++) {
const classPrediction = prediction[i].className + ": " + prediction[i].probability.toFixed(2);
// Insert the API call here
if (prediction[i].probability > confidence) {
callReaction(prediction[i].className);
}
labelContainer.childNodes[i].innerHTML = classPrediction;
}
// finally draw the poses
drawPose(pose);
};
let clapping = 0;
const threshold = 5; // number of times of detection to run API
async function callReaction(predictionClassName) {
if (predictionClassName == 'Clapping') {
clapping += 1
if (clapping > threshold) {
fetch('https://myapi.com/?reaction=Clapping'); // Change to your own API endpoint
clapping = 0; // reset for threshold
}
}
}
창의력을 발휘하고 재미있게 보내세요!
요약
npm install http-server -g
cd my-pose-model
http-server
const confidence = 0.8; // Confidence range is 0 to 1
async function predict() {
...
const prediction = await model.predict(posenetOutput);
for (let i = 0; i < maxPredictions; i++) {
const classPrediction = prediction[i].className + ": " + prediction[i].probability.toFixed(2);
// Insert the API call here
if (prediction[i].probability > confidence) {
callReaction(prediction[i].className);
}
labelContainer.childNodes[i].innerHTML = classPrediction;
}
// finally draw the poses
drawPose(pose);
};
let clapping = 0;
const threshold = 5; // number of times of detection to run API
async function callReaction(predictionClassName) {
if (predictionClassName == 'Clapping') {
clapping += 1
if (clapping > threshold) {
fetch('https://myapi.com/?reaction=Clapping'); // Change to your own API endpoint
clapping = 0; // reset for threshold
}
}
}
참조
Setting-up mitmproxy on macOS to intercept https requests
Reference
이 문제에 관하여(기계 학습을 통해 Animal Crossing 캐릭터가 제스처에 반응하도록 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mathewthe2/doing-animal-crossing-reactions-with-gestures-in-teachable-machine-1h8m
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(기계 학습을 통해 Animal Crossing 캐릭터가 제스처에 반응하도록 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mathewthe2/doing-animal-crossing-reactions-with-gestures-in-teachable-machine-1h8m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)