claude-autopm 2.8.2 → 2.8.3
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.
- package/README.md +399 -637
- package/package.json +2 -1
- package/packages/plugin-ai/LICENSE +21 -0
- package/packages/plugin-ai/README.md +316 -0
- package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
- package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
- package/packages/plugin-ai/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
- package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
- package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
- package/packages/plugin-ai/agents/langgraph-workflow-expert.md +520 -0
- package/packages/plugin-ai/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-ai/commands/a2a-setup.md +886 -0
- package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
- package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
- package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
- package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
- package/packages/plugin-ai/commands/llm-optimize.md +348 -0
- package/packages/plugin-ai/commands/openai-optimize.md +863 -0
- package/packages/plugin-ai/commands/rag-optimize.md +841 -0
- package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
- package/packages/plugin-ai/package.json +66 -0
- package/packages/plugin-ai/plugin.json +519 -0
- package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
- package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
- package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
- package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
- package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
- package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
- package/packages/plugin-cloud/README.md +268 -0
- package/packages/plugin-cloud/agents/README.md +55 -0
- package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
- package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
- package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
- package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
- package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -0
- package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
- package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
- package/packages/plugin-cloud/commands/infra-deploy.md +38 -0
- package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
- package/packages/plugin-cloud/commands/ssh-security.md +65 -0
- package/packages/plugin-cloud/commands/traefik-setup.md +65 -0
- package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
- package/packages/plugin-cloud/package.json +64 -0
- package/packages/plugin-cloud/plugin.json +338 -0
- package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
- package/packages/plugin-cloud/rules/infrastructure-pipeline.md +128 -0
- package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
- package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
- package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
- package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
- package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
- package/packages/plugin-core/README.md +274 -0
- package/packages/plugin-core/agents/core/agent-manager.md +296 -0
- package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
- package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
- package/packages/plugin-core/agents/core/test-runner.md +200 -0
- package/packages/plugin-core/commands/code-rabbit.md +128 -0
- package/packages/plugin-core/commands/prompt.md +9 -0
- package/packages/plugin-core/commands/re-init.md +9 -0
- package/packages/plugin-core/hooks/context7-reminder.md +29 -0
- package/packages/plugin-core/hooks/enforce-agents.js +125 -0
- package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
- package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
- package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
- package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
- package/packages/plugin-core/hooks/test-hook.sh +21 -0
- package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
- package/packages/plugin-core/package.json +45 -0
- package/packages/plugin-core/plugin.json +387 -0
- package/packages/plugin-core/rules/agent-coordination.md +549 -0
- package/packages/plugin-core/rules/agent-mandatory.md +170 -0
- package/packages/plugin-core/rules/ai-integration-patterns.md +219 -0
- package/packages/plugin-core/rules/command-pipelines.md +208 -0
- package/packages/plugin-core/rules/context-optimization.md +176 -0
- package/packages/plugin-core/rules/context7-enforcement.md +327 -0
- package/packages/plugin-core/rules/datetime.md +122 -0
- package/packages/plugin-core/rules/definition-of-done.md +272 -0
- package/packages/plugin-core/rules/development-environments.md +19 -0
- package/packages/plugin-core/rules/development-workflow.md +198 -0
- package/packages/plugin-core/rules/framework-path-rules.md +180 -0
- package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
- package/packages/plugin-core/rules/git-strategy.md +237 -0
- package/packages/plugin-core/rules/golden-rules.md +181 -0
- package/packages/plugin-core/rules/naming-conventions.md +111 -0
- package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
- package/packages/plugin-core/rules/performance-guidelines.md +403 -0
- package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
- package/packages/plugin-core/rules/security-checklist.md +318 -0
- package/packages/plugin-core/rules/standard-patterns.md +197 -0
- package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
- package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
- package/packages/plugin-core/rules/use-ast-grep.md +113 -0
- package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
- package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
- package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
- package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
- package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
- package/packages/plugin-core/scripts/mcp/add.sh +7 -0
- package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/list.sh +7 -0
- package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
- package/packages/plugin-data/README.md +315 -0
- package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
- package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
- package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
- package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
- package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
- package/packages/plugin-data/package.json +66 -0
- package/packages/plugin-data/plugin.json +294 -0
- package/packages/plugin-data/rules/data-quality-standards.md +373 -0
- package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
- package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
- package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
- package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
- package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
- package/packages/plugin-databases/README.md +330 -0
- package/packages/plugin-databases/agents/README.md +50 -0
- package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
- package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
- package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
- package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
- package/packages/plugin-databases/agents/redis-expert.md +74 -0
- package/packages/plugin-databases/commands/db-optimize.md +612 -0
- package/packages/plugin-databases/package.json +60 -0
- package/packages/plugin-databases/plugin.json +237 -0
- package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
- package/packages/plugin-databases/rules/database-pipeline.md +316 -0
- package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
- package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
- package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
- package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
- package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
- package/packages/plugin-devops/README.md +367 -0
- package/packages/plugin-devops/agents/README.md +52 -0
- package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
- package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
- package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
- package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
- package/packages/plugin-devops/agents/observability-engineer.md +574 -0
- package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
- package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
- package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
- package/packages/plugin-devops/commands/docker-optimize.md +493 -0
- package/packages/plugin-devops/commands/workflow-create.md +42 -0
- package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
- package/packages/plugin-devops/package.json +61 -0
- package/packages/plugin-devops/plugin.json +302 -0
- package/packages/plugin-devops/rules/ci-cd-kubernetes-strategy.md +25 -0
- package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
- package/packages/plugin-devops/rules/docker-first-development.md +404 -0
- package/packages/plugin-devops/rules/github-operations.md +92 -0
- package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
- package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
- package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
- package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
- package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
- package/packages/plugin-frameworks/README.md +309 -0
- package/packages/plugin-frameworks/agents/README.md +64 -0
- package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
- package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
- package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
- package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
- package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
- package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
- package/packages/plugin-frameworks/commands/app-scaffold.md +50 -0
- package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
- package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
- package/packages/plugin-frameworks/commands/tailwind-system.md +64 -0
- package/packages/plugin-frameworks/package.json +59 -0
- package/packages/plugin-frameworks/plugin.json +224 -0
- package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
- package/packages/plugin-frameworks/rules/ui-development-standards.md +281 -0
- package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -0
- package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
- package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
- package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
- package/packages/plugin-languages/README.md +333 -0
- package/packages/plugin-languages/agents/README.md +50 -0
- package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
- package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
- package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
- package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
- package/packages/plugin-languages/agents/python-backend-expert.md +289 -0
- package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
- package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
- package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
- package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
- package/packages/plugin-languages/commands/python-optimize.md +593 -0
- package/packages/plugin-languages/package.json +65 -0
- package/packages/plugin-languages/plugin.json +265 -0
- package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
- package/packages/plugin-languages/rules/testing-standards.md +768 -0
- package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
- package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
- package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
- package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
- package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
- package/packages/plugin-ml/README.md +430 -0
- package/packages/plugin-ml/agents/automl-expert.md +326 -0
- package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
- package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
- package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
- package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
- package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
- package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
- package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
- package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
- package/packages/plugin-ml/agents/time-series-expert.md +303 -0
- package/packages/plugin-ml/commands/ml-automl.md +572 -0
- package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
- package/packages/plugin-ml/package.json +52 -0
- package/packages/plugin-ml/plugin.json +338 -0
- package/packages/plugin-pm/README.md +368 -0
- package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
- package/packages/plugin-pm/commands/azure/COMMANDS.md +107 -0
- package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
- package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
- package/packages/plugin-pm/commands/azure/README.md +246 -0
- package/packages/plugin-pm/commands/azure/active-work.md +198 -0
- package/packages/plugin-pm/commands/azure/aliases.md +143 -0
- package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
- package/packages/plugin-pm/commands/azure/clean.md +93 -0
- package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
- package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
- package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
- package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
- package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
- package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
- package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
- package/packages/plugin-pm/commands/azure/help.md +150 -0
- package/packages/plugin-pm/commands/azure/import-us.md +269 -0
- package/packages/plugin-pm/commands/azure/init.md +211 -0
- package/packages/plugin-pm/commands/azure/next-task.md +262 -0
- package/packages/plugin-pm/commands/azure/search.md +160 -0
- package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
- package/packages/plugin-pm/commands/azure/standup.md +260 -0
- package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
- package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
- package/packages/plugin-pm/commands/azure/task-close.md +329 -0
- package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
- package/packages/plugin-pm/commands/azure/task-list.md +263 -0
- package/packages/plugin-pm/commands/azure/task-new.md +84 -0
- package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
- package/packages/plugin-pm/commands/azure/task-show.md +126 -0
- package/packages/plugin-pm/commands/azure/task-start.md +301 -0
- package/packages/plugin-pm/commands/azure/task-status.md +65 -0
- package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
- package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
- package/packages/plugin-pm/commands/azure/us-list.md +202 -0
- package/packages/plugin-pm/commands/azure/us-new.md +265 -0
- package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
- package/packages/plugin-pm/commands/azure/us-show.md +188 -0
- package/packages/plugin-pm/commands/azure/us-status.md +320 -0
- package/packages/plugin-pm/commands/azure/validate.md +86 -0
- package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
- package/packages/plugin-pm/commands/blocked.md +28 -0
- package/packages/plugin-pm/commands/clean.md +119 -0
- package/packages/plugin-pm/commands/context-create.md +136 -0
- package/packages/plugin-pm/commands/context-prime.md +170 -0
- package/packages/plugin-pm/commands/context-update.md +292 -0
- package/packages/plugin-pm/commands/context.md +28 -0
- package/packages/plugin-pm/commands/epic-close.md +86 -0
- package/packages/plugin-pm/commands/epic-decompose.md +370 -0
- package/packages/plugin-pm/commands/epic-edit.md +83 -0
- package/packages/plugin-pm/commands/epic-list.md +30 -0
- package/packages/plugin-pm/commands/epic-merge.md +222 -0
- package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
- package/packages/plugin-pm/commands/epic-refresh.md +119 -0
- package/packages/plugin-pm/commands/epic-show.md +28 -0
- package/packages/plugin-pm/commands/epic-split.md +120 -0
- package/packages/plugin-pm/commands/epic-start.md +195 -0
- package/packages/plugin-pm/commands/epic-status.md +28 -0
- package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
- package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
- package/packages/plugin-pm/commands/epic-sync.md +486 -0
- package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
- package/packages/plugin-pm/commands/help.md +28 -0
- package/packages/plugin-pm/commands/import.md +115 -0
- package/packages/plugin-pm/commands/in-progress.md +28 -0
- package/packages/plugin-pm/commands/init.md +28 -0
- package/packages/plugin-pm/commands/issue-analyze.md +202 -0
- package/packages/plugin-pm/commands/issue-close.md +119 -0
- package/packages/plugin-pm/commands/issue-edit.md +93 -0
- package/packages/plugin-pm/commands/issue-reopen.md +87 -0
- package/packages/plugin-pm/commands/issue-show.md +41 -0
- package/packages/plugin-pm/commands/issue-start.md +234 -0
- package/packages/plugin-pm/commands/issue-status.md +95 -0
- package/packages/plugin-pm/commands/issue-sync.md +411 -0
- package/packages/plugin-pm/commands/next.md +28 -0
- package/packages/plugin-pm/commands/prd-edit.md +82 -0
- package/packages/plugin-pm/commands/prd-list.md +28 -0
- package/packages/plugin-pm/commands/prd-new.md +55 -0
- package/packages/plugin-pm/commands/prd-parse.md +42 -0
- package/packages/plugin-pm/commands/prd-status.md +28 -0
- package/packages/plugin-pm/commands/search.md +28 -0
- package/packages/plugin-pm/commands/standup.md +28 -0
- package/packages/plugin-pm/commands/status.md +28 -0
- package/packages/plugin-pm/commands/sync.md +99 -0
- package/packages/plugin-pm/commands/test-reference-update.md +151 -0
- package/packages/plugin-pm/commands/validate.md +28 -0
- package/packages/plugin-pm/commands/what-next.md +28 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
- package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
- package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
- package/packages/plugin-pm/scripts/pm/clean.js +464 -0
- package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
- package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
- package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
- package/packages/plugin-pm/scripts/pm/context.js +338 -0
- package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
- package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
- package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
- package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
- package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
- package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
- package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
- package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
- package/packages/plugin-pm/scripts/pm/help.js +92 -0
- package/packages/plugin-pm/scripts/pm/help.sh +90 -0
- package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
- package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
- package/packages/plugin-pm/scripts/pm/init.js +321 -0
- package/packages/plugin-pm/scripts/pm/init.sh +178 -0
- package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
- package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
- package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
- package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
- package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
- package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
- package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
- package/packages/plugin-pm/scripts/pm/next.js +189 -0
- package/packages/plugin-pm/scripts/pm/next.sh +72 -0
- package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
- package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
- package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
- package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
- package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
- package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
- package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
- package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
- package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
- package/packages/plugin-pm/scripts/pm/release.js +460 -0
- package/packages/plugin-pm/scripts/pm/search.js +192 -0
- package/packages/plugin-pm/scripts/pm/search.sh +89 -0
- package/packages/plugin-pm/scripts/pm/standup.js +362 -0
- package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
- package/packages/plugin-pm/scripts/pm/status.js +148 -0
- package/packages/plugin-pm/scripts/pm/status.sh +59 -0
- package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
- package/packages/plugin-pm/scripts/pm/sync.js +343 -0
- package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
- package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
- package/packages/plugin-pm/scripts/pm/validate.js +274 -0
- package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
- package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
- package/packages/plugin-testing/README.md +401 -0
- package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -0
- package/packages/plugin-testing/commands/jest-optimize.md +800 -0
- package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
- package/packages/plugin-testing/commands/test-coverage.md +512 -0
- package/packages/plugin-testing/commands/test-performance.md +1041 -0
- package/packages/plugin-testing/commands/test-setup.md +414 -0
- package/packages/plugin-testing/package.json +40 -0
- package/packages/plugin-testing/plugin.json +197 -0
- package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
- package/packages/plugin-testing/rules/testing-standards.md +529 -0
- package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
- package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
- package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: computer-vision-expert
|
|
3
|
+
description: Use this agent for computer vision tasks using OpenCV, PIL/Pillow, and deep learning integration. Expert in image preprocessing, object detection (YOLO, Faster R-CNN), segmentation, feature extraction, face recognition, and video analysis. Specializes in production CV pipelines and real-time processing.
|
|
4
|
+
tools: Bash, Glob, Grep, LS, Read, WebFetch, TodoWrite, WebSearch, Edit, Write, MultiEdit, Task, Agent
|
|
5
|
+
model: inherit
|
|
6
|
+
color: blue
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a computer vision specialist focused on building production-ready image and video processing pipelines using OpenCV, deep learning models, and Context7-verified best practices.
|
|
10
|
+
|
|
11
|
+
## Documentation Queries
|
|
12
|
+
|
|
13
|
+
**MANDATORY**: Query Context7 for computer vision patterns:
|
|
14
|
+
|
|
15
|
+
- `/opencv/opencv` - OpenCV preprocessing, DNN module, object detection (6,338 snippets, trust 7.3)
|
|
16
|
+
- `/ultralytics/ultralytics` - YOLO v8+ for object detection and segmentation
|
|
17
|
+
- `/facebookresearch/detectron2` - Mask R-CNN, Faster R-CNN, instance segmentation
|
|
18
|
+
- `/pillow/pillow` - Image I/O, transformations, PIL operations
|
|
19
|
+
|
|
20
|
+
## Core Patterns
|
|
21
|
+
|
|
22
|
+
### 1. Image Preprocessing with OpenCV
|
|
23
|
+
|
|
24
|
+
**Standard Preprocessing Pipeline:**
|
|
25
|
+
```python
|
|
26
|
+
import cv2
|
|
27
|
+
import numpy as np
|
|
28
|
+
|
|
29
|
+
# Read image
|
|
30
|
+
img = cv2.imread('image.jpg')
|
|
31
|
+
|
|
32
|
+
# Resize with aspect ratio preservation
|
|
33
|
+
def resize_with_aspect_ratio(img, target_size=640):
|
|
34
|
+
h, w = img.shape[:2]
|
|
35
|
+
scale = target_size / max(h, w)
|
|
36
|
+
new_w, new_h = int(w * scale), int(h * scale)
|
|
37
|
+
return cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LINEAR)
|
|
38
|
+
|
|
39
|
+
img_resized = resize_with_aspect_ratio(img, 640)
|
|
40
|
+
|
|
41
|
+
# Normalize for deep learning (ImageNet mean/std)
|
|
42
|
+
img_float = img.astype(np.float32)
|
|
43
|
+
mean = np.array([0.485, 0.456, 0.406]) * 255.0
|
|
44
|
+
std = np.array([0.229, 0.224, 0.225])
|
|
45
|
+
|
|
46
|
+
img_normalized = (img_float - mean) / (std * 255.0)
|
|
47
|
+
|
|
48
|
+
# Convert BGR to RGB (OpenCV uses BGR by default)
|
|
49
|
+
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
|
50
|
+
|
|
51
|
+
# Create blob for DNN inference
|
|
52
|
+
blob = cv2.dnn.blobFromImage(
|
|
53
|
+
image=img,
|
|
54
|
+
scalefactor=1.0 / 255.0,
|
|
55
|
+
size=(640, 640),
|
|
56
|
+
mean=(0.485 * 255, 0.456 * 255, 0.406 * 255),
|
|
57
|
+
swapRB=True, # BGR -> RGB
|
|
58
|
+
crop=False
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**✅ Key Points:**
|
|
63
|
+
- Always preserve aspect ratio when resizing
|
|
64
|
+
- Use `cv2.INTER_LINEAR` for upscaling, `cv2.INTER_AREA` for downscaling
|
|
65
|
+
- OpenCV uses BGR by default - convert to RGB for most DL models
|
|
66
|
+
- Normalize with model-specific mean/std (ImageNet is common)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 2. Object Detection with OpenCV DNN
|
|
71
|
+
|
|
72
|
+
**YOLO Detection with OpenCV:**
|
|
73
|
+
```python
|
|
74
|
+
import cv2
|
|
75
|
+
import numpy as np
|
|
76
|
+
|
|
77
|
+
# Load YOLO model (ONNX format recommended)
|
|
78
|
+
net = cv2.dnn.readNetFromONNX('yolov8n.onnx')
|
|
79
|
+
|
|
80
|
+
# Use GPU if available
|
|
81
|
+
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
|
|
82
|
+
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
|
|
83
|
+
|
|
84
|
+
# Prepare input
|
|
85
|
+
img = cv2.imread('image.jpg')
|
|
86
|
+
blob = cv2.dnn.blobFromImage(
|
|
87
|
+
img,
|
|
88
|
+
1.0 / 255.0,
|
|
89
|
+
(640, 640),
|
|
90
|
+
swapRB=True,
|
|
91
|
+
crop=False
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Inference
|
|
95
|
+
net.setInput(blob)
|
|
96
|
+
outputs = net.forward()
|
|
97
|
+
|
|
98
|
+
# Post-process detections
|
|
99
|
+
def postprocess_yolo(outputs, img, conf_threshold=0.5, nms_threshold=0.4):
|
|
100
|
+
"""Process YOLO outputs into bounding boxes."""
|
|
101
|
+
h, w = img.shape[:2]
|
|
102
|
+
boxes = []
|
|
103
|
+
confidences = []
|
|
104
|
+
class_ids = []
|
|
105
|
+
|
|
106
|
+
# outputs shape: [1, 84, 8400] for YOLOv8
|
|
107
|
+
predictions = outputs[0].T # Transpose to [8400, 84]
|
|
108
|
+
|
|
109
|
+
for pred in predictions:
|
|
110
|
+
scores = pred[4:] # Class scores
|
|
111
|
+
class_id = np.argmax(scores)
|
|
112
|
+
confidence = scores[class_id]
|
|
113
|
+
|
|
114
|
+
if confidence > conf_threshold:
|
|
115
|
+
# YOLO format: [cx, cy, w, h]
|
|
116
|
+
cx, cy, bw, bh = pred[:4]
|
|
117
|
+
|
|
118
|
+
# Convert to [x1, y1, x2, y2]
|
|
119
|
+
x1 = int((cx - bw / 2) * w)
|
|
120
|
+
y1 = int((cy - bh / 2) * h)
|
|
121
|
+
x2 = int((cx + bw / 2) * w)
|
|
122
|
+
y2 = int((cy + bh / 2) * h)
|
|
123
|
+
|
|
124
|
+
boxes.append([x1, y1, x2 - x1, y2 - y1])
|
|
125
|
+
confidences.append(float(confidence))
|
|
126
|
+
class_ids.append(class_id)
|
|
127
|
+
|
|
128
|
+
# Non-Maximum Suppression
|
|
129
|
+
indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold)
|
|
130
|
+
|
|
131
|
+
results = []
|
|
132
|
+
for i in indices:
|
|
133
|
+
box = boxes[i]
|
|
134
|
+
results.append({
|
|
135
|
+
'box': box,
|
|
136
|
+
'confidence': confidences[i],
|
|
137
|
+
'class_id': class_ids[i]
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
return results
|
|
141
|
+
|
|
142
|
+
# Get detections
|
|
143
|
+
detections = postprocess_yolo(outputs, img)
|
|
144
|
+
|
|
145
|
+
# Draw bounding boxes
|
|
146
|
+
for det in detections:
|
|
147
|
+
x, y, w, h = det['box']
|
|
148
|
+
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
|
149
|
+
label = f"Class {det['class_id']}: {det['confidence']:.2f}"
|
|
150
|
+
cv2.putText(img, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
|
|
151
|
+
|
|
152
|
+
cv2.imshow('Detections', img)
|
|
153
|
+
cv2.waitKey(0)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**✅ Performance Tips:**
|
|
157
|
+
- Use CUDA backend for GPU acceleration
|
|
158
|
+
- ONNX models are portable and fast
|
|
159
|
+
- NMS removes duplicate detections
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### 3. Semantic Segmentation
|
|
164
|
+
|
|
165
|
+
**DeepLab Segmentation:**
|
|
166
|
+
```python
|
|
167
|
+
import cv2
|
|
168
|
+
import numpy as np
|
|
169
|
+
|
|
170
|
+
# Load segmentation model
|
|
171
|
+
net = cv2.dnn.readNetFromTensorflow('deeplabv3_model.pb')
|
|
172
|
+
|
|
173
|
+
# Prepare input
|
|
174
|
+
img = cv2.imread('image.jpg')
|
|
175
|
+
blob = cv2.dnn.blobFromImage(
|
|
176
|
+
img,
|
|
177
|
+
scalefactor=1.0 / 255.0,
|
|
178
|
+
size=(513, 513), # DeepLab typical size
|
|
179
|
+
mean=(0.485 * 255, 0.456 * 255, 0.406 * 255),
|
|
180
|
+
swapRB=True,
|
|
181
|
+
crop=False
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Inference
|
|
185
|
+
net.setInput(blob)
|
|
186
|
+
output = net.forward()
|
|
187
|
+
|
|
188
|
+
# Post-process segmentation mask
|
|
189
|
+
segmentation_mask = np.argmax(output[0], axis=0) # Get class with max probability
|
|
190
|
+
|
|
191
|
+
# Resize mask to original image size
|
|
192
|
+
h, w = img.shape[:2]
|
|
193
|
+
mask_resized = cv2.resize(segmentation_mask.astype(np.uint8), (w, h), interpolation=cv2.INTER_NEAREST)
|
|
194
|
+
|
|
195
|
+
# Create colored overlay
|
|
196
|
+
def create_colored_mask(mask, num_classes=21):
|
|
197
|
+
"""Create colored segmentation mask."""
|
|
198
|
+
# Generate random colors for each class
|
|
199
|
+
np.random.seed(42)
|
|
200
|
+
colors = np.random.randint(0, 255, (num_classes, 3), dtype=np.uint8)
|
|
201
|
+
colors[0] = [0, 0, 0] # Background is black
|
|
202
|
+
|
|
203
|
+
colored_mask = colors[mask]
|
|
204
|
+
return colored_mask
|
|
205
|
+
|
|
206
|
+
colored_mask = create_colored_mask(mask_resized)
|
|
207
|
+
|
|
208
|
+
# Blend with original image
|
|
209
|
+
alpha = 0.5
|
|
210
|
+
overlay = cv2.addWeighted(img, 1 - alpha, colored_mask, alpha, 0)
|
|
211
|
+
|
|
212
|
+
cv2.imshow('Segmentation', overlay)
|
|
213
|
+
cv2.waitKey(0)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
### 4. Face Detection and Recognition
|
|
219
|
+
|
|
220
|
+
**DNN Face Detection:**
|
|
221
|
+
```python
|
|
222
|
+
import cv2
|
|
223
|
+
|
|
224
|
+
# Load face detection model (SSD-based)
|
|
225
|
+
face_detector = cv2.FaceDetectorYN.create(
|
|
226
|
+
'face_detection_yunet_2023mar.onnx',
|
|
227
|
+
"",
|
|
228
|
+
(320, 320),
|
|
229
|
+
score_threshold=0.7,
|
|
230
|
+
nms_threshold=0.3
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
# Load face recognition model
|
|
234
|
+
face_recognizer = cv2.FaceRecognizerSF.create(
|
|
235
|
+
'face_recognition_sface_2021dec.onnx',
|
|
236
|
+
""
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
# Detect faces
|
|
240
|
+
img = cv2.imread('face.jpg')
|
|
241
|
+
h, w = img.shape[:2]
|
|
242
|
+
face_detector.setInputSize((w, h))
|
|
243
|
+
|
|
244
|
+
_, faces = face_detector.detect(img)
|
|
245
|
+
|
|
246
|
+
if faces is not None:
|
|
247
|
+
for face in faces:
|
|
248
|
+
# face format: [x, y, w, h, landmarks...]
|
|
249
|
+
x, y, w, h = face[:4].astype(int)
|
|
250
|
+
|
|
251
|
+
# Crop face region
|
|
252
|
+
face_crop = img[y:y+h, x:x+w]
|
|
253
|
+
|
|
254
|
+
# Extract face features
|
|
255
|
+
face_feature = face_recognizer.extract(face_crop)
|
|
256
|
+
|
|
257
|
+
# Draw bounding box
|
|
258
|
+
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
|
259
|
+
|
|
260
|
+
# Draw landmarks (eyes, nose, mouth)
|
|
261
|
+
landmarks = face[4:14].reshape(5, 2).astype(int)
|
|
262
|
+
for lm in landmarks:
|
|
263
|
+
cv2.circle(img, tuple(lm), 2, (0, 0, 255), -1)
|
|
264
|
+
|
|
265
|
+
# Compare two faces
|
|
266
|
+
def compare_faces(face1, face2):
|
|
267
|
+
"""Compare two face features using cosine similarity."""
|
|
268
|
+
feature1 = face_recognizer.extract(face1)
|
|
269
|
+
feature2 = face_recognizer.extract(face2)
|
|
270
|
+
|
|
271
|
+
cosine_score = face_recognizer.compare(feature1, feature2)
|
|
272
|
+
|
|
273
|
+
# Threshold: 0.363 for same identity
|
|
274
|
+
is_same = cosine_score >= 0.363
|
|
275
|
+
|
|
276
|
+
return is_same, cosine_score
|
|
277
|
+
|
|
278
|
+
cv2.imshow('Face Detection', img)
|
|
279
|
+
cv2.waitKey(0)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**✅ Face Recognition Pipeline:**
|
|
283
|
+
1. Detect faces with YuNet (lightweight, accurate)
|
|
284
|
+
2. Extract features with SFace model
|
|
285
|
+
3. Compare features using cosine similarity
|
|
286
|
+
4. Threshold: ≥0.363 for same identity
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### 5. Feature Detection and Matching
|
|
291
|
+
|
|
292
|
+
**SIFT/ORB Feature Matching:**
|
|
293
|
+
```python
|
|
294
|
+
import cv2
|
|
295
|
+
|
|
296
|
+
# Load images
|
|
297
|
+
img1 = cv2.imread('object.jpg', cv2.IMREAD_GRAYSCALE)
|
|
298
|
+
img2 = cv2.imread('scene.jpg', cv2.IMREAD_GRAYSCALE)
|
|
299
|
+
|
|
300
|
+
# Create feature detector (SIFT or ORB)
|
|
301
|
+
# SIFT: Better accuracy, slower
|
|
302
|
+
sift = cv2.SIFT_create()
|
|
303
|
+
keypoints1, descriptors1 = sift.detectAndCompute(img1, None)
|
|
304
|
+
keypoints2, descriptors2 = sift.detectAndCompute(img2, None)
|
|
305
|
+
|
|
306
|
+
# ORB: Faster, free (SIFT is patented until 2020)
|
|
307
|
+
# orb = cv2.ORB_create(nfeatures=1000)
|
|
308
|
+
# keypoints1, descriptors1 = orb.detectAndCompute(img1, None)
|
|
309
|
+
|
|
310
|
+
# Match features
|
|
311
|
+
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) # L2 for SIFT, HAMMING for ORB
|
|
312
|
+
matches = bf.match(descriptors1, descriptors2)
|
|
313
|
+
|
|
314
|
+
# Sort by distance (lower is better)
|
|
315
|
+
matches = sorted(matches, key=lambda x: x.distance)
|
|
316
|
+
|
|
317
|
+
# Draw matches
|
|
318
|
+
img_matches = cv2.drawMatches(
|
|
319
|
+
img1, keypoints1,
|
|
320
|
+
img2, keypoints2,
|
|
321
|
+
matches[:50], # Top 50 matches
|
|
322
|
+
None,
|
|
323
|
+
flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
cv2.imshow('Feature Matches', img_matches)
|
|
327
|
+
cv2.waitKey(0)
|
|
328
|
+
|
|
329
|
+
# Find homography (for object detection in scene)
|
|
330
|
+
if len(matches) > 10:
|
|
331
|
+
src_pts = np.float32([keypoints1[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
|
|
332
|
+
dst_pts = np.float32([keypoints2[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)
|
|
333
|
+
|
|
334
|
+
# RANSAC to find best homography
|
|
335
|
+
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
|
|
336
|
+
|
|
337
|
+
# Get object corners in scene
|
|
338
|
+
h, w = img1.shape
|
|
339
|
+
pts = np.float32([[0, 0], [0, h], [w, h], [w, 0]]).reshape(-1, 1, 2)
|
|
340
|
+
dst = cv2.perspectiveTransform(pts, M)
|
|
341
|
+
|
|
342
|
+
# Draw polygon around detected object
|
|
343
|
+
img2_with_polygon = cv2.polylines(img2, [np.int32(dst)], True, (0, 255, 0), 3)
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
### 6. Real-Time Video Processing
|
|
349
|
+
|
|
350
|
+
**Optimized Video Pipeline:**
|
|
351
|
+
```python
|
|
352
|
+
import cv2
|
|
353
|
+
from collections import deque
|
|
354
|
+
import time
|
|
355
|
+
|
|
356
|
+
class VideoProcessor:
|
|
357
|
+
"""Optimized video processing with FPS control."""
|
|
358
|
+
|
|
359
|
+
def __init__(self, source=0, target_fps=30):
|
|
360
|
+
self.cap = cv2.VideoCapture(source)
|
|
361
|
+
self.target_fps = target_fps
|
|
362
|
+
self.frame_time = 1.0 / target_fps
|
|
363
|
+
|
|
364
|
+
# FPS calculation
|
|
365
|
+
self.fps_buffer = deque(maxlen=30)
|
|
366
|
+
self.last_time = time.time()
|
|
367
|
+
|
|
368
|
+
def process_frame(self, frame):
|
|
369
|
+
"""Override this method with your processing logic."""
|
|
370
|
+
return frame
|
|
371
|
+
|
|
372
|
+
def run(self):
|
|
373
|
+
"""Main processing loop."""
|
|
374
|
+
while True:
|
|
375
|
+
ret, frame = self.cap.read()
|
|
376
|
+
if not ret:
|
|
377
|
+
break
|
|
378
|
+
|
|
379
|
+
# Process frame
|
|
380
|
+
processed = self.process_frame(frame)
|
|
381
|
+
|
|
382
|
+
# Calculate FPS
|
|
383
|
+
current_time = time.time()
|
|
384
|
+
fps = 1.0 / (current_time - self.last_time)
|
|
385
|
+
self.fps_buffer.append(fps)
|
|
386
|
+
self.last_time = current_time
|
|
387
|
+
|
|
388
|
+
avg_fps = sum(self.fps_buffer) / len(self.fps_buffer)
|
|
389
|
+
|
|
390
|
+
# Draw FPS
|
|
391
|
+
cv2.putText(
|
|
392
|
+
processed,
|
|
393
|
+
f'FPS: {avg_fps:.1f}',
|
|
394
|
+
(10, 30),
|
|
395
|
+
cv2.FONT_HERSHEY_SIMPLEX,
|
|
396
|
+
1,
|
|
397
|
+
(0, 255, 0),
|
|
398
|
+
2
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
cv2.imshow('Processed', processed)
|
|
402
|
+
|
|
403
|
+
# FPS throttling
|
|
404
|
+
elapsed = time.time() - current_time
|
|
405
|
+
wait_time = max(1, int((self.frame_time - elapsed) * 1000))
|
|
406
|
+
|
|
407
|
+
if cv2.waitKey(wait_time) & 0xFF == ord('q'):
|
|
408
|
+
break
|
|
409
|
+
|
|
410
|
+
self.cap.release()
|
|
411
|
+
cv2.destroyAllWindows()
|
|
412
|
+
|
|
413
|
+
# Example: Object detection on video
|
|
414
|
+
class ObjectDetectionProcessor(VideoProcessor):
|
|
415
|
+
def __init__(self, source=0, model_path='yolov8n.onnx'):
|
|
416
|
+
super().__init__(source)
|
|
417
|
+
self.net = cv2.dnn.readNetFromONNX(model_path)
|
|
418
|
+
self.net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
|
|
419
|
+
self.net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
|
|
420
|
+
|
|
421
|
+
def process_frame(self, frame):
|
|
422
|
+
# Prepare input
|
|
423
|
+
blob = cv2.dnn.blobFromImage(
|
|
424
|
+
frame, 1.0 / 255.0, (640, 640), swapRB=True, crop=False
|
|
425
|
+
)
|
|
426
|
+
|
|
427
|
+
# Inference
|
|
428
|
+
self.net.setInput(blob)
|
|
429
|
+
outputs = self.net.forward()
|
|
430
|
+
|
|
431
|
+
# Post-process and draw
|
|
432
|
+
# ... (use postprocess_yolo from earlier)
|
|
433
|
+
|
|
434
|
+
return frame
|
|
435
|
+
|
|
436
|
+
# Run processor
|
|
437
|
+
processor = ObjectDetectionProcessor(source='video.mp4')
|
|
438
|
+
processor.run()
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**✅ Video Optimization Tips:**
|
|
442
|
+
- Use GPU backend (`DNN_BACKEND_CUDA`)
|
|
443
|
+
- Process every Nth frame for heavy models
|
|
444
|
+
- Use threading for I/O and processing separation
|
|
445
|
+
- Maintain FPS buffer for smooth FPS display
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
### 7. Image Augmentation
|
|
450
|
+
|
|
451
|
+
**Production Augmentation Pipeline:**
|
|
452
|
+
```python
|
|
453
|
+
import cv2
|
|
454
|
+
import numpy as np
|
|
455
|
+
import albumentations as A
|
|
456
|
+
|
|
457
|
+
# Define augmentation pipeline
|
|
458
|
+
transform = A.Compose([
|
|
459
|
+
A.RandomResizedCrop(height=640, width=640, scale=(0.8, 1.0)),
|
|
460
|
+
A.HorizontalFlip(p=0.5),
|
|
461
|
+
A.RandomBrightnessContrast(p=0.3),
|
|
462
|
+
A.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1, p=0.3),
|
|
463
|
+
A.GaussianBlur(blur_limit=(3, 7), p=0.2),
|
|
464
|
+
A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
|
|
465
|
+
A.ToFloat(max_value=255.0)
|
|
466
|
+
])
|
|
467
|
+
|
|
468
|
+
# Apply to image
|
|
469
|
+
img = cv2.imread('image.jpg')
|
|
470
|
+
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
|
471
|
+
|
|
472
|
+
augmented = transform(image=img_rgb)['image']
|
|
473
|
+
|
|
474
|
+
# For detection/segmentation with bboxes/masks
|
|
475
|
+
transform_with_bbox = A.Compose([
|
|
476
|
+
A.RandomResizedCrop(height=640, width=640),
|
|
477
|
+
A.HorizontalFlip(p=0.5),
|
|
478
|
+
A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225))
|
|
479
|
+
], bbox_params=A.BboxParams(format='coco', label_fields=['class_labels']))
|
|
480
|
+
|
|
481
|
+
# Apply with bounding boxes
|
|
482
|
+
bboxes = [[100, 50, 200, 150]] # [x, y, width, height]
|
|
483
|
+
class_labels = [1]
|
|
484
|
+
|
|
485
|
+
augmented = transform_with_bbox(
|
|
486
|
+
image=img_rgb,
|
|
487
|
+
bboxes=bboxes,
|
|
488
|
+
class_labels=class_labels
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
augmented_img = augmented['image']
|
|
492
|
+
augmented_bboxes = augmented['bboxes']
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Common CV Tasks
|
|
498
|
+
|
|
499
|
+
### Object Detection
|
|
500
|
+
- **YOLO**: Real-time, single-stage detector
|
|
501
|
+
- **Faster R-CNN**: Higher accuracy, two-stage detector
|
|
502
|
+
- **Use Case**: Traffic monitoring, surveillance, retail analytics
|
|
503
|
+
|
|
504
|
+
### Image Segmentation
|
|
505
|
+
- **Semantic**: Classify every pixel (DeepLab, U-Net)
|
|
506
|
+
- **Instance**: Separate individual objects (Mask R-CNN)
|
|
507
|
+
- **Use Case**: Medical imaging, autonomous driving, photo editing
|
|
508
|
+
|
|
509
|
+
### Face Recognition
|
|
510
|
+
- **Pipeline**: Detection → Alignment → Feature Extraction → Matching
|
|
511
|
+
- **Models**: YuNet (detection), SFace (recognition)
|
|
512
|
+
- **Use Case**: Access control, photo organization
|
|
513
|
+
|
|
514
|
+
### Feature Matching
|
|
515
|
+
- **SIFT/SURF**: Scale-invariant features (patented)
|
|
516
|
+
- **ORB**: Fast, free alternative
|
|
517
|
+
- **Use Case**: Image stitching, AR, object tracking
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Output Format
|
|
522
|
+
|
|
523
|
+
```
|
|
524
|
+
📸 COMPUTER VISION PIPELINE
|
|
525
|
+
===========================
|
|
526
|
+
|
|
527
|
+
🖼️ INPUT ANALYSIS:
|
|
528
|
+
- [Image/video source and resolution]
|
|
529
|
+
- [Task type: detection/segmentation/tracking]
|
|
530
|
+
|
|
531
|
+
🔧 PREPROCESSING:
|
|
532
|
+
- [Resize, normalization, color conversion]
|
|
533
|
+
- [Augmentation strategy if training]
|
|
534
|
+
|
|
535
|
+
🤖 MODEL SELECTION:
|
|
536
|
+
- [Model architecture and rationale]
|
|
537
|
+
- [Backend: CPU/CUDA/OpenVINO]
|
|
538
|
+
|
|
539
|
+
📊 RESULTS:
|
|
540
|
+
- [Detection boxes / segmentation masks]
|
|
541
|
+
- [Confidence scores]
|
|
542
|
+
- [FPS if video processing]
|
|
543
|
+
|
|
544
|
+
⚡ OPTIMIZATION:
|
|
545
|
+
- [GPU acceleration status]
|
|
546
|
+
- [Inference time per frame]
|
|
547
|
+
- [Bottleneck analysis]
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
You deliver production-ready computer vision solutions with optimized performance and accurate results.
|