기본 콘텐츠로 건너뛰기

FastAPI 실시간 영상 스트리밍 OpenCV

  FastAPI와 OpenCV를 활용한 실시간 영상 스트리밍 Permalink 실시간 영상을 스트리밍 하는 방법을 찾던 중 파이썬 FastAPI를 활용한 방법을 시도 해보았다. 필수 라이브러리 Permalink 필요한 것은 Python3.9버전 (애플 M1칩셋 맥북에어에서 3.8 버전으로 시도 해보니 OpenCV라이브러리 설치에서 문제가 발생했었다) FastAPI uvicorn OpenCV 정도면 될 것 같다. 라이브러리들은 모두 설치 되었다고 가정 하고, 예제 코드 Permalink # main.py # 라이브러리 import # StreamingResponse를 가져와야함 from fastapi import FastAPI from fastapi.responses import StreamingResponse # cv2 모듈 import from cv2 import get_stream_video # FastAPI객체 생성 app = FastAPI () # openCV에서 이미지 불러오는 함수 def video_streaming (): return get_stream_video () # 스트리밍 경로를 /video 경로로 설정. @ app . get ( "/video" ) def main (): # StringResponse함수를 return하고, # 인자로 OpenCV에서 가져온 "바이트"이미지와 type을 명시 return StreamingResponse ( video_streaming (), media_type = "multipart/x-mixed-replace; boundary=frame" ) # cv2.py import cv2 def get_stream_video (): # camera 정의 cam = cv2 . VideoCapture ( 0 ) while True : ...

Python FastAPI 알아보고 설치하고 초기 설정 해보기

  Python FastAPI, 설치하고 초기 설정 해보기 Permalink 파이썬 웹 서버를 만들어야 하는 일이 생겼늗데, 최대한 빠르고 안정적인 서버를 선택 해야했다. 그래서 기존에 사용하던 Flask보다 훨씬 빠르다고 하는 FastAP를 사용해보기로 했다. ❓ FastAPI란? Permalink 👉 FastAPI 공식 한국어 페이지  https://fastapi.tiangolo.com/ko/ FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크입니다. FastAPI는 파이썬에서 사용 가능한 웹 프레임워크 중 하나인데, Flask나 Django보가 훨씬 빠른 속도를 보여준다고 하고, 확인 해봐야 하겠지만 Go언어와도 비슷한 속도를 보여준다고 한다. 또, 쉽고 간결한 코드, 200% ~ 300% 까지 증가하는 개발 속도를 기대할 수 있다고 하는데, 시작 해보자! 👏 Permalink FastAPI 설치 Permalink 먼저 공식 사이트에선 pip를 이용해 설치 하라고 나와있는데, 나는 anaconda를 이용해서 설치를 했다. bash $ pip install fastapi anaconda 사용 시 $ conda install fastapi 그리고 ASGI서버도 필요해서 같이 설치하라고 하는데, Univorn을 설치 해보자. bash $ pip install uvicorn[standard] anaconda 사용 시 $ conda install uvicorn FastAPI 예제 Permalink 설치가 완료되면 이렇게 vscode에서 FastAPI() 클래스가 자동 완성 되는걸 확인할 수 있다. 그리고 정말 간단히 API를 만들 수 있는데, main.py 파일을 만든 후에 from typing import Optional from fastapi import FastAPI app = FastAPI () @ app . get ( "/"...

왜 게임 컨트롤러는 A, B, X, Y를 사용할까?

 XBOX나 닌텐도의 컨트롤러를 보면 A, B, X, Y의 알파벳으로 버튼을 구분하는 것을 알 수 있습니다. 근데 왜 하필 ABCD도 1234도 아닌 ABXY일까요? 이 버튼 배열을 처음 시작한 것은 닌텐도의 SNES입니다. SNES에서 처음으로 오른쪽의 버튼들을 4가지로 늘렸는데, 이때 추가된 것이 X와 Y버튼이었습니다. 사실 특별한 이유는 없고 X와 Y버튼이 추가되면서, 기존의 A, B 버튼들과 구분하기 위해 X Y로 만들어졌다는 것이 가장 근거가 있습니다. 아마 처음 SNES를 개발할 때, ABCD는 너무 재미가 없다거나, B,C,D는 비슷하게 생겨서 헷갈릴 수도 있거나,  등의 여러 이유가 함께 작용하지 않았나싶네요. 그리고 또 하나 재미있는 점은 닌텐도와 XBOX의 A, B 버튼의 방향이 반대로 되어 있다는 점 입니다. 닌텐도는 오른쪽이 A이고, XBOX는 왼쪽이 A버튼이죠. 이것도 그렇게 큰 이유는 없습니다. 닌텐도는 일본 기업이기 때문에 처음 NES를 개발할 때, 오른쪽에서 왼쪽으로 A와 B를 만들었습니다. 하지만 미국은 왼쪽부터 읽기 때문에 A, B가 반대로 된 것입니다. 최근에는 VR등 새로운 기술들의 개발과 함께 게임 컨트롤러들 또한 다양한 방향으로 변화하고 있습니다. 이렇게 새롭게 생겨나는 여러 컨트롤러들 또한 A, B, X, Y의 버튼들을 계속 사용하게 될 것인지 궁금해지네용

