Skip to content

Commit 78fa5ee

Browse files
authored
Merge pull request #17 from Growth-and-Start/main
release with modifying replay structure
2 parents 075915a + 7b8112b commit 78fa5ee

2 files changed

Lines changed: 44 additions & 16 deletions

File tree

app.py

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
import numpy as np
1212
import pymysql
1313

14+
import logging
15+
1416
app = Flask(__name__)
1517

18+
logging.basicConfig(level=logging.DEBUG)
19+
logger = logging.getLogger(__name__)
20+
1621
# 환경 변수 로드
1722
load_dotenv(".env")
1823

@@ -21,6 +26,7 @@
2126
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
2227
AWS_REGION = os.getenv("AWS_DEFAULT_REGION")
2328
S3_BUCKET_NAME = os.getenv("S3_BUCKET_NAME")
29+
logger.info("🔥🔥🔥 env 파일 호출됨!")
2430

2531
if not all([AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, S3_BUCKET_NAME]):
2632
raise ValueError("환경 변수가 제대로 설정되지 않았습니다!")
@@ -36,7 +42,7 @@ def get_db_connection():
3642
charset='utf8mb4',
3743
cursorclass=pymysql.cursors.DictCursor
3844
)
39-
45+
logger.info("🔥🔥🔥 DB연결됨!")
4046

4147
# S3 클라이언트 생성
4248
s3_client = boto3.client(
@@ -46,9 +52,12 @@ def get_db_connection():
4652
region_name=AWS_REGION
4753
)
4854

55+
logger.info("🔥🔥🔥 S3 클라이언트 생성됨!")
56+
4957
# 다운로드된 영상을 저장할 폴더 생성
5058
DOWNLOAD_FOLDER = "downloads"
5159
os.makedirs(DOWNLOAD_FOLDER, exist_ok=True)
60+
logger.info("🔥🔥🔥 다운로드할 폴더 준비 완료!")
5261

5362
def delete_s3_file(s3_url):
5463
"""
@@ -61,15 +70,17 @@ def delete_s3_file(s3_url):
6170

6271
# S3 객체 삭제
6372
s3_client.delete_object(Bucket=bucket_name, Key=key)
64-
print(f"✅ S3에서 파일 삭제 성공: {s3_url}")
73+
logger.info(f"✅ S3에서 파일 삭제 성공: {s3_url}")
6574

6675
except Exception as e:
67-
print(f"❌ S3에서 파일 삭제 실패: {s3_url}, 오류: {e}")
76+
logger.info(f"❌ S3에서 파일 삭제 실패: {s3_url}, 오류: {e}")
6877

6978
@app.route("/download", methods=['POST'])
7079
def download_video():
80+
logger.info("🔥🔥🔥 download_video 호출됨!")
7181
data = request.json
7282
video_url = data.get('file_url')
83+
logger.info(f"🔥영상 url:{video_url}")
7384

7485
if not video_url:
7586
return jsonify({"error": "No video_url provided"}), 400
@@ -108,6 +119,7 @@ def perform_similarity_check(video_path, video_id, video_url):
108119
- 한 개 이상의 벡터가 0.8 이상
109120
- 평균 유사도가 0.75 이상
110121
"""
122+
logger.info("🔥SimilarityCheck시작")
111123
if not video_path or not os.path.exists(video_path):
112124
return {"error": "Invalid video path"}
113125

@@ -134,8 +146,10 @@ def perform_similarity_check(video_path, video_id, video_url):
134146
"message": "유사도 검사를 통과하였습니다",
135147
"max_similarity": 0,
136148
"avg_similarity": 0,
137-
"passed":True
149+
"passed":True,
150+
"video_url":video_url
138151
}
152+
logger.info(similarity_result)
139153

140154
notify_springboot(similarity_result)
141155
delete_file(video_path)
@@ -167,22 +181,29 @@ def perform_similarity_check(video_path, video_id, video_url):
167181

168182
similarity_result = {
169183
"max_similarity": max_similarity,
170-
"avg_similarity": avg_similarity
184+
"avg_similarity": avg_similarity,
185+
"video_url":video_url
171186
}
187+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
172188

173189
if max_similarity >= 1.0 or (max_similarity >= 0.9 and avg_similarity >= 0.8):
174190
similarity_result["message"] = "유사도 검사를 실패하였습니다"
191+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
175192
similarity_result["passed"]=False
193+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
176194

177195
# 🔥 가장 유사한 인덱스 찾기
178196
query_vector = query_vectors[0].reshape(1, -1)
179197
faiss.normalize_L2(query_vector)
180198
distances, indices = faiss_index.index.search(query_vector, total_vectors)
181199
most_similar_idx = indices[0][0]
200+
logger.info(f"🔍 가장 유사한 벡터 인덱스: {most_similar_idx}")
182201

183202
# 🔥 해당 벡터의 video_id 조회
184203
similar_video_id = get_video_id_by_faiss_index(most_similar_idx)
204+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
185205
similarity_result["similar_video_id"] = similar_video_id
206+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
186207

187208
# ❌ 로컬 파일 삭제
188209
delete_file(video_path)
@@ -208,6 +229,7 @@ def perform_similarity_check(video_path, video_id, video_url):
208229

209230
# ✅ Spring Boot 서버에 유사도 검사 성공 알림
210231
notify_springboot(similarity_result)
232+
logger.info("🚨similarity_check -> notice spring 전달: {similarity_result}")
211233

212234
return similarity_result
213235

@@ -239,6 +261,7 @@ def delete_file(file_path):
239261

240262

241263
def notify_springboot(similarity_result):
264+
logger.info("🚨nofity_springboot 진입!: {similarity_result}")
242265
"""
243266
Spring Boot 서버에 유사도 검사 결과 전송
244267
:param video_path: 검사한 영상 경로
@@ -249,16 +272,18 @@ def notify_springboot(similarity_result):
249272
"max_similarity": similarity_result["max_similarity"],
250273
"avg_similarity": similarity_result["avg_similarity"],
251274
"message": similarity_result["message"],
252-
"passed": similarity_result["passed"]
275+
"passed": similarity_result["passed"],
276+
"similar_video_id": similarity_result["similar_video_id"],
277+
"video_url":similarity_result["video_url"]
253278
}
254279

255280
try:
256-
print("payload:",payload)
281+
logger.info(f"🚨payload: {payload}")
257282
headers = {'Content-Type': 'application/json'}
258283
response = requests.post(SPRINGBOOT_URL, json=payload, headers=headers)
259-
print(f"📡 Spring Boot 응답: {response.status_code} - {response.text}")
284+
logger.info(f"📡 Spring Boot 응답: {response.status_code} - {response.text}")
260285
except requests.exceptions.RequestException as e:
261-
print(f"🚨 Spring Boot 전송 오류: {e}")
286+
logger.info(f"🚨 Spring Boot 전송 오류: {e}")
262287

263288

264289
#영상 프레임 추출
@@ -453,7 +478,7 @@ def get_next_video_id():
453478
else:
454479
return "1" # 최초 영상일 경우
455480
except Exception as e:
456-
print(f"❌ video_id 생성 오류: {e}")
481+
logger.info(f"❌ video_id 생성 오류: {e}")
457482
return "1"
458483

459484

@@ -465,7 +490,7 @@ def faiss_info():
465490
try:
466491
load_faiss_index()
467492
total_vectors = faiss_index.index.ntotal
468-
print(f"📊 현재 저장된 벡터 개수: {total_vectors}") # ✅ 디버깅 로그 추가
493+
logger.info(f"📊 현재 저장된 벡터 개수: {total_vectors}") # ✅ 디버깅 로그 추가
469494
return jsonify({"message": "FAISS index info", "total_vectors": total_vectors})
470495

471496
except Exception as e:
@@ -599,6 +624,7 @@ def insert_vector_metadata(video_id, start_idx, count):
599624

600625

601626
def get_video_id_by_faiss_index(faiss_index):
627+
logger.info("🔥유사한 영상을 찾으러 옴")
602628
try:
603629
conn = get_db_connection()
604630
with conn.cursor() as cursor:
@@ -608,8 +634,10 @@ def get_video_id_by_faiss_index(faiss_index):
608634
conn.close()
609635

610636
if result:
637+
logger.info(f"✅ video_id 찾음: {result['video_id']}")
611638
return result["video_id"]
612639
else:
640+
logger.info(f"❌ 해당 faiss_index에 해당하는 video_id 없음: {faiss_index}")
613641
return "unknown"
614642
except Exception as e:
615643
print(f"❌ video_id 조회 오류: {e}")

docker/local/docker-compose.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: tokenus-flask
1+
name: tokenus
22

33
services:
44
tokenus-flask:
@@ -17,15 +17,15 @@ services:
1717
ports:
1818
- "5001:5000"
1919
volumes:
20-
- faiss_data:/app/faiss_index
20+
- faiss_volume:/app/faiss_index
2121
networks:
22-
- tokenus_network
22+
- tokenus_shared_network
2323
restart: always
2424

2525
networks:
26-
tokenus_network:
26+
tokenus_shared_network:
2727
external: true
2828

2929

3030
volumes:
31-
faiss_data:
31+
faiss_volume:

0 commit comments

Comments
 (0)