ytcollector 1.1.9__py3-none-any.whl → 1.2.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ytcollector/__init__.py +3 -2
- ytcollector/analyzer.py +2 -2
- ytcollector/config.py +18 -10
- ytcollector/models/license_plate_detector.pt +0 -0
- {ytcollector-1.1.9.dist-info → ytcollector-1.2.3.dist-info}/METADATA +6 -5
- ytcollector-1.2.3.dist-info/RECORD +13 -0
- ytcollector-1.1.9.dist-info/RECORD +0 -12
- {ytcollector-1.1.9.dist-info → ytcollector-1.2.3.dist-info}/WHEEL +0 -0
- {ytcollector-1.1.9.dist-info → ytcollector-1.2.3.dist-info}/entry_points.txt +0 -0
- {ytcollector-1.1.9.dist-info → ytcollector-1.2.3.dist-info}/top_level.txt +0 -0
ytcollector/__init__.py
CHANGED
|
@@ -17,12 +17,12 @@ CLI 사용 예시:
|
|
|
17
17
|
ytc -c face text --fast
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
from .config import CATEGORY_NAMES, CATEGORY_QUERIES, USER_AGENTS, LICENSE_PLATE_PATTERNS
|
|
20
|
+
from .config import CATEGORY_NAMES, CATEGORY_QUERIES, USER_AGENTS, LICENSE_PLATE_PATTERNS, LICENSE_PLATE_MODEL_PATH
|
|
21
21
|
from .analyzer import VideoAnalyzer, check_dependencies
|
|
22
22
|
from .downloader import YouTubeDownloader
|
|
23
23
|
from .cli import run, main as cli_main
|
|
24
24
|
|
|
25
|
-
__version__ = "1.
|
|
25
|
+
__version__ = "1.2.3"
|
|
26
26
|
__all__ = [
|
|
27
27
|
# 주요 클래스
|
|
28
28
|
"VideoAnalyzer",
|
|
@@ -32,6 +32,7 @@ __all__ = [
|
|
|
32
32
|
"CATEGORY_QUERIES",
|
|
33
33
|
"USER_AGENTS",
|
|
34
34
|
"LICENSE_PLATE_PATTERNS",
|
|
35
|
+
"LICENSE_PLATE_MODEL_PATH",
|
|
35
36
|
# 유틸리티
|
|
36
37
|
"check_dependencies",
|
|
37
38
|
"run",
|
ytcollector/analyzer.py
CHANGED
|
@@ -32,7 +32,7 @@ try:
|
|
|
32
32
|
except ImportError:
|
|
33
33
|
USE_GPU = False
|
|
34
34
|
|
|
35
|
-
from .config import LICENSE_PLATE_PATTERNS,
|
|
35
|
+
from .config import LICENSE_PLATE_PATTERNS, LICENSE_PLATE_MODEL_PATH, YOLO_CONFIDENCE
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class VideoAnalyzer:
|
|
@@ -65,7 +65,7 @@ class VideoAnalyzer:
|
|
|
65
65
|
if self.yolo_model is None:
|
|
66
66
|
device = "cuda" if USE_GPU else "cpu"
|
|
67
67
|
print(f" YOLO 모델 로딩 중... (Device: {device})")
|
|
68
|
-
self.yolo_model = YOLO(
|
|
68
|
+
self.yolo_model = YOLO(str(LICENSE_PLATE_MODEL_PATH))
|
|
69
69
|
self.yolo_model.to(device)
|
|
70
70
|
|
|
71
71
|
def extract_frames(self, video_path, num_frames=10):
|
ytcollector/config.py
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
# 설정 상수
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
# 모델 경로 (패키지 내부)
|
|
5
|
+
MODEL_DIR = Path(__file__).parent / "models"
|
|
6
|
+
LICENSE_PLATE_MODEL_PATH = MODEL_DIR / "license_plate_detector.pt"
|
|
2
7
|
|
|
3
8
|
USER_AGENTS = [
|
|
4
9
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
@@ -57,14 +62,18 @@ CATEGORY_NAMES = {
|
|
|
57
62
|
# 카테고리별 제외 키워드 (제목에 포함 시 스킵)
|
|
58
63
|
BLACKLIST_KEYWORDS = {
|
|
59
64
|
'tattoo': [
|
|
60
|
-
|
|
61
|
-
"눈썹
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
"
|
|
65
|
+
# 반영구 화장 (Semi-permanent makeup)
|
|
66
|
+
"눈썹", "입술", "두피", "헤어라인", "아이라인", "구렛나룻",
|
|
67
|
+
"반영구", "영구화장", "립타투", "헤어타투", "SMP",
|
|
68
|
+
"마이크로블레이딩", "microblading", "엠보", "콤보", "PMU",
|
|
69
|
+
# 임시/가짜 타투
|
|
70
|
+
"헤나", "henna", "스티커", "페이크", "fake", "임시", "붙이는",
|
|
71
|
+
# 타투 제거
|
|
72
|
+
"제거", "레이저", "지우기", "removal",
|
|
73
|
+
# 도안/디자인만 (실제 시술 아님)
|
|
74
|
+
"도안", "디자인", "스케치", "드로잉", "그리기",
|
|
75
|
+
# 의료/미용 시술
|
|
76
|
+
"유두", "유륜", "흉터", "점",
|
|
68
77
|
],
|
|
69
78
|
'face': [],
|
|
70
79
|
'license_plate': [],
|
|
@@ -72,8 +81,7 @@ BLACKLIST_KEYWORDS = {
|
|
|
72
81
|
}
|
|
73
82
|
|
|
74
83
|
# YOLO 설정
|
|
75
|
-
|
|
76
|
-
YOLO_CONFIDENCE = 0.5 # 오탐지 방지를 위해 신뢰도 상향
|
|
84
|
+
YOLO_CONFIDENCE = 0.5 # 오탐지 방지를 위해 신뢰도 상향
|
|
77
85
|
|
|
78
86
|
# 번호판 정규식 패턴 (한국 자동차 번호판 중심)
|
|
79
87
|
LICENSE_PLATE_PATTERNS = [
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ytcollector
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: YouTube 콘텐츠 수집기 - 얼굴, 번호판, 타투, 텍스트 감지
|
|
5
5
|
Author: YTCollector Team
|
|
6
6
|
License: MIT
|
|
@@ -44,7 +44,7 @@ Requires-Dist: ytcollector[analysis,dev]; extra == "all"
|
|
|
44
44
|
pip install yt-dlp
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
### 분석 기능용 패키지 (권장 - v1.
|
|
47
|
+
### 분석 기능용 패키지 (권장 - v1.2.0+)
|
|
48
48
|
|
|
49
49
|
분석 기능을 원활하게 사용하려면 아래 패키지들이 필요합니다. GPU(CUDA)가 설치된 경우 자동으로 가속이 활성화됩니다.
|
|
50
50
|
|
|
@@ -192,9 +192,10 @@ https://www.youtube.com/watch?v=aqz-KE-bpKQ, 00:10, sample_task
|
|
|
192
192
|
| 번호판 | YOLOv8 전용 모델 + OCR | v1.1.9: 번호판 전용 학습 모델 + 한국 번호판 패턴 매칭 |
|
|
193
193
|
| 타투 | OpenCV HSV 분석 | 피부 영역 내 잉크 패턴 감지 |
|
|
194
194
|
|
|
195
|
-
### 주요 최적화 (v1.1.5~1.
|
|
196
|
-
-
|
|
197
|
-
-
|
|
195
|
+
### 주요 최적화 (v1.1.5~1.2.0)
|
|
196
|
+
- **자막 영역 필터링** (v1.2.0): 화면 하단 60%~95% 영역만 자막으로 인식, 상단 로고/워터마크 제외
|
|
197
|
+
- **번호판 전용 모델** (v1.1.9): YOLO-World → 번호판 전용 학습 모델로 교체 (감지율 향상, 모델 크기 27MB→6MB)
|
|
198
|
+
- **오탐지 방지**: YOLO 감지 + OCR 패턴 매칭 둘 다 만족해야 번호판 판정, ROI 크기 필터링 추가
|
|
198
199
|
- **ROI 기반 감지**: 전체 화면이 아닌 YOLO가 지정한 영역만 OCR하여 속도와 정확도 향상
|
|
199
200
|
- **GPU 가속 지원**: CUDA 사용 가능 시 YOLO 및 OCR 자동 가속
|
|
200
201
|
- **로그 기반 중복 방지**: `youtube_url_*.txt` 기록을 참조하여 중복 분석 방지
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
ytcollector/__init__.py,sha256=P4AIOCG2glB95wwN9QhUuF0HsgVxy6JyjTvkZKuQQXg,1152
|
|
2
|
+
ytcollector/analyzer.py,sha256=zgtcw6pSCzJwa4NJ04XFJlLaoRt8CwXGxwuL9o8eduM,14414
|
|
3
|
+
ytcollector/cli.py,sha256=aHF4EuQRPLKh65lnkI_dZ0ResztlVjpHlS5iHfzmpig,5577
|
|
4
|
+
ytcollector/config.py,sha256=lpzYaODbOErUni_oAJ_zU0dpIQzy8gJDz-Cisrqf1tE,3646
|
|
5
|
+
ytcollector/dataset_builder.py,sha256=nfArEwszoCln48n3T0Eff_4OOaYv8FF0YH8cARBGMWQ,2608
|
|
6
|
+
ytcollector/downloader.py,sha256=TeC6agUmSPHZSZ9jdoc42i8i_NobzTEkoRtAIgW80kI,14544
|
|
7
|
+
ytcollector/utils.py,sha256=6XDif-e3GbMHmUvTsBT0YblxNxYnS-2I8HnmjMBZs-M,4254
|
|
8
|
+
ytcollector/models/license_plate_detector.pt,sha256=jsOyVKbIdhDwN6kJV0Ysr6EanAMiTjOijGodGsKsUbA,6241454
|
|
9
|
+
ytcollector-1.2.3.dist-info/METADATA,sha256=u3Xz0naQgl9F-ZFOM7vw4fu25KxR28KfOPuz6eTzGkI,7319
|
|
10
|
+
ytcollector-1.2.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
11
|
+
ytcollector-1.2.3.dist-info/entry_points.txt,sha256=waiVuSJJYt-6_DAal-T4JkHgejo7wKYLdKrEI7tZ-ms,127
|
|
12
|
+
ytcollector-1.2.3.dist-info/top_level.txt,sha256=wozNyCUm0eMOm-9U81yTql6oGaM2O5rWVBXDb93zzyQ,12
|
|
13
|
+
ytcollector-1.2.3.dist-info/RECORD,,
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
ytcollector/__init__.py,sha256=EaxBP_0Fv0LEFdg067uZxBrQHwOKGX8u08Y4b5uF1-Q,1094
|
|
2
|
-
ytcollector/analyzer.py,sha256=7VJt4chc25HsEz8OwBDZhTz_8LnkpgSBM6mJKQpIUls,14391
|
|
3
|
-
ytcollector/cli.py,sha256=aHF4EuQRPLKh65lnkI_dZ0ResztlVjpHlS5iHfzmpig,5577
|
|
4
|
-
ytcollector/config.py,sha256=HmcFqMV1Z3kClnGKYi0q9cRZIXMRPAxIEI8cggatfrU,3199
|
|
5
|
-
ytcollector/dataset_builder.py,sha256=nfArEwszoCln48n3T0Eff_4OOaYv8FF0YH8cARBGMWQ,2608
|
|
6
|
-
ytcollector/downloader.py,sha256=TeC6agUmSPHZSZ9jdoc42i8i_NobzTEkoRtAIgW80kI,14544
|
|
7
|
-
ytcollector/utils.py,sha256=6XDif-e3GbMHmUvTsBT0YblxNxYnS-2I8HnmjMBZs-M,4254
|
|
8
|
-
ytcollector-1.1.9.dist-info/METADATA,sha256=WQIup61B02yB9ddtOaFGtlDYoV4nJVRD-vvVI_sVjc0,7208
|
|
9
|
-
ytcollector-1.1.9.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
10
|
-
ytcollector-1.1.9.dist-info/entry_points.txt,sha256=waiVuSJJYt-6_DAal-T4JkHgejo7wKYLdKrEI7tZ-ms,127
|
|
11
|
-
ytcollector-1.1.9.dist-info/top_level.txt,sha256=wozNyCUm0eMOm-9U81yTql6oGaM2O5rWVBXDb93zzyQ,12
|
|
12
|
-
ytcollector-1.1.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|