가장 대중적인 게임 엔진 중 하나인 유니티 엔진에 대해서

  2005년 경에 출시한 유니티 엔진은 현재 명실상부 세계에서 가장 많이 사용하는 게임 엔진 중 하나가 되었습니다. 최근 유니티 2020버전이 출시되었고, 레이 트레이싱 등 많은 차세대 기술들을 도입하고 에픽 게임즈의 언리얼 엔진과 함께 PC, 모바일, 콘솔 등 수 많은 분야들에서 두각을 나타내고 있습니다. 유니티 엔진의 시작은 2005년에 게임 개발을 더 대중적으로 만들자는 취지로 데이비드 헬가슨, 조와치 앤티, 니콜라스 프란시스가 맥OS X 기반으로 제작했습니다. 2006년에는 애플의 Apple Design Awards에서 Mac OS X Graphics 활용 부문에서 2위를 차지하기도 했습니다. 그리고 유니티는 실시간 그림자, direction light, 비디오 재생 등 여러 기능을 추가한 2.0버전이 출시되었고, 3.0, 4.0, 5 등등 여러 버전을 거쳐 현재의 유니티가 탄생하게 되었습니다. 현재의 유니티는 물리 엔진, 실시간 글로벌 조명, 파괴 효과, 레이 트레이싱 등 여러 차세대 기술을 도입하고, 벌칸 API, 구글 데이드림, 뷰포리아, 닌텐도 스위치 등의 여러 접근성 및 편의성을 증강하고 있습니다. 또한, 유니티 에셋 스토어나 유니티 공식 문서들이 굉장히 잘 되어있기 때문에 1인 개발 또한 유리한 편에 속합니다. 유니티 엔진은 C# 스크립트를 사용하고, 대부분 소규모 프로젝트, 인디 게임, 모바일 게임 등에 주로 쓰이고 반대로는 언리얼 엔진을 사용하고 있는 추세입니다. 위에 적었던 많은 기능들이 있음에도 불구하고, 언리얼 엔진에 비해 지원하는 기능들이 적고, 엔진의 최적화가 부족하기 때문입니다. 특히 멀티스레드 지원 부분이 크게 작용하는데, 유니티 엔진은 멀티코어를 제대로 지원하지 않기 때문입니다. 그럼에도 불구하고 유니티 엔진은 누구나 간편하게 게임을 제작할 수 있다는 점에서 크게 성공하고 있고, 블리자드의 하스스톤, 라이엇 게임즈의 리그 오브 레전드 : 와일드 리프트 등 중대규모 프로젝트에도 꾸준히 사용되고 있습니다. 하스스톤 리그...

사람들이 동물의 숲에 열광하는 이유 (1)

지난 3월 20일, 사람들에게 큰 기대를 받으며 출시한 한 게임이 있습니다. 닌텐도의 주요 프랜차이즈 중 하나인 동물의 숲 시리즈의 신작 '모여봐요 동물의 숲'이란 게임입니다. 이 게임은 다른 게임들과는 많이 다릅니다. 3월 20일에 함께 출시한 게임 '둠 : 이터널'과도 정말 다른 게임이죠. 많은 사람들이 플레이 하는 자극적이고 폭력적인 게임들은 정말 많습니다. 당장에 흔히들 얘기하는 국내 PC방 순위를 보면 싸우고, 또 싸우는 게임들이 대부분입니다. 하지만 이 게임에선 싸움도, 갈등도, 재촉도 없습니다. 그저 정해진 공간에서 살아갈 뿐입니다. 사람들이 좋아하는 자극적인 컨텐츠도 없이 어떻게 이 게임은 사람들에게 매력적인 게임으로 다가왔을까요? (제가 생각하는) 첫 번째 이유는 모든 컨텐츠에 피로도가 없다는 점입니다. 제가 플레이 했던 게임 중에 동물의 숲과 그나마 유사한 게임이 있다면 '스타듀 밸리'란 게임입니다. 스타듀 밸리 또한 동물의 숲과 마찬가지로, 전투 등 자극적인 컨텐츠는 거의 없고, 농사를 짓고, 낚시를 하며 하루하루를 보내는 게임입니다. 하지만 이 게임에는 '피로도'라는 시스템이 있습니다. 오른쪽 하단의 피로도, 출처 그래서 제가 스타듀 밸리를 플레이 했던 경험과 동물의 숲을 플레이 했던 경험은 매우 달랐습니다. 스타듀 밸리를 플레이 하는 저는 정해진 피로도 속에서 어떻게 더 효율적으로 플레이 할 수 있을까 고민하고, 실수로 물을 뿌린 곳에 또 물을 뿌리면 아차, 하고 아쉬워 하기도 했습니다. 이 정해진 피로도 속에서 효율적으로 플레이 해야한다는 생각이 계속 되다 보니, 스타듀 밸리를 플레이 하는 저는 힐링을 하러 온 기분 보다 부자가 되기 위해 노력하는 기분이 들게 된것 같았습니다. 물론 두 게임이 추구하는 방향이 다르고, 다른 재미가 있는 것입니다. 물론 피로도를 채울 수 있지만, 그 피로도를 채우는 ...

