尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Speech timing/fluency and live on-device gaze/movement pattern analysis, with AI-assisted educational interpretation.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A dark-themed web app with two tabs — Speech and Video — that measure behavioral patterns and explain the results with AI. Plain HTML, CSS and JavaScript on the front end, with small serverless functions on Vercel. No framework and no TypeScript.
For educational and research use only. It is not a diagnostic tool.查看完整 README ↗A dark-themed web app with two tabs — Speech and Video — that measure behavioral patterns and explain the results with AI. Plain HTML, CSS and JavaScript on the front end, with small serverless functions on Vercel. No framework and no TypeScript.
Live app: autism-speech-pattern-analyzer.vercel.app
For educational and research use only. It is not a diagnostic tool.
flowchart LR
subgraph Browser["Browser (public/)"]
UI["index.html\ntab UI"]
Speech["app.js\nSpeech tab"]
Video["video.js\nVideo tab"]
MP["MediaPipe\nFaceLandmarker + HandLandmarker\n(WASM, on-device)"]
end
subgraph Vercel["Vercel serverless functions (api/)"]
T["transcribe.js"]
A["analyze.js"]
AV["analyze-video.js"]
end
Groq["Groq Whisper\nLarge V3"]
OR["OpenRouter\nLLM"]
UI --> Speech
UI --> Video
Speech -- "trimmed 16kHz mono WAV" --> T
T --> Groq
Groq -- "transcript + word timings" --> T
T --> Speech
Speech -- "speech metrics only" --> A
A --> OR
OR -- "interpretation text" --> A
A --> Speech
Video --> MP
MP -- "landmarks, in-browser only" --> Video
Video -- "gaze/head/movement metrics only\n(never video)" --> AV
AV --> OR
OR -- "interpretation text" --> AV
AV --> Video
API keys (GROQ_API_KEY, OPENROUTER_API_KEY) are read from environment variables on the server side only — the browser never sees them.
| Piece | Role |
|---|---|
public/index.html | Single page with two tabs (Speech, Video); tab switching is a tiny inline script |
public/app.js | Speech tab's logic |
public/video.js | Video tab's logic (its DOM ids are all prefixed v- so the two tabs' scripts never collide) |
api/transcribe.js | Sends the audio to Groq Whisper and returns word timings |
api/analyze.js | Builds the prompt from the measured speech metrics and calls OpenRouter |
api/analyze-video.js | Builds the prompt from the measured video metrics and calls OpenRouter |
The browser decodes the file, trims it to the first 120 seconds, and resamples it to 16 kHz mono WAV before upload. That keeps the request under Vercel's 4.5 MB body limit and replaces the librosa step from an earlier Python version.
sequenceDiagram
participant U as User
participant B as Browser (app.js)
participant T as api/transcribe.js
participant G as Groq Whisper
participant A as api/analyze.js
participant O as OpenRouter
U->>B: Upload/record audio
B->>B: Trim to 120s, resample to 16kHz mono WAV
B->>T: POST audio
T->>G: Transcribe (word timestamps)
G-->>T: Transcript + word timings
T-->>B: Word timings
B->>B: Compute response time, wpm,\nword durations, repeated phrases
B->>A: POST metrics only
A->>O: Prompt built from metrics
O-->>A: Educational interpretation
A-->>B: Interpretation text
B->>U: Timeline + transcript + interpretation
Runs a live webcam session and measures four things in real time, entirely on-device:
getUserMedia, records up to 60 seconds with MediaRecorder (for playback afterward), and samples the live feed at roughly 6–7 frames/second while it runsapi/analyze-video.js, which reports on exactly these four things in a short, direct, non-diagnostic explanationflowchart TD
Cam["getUserMedia webcam feed"] --> Sample["Sample ~6-7 fps"]
Sample --> FL["FaceLandmarker\n(gaze blendshapes, 468-pt mesh)"]
Sample --> HL["HandLandmarker\n(21-pt hand skeleton)"]
FL --> Gaze["Gaze metrics"]
FL --> Head["Head position metrics"]
HL --> Move["Arm/hand movement metrics"]
HL --> Squeeze["Hand-squeezing metrics"]
Gaze --> Metrics["Metrics only"]
Head --> Metrics
Move --> Metrics
Squeeze --> Metrics
Metrics --> AV["api/analyze-video.js"]
AV --> OR["OpenRouter"]
OR --> Result["Non-diagnostic explanation"]
Import this repository at vercel.com/new. No build settings are needed.
Add these environment variables under Project Settings, then redeploy:
| Name | Where to get it |
|---|---|
GROQ_API_KEY | https://console.groq.com/keys |
OPENROUTER_API_KEY | https://openrouter.ai/keys |
OPENROUTER_MODEL (optional) | Tried first if set; otherwise a built-in list of free models is tried in order |
npm i -g vercel
cp .env.example .env # then fill in your keys
vercel dev