video-analyser 0.5.17__tar.gz
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.
- video_analyser-0.5.17/.gitignore +226 -0
- video_analyser-0.5.17/PKG-INFO +219 -0
- video_analyser-0.5.17/README.md +161 -0
- video_analyser-0.5.17/config/config.yaml +73 -0
- video_analyser-0.5.17/config/dev.yaml +35 -0
- video_analyser-0.5.17/docs/DEVELOPMENT.md +196 -0
- video_analyser-0.5.17/docs/MODULAR_ASSESSMENT_PLATFORM_ARCHITECTURE.md +1001 -0
- video_analyser-0.5.17/docs/SAMPLE_VIDEOS.md +81 -0
- video_analyser-0.5.17/docs/ai-dev-tasks/1-create-prd.mdc +61 -0
- video_analyser-0.5.17/docs/ai-dev-tasks/2-generate-tasks.mdc +64 -0
- video_analyser-0.5.17/docs/ai-dev-tasks/3-process-task-list.mdc +38 -0
- video_analyser-0.5.17/docs/analysis-modules-production-readiness.md +649 -0
- video_analyser-0.5.17/docs/mock-gradio/gradio-mvp-example.py +269 -0
- video_analyser-0.5.17/docs/module-integration-quick-reference.md +321 -0
- video_analyser-0.5.17/docs/rubric-guide.md +619 -0
- video_analyser-0.5.17/docs/video-analysis-app-plan.md +828 -0
- video_analyser-0.5.17/pyproject.toml +188 -0
- video_analyser-0.5.17/src/video_lens/__init__.py +5 -0
- video_analyser-0.5.17/src/video_lens/analysis/__init__.py +1 -0
- video_analyser-0.5.17/src/video_lens/analysis/api_image_captioner.py +531 -0
- video_analyser-0.5.17/src/video_lens/analysis/default_rubrics.py +1068 -0
- video_analyser-0.5.17/src/video_lens/analysis/error_handling.py +427 -0
- video_analyser-0.5.17/src/video_lens/analysis/frame_analyzer.py +552 -0
- video_analyser-0.5.17/src/video_lens/analysis/image_captioner.py +579 -0
- video_analyser-0.5.17/src/video_lens/analysis/object_detector.py +613 -0
- video_analyser-0.5.17/src/video_lens/analysis/ocr_detector.py +585 -0
- video_analyser-0.5.17/src/video_lens/analysis/rubric_system.py +445 -0
- video_analyser-0.5.17/src/video_lens/analysis/speaker_diarization.py +376 -0
- video_analyser-0.5.17/src/video_lens/analysis/speech_analyzer.py +1493 -0
- video_analyser-0.5.17/src/video_lens/analysis/transcriber.py +1131 -0
- video_analyser-0.5.17/src/video_lens/analysis/visual_analyzer.py +1467 -0
- video_analyser-0.5.17/src/video_lens/cli.py +1321 -0
- video_analyser-0.5.17/src/video_lens/core/__init__.py +1 -0
- video_analyser-0.5.17/src/video_lens/core/audio_extractor.py +464 -0
- video_analyser-0.5.17/src/video_lens/core/exceptions.py +362 -0
- video_analyser-0.5.17/src/video_lens/core/pipeline_coordinator.py +709 -0
- video_analyser-0.5.17/src/video_lens/core/progress_tracker.py +467 -0
- video_analyser-0.5.17/src/video_lens/core/scene_detector.py +565 -0
- video_analyser-0.5.17/src/video_lens/core/video_processor.py +614 -0
- video_analyser-0.5.17/src/video_lens/interface/__init__.py +5 -0
- video_analyser-0.5.17/src/video_lens/interface/gradio_app.py +269 -0
- video_analyser-0.5.17/src/video_lens/reports/__init__.py +1 -0
- video_analyser-0.5.17/src/video_lens/reports/assessment_integration.py +198 -0
- video_analyser-0.5.17/src/video_lens/reports/assessment_report.py +204 -0
- video_analyser-0.5.17/src/video_lens/reports/assessment_session.py +339 -0
- video_analyser-0.5.17/src/video_lens/reports/assessment_storage.py +240 -0
- video_analyser-0.5.17/src/video_lens/reports/grading_sheet_renderer.py +531 -0
- video_analyser-0.5.17/src/video_lens/reports/html_renderer.py +215 -0
- video_analyser-0.5.17/src/video_lens/reports/report_generator.py +699 -0
- video_analyser-0.5.17/src/video_lens/utils/__init__.py +1 -0
- video_analyser-0.5.17/src/video_lens/utils/api_keys.py +210 -0
- video_analyser-0.5.17/src/video_lens/utils/config.py +623 -0
- video_analyser-0.5.17/src/video_lens/utils/progress_display.py +234 -0
- video_analyser-0.5.17/tests/__init__.py +1 -0
- video_analyser-0.5.17/tests/analysis/__init__.py +1 -0
- video_analyser-0.5.17/tests/analysis/test_error_handling.py +387 -0
- video_analyser-0.5.17/tests/analysis/test_frame_analyzer.py +731 -0
- video_analyser-0.5.17/tests/analysis/test_ocr_detector.py +674 -0
- video_analyser-0.5.17/tests/analysis/test_rubric_system.py +367 -0
- video_analyser-0.5.17/tests/analysis/test_speaker_diarization.py +352 -0
- video_analyser-0.5.17/tests/analysis/test_visual_analyzer.py +1078 -0
- video_analyser-0.5.17/tests/analysis/test_visual_analyzer_object_detection.py +384 -0
- video_analyser-0.5.17/tests/analysis/test_visual_quality_reporting.py +553 -0
- video_analyser-0.5.17/tests/conftest.py +219 -0
- video_analyser-0.5.17/tests/core/test_audio_extraction_enhanced.py +651 -0
- video_analyser-0.5.17/tests/core/test_audio_extractor.py +461 -0
- video_analyser-0.5.17/tests/core/test_error_handling.py +520 -0
- video_analyser-0.5.17/tests/core/test_integration_frame_scene.py +230 -0
- video_analyser-0.5.17/tests/core/test_progress_tracker.py +616 -0
- video_analyser-0.5.17/tests/reports/__init__.py +1 -0
- video_analyser-0.5.17/tests/reports/test_assessment_integration.py +356 -0
- video_analyser-0.5.17/tests/reports/test_assessment_report.py +357 -0
- video_analyser-0.5.17/tests/reports/test_assessment_session.py +332 -0
- video_analyser-0.5.17/tests/reports/test_assessment_storage.py +260 -0
- video_analyser-0.5.17/tests/reports/test_report_generator.py +598 -0
- video_analyser-0.5.17/tests/test_example.py +54 -0
- video_analyser-0.5.17/tests/utils/test_config.py +443 -0
- video_analyser-0.5.17/tests/utils/video_helpers.py +262 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# poetry
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
102
|
+
#poetry.lock
|
|
103
|
+
|
|
104
|
+
# pdm
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
106
|
+
#pdm.lock
|
|
107
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
108
|
+
# in version control.
|
|
109
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
110
|
+
.pdm.toml
|
|
111
|
+
|
|
112
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
113
|
+
__pypackages__/
|
|
114
|
+
|
|
115
|
+
# Celery stuff
|
|
116
|
+
celerybeat-schedule
|
|
117
|
+
celerybeat.pid
|
|
118
|
+
|
|
119
|
+
# SageMath parsed files
|
|
120
|
+
*.sage.py
|
|
121
|
+
|
|
122
|
+
# Environments
|
|
123
|
+
.env
|
|
124
|
+
.venv
|
|
125
|
+
env/
|
|
126
|
+
venv/
|
|
127
|
+
ENV/
|
|
128
|
+
env.bak/
|
|
129
|
+
venv.bak/
|
|
130
|
+
|
|
131
|
+
# Spyder project settings
|
|
132
|
+
.spyderproject
|
|
133
|
+
.spyproject
|
|
134
|
+
|
|
135
|
+
# Rope project settings
|
|
136
|
+
.ropeproject
|
|
137
|
+
|
|
138
|
+
# mkdocs documentation
|
|
139
|
+
/site
|
|
140
|
+
|
|
141
|
+
# mypy
|
|
142
|
+
.mypy_cache/
|
|
143
|
+
.dmypy.json
|
|
144
|
+
dmypy.json
|
|
145
|
+
|
|
146
|
+
# Pyre type checker
|
|
147
|
+
.pyre/
|
|
148
|
+
|
|
149
|
+
# pytype static type analyzer
|
|
150
|
+
.pytype/
|
|
151
|
+
|
|
152
|
+
# Cython debug symbols
|
|
153
|
+
cython_debug/
|
|
154
|
+
|
|
155
|
+
# PyCharm
|
|
156
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
157
|
+
# be added to the global gitignore or merged into this project gitignore
|
|
158
|
+
.idea/
|
|
159
|
+
|
|
160
|
+
# VS Code
|
|
161
|
+
.vscode/
|
|
162
|
+
|
|
163
|
+
# Project specific ignores
|
|
164
|
+
# Temporary files and processing artifacts
|
|
165
|
+
temp/
|
|
166
|
+
tmp/
|
|
167
|
+
*.tmp
|
|
168
|
+
*.temp
|
|
169
|
+
|
|
170
|
+
# Model files (often large)
|
|
171
|
+
models/
|
|
172
|
+
*.pkl
|
|
173
|
+
*.model
|
|
174
|
+
*.bin
|
|
175
|
+
*.safetensors
|
|
176
|
+
|
|
177
|
+
# Video/audio files for testing
|
|
178
|
+
*.mp4
|
|
179
|
+
*.avi
|
|
180
|
+
*.mov
|
|
181
|
+
*.webm
|
|
182
|
+
*.wav
|
|
183
|
+
*.mp3
|
|
184
|
+
*.m4a
|
|
185
|
+
!tests/fixtures/sample* # Keep small test samples
|
|
186
|
+
|
|
187
|
+
# Development samples (not committed)
|
|
188
|
+
samples/
|
|
189
|
+
|
|
190
|
+
# Generated reports and outputs
|
|
191
|
+
output/
|
|
192
|
+
/reports/ # Only ignore reports/ in root, not src/deep_brief/reports/
|
|
193
|
+
*.html
|
|
194
|
+
*.pdf
|
|
195
|
+
!src/deep_brief/reports/templates/*.html # Keep template files
|
|
196
|
+
!src/deep_brief/**/*.html # Keep source code HTML files
|
|
197
|
+
!src/deep_brief/**/*.py # Keep all Python source files
|
|
198
|
+
|
|
199
|
+
# Cache directories
|
|
200
|
+
.cache/
|
|
201
|
+
cache/
|
|
202
|
+
|
|
203
|
+
# OS specific
|
|
204
|
+
.DS_Store
|
|
205
|
+
.DS_Store?
|
|
206
|
+
._*
|
|
207
|
+
.Spotlight-V100
|
|
208
|
+
.Trashes
|
|
209
|
+
ehthumbs.db
|
|
210
|
+
Thumbs.db
|
|
211
|
+
|
|
212
|
+
# AI/ML specific
|
|
213
|
+
wandb/
|
|
214
|
+
mlruns/
|
|
215
|
+
.neptune/
|
|
216
|
+
lightning_logs/
|
|
217
|
+
|
|
218
|
+
# Gradio temporary files
|
|
219
|
+
gradio_cached_examples/
|
|
220
|
+
flagged/
|
|
221
|
+
|
|
222
|
+
# Configuration with secrets
|
|
223
|
+
.env.local
|
|
224
|
+
.env.production
|
|
225
|
+
config/secrets.yaml
|
|
226
|
+
config/production.yaml
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: video-analyser
|
|
3
|
+
Version: 0.5.17
|
|
4
|
+
Summary: Video analysis lens for the modular assessment platform - extracts frames, transcripts, and quality metrics
|
|
5
|
+
Author-email: Michael Borck <michael@example.com>
|
|
6
|
+
Classifier: Development Status :: 3 - Alpha
|
|
7
|
+
Classifier: Intended Audience :: Education
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
|
+
Requires-Dist: anthropic>=0.7.0
|
|
14
|
+
Requires-Dist: faster-whisper>=0.10.0
|
|
15
|
+
Requires-Dist: ffmpeg-python>=0.2.0
|
|
16
|
+
Requires-Dist: gradio>=4.8.0
|
|
17
|
+
Requires-Dist: jinja2>=3.1.0
|
|
18
|
+
Requires-Dist: numpy>=1.24.0
|
|
19
|
+
Requires-Dist: opencv-python>=4.8.0
|
|
20
|
+
Requires-Dist: pandas>=2.1.0
|
|
21
|
+
Requires-Dist: pillow>=10.1.0
|
|
22
|
+
Requires-Dist: pydantic-settings>=2.1.0
|
|
23
|
+
Requires-Dist: pydantic>=2.5.0
|
|
24
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
27
|
+
Requires-Dist: rich>=13.7.0
|
|
28
|
+
Requires-Dist: spacy>=3.7.0
|
|
29
|
+
Requires-Dist: torch>=2.2.0
|
|
30
|
+
Requires-Dist: torchvision>=0.17.0
|
|
31
|
+
Requires-Dist: tqdm>=4.66.0
|
|
32
|
+
Requires-Dist: transformers>=4.36.0
|
|
33
|
+
Requires-Dist: typer>=0.9.0
|
|
34
|
+
Requires-Dist: weasyprint>=60.0
|
|
35
|
+
Provides-Extra: api
|
|
36
|
+
Requires-Dist: google-generativeai>=0.3.0; extra == 'api'
|
|
37
|
+
Requires-Dist: openai>=1.12.0; extra == 'api'
|
|
38
|
+
Provides-Extra: audio
|
|
39
|
+
Requires-Dist: speech-analyser>=0.1.0; extra == 'audio'
|
|
40
|
+
Provides-Extra: build
|
|
41
|
+
Requires-Dist: build>=1.0.0; extra == 'build'
|
|
42
|
+
Requires-Dist: twine>=4.0.0; extra == 'build'
|
|
43
|
+
Provides-Extra: dev
|
|
44
|
+
Requires-Dist: basedpyright>=1.8.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: pytest>=7.4.0; extra == 'dev'
|
|
49
|
+
Requires-Dist: ruff>=0.1.6; extra == 'dev'
|
|
50
|
+
Requires-Dist: types-pillow>=10.2.0; extra == 'dev'
|
|
51
|
+
Requires-Dist: types-pyyaml>=6.0.12; extra == 'dev'
|
|
52
|
+
Requires-Dist: types-requests>=2.31.0; extra == 'dev'
|
|
53
|
+
Requires-Dist: types-setuptools>=80.9.0; extra == 'dev'
|
|
54
|
+
Provides-Extra: gpu
|
|
55
|
+
Requires-Dist: torch>=2.2.0; extra == 'gpu'
|
|
56
|
+
Requires-Dist: torchvision>=0.17.0; extra == 'gpu'
|
|
57
|
+
Description-Content-Type: text/markdown
|
|
58
|
+
|
|
59
|
+
# Video Lens
|
|
60
|
+
|
|
61
|
+
[](https://pypi.org/project/video-lens/)
|
|
62
|
+
[](https://www.python.org/downloads/)
|
|
63
|
+
[](https://opensource.org/licenses/MIT)
|
|
64
|
+
|
|
65
|
+
A video analysis application that helps students, educators, and professionals analyze presentations by combining speech transcription, visual analysis, and AI-powered feedback.
|
|
66
|
+
|
|
67
|
+
> **Status**: Phase 1 MVP in development. Core infrastructure complete, video processing pipeline in progress.
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
- **Video Processing**: Support for MP4, MOV, AVI, and WebM formats
|
|
72
|
+
- **Speech Analysis**: Automatic transcription with speaking rate and filler word detection
|
|
73
|
+
- **Visual Analysis**: Scene detection with frame captioning and quality assessment
|
|
74
|
+
- **AI Feedback**: Actionable insights and recommendations for improvement
|
|
75
|
+
- **Professional Reports**: Interactive HTML and structured JSON outputs
|
|
76
|
+
|
|
77
|
+
## Installation
|
|
78
|
+
|
|
79
|
+
### Prerequisites
|
|
80
|
+
|
|
81
|
+
- Python 3.11 or higher
|
|
82
|
+
- ffmpeg (for video processing)
|
|
83
|
+
|
|
84
|
+
### Option 1: Install from PyPI (recommended for users)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install video-lens
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Option 2: Install from source (for development)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Install uv (fast Python package manager)
|
|
94
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
95
|
+
|
|
96
|
+
# Clone the repository
|
|
97
|
+
git clone https://github.com/michael-borck/video-lens.git
|
|
98
|
+
cd video-lens
|
|
99
|
+
|
|
100
|
+
# Create virtual environment and install
|
|
101
|
+
uv venv
|
|
102
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
103
|
+
uv pip install -e ".[dev]"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Installing ffmpeg
|
|
107
|
+
|
|
108
|
+
**macOS:**
|
|
109
|
+
```bash
|
|
110
|
+
brew install ffmpeg
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Ubuntu/Debian:**
|
|
114
|
+
```bash
|
|
115
|
+
sudo apt update && sudo apt install ffmpeg
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Windows:**
|
|
119
|
+
Download from [https://ffmpeg.org/download.html](https://ffmpeg.org/download.html)
|
|
120
|
+
|
|
121
|
+
## Quick Start
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Show available commands
|
|
125
|
+
video-lens --help
|
|
126
|
+
|
|
127
|
+
# Check version
|
|
128
|
+
video-lens version
|
|
129
|
+
|
|
130
|
+
# Launch web interface (coming soon)
|
|
131
|
+
video-lens analyze
|
|
132
|
+
|
|
133
|
+
# Analyze a specific video (CLI mode - coming soon)
|
|
134
|
+
video-lens analyze video.mp4 --output ./reports
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Current Status**: The CLI framework is complete. Video processing features are in active development.
|
|
138
|
+
|
|
139
|
+
## Development
|
|
140
|
+
|
|
141
|
+
This project uses modern Python tooling and follows strict quality standards:
|
|
142
|
+
|
|
143
|
+
- **uv** for fast package management
|
|
144
|
+
- **ruff** for formatting and linting
|
|
145
|
+
- **basedpyright** for strict type checking
|
|
146
|
+
- **pytest** for testing with coverage
|
|
147
|
+
- **pyproject.toml** for all configuration (no setup.py)
|
|
148
|
+
|
|
149
|
+
### Development Setup
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Clone and setup
|
|
153
|
+
git clone https://github.com/michael-borck/video-lens.git
|
|
154
|
+
cd video-lens
|
|
155
|
+
uv venv && source .venv/bin/activate
|
|
156
|
+
uv pip install -e ".[dev]"
|
|
157
|
+
|
|
158
|
+
# Verify setup
|
|
159
|
+
video-lens --help
|
|
160
|
+
pytest -v
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Code Quality Standards
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Format code
|
|
167
|
+
ruff format .
|
|
168
|
+
|
|
169
|
+
# Lint code
|
|
170
|
+
ruff check .
|
|
171
|
+
|
|
172
|
+
# Type checking (strict mode)
|
|
173
|
+
basedpyright
|
|
174
|
+
|
|
175
|
+
# Run tests with coverage
|
|
176
|
+
pytest -v
|
|
177
|
+
|
|
178
|
+
# Run all quality checks
|
|
179
|
+
ruff format . && ruff check . && basedpyright && pytest -v
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Project Structure
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
src/video_lens/ # Main package
|
|
186
|
+
├── core/ # Video processing pipeline
|
|
187
|
+
├── analysis/ # Speech and visual analysis
|
|
188
|
+
├── reports/ # Report generation
|
|
189
|
+
├── interface/ # Gradio web interface
|
|
190
|
+
└── utils/ # Configuration and utilities
|
|
191
|
+
|
|
192
|
+
tests/ # Test suite (mirrors src structure)
|
|
193
|
+
docs/ # Documentation and specs
|
|
194
|
+
tasks/ # Development task tracking
|
|
195
|
+
config/ # Configuration files
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Current Development Phase
|
|
199
|
+
|
|
200
|
+
- ✅ **Phase 0**: Project setup, packaging, PyPI publication
|
|
201
|
+
- 🚧 **Phase 1**: Core video processing pipeline (in progress)
|
|
202
|
+
- 📋 **Phase 2**: Enhanced analysis features
|
|
203
|
+
- 📋 **Phase 3**: Advanced AI features
|
|
204
|
+
|
|
205
|
+
See `tasks/tasks-prd-phase1-mvp.md` for detailed task tracking.
|
|
206
|
+
|
|
207
|
+
## Links
|
|
208
|
+
|
|
209
|
+
- **PyPI**: https://pypi.org/project/video-lens/
|
|
210
|
+
- **GitHub**: https://github.com/michael-borck/video-lens
|
|
211
|
+
- **Documentation**: Coming soon
|
|
212
|
+
|
|
213
|
+
## License
|
|
214
|
+
|
|
215
|
+
MIT License - see LICENSE file for details.
|
|
216
|
+
|
|
217
|
+
## Contributing
|
|
218
|
+
|
|
219
|
+
Contributions are welcome! Please read the development guidelines in `CLAUDE.md` for our coding standards and toolchain requirements.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Video Lens
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/video-lens/)
|
|
4
|
+
[](https://www.python.org/downloads/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
A video analysis application that helps students, educators, and professionals analyze presentations by combining speech transcription, visual analysis, and AI-powered feedback.
|
|
8
|
+
|
|
9
|
+
> **Status**: Phase 1 MVP in development. Core infrastructure complete, video processing pipeline in progress.
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- **Video Processing**: Support for MP4, MOV, AVI, and WebM formats
|
|
14
|
+
- **Speech Analysis**: Automatic transcription with speaking rate and filler word detection
|
|
15
|
+
- **Visual Analysis**: Scene detection with frame captioning and quality assessment
|
|
16
|
+
- **AI Feedback**: Actionable insights and recommendations for improvement
|
|
17
|
+
- **Professional Reports**: Interactive HTML and structured JSON outputs
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
### Prerequisites
|
|
22
|
+
|
|
23
|
+
- Python 3.11 or higher
|
|
24
|
+
- ffmpeg (for video processing)
|
|
25
|
+
|
|
26
|
+
### Option 1: Install from PyPI (recommended for users)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install video-lens
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Option 2: Install from source (for development)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Install uv (fast Python package manager)
|
|
36
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
37
|
+
|
|
38
|
+
# Clone the repository
|
|
39
|
+
git clone https://github.com/michael-borck/video-lens.git
|
|
40
|
+
cd video-lens
|
|
41
|
+
|
|
42
|
+
# Create virtual environment and install
|
|
43
|
+
uv venv
|
|
44
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
45
|
+
uv pip install -e ".[dev]"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Installing ffmpeg
|
|
49
|
+
|
|
50
|
+
**macOS:**
|
|
51
|
+
```bash
|
|
52
|
+
brew install ffmpeg
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Ubuntu/Debian:**
|
|
56
|
+
```bash
|
|
57
|
+
sudo apt update && sudo apt install ffmpeg
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Windows:**
|
|
61
|
+
Download from [https://ffmpeg.org/download.html](https://ffmpeg.org/download.html)
|
|
62
|
+
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Show available commands
|
|
67
|
+
video-lens --help
|
|
68
|
+
|
|
69
|
+
# Check version
|
|
70
|
+
video-lens version
|
|
71
|
+
|
|
72
|
+
# Launch web interface (coming soon)
|
|
73
|
+
video-lens analyze
|
|
74
|
+
|
|
75
|
+
# Analyze a specific video (CLI mode - coming soon)
|
|
76
|
+
video-lens analyze video.mp4 --output ./reports
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Current Status**: The CLI framework is complete. Video processing features are in active development.
|
|
80
|
+
|
|
81
|
+
## Development
|
|
82
|
+
|
|
83
|
+
This project uses modern Python tooling and follows strict quality standards:
|
|
84
|
+
|
|
85
|
+
- **uv** for fast package management
|
|
86
|
+
- **ruff** for formatting and linting
|
|
87
|
+
- **basedpyright** for strict type checking
|
|
88
|
+
- **pytest** for testing with coverage
|
|
89
|
+
- **pyproject.toml** for all configuration (no setup.py)
|
|
90
|
+
|
|
91
|
+
### Development Setup
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Clone and setup
|
|
95
|
+
git clone https://github.com/michael-borck/video-lens.git
|
|
96
|
+
cd video-lens
|
|
97
|
+
uv venv && source .venv/bin/activate
|
|
98
|
+
uv pip install -e ".[dev]"
|
|
99
|
+
|
|
100
|
+
# Verify setup
|
|
101
|
+
video-lens --help
|
|
102
|
+
pytest -v
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Code Quality Standards
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Format code
|
|
109
|
+
ruff format .
|
|
110
|
+
|
|
111
|
+
# Lint code
|
|
112
|
+
ruff check .
|
|
113
|
+
|
|
114
|
+
# Type checking (strict mode)
|
|
115
|
+
basedpyright
|
|
116
|
+
|
|
117
|
+
# Run tests with coverage
|
|
118
|
+
pytest -v
|
|
119
|
+
|
|
120
|
+
# Run all quality checks
|
|
121
|
+
ruff format . && ruff check . && basedpyright && pytest -v
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Project Structure
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
src/video_lens/ # Main package
|
|
128
|
+
├── core/ # Video processing pipeline
|
|
129
|
+
├── analysis/ # Speech and visual analysis
|
|
130
|
+
├── reports/ # Report generation
|
|
131
|
+
├── interface/ # Gradio web interface
|
|
132
|
+
└── utils/ # Configuration and utilities
|
|
133
|
+
|
|
134
|
+
tests/ # Test suite (mirrors src structure)
|
|
135
|
+
docs/ # Documentation and specs
|
|
136
|
+
tasks/ # Development task tracking
|
|
137
|
+
config/ # Configuration files
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Current Development Phase
|
|
141
|
+
|
|
142
|
+
- ✅ **Phase 0**: Project setup, packaging, PyPI publication
|
|
143
|
+
- 🚧 **Phase 1**: Core video processing pipeline (in progress)
|
|
144
|
+
- 📋 **Phase 2**: Enhanced analysis features
|
|
145
|
+
- 📋 **Phase 3**: Advanced AI features
|
|
146
|
+
|
|
147
|
+
See `tasks/tasks-prd-phase1-mvp.md` for detailed task tracking.
|
|
148
|
+
|
|
149
|
+
## Links
|
|
150
|
+
|
|
151
|
+
- **PyPI**: https://pypi.org/project/video-lens/
|
|
152
|
+
- **GitHub**: https://github.com/michael-borck/video-lens
|
|
153
|
+
- **Documentation**: Coming soon
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
MIT License - see LICENSE file for details.
|
|
158
|
+
|
|
159
|
+
## Contributing
|
|
160
|
+
|
|
161
|
+
Contributions are welcome! Please read the development guidelines in `CLAUDE.md` for our coding standards and toolchain requirements.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Video Lens Configuration File
|
|
2
|
+
# This file contains the default configuration for the Video Lens application.
|
|
3
|
+
# You can override these settings with environment variables using the VIDEO_LENS_ prefix.
|
|
4
|
+
|
|
5
|
+
# Application settings
|
|
6
|
+
app_name: "Video Lens"
|
|
7
|
+
debug: false
|
|
8
|
+
|
|
9
|
+
# Video processing configuration
|
|
10
|
+
processing:
|
|
11
|
+
max_video_size_mb: 500
|
|
12
|
+
supported_formats:
|
|
13
|
+
- "mp4"
|
|
14
|
+
- "mov"
|
|
15
|
+
- "avi"
|
|
16
|
+
- "webm"
|
|
17
|
+
temp_dir: "temp"
|
|
18
|
+
cleanup_temp_files: true
|
|
19
|
+
|
|
20
|
+
# Scene detection settings
|
|
21
|
+
scene_detection:
|
|
22
|
+
method: "threshold" # threshold or adaptive
|
|
23
|
+
threshold: 0.4 # 0.1-0.9, lower = more scenes detected
|
|
24
|
+
min_scene_duration: 2.0 # minimum seconds per scene
|
|
25
|
+
fallback_interval: 30.0 # fallback if no scenes detected
|
|
26
|
+
|
|
27
|
+
# Audio processing settings
|
|
28
|
+
audio:
|
|
29
|
+
sample_rate: 16000 # Hz, required by Whisper
|
|
30
|
+
channels: 1 # mono audio
|
|
31
|
+
noise_reduction: false
|
|
32
|
+
normalize_audio: true
|
|
33
|
+
|
|
34
|
+
# Speech transcription settings
|
|
35
|
+
transcription:
|
|
36
|
+
model: "whisper-base" # whisper model size
|
|
37
|
+
language: "auto" # auto-detect or specific language code
|
|
38
|
+
word_timestamps: true # enable word-level timing
|
|
39
|
+
temperature: 0.0 # sampling temperature (0.0 = deterministic)
|
|
40
|
+
device: "auto" # auto, cpu, or cuda
|
|
41
|
+
|
|
42
|
+
# Analysis settings
|
|
43
|
+
analysis:
|
|
44
|
+
filler_words:
|
|
45
|
+
- "um"
|
|
46
|
+
- "uh"
|
|
47
|
+
- "like"
|
|
48
|
+
- "you know"
|
|
49
|
+
- "so"
|
|
50
|
+
- "actually"
|
|
51
|
+
- "basically"
|
|
52
|
+
target_wpm_range: [140, 160] # ideal speaking rate range
|
|
53
|
+
sentiment_analysis: true
|
|
54
|
+
confidence_threshold: 0.7
|
|
55
|
+
|
|
56
|
+
# Output settings
|
|
57
|
+
output:
|
|
58
|
+
formats:
|
|
59
|
+
- "json"
|
|
60
|
+
- "html"
|
|
61
|
+
include_frames: true
|
|
62
|
+
frame_quality: 80 # JPEG quality 1-100
|
|
63
|
+
report_template: "default"
|
|
64
|
+
|
|
65
|
+
# Logging configuration
|
|
66
|
+
logging:
|
|
67
|
+
level: "INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
68
|
+
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
69
|
+
file_enabled: true
|
|
70
|
+
file_path: "logs/deep_brief.log"
|
|
71
|
+
max_bytes: 10000000 # 10MB log file size
|
|
72
|
+
backup_count: 5 # number of backup files
|
|
73
|
+
console_enabled: true
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Development Configuration
|
|
2
|
+
# This configuration enables debug mode and verbose logging for development
|
|
3
|
+
|
|
4
|
+
# Application settings
|
|
5
|
+
app_name: "Video Lens (Development)"
|
|
6
|
+
debug: true
|
|
7
|
+
|
|
8
|
+
# Inherit most settings from default config, override specific ones
|
|
9
|
+
processing:
|
|
10
|
+
max_video_size_mb: 100 # Smaller limit for testing
|
|
11
|
+
cleanup_temp_files: false # Keep temp files for debugging
|
|
12
|
+
|
|
13
|
+
# More sensitive scene detection for testing
|
|
14
|
+
scene_detection:
|
|
15
|
+
threshold: 0.3 # More sensitive
|
|
16
|
+
min_scene_duration: 1.0 # Shorter scenes for testing
|
|
17
|
+
|
|
18
|
+
# Development transcription settings
|
|
19
|
+
transcription:
|
|
20
|
+
model: "whisper-tiny" # Faster model for development
|
|
21
|
+
temperature: 0.1 # Slightly more randomness for testing
|
|
22
|
+
|
|
23
|
+
# Analysis settings for development
|
|
24
|
+
analysis:
|
|
25
|
+
confidence_threshold: 0.5 # Lower threshold for testing
|
|
26
|
+
|
|
27
|
+
# Development logging - very verbose
|
|
28
|
+
logging:
|
|
29
|
+
level: "DEBUG"
|
|
30
|
+
format: "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s"
|
|
31
|
+
file_enabled: true
|
|
32
|
+
file_path: "logs/dev.log"
|
|
33
|
+
max_bytes: 5000000 # 5MB
|
|
34
|
+
backup_count: 3
|
|
35
|
+
console_enabled: true
|