로그라이크 게임의 변형들

로그-라이크(Rogue-Like)게임이란 이름 그대로 1980년에 등장한 'Rogue'라는 아스키 코드를 이용한 게임과 그 게임 형식을 이어받은 게임들을 의미합니다. 'Rogue'게임 화면 보통 로그라이크게임의 특징이라 하면 영구적 죽음이라는 것이 있습니다. 플레이어가 게임 오버 되면 저장되는 데이터가 없이 모든 것이 끝나는 것입니다. 그 때문에 플레이어들은 게임을 플레이 하면서 선택 하나하나에 큰 중요성이 있고, 그에 따라 매우 신중하게 게임을 하게 됩니다. 그래서 로그라이크 게임만의 긴장감, 선택의 신중함 등이 있기 때문에 팬층이 매우 두터운 장르이기도 합니다. 역사가 매우 오래된 장르이기도 하기 때문에 'Dungeon Crawl', 'Net Hack'등 정통적인 로그라이크 게임에서 벗어나 여러가지 변형된 로그라이크 게임들도 생겨났습니다. 이런 게임들은 보통 로그라이크의 '영구적인 죽음'이라는 개념을 채용하여 긴장감을 유발시킨 게임들이 많습니다. 최근 얼리 엑세스로 후속작이 나온 'Risk of Rain'이라는 게임은 그런 점을 잘 활용했습니다. 플레이어의 캐릭터가 죽으면 그대로 게임이 끝이기 때문에 플레이어는 매우 신중하게 플레이 해야하지만, 수 없이 몰려오는 적들과 시간이 지날 수록 난이도는 점점 높아지기 때문에 빨리 탈출해야 하지만 그만큼 보상은 줄어드는 등의 시스템들이 서로 어우러져 플레이어를 정신 없게 만듭니다. 'Rogue Legacy'에서 영감을 받아 국내의 대학생들이 개발한 것으로 유명해진 'Dungreed'라는 게임 역시 비슷하지만 로그라이크 게임이 점점 변형되어 로그 레거시와 이 게임에선 '영구적인 죽음'과는 다른 점이 있습니다. 캐릭터가 죽어도 얻었던 보상으로 캐릭터나 마을을 업그레드 할 수 있다는 점입니다. 그렇기 때문에 플레이어들은 죽...

게임 스트리밍 서비스의 미래

2019년 3월 20일에 공개된 구글의 '스타디아'라는 게임 스트리밍 서비로 인해 게임 스트리밍 서비스가 큰 화두가 되었습니다. 게임 스트리밍 서비스란 '클라우드 컴퓨팅'을 이용해 플레이어들이 게임을 따로 설치하지 않고, 기업에서 제공하는 서버가 게임 파일 및 연산 등을 모두 처리합니다. 플레이어의 PC나 플랫폼은 조작에 발생하는 신호 및 화면만 송출하기 때문에 게임의 사양에 관계 없이 게임을 플레이 할 수 있다는 것이 큰 장점입니다. 또한, 불법 복제의 방지, 핵 방지, 설치를 안해도 된다는 점에서 기존의 게임 설치 방식과는 다른 많은 장점이 존재합니다. 'Stadia 공식 Recap 영상' 이런 게임 스트리밍 서비스는 고성능 PC가 충분히 보급되지 않은 대부분의 사람들에게 큰 영향을 끼칠 것으로 보입니다. 또한, NVIDIA나 AMD, INTEL 등 그래픽카드 등의 컴퓨터 부품을 제공하는 업체에도 상당한 영향을 줄 수 있을 것이고, 대부분의 게임 개발 업체에서도 눈 여겨 보고 있을 것입니다. 실제로, 닌텐도, MS, 베데스다 등에서 줄줄히 게임 스트리밍 서비스를 지원하겠다고 발표 하기도 했습니다. 현재 스트리밍 서비스를 제공하는 업체 중 가장 활발한 것이 소니의 'Playstation Now'이기 때문에 PS Now의 예를 한번 보겠습니다. Playstation Now는 현재 한국에선 플레이 할 수 없고 타 주요국에서 제공되고 있는 PS4와 PC에서 제공하는 게임 스트리밍 서비스입니다. PC에서 PS의 독점작들을 플레이 할 수 있다는 점에서 사람들에게 큰 관심을 모았습니다. 또한 저사양 PC에서도 인터넷 회선만 잘 돼있다면 고사양의 게임들을 즐길 수 있고, 생각보다 지연 시간이 적었다는 점에서 많은 호평을 받기도 했습니다. 하지만 PS Now에도 여러가지 단점이 존재 했습니다. 먼저, 720p해상도 고정, PS Now는 1080p이상의 해상도를 지원하지 않...