Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/electron-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Electron CI

on:
push:
paths:
- "electron/**"
- ".github/workflows/electron-ci.yml"

pull_request:
paths:
- "electron/**"
- ".github/workflows/electron-ci.yml"

jobs:
electron-checks:
name: Install, link, and build Electron app
runs-on: ubuntu-latest

defaults:
run:
working-directory: electron

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: electron/package-lock.json

- name: Install dependencies
run: npm ci

- name: Run lint
run: npm run lint

- name: Build Electron renderer
run: npm run build
55 changes: 55 additions & 0 deletions .github/workflows/python-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Python CI

on:
push:
paths:
- "python/**"
- ".github/workflows/python-ci.yml"

pull_request:
paths:
- "python/**"
- ".github/workflows/python-ci.yml"


jobs:
python-checks:
name: Install and import-check Python CV worker
runs-on: ubuntu-latest

defaults:
run:
working-directory: python

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
cache-dependency-path: python/requirements.txt

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Check Python imports
run: |
python - <<'PY'
import cv2
import numpy
import onnxruntime
import fastapi
import uvicorn
import websockets

print("Python CV dependencies imported successfully")
PY

- name: Check project modules compile
run: |
python -m compileall .
5 changes: 5 additions & 0 deletions python/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.venv
__pycache__
*.pyc
models/*.onnx
models/*.task
23 changes: 23 additions & 0 deletions python/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM python:3.11-slim

WORKDIR /app

# Install system dependencies commonly needed by OpenCV/MediaPipe at runtime
RUN apt-get update && apt-get install -y --no-install-recommends \
libglib2.0-0 \
libgl1 \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN python -m pip install --upgrade pip \
&& pip install --no-cache-dir -r requirements.txt

# Download YOLOX-S phone detection model into the image
RUN mkdir -p models && \
python -c "import urllib.request; urllib.request.urlretrieve('https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx', 'models/yolox_s.onnx')"

COPY . .

CMD ["python", "-m", "compileall", "."]
22 changes: 22 additions & 0 deletions python/cv/phone_image_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import sys
import cv2

from phone_detector import detect_phone


def main():
if len(sys.argv) < 2:
raise SystemExit("Usage: python cv/phone_image_test.py <image_path>")

image_path = sys.argv[1]
frame = cv2.imread(image_path)

if frame is None:
raise SystemExit(f"Could not read image: {image_path}")

result = detect_phone(frame)
print(result)


if __name__ == "__main__":
main()
Binary file added python/test_assets/phone_sample.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading