본 문서는 local 환경에서의 VMeta 설치 방법에 대해 기술합니다.
Windows10를 기준으로 작성되었습니다.
최종 수정 : 2022.10.21
Docs Map
자신의 Workspace에 프로젝트 파일을 다운로드합니다. 이 문서에서는 Workspace의 위치를 E:\Workspace로 가정합니다.
C:\ > cd E:/Workspace
E:\Workspace > git clone https://github.com/HSTACK-2022/VideoMetaSystem.git
E:\Workspace > cd VideoMetaSystem
-
Install
Download Link
VMeta는 Python 3.8.9 버전을 사용합니다.
프로젝트 내 라이브러리와의 충돌을 방지하기 위해 3.8.* ~ 3.9.* 버전의 설치를 권장합니다.
-
Setup Virtual Env
Official Docs
프로젝트 실행을 위한 가상환경을 설정합니다.E:\Workspace\VideoMetaSystem > python -m venv venv (venv is your virtualenv name) E:\Workspace\VideoMetaSystem > .\venv\Scripts\activate.bat (venv) E:\Workspace >
VMeta에 사용되는 라이브러리들을 설치합니다.
-
Ffmpeg
Download Link
영상에서의 음원 추출을 위해 Ffmpeg을 설치합니다.
본 프로젝트는 4.4.1 버전을 사용하였으나, 3.* 이상의 버전이면 호환 가능합니다.
${Workspace}\VideoMetaSytem 에 압축 파일을 해제하고, 환경 변수를 등록합니다.
VideoMetaSystem 하위의 구조가 아래와 같아야 합니다.
(venv) E:\Workspace\VideoMetaSystem > dir E 드라이브의 볼륨: 볼륨 일련 번호: E:\Workspace\VideoMetaSystem 디렉터리 2022-10-06 오후 03:24 <DIR> . 2022-10-06 오후 03:24 <DIR> .. 2022-10-06 오후 02:42 6,076 .gitignore 2022-10-06 오후 02:42 <DIR> DJANGO 2022-04-15 오전 05:13 <DIR> ffmpeg-5.0.1-full_build 2022-10-06 오후 02:43 <DIR> FLASK 2022-10-06 오후 02:43 35,823 LICENSE 2022-10-06 오후 02:43 14,735 README.md 2022-10-06 오후 02:43 <DIR> report 2022-10-06 오후 03:11 <DIR> venv 3개 파일 56,634 바이트 7개 디렉터리 12,588,204,032 바이트 남음
-
Tesseract
Official Docs / Download link
OCR을 사용하기 위해 Tesseract를 설치합니다.
공식 문서의 Windows 부분을 참고하여 다운로드 합니다.
install 파일을 다운로드 한 후, 설치 가이드에 따라 설치를 진행합니다.
5의 Set up config.py를 진행하기 위해, Tesseract의 경로를 기억해주시기 바랍니다.
-
Java
Download link
JPype1의 정상적인 사용을 위해 Java를 다운로드합니다.
프로젝트 내 라이브러리와의 충돌을 방지하기 위해 JDK 11의 설치를 권장합니다.
install 파일을 다운로드 한 후, 설치 가이드에 따라 설치를 진행합니다.
이후 시스템 환경 변수를 설정합니다.
만약 JAVA_HOME 환경변수가 없다면 새로 생성합니다.
-
requirements.txt
requirements.txt에 있는 라이브러리들을 설치합니다.
(venv) E:\Workspace\VideoMetaSystem > pip install -r requirements.txt
-
special requirements
subprocess에서의 정상 동작을 위해 특정 라이브러리들은 가상환경이 아닌 곳에도 설치합니다.
(venv) E:\Workspace\VideoMetaSystem > deactivate E:\Workspace\VideoMetaSystem > pip install -r special_requirements.txt
또한, 일부 라이브러리는 git에서 별도로 가져와 사용합니다.
pykospacing : 한국어 전처리에 이용합니다.
background : uploadApi를 비동기적으로 실행하기 위해 사용합니다.(venv) E:\Workspace\VideoMetaSystem > pip install git+https://github.com/haven-jeon/PyKoSpacing.git (venv) E:\Workspace\VideoMetaSystem > pipenv install background
프로젝트 DB를 설정합니다.
컴퓨터에 MySQL이 설치되어 있다고 가정합니다.
-
hstackDB 생성
CREATE DATABASE hstackDB;
-
메타데이터 테이블 생성
use hstackDB; CREATE TABLE videopath ( id int PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), videoAddr VARCHAR(200), audioAddr VARCHAR(200), textAddr VARCHAR(200), imageAddr VARCHAR(200), extracted int, password VARCHAR(10) ); CREATE TABLE metadata ( id int PRIMARY KEY, title VARCHAR(50), presenter VARCHAR(50), category VARCHAR(20), narrative VARCHAR(30), presentation VARCHAR(10), videoLength VARCHAR(10), videoFrame VARCHAR(10), videoType VARCHAR(5), videoSize VARCHAR(10), uploadDate DATE, voiceManRate FLOAT, voiceWomanRate FLOAT, category_percent VARCHAR(30), FOREIGN KEY (id) REFERENCES videopath(id) ); CREATE TABLE keywords ( id int, keyword VARCHAR(10), expose int, sysdef int, percent float, PRIMARY KEY (id, keyword), FOREIGN KEY (id) REFERENCES videopath(id) ); CREATE TABLE timestamp ( id int, time VARCHAR(10), subtitle VARCHAR(100), expose int, sysdef int, PRIMARY KEY (id, time), FOREIGN KEY (id) REFERENCES videopath(id) );
-
모니터링 테이블 생성
use hstackDB; CREATE TABLE SearchSatisfy ( val int PRIMARY KEY, cnt int ); CREATE TABLE upload_time ( id int PRIMARY KEY, time float, size float, FOREIGN KEY (id) REFERENCES videopath(id) ); CREATE TABLE total_search ( tKeyword VARCHAR(50) PRIMARY KEY, cnt int ); CREATE TABLE title_search ( tiKeyword VARCHAR(50) PRIMARY KEY, cnt int ); CREATE TABLE presenter_search ( pKeyword VARCHAR(50) PRIMARY KEY, cnt int ); CREATE TABLE keyword_search ( kKeyword VARCHAR(50) PRIMARY KEY, cnt int );
-
SearchSatisfy를 위한 데이터 추가
INSERT INTO searchSatisfy (val, cnt) VALUE (1, 0); INSERT INTO searchSatisfy (val, cnt) VALUE (2, 0); INSERT INTO searchSatisfy (val, cnt) VALUE (3, 0); INSERT INTO searchSatisfy (val, cnt) VALUE (4, 0); INSERT INTO searchSatisfy (val, cnt) VALUE (5, 0);
자신의 DB와 API Key를 이용해 설정파일을 수정합니다.
- FLASK\hstack\hstack
# in __init__.py # line 15 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:${YOUR_DB_PASSWORD}@localhost/hstackdb"
# in config.py import os import platform from flask_sqlalchemy import SQLAlchemy OS = platform.system() BASE_DIR = os.path.dirname(__file__) UPLOAD_FILE_DIR = os.path.join('.', 'media', 'Uploaded') UPLOAD_LOG_DIR = os.path.join('.', 'logs') STT_API_KEY = { YOUR_ETRI_API_KEY (We need at least 5 Keys.) } db = { 'user' : 'root', 'password' : ${YOUR_DB_PASSWORD}, 'host' : 'localhost', 'port' : 3306, 'database' : 'hstackDB' } DB = SQLAlchemy() DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
- FLASK\hstack\uploadApi
# in __init__.py # line 17 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:${YOUR_DB_PASSWORD}@localhost/hstackdb"
# in config.py import os import platform from flask_sqlalchemy import SQLAlchemy OS = platform.system() BASE_DIR = os.path.dirname(__file__) UPLOAD_FILE_DIR = os.path.join('.', 'media', 'Uploaded') UPLOAD_LOG_DIR = os.path.join('.', 'logs') STT_API_KEY = { YOUR_ETRI_API_KEY (We need at least 5.) } db = { 'user' : 'root', 'password' : ${YOUR DB PASSWORD}, 'host' : 'localhost', 'port' : 3306, 'database' : 'hstackDB' } DB = SQLAlchemy() DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
# in sceneText.py # line 47 pytesseract.pytesseract.tesseract_cmd = ${YOUR_TESSERACT_LOCATION}