일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 풀이
- 백준 2133
- RBT
- 테스트주도개발
- LOLIN D32
- 페이지교체알고리즘
- ESP32
- 백준
- TDD란?
- mediastream
- 1796
- dp
- 구현
- 3XN 타일링
- stl
- 9996
- c++
- OpenVidu
- WebRTC란
- 2623
- 13459
- REACT
- 적두트리
- 구슬탈출
- 데이터 링크 계층
- Vite 사용 이유
- tfjs
- 자료구조
- 메모리계층
- TDD
- Today
- Total
그냥 블로그
[React] React로 자세 추정 - 1. 웹캠 연결하기 본문
프로젝트에서 실시간 포즈 감지를 프론트에서 하게 되었다. '-`
사용 언어 : TypeScript, React
프레임워크 / 라이브러리 : vite, Recoil, eslint, prettierignore,
빠른 제작을 위해 모델은
https://teachablemachine.withgoogle.com/
Teachable Machine
Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.
teachablemachine.withgoogle.com
Teachable Machine을 사용할 예정이고,
기존에 React로 만들어놓은 프로젝트에 실시간 포즈 감지 기능을 붙여볼까 한다.
그러기 위해선 먼저, 프론트에서 웹캠 연결을 해야하는데
https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
MediaDevices: getUserMedia() method - Web APIs | MDN
The MediaDevices.getUserMedia() method prompts the user for permission to use a media input which produces a MediaStream with tracks containing the requested types of media.
developer.mozilla.org
getUserMedia를 사용하면 된다고..
인터넷 서칭 좀 하면, 프론트에서 간단하게 띄우는걸 찾을 수 있다.
import React, { useRef, useEffect, useState } from 'react';
// 콜백 타입 정의
type StreamCallback = (stream: MediaStream) => void;
// getWebcam 함수는 StreamCallback을 인자로 받아 비동기로 작업을 수행합니다.
const getWebcam = (callback: StreamCallback): void => {
try {
const constraints = { video: true, audio: false };
navigator.mediaDevices.getUserMedia(constraints)
.then(callback)
.catch((err) => console.log(err)); // catch로 에러를 잡습니다.
} catch (err) {
console.error(err);
}
};
const Styles = {
Video: { width: "100%", height: "100%", background: 'rgba(245, 240, 215, 0.5)' },
None: { display: 'none' },
};
const TestOverlay: React.FC = () => {
const [playing, setPlaying] = useState<boolean | undefined>(undefined);
const videoRef = useRef<HTMLVideoElement | null>(null);
useEffect(() => {
getWebcam((stream: MediaStream) => {
setPlaying(true);
if (videoRef.current) {
videoRef.current.srcObject = stream;
}
});
}, []);
const startOrStop = () => {
if (playing && videoRef.current?.srcObject) {
const tracks = (videoRef.current.srcObject as MediaStream).getTracks();
tracks.forEach((track) => {
track.stop();
});
setPlaying(false);
} else {
getWebcam((stream: MediaStream) => {
setPlaying(true);
if (videoRef.current) {
videoRef.current.srcObject = stream;
}
});
}
};
return (
<div style={{ width: '100vw', height: '100vh', padding: '3em' }}>
<video ref={videoRef} autoPlay style={Styles.Video}>
<track kind="captions" src="captions_ko.vtt" srcLang="ko" label="한국어" />
</video>
<button type="button" onClick={startOrStop}>
{playing ? 'Stop' : 'Start'}
</button>
</div>
);
};
export default TestOverlay;
근데 여기서 카메라 허용을 페이지에 들어가자마자 받아야 하기 때문에 그 부분은 나중에 변경시켜줘야 할 것 같다.
웹캠은 잘 됨.
'Front-End > React' 카테고리의 다른 글
[React] React로 자세 추정 - 3. 이미지 파일 넣어서 포즈 인식 (0) | 2023.11.14 |
---|---|
[React] React로 자세 추정 - 2. teachable 머신 학습 시키기. (0) | 2023.11.13 |
React : 생명 주기(life cycle) (1) | 2023.10.31 |
React : 사용 이유/장점 (1) | 2023.10.30 |