Spaces:
Sleeping
Sleeping
| set -euo pipefail | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| # ========================= | |
| # Edit parameters below, then run: | |
| # bash run_interface_b_single_pair.sh | |
| # ========================= | |
| # Optional: load weights from Hugging Face model repos (recommended). | |
| # export CARE_WEIGHT_STEP1_REPO_ID="Hongyang-Li/CARe_VesselSeg" | |
| # export CARE_WEIGHT_STEP2_REPO_ID="Hongyang-Li/CARe_OpticDiscFoveaDetection" | |
| # export CARE_WEIGHT_STEP3_REPO_ID="Hongyang-Li/CARe_Reg" | |
| # export CARE_WEIGHT_BROAD_REPO_ID="AIMClab-RUC/UNet_DCP_1024" | |
| # Backward-compatible single bundled repo: | |
| # export CARE_WEIGHTS_REPO_ID="your-name/care-weights" | |
| # Input images (required) | |
| OCTA_IMAGE="${SCRIPT_DIR}/examples/octa.jpg" | |
| WFCFP_IMAGE="${SCRIPT_DIR}/examples/wfcfp.jpg" | |
| # Output directory | |
| OUTPUT_DIR="${SCRIPT_DIR}/Output/demo_single_pair" | |
| # Step1 vessel segmentation model: CARe-VesselSeg / Broad domain retinal vessel segmentation [ICASSP 2025] | |
| SEG_MODEL="CARe-VesselSeg" | |
| # Registration mode: | |
| # - interface_b_retry: Interface-B logic (includes Step2 + retry routes) | |
| # - direct_no_crop: skip Step2 and cropping, run Step3 directly after Step1 (suitable for CFP-CFP) | |
| REGISTRATION_MODE="interface_b_retry" | |
| # Step1 broad-domain segmentation modality (effective only when SEG_MODEL=\"Broad domain retinal vessel segmentation [ICASSP 2025]\") | |
| # AUTO: infer from filename (contains OCTA/_001 -> OCTA, otherwise CFP) | |
| QUERY_MODALITY="AUTO" # AUTO / CFP / OCTA | |
| REFER_MODALITY="AUTO" # AUTO / CFP / OCTA | |
| # Step3 inlier method: RANSAC / LMEDS | |
| INLIER_METHOD="LMEDS" | |
| # Step3 retry trigger threshold (filtered inlier count) | |
| RETRY_FILTERED_INLIER_THRESHOLD="20" | |
| # Device: auto / cpu / cuda:0 | |
| DEVICE="auto" | |
| # Disable non-essential debug artifact generation/writing: 1=on, 0=off | |
| DISABLE_NONSESSENTIAL_IO="1" | |
| # Step3 config and weights | |
| CONFIG_PATH="${SCRIPT_DIR}/../Step3_Reg/Src/config/test.yaml" | |
| MODEL_PATH="${SCRIPT_DIR}/../Step3_Reg/Src/save/crop_vseg_vessel_111.pth" | |
| # Overwrite output if exists: 1=on, 0=off | |
| FORCE_RERUN="1" | |
| # Keep Step3 attempt route directories: 1=keep, 0=remove | |
| KEEP_ATTEMPT_DIRS="0" | |
| if [[ ! -f "${OCTA_IMAGE}" ]]; then | |
| echo "OCTA_IMAGE does not exist: ${OCTA_IMAGE}" >&2 | |
| exit 2 | |
| fi | |
| if [[ ! -f "${WFCFP_IMAGE}" ]]; then | |
| echo "WFCFP_IMAGE does not exist: ${WFCFP_IMAGE}" >&2 | |
| exit 2 | |
| fi | |
| ARGS=( | |
| --octa_image "${OCTA_IMAGE}" | |
| --wfcfp_image "${WFCFP_IMAGE}" | |
| --output_dir "${OUTPUT_DIR}" | |
| --seg_model "${SEG_MODEL}" | |
| --registration_mode "${REGISTRATION_MODE}" | |
| --query_modality "${QUERY_MODALITY}" | |
| --refer_modality "${REFER_MODALITY}" | |
| --inlier_method "${INLIER_METHOD}" | |
| --retry_filtered_inlier_threshold "${RETRY_FILTERED_INLIER_THRESHOLD}" | |
| --device "${DEVICE}" | |
| --config_path "${CONFIG_PATH}" | |
| --model_path "${MODEL_PATH}" | |
| ) | |
| if [[ "${FORCE_RERUN}" == "1" ]]; then | |
| ARGS+=(--force_rerun) | |
| fi | |
| if [[ "${KEEP_ATTEMPT_DIRS}" == "1" ]]; then | |
| ARGS+=(--keep_attempt_dirs) | |
| fi | |
| if [[ "${DISABLE_NONSESSENTIAL_IO}" == "1" ]]; then | |
| ARGS+=(--disable_nonessential_io) | |
| fi | |
| exec python "${SCRIPT_DIR}/run_interface_b_single_pair.py" "${ARGS[@]}" | |