Spaces:
Build error
Build error
Add UFPAlign Docker implementation - Fix MFA Portuguese model names in original Dockerfile - Add comprehensive UFPAlign Docker setup with Kaldi toolkit - Include Docker Compose configuration for multi-container deployment - Add Makefile with convenient commands for container management - Support for interactive shell, API service, and batch processing - Complete documentation for UFPAlign Brazilian Portuguese alignment
a80c875 | # UFPAlign Docker Management Makefile | |
| # Inspired by Docker containerizing test tooling best practices | |
| # Variables | |
| IMAGE_NAME := ufpalign | |
| HUB_NAMESPACE := your-namespace | |
| VERSION := $(shell date +'%Y%m%d') | |
| CONTAINER_NAME := ufpalign-container | |
| API_CONTAINER_NAME := ufpalign-api-container | |
| # Docker Compose files | |
| COMPOSE_FILE := docker-compose.ufpalign.yml | |
| # Color output | |
| RED := \033[31m | |
| GREEN := \033[32m | |
| YELLOW := \033[33m | |
| BLUE := \033[34m | |
| RESET := \033[0m | |
| .PHONY: help version-check clean-image image push test-container run-interactive run-api stop clean setup-dirs | |
| help: ## Show this help message | |
| @echo "$(BLUE)UFPAlign Docker Management$(RESET)" | |
| @echo "" | |
| @echo "$(GREEN)Available targets:$(RESET)" | |
| @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) | |
| version-check: ## Check current version and image status | |
| @echo "$(BLUE)Current version: $(VERSION)$(RESET)" | |
| @echo "$(BLUE)Checking for existing images:$(RESET)" | |
| @docker images | grep $(IMAGE_NAME) || echo "$(YELLOW)No existing images found$(RESET)" | |
| setup-dirs: ## Create necessary local directories | |
| @echo "$(GREEN)Creating local directories...$(RESET)" | |
| @mkdir -p audio_input text_input output textgrid logs | |
| @echo "$(GREEN)Directories created successfully$(RESET)" | |
| clean-image: version-check ## Remove existing Docker images | |
| @echo "$(RED)Removing existing images...$(RESET)" | |
| @docker rmi $(IMAGE_NAME):latest 2>/dev/null || true | |
| @docker rmi $(IMAGE_NAME):$(VERSION) 2>/dev/null || true | |
| @docker rmi $(HUB_NAMESPACE)/$(IMAGE_NAME):latest 2>/dev/null || true | |
| @docker rmi $(HUB_NAMESPACE)/$(IMAGE_NAME):$(VERSION) 2>/dev/null || true | |
| image: version-check ## Build the Docker image | |
| @echo "$(GREEN)Building UFPAlign Docker image...$(RESET)" | |
| @docker build -t $(IMAGE_NAME):$(VERSION) -f Dockerfile.ufpalign . | |
| @docker tag $(IMAGE_NAME):$(VERSION) $(IMAGE_NAME):latest | |
| @docker tag $(IMAGE_NAME):$(VERSION) $(HUB_NAMESPACE)/$(IMAGE_NAME):$(VERSION) | |
| @docker tag $(IMAGE_NAME):$(VERSION) $(HUB_NAMESPACE)/$(IMAGE_NAME):latest | |
| @echo "$(GREEN)Image built successfully$(RESET)" | |
| @docker images | grep $(IMAGE_NAME) | |
| push: clean-image image ## Build and push image to registry | |
| @echo "$(BLUE)Pushing images to registry...$(RESET)" | |
| @docker push $(HUB_NAMESPACE)/$(IMAGE_NAME):$(VERSION) | |
| @docker push $(HUB_NAMESPACE)/$(IMAGE_NAME):latest | |
| @echo "$(GREEN)Images pushed successfully$(RESET)" | |
| test-container: image ## Run UFPAlign tests in container | |
| @echo "$(GREEN)Running UFPAlign tests...$(RESET)" | |
| @docker run --rm --name ufpalign-test \ | |
| -v $(PWD)/temp_ufpalign/demo:/opt/UFPAlign/test_data:ro \ | |
| $(IMAGE_NAME):latest \ | |
| bash -c "cd /opt/UFPAlign && KALDI_ROOT=/opt/kaldi bash ufpalign.sh test_data/ex.wav test_data/ex.txt mono" | |
| run-interactive: setup-dirs image ## Run UFPAlign container interactively | |
| @echo "$(GREEN)Starting UFPAlign container in interactive mode...$(RESET)" | |
| @docker run -it --rm \ | |
| --name $(CONTAINER_NAME) \ | |
| -v $(PWD)/audio_input:/opt/UFPAlign/audio_input:ro \ | |
| -v $(PWD)/text_input:/opt/UFPAlign/text_input:ro \ | |
| -v $(PWD)/output:/opt/UFPAlign/output:rw \ | |
| -v $(PWD)/textgrid:/opt/UFPAlign/textgrid:rw \ | |
| -v $(PWD)/logs:/root/logs:rw \ | |
| $(IMAGE_NAME):latest bash | |
| run-api: setup-dirs image ## Run UFPAlign with API service | |
| @echo "$(GREEN)Starting UFPAlign API service...$(RESET)" | |
| @docker run -d \ | |
| --name $(API_CONTAINER_NAME) \ | |
| -p 7860:7860 \ | |
| -v $(PWD)/audio_input:/opt/UFPAlign/audio_input:ro \ | |
| -v $(PWD)/text_input:/opt/UFPAlign/text_input:ro \ | |
| -v $(PWD)/output:/opt/UFPAlign/output:rw \ | |
| -v $(PWD)/textgrid:/opt/UFPAlign/textgrid:rw \ | |
| -v $(PWD)/logs:/root/logs:rw \ | |
| -v $(PWD)/app.py:/opt/UFPAlign/app.py:ro \ | |
| $(IMAGE_NAME):latest \ | |
| uvicorn app:app --host 0.0.0.0 --port 7860 | |
| @echo "$(GREEN)API service started at http://localhost:7860$(RESET)" | |
| compose-up: setup-dirs ## Start services using Docker Compose | |
| @echo "$(GREEN)Starting UFPAlign services with Docker Compose...$(RESET)" | |
| @docker-compose -f $(COMPOSE_FILE) up -d | |
| @echo "$(GREEN)Services started$(RESET)" | |
| compose-down: ## Stop Docker Compose services | |
| @echo "$(RED)Stopping Docker Compose services...$(RESET)" | |
| @docker-compose -f $(COMPOSE_FILE) down | |
| @echo "$(GREEN)Services stopped$(RESET)" | |
| compose-logs: ## Show Docker Compose logs | |
| @docker-compose -f $(COMPOSE_FILE) logs -f | |
| stop: ## Stop running containers | |
| @echo "$(RED)Stopping UFPAlign containers...$(RESET)" | |
| @docker stop $(CONTAINER_NAME) 2>/dev/null || true | |
| @docker stop $(API_CONTAINER_NAME) 2>/dev/null || true | |
| @docker rm $(CONTAINER_NAME) 2>/dev/null || true | |
| @docker rm $(API_CONTAINER_NAME) 2>/dev/null || true | |
| @echo "$(GREEN)Containers stopped$(RESET)" | |
| clean: stop clean-image ## Clean up containers and images | |
| @echo "$(RED)Cleaning up Docker resources...$(RESET)" | |
| @docker system prune -f | |
| @echo "$(GREEN)Cleanup completed$(RESET)" | |
| demo: image ## Run a demo with provided sample files | |
| @echo "$(GREEN)Running UFPAlign demo...$(RESET)" | |
| @cp temp_ufpalign/demo/ex.wav audio_input/ 2>/dev/null || true | |
| @cp temp_ufpalign/demo/ex.txt text_input/ 2>/dev/null || true | |
| @docker run --rm \ | |
| --name ufpalign-demo \ | |
| -v $(PWD)/audio_input:/opt/UFPAlign/audio_input:ro \ | |
| -v $(PWD)/text_input:/opt/UFPAlign/text_input:ro \ | |
| -v $(PWD)/output:/opt/UFPAlign/output:rw \ | |
| -v $(PWD)/textgrid:/opt/UFPAlign/textgrid:rw \ | |
| $(IMAGE_NAME):latest \ | |
| bash -c "cd /opt/UFPAlign && KALDI_ROOT=/opt/kaldi bash ufpalign.sh audio_input/ex.wav text_input/ex.txt mono" | |
| @echo "$(GREEN)Demo completed. Check output/ and textgrid/ directories$(RESET)" | |
| shell: image ## Get a shell in the UFPAlign container | |
| @echo "$(GREEN)Opening shell in UFPAlign container...$(RESET)" | |
| @docker run -it --rm \ | |
| --name ufpalign-shell \ | |
| -v $(PWD)/audio_input:/opt/UFPAlign/audio_input:ro \ | |
| -v $(PWD)/text_input:/opt/UFPAlign/text_input:ro \ | |
| -v $(PWD)/output:/opt/UFPAlign/output:rw \ | |
| -v $(PWD)/textgrid:/opt/UFPAlign/textgrid:rw \ | |
| $(IMAGE_NAME):latest bash | |
| install-models: image ## Download and install UFPAlign models | |
| @echo "$(GREEN)Installing UFPAlign models...$(RESET)" | |
| @docker run --rm \ | |
| --name ufpalign-install-models \ | |
| -v $(PWD)/models:/opt/UFPAlign/models:rw \ | |
| $(IMAGE_NAME):latest \ | |
| bash -c "cd /opt/UFPAlign && \ | |
| utils/download_model.sh data /opt/UFPAlign && \ | |
| utils/download_model.sh mono /opt/UFPAlign && \ | |
| utils/download_model.sh tri1 /opt/UFPAlign && \ | |
| utils/download_model.sh tri2b /opt/UFPAlign && \ | |
| utils/download_model.sh tri3b /opt/UFPAlign && \ | |
| utils/download_model.sh tdnn /opt/UFPAlign && \ | |
| utils/download_model.sh ie /opt/UFPAlign" | |
| @echo "$(GREEN)Models installed successfully$(RESET)" |