Flask SocketIO를 이용하여 실시간 웹캠 감정데이터 측정하기 1

winterholic·2024년 1월 10일

FaceReview Project

목록 보기
5/9

본 프로젝트에서 실시간으로 유튜브를 시청하는 시청자들의 감정정보를 분석하여 실시간으로 피드백하고, 감정정보를 저장하여 시청자들에게 유용한 영상추천을 제안하는 것을 목표로 한다. 하지만 실시간으로 변화하는 감정들을 Request와 Response를 통해서 주고 받게 된다면, 실시간으로 반영하는 속도 또한 느릴 수 있으며, 다양한 문제점이 발생할 것으로 보였다.

그에 따라, 선택하게 된 방식이 Socket을 이용하는 방식이다. 소켓은 실시간 네트워킹과 양방향 통신을 가능하게 해주는 방법 중 하나이다. 통상적으로 HTTP 프로토콜을 이용한다면 클라이언트가 요청을 보낼 때만, 통신이 이루어지지만 웹 소켓은 서로 양방향 통신을 가능하게 한다. 그 종류로는 Polling, Long Polling, Streaming, WebRTC, WebSocket 등등이 있다. 하지만 Websocket을 지원하지 않는 브라우저도 많기 때문에, Socketio라는 기술을 많이 사용한다.

socketio는 실시간 양방향 통신 / 이벤트 기반 통신 / 풀백 메커니즘 / 룸 및 네임스페이스 기능을 지원하고 있다. Socketio는 주로 Node.js 기반의 서버에서 사용되며, 클라이언트는 웹 브라우저에서 JavaScript로 구현된다. 또한 서버와 클라이언트 라이브러리는 다양한 언어와 환경에서 사용할 수 있다. Socketio를 사용하면 간단하게 웹 소켓을 이용한 실시간 양방향 통신을 구현할 수 있다.

지난 번 포스트에서 Flask의 기본적인 실행을 지원하는 코드를 살펴보았다. 그 코드를 socketio방식으로 실행시키는 방법에 대한 정리이다.

from flask import Flask
from flask_socketio import SocketIO, emit

app = Flask(__name__)
socketio = SocketIO(app)

@app.route('/')
def home():
    return 'Hello, World!'
    
@socketio.on('connect')
def test_connect():
    print('Web client connected')
    emit('response', {'data': 'Webcam streaming initiated'})

if __name__ == '__main__':
    socketio.run(app, debug=True)

flask의 app 객체를 생성하고, socketio라는 SocketIO의 객체를 생성하고 Flask 애플리케이션에 연결하면 socketio 객체가 Flask 애플리케이션에 WebSocket 지원을 추가한다.

또한 @socketio.on('connect')을 보면 데코레이터를 통해 소켓을 연결하면 이벤트가 발생할 때마다 통신을 주고 받을 수 있다.

하지만, 물론 socketio자체에만 해당하는 것은 아니지만, Flask에서 지원하는 다양한 모듈들을 이용할 때 버전관리에 대한 부분이 가장 중요하다. flask_socketio 모듈을 사용하는 만큼 flask모듈과 버전이 잘 호환되어야 한다.

일반적으로 버전관리를 진행하는 가장 효율적인 방법은, flask와 flask_socketio를 모두 최신버전으로 맞추는 것이다. 그러나 이렇게 하였을 때 호환이 되지 않을 가능성도 있다. 그럴 때는, 구글과 깃허브에서 flask와 flask_socketio를 사용하여 호환이 되었던 다른 코드들의 버전을 참고하여 그 버전에 맞추고, 다른 모듈들이 그 flask와 어떤 버전에서 호환이 되는지 확인하여 다른 모든 모듈들 또한 그 버전에 일치시키는 방법으로 진행하여야 한다.

또한 다른 모듈들 역시 flask모듈과 버전이 잘 호환되어야 한다.
또한 웹페이지를 만드는 프로젝트를 진행한다고 한다면, 프론트엔드 측의 모듈이나 언어와도 호환이 잘 되어야한다.

다음 내용은 자바스크립트나 파이썬 등 다른 Socketio와 연결될 때의 플라스크 socketio의 버전에 대한 정보이다.

JavaScript Socket.IO versionSocket.IO protocol revisionEngine.IO protocol revisionFlask-SocketIO versionpython-socketio versionpython-engineio version
0.9.x1,21,2Not supportedNot supportedNot supported
1.x and 2.x3,434.x4.x3.x
3.x and 4.x545.x5.x4.x
profile
오늘만 산다.

0개의 댓글