1111import numpy as np
1212import pymysql
1313
14+ import logging
15+
1416app = Flask (__name__ )
1517
18+ logging .basicConfig (level = logging .DEBUG )
19+ logger = logging .getLogger (__name__ )
20+
1621# 환경 변수 로드
1722load_dotenv (".env" )
1823
2126AWS_SECRET_ACCESS_KEY = os .getenv ("AWS_SECRET_ACCESS_KEY" )
2227AWS_REGION = os .getenv ("AWS_DEFAULT_REGION" )
2328S3_BUCKET_NAME = os .getenv ("S3_BUCKET_NAME" )
29+ logger .info ("🔥🔥🔥 env 파일 호출됨!" )
2430
2531if 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 클라이언트 생성
4248s3_client = boto3 .client (
@@ -46,9 +52,12 @@ def get_db_connection():
4652 region_name = AWS_REGION
4753)
4854
55+ logger .info ("🔥🔥🔥 S3 클라이언트 생성됨!" )
56+
4957# 다운로드된 영상을 저장할 폴더 생성
5058DOWNLOAD_FOLDER = "downloads"
5159os .makedirs (DOWNLOAD_FOLDER , exist_ok = True )
60+ logger .info ("🔥🔥🔥 다운로드할 폴더 준비 완료!" )
5261
5362def 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' ])
7079def 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
241263def 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
601626def 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 } " )
0 commit comments