OKO:為隱形使用者而設計

8 分鐘閱讀 225 字
OKO:為隱形使用者而設計 screenshot

「最好的無障礙設計是隱形的——它就是能用。」——AYES 團隊理念

OKO 是一款為盲人及低視能使用者設計的行人穿越輔助應用程式,於 2023 年榮獲 Apple Design Award 社會影響力獎。這款應用程式利用 iPhone 相機與裝置端機器學習來偵測行人號誌狀態(可通行、禁止通行、倒數計時),並透過觸覺回饋與空間音訊將結果傳達給使用者。使用者只需將手機對準行人穿越號誌,OKO 就會告知何時可以安全通過——完全不需要看螢幕。

這是設計最本質的體現。OKO 幾乎沒有傳統意義上的視覺介面。沒有網格、沒有卡片、沒有色彩系統、沒有字體層級。取而代之的是,設計挑戰完全聚焦於非視覺溝通:如何在嘈雜且不可預測的都市環境中,透過振動模式和聲音傳遞攸關安全的資訊。OKO 迫使設計師重新思考——當螢幕不再是媒介時,「介面」究竟意味著什麼。


為什麼 OKO 很重要

主要成就: - 榮獲 Apple Design Award 社會影響力獎(2023),這是 Apple 平台上對具影響力設計的最高肯定 - 證明了最具影響力的設計作品可能完全沒有視覺元素 - 創造了一套觸覺語言,能傳達二元狀態(安全/不安全)並帶有細微差異(信心程度、倒數感知) - 展示了裝置端機器學習可以在無需網路的情況下即時服務無障礙需求 - 解決了真實存在的市政無障礙缺口:全球大多數路口缺乏無障礙行人號誌(APS)


重點摘要

  1. 最好的介面可能是沒有介面 - OKO 的主要互動方式是觸覺與聽覺;螢幕的存在是為了設定及陪同的明眼人,而非核心使用者
  2. 觸覺回饋是一種設計語言 - 不同的振動模式不僅傳達二元狀態,還能表達信心程度、狀態轉換與緊急程度
  3. 音訊優先的使用者體驗需要空間思維 - 聲音必須傳達方向與距離,而不僅僅是存在感,因為盲人使用者是在三維環境中導航
  4. 市政基礎設施存在設計缺口 - 大多數路口缺乏無障礙號誌;OKO 揭示了公共設計在多大程度上預設了視力正常
  5. 為極端情境設計能改善一切 - 為盲人使用者設計的限制條件所產生的互動模式(觸覺確認、音訊回饋)能提升所有應用程式的體驗

核心設計原則

1. 非視覺互動設計

OKO 的核心互動沒有視覺元素。使用者將手機對準行人穿越號誌,OKO 透過振動和聲音進行溝通。

互動模型:

使用者動作:         系統回應:

將手機對準           穩定脈衝:「我看到號誌了」
行人穿越號誌         ┌──────────────────────────┐
                     │  ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙   │  輕柔重複的點觸
                     └──────────────────────────┘

偵測到號誌:         可通行號誌:
可通行               ┌──────────────────────────┐
                     │  ━━━━━━━━━━━━━━━━━━━━━━  │  強烈持續振動
                     │  + 上升音調               │  + 上升音調
                     └──────────────────────────┘

偵測到號誌:         禁止通行號誌:
禁止通行             ┌──────────────────────────┐
                     │  ∙   ∙   ∙   ∙   ∙   ∙  │  緩慢、間隔的點觸
                     │  + 低沉音調               │  + 下降音調
                     └──────────────────────────┘

偵測到號誌:         倒數計時(時間即將用盡):
倒數計時             ┌──────────────────────────┐
                     │  ∙∙ ∙∙ ∙∙ ∙∙ ∙∙ ∙∙ ∙∙   │  加速的雙點觸
                     │  + 緊急音調               │  節奏加快
                     └──────────────────────────┘

重要的設計決策: - 可通行 = 持續強烈振動。 正面狀態必須是最不容模糊的。盲人使用者的安全取決於正確理解「現在可以安全通過」。沒有模稜兩可的空間。 - 禁止通行 = 間隔輕柔的點觸。 負面狀態是平靜的,而非令人警覺的。令人緊張的振動會造成壓力;使用者只需要知道「還不行」。 - 倒數計時 = 加速的節奏。 借鑑無障礙行人號誌的可聽蜂鳴聲,加速的節奏傳達「時間快用完了」,而無需使用者計數。 - 未偵測到號誌 = 靜默。 如果 OKO 無法確信地辨識號誌狀態,它選擇不傳達任何訊息而非猜測。在攸關安全的設計中,靜默(無資訊)比錯誤資訊更安全。


2. 觸覺回饋作為設計語言

OKO 的觸覺模式不是隨機的振動。它們構成一套具有語法和詞彙的完整語言。

// 觸覺模式詞彙(概念性)

// 可通行:強烈、持續、自信
// 使用 CHHapticEvent 搭配持續強度
let walkPattern: [CHHapticEvent] = [
    CHHapticEvent(
        eventType: .hapticContinuous,
        parameters: [
            CHHapticEventParameter(
                parameterID: .hapticIntensity,
                value: 0.9    // 高強度 = 自信
            ),
            CHHapticEventParameter(
                parameterID: .hapticSharpness,
                value: 0.5    // 中等銳度 = 堅定但不刺耳
            )
        ],
        relativeTime: 0,
        duration: 2.0
    )
]

// 禁止通行:輕柔、間隔、耐心
let dontWalkPattern: [CHHapticEvent] = stride(
    from: 0, to: 3.0, by: 0.5
).map { time in
    CHHapticEvent(
        eventType: .hapticTransient,
        parameters: [
            CHHapticEventParameter(
                parameterID: .hapticIntensity,
                value: 0.3    // 低強度 = 不緊急
            ),
            CHHapticEventParameter(
                parameterID: .hapticSharpness,
                value: 0.2    // 柔和銳度 = 溫和
            )
        ],
        relativeTime: time
    )
}

// 倒數計時:加速節奏
func countdownPattern(secondsRemaining: Int) -> [CHHapticEvent] {
    // 間隔隨時間減少而縮短
    // 10 秒:每 500ms 點觸一次
    //  5 秒:每 250ms 點觸一次
    //  2 秒:每 125ms 點觸一次
    let interval = max(0.125, Double(secondsRemaining) / 20.0)
    // ... 生成間隔遞減的模式
}

觸覺設計原則: - 強度 = 信心。 強烈的振動代表 OKO 非常確定。較弱的振動代表信心較低。這對應了現實世界的直覺:堅定的握手傳達確定感。 - 節奏 = 緊急程度。 較快的模式意味著「立即行動」。較慢的模式意味著「等待」。這跨越文化普遍適用,無需學習。 - 靜默 = 不確定。 當 OKO 無法判斷號誌狀態時,它不會振動。這是最重要的設計決策:在攸關安全的情境中,沒有回饋比錯誤回饋更安全。 - 銳度 = 注意力需求。 尖銳的點觸要求注意力。柔和的嗡鳴提供環境感知。可通行號誌使用中等銳度——足以被注意到,又足夠柔和不會造成疲勞。


3. 音訊優先的使用者體驗與空間感知

OKO 的音訊提示是為在三維都市環境中導航、戴著耳機(或使用手機喇叭)且身處交通噪音中的使用者而設計的。

音訊設計需求: - 必須在交通噪音中可聽見,但又不能大到遮蓋使用者需要聽到的環境聲音(接近的車輛、其他行人) - 必須立即傳達狀態變化——號誌變換與音訊提示之間半秒的延遲都可能是危險的 - 必須同時支援喇叭和耳機(許多盲人使用者會戴著一隻耳機使用導航應用程式) - 不能與其他常見的應用程式聲音混淆(通知鈴聲、VoiceOver 提示)

音訊詞彙:

可通行:
  ┌─ 上升雙音 ────────────────────────────┐
  │  ♪ 低 → 高(大調音程)                │
  │  持續時間:400ms                       │
  │  特性:明亮、清晰、肯定               │
  └───────────────────────────────────────┘

禁止通行:
  ┌─ 單一低音 ────────────────────────────┐
  │  ♪ 持續低音(小調音)                  │
  │  持續時間:300ms                       │
  │  特性:平靜、不令人驚慌               │
  └───────────────────────────────────────┘

倒數計時:
  ┌─ 有節奏的點擊聲 ──────────────────────┐
  │  ♪ 嗒...嗒..嗒.嗒.嗒嗒嗒嗒           │
  │  持續時間:與剩餘時間一致             │
  │  特性:加速、緊迫                     │
  └───────────────────────────────────────┘

號誌遺失:
  ┌─ 下降音調 ────────────────────────────┐
  │  ♪ 高 → 低(輕柔淡出)               │
  │  持續時間:500ms                       │
  │  特性:「我失去追蹤了,請重新對準」   │
  └───────────────────────────────────────┘

關鍵設計選擇: 可通行號誌是上升音程(樂觀、肯定),而禁止通行號誌是低沉持續音(平靜、等待中)。這並非隨意決定。上升音程在跨文化中普遍與正面結果相關聯。低沉持續音與等待相關聯。OKO 利用這些普遍性的聯想,使初次使用者無需訓練就能直覺理解其含義。


值得借鑑的設計模式

為零視覺互動而設計

OKO 的非視覺設計方法產生了遠超無障礙領域的適用模式:

透過觸覺進行確認:

// 任何應用程式都可以使用觸覺確認
// 不只是顯示綠色勾號:

// 成功:單次強烈點觸
let successFeedback = UIImpactFeedbackGenerator(style: .heavy)
successFeedback.impactOccurred()

// 錯誤:三次快速輕點
let errorFeedback = UIImpactFeedbackGenerator(style: .light)
for delay in [0, 0.1, 0.2] {
    DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
        errorFeedback.impactOccurred()
    }
}

// 警告:兩次中等點觸
let warningFeedback = UIImpactFeedbackGenerator(style: .medium)
for delay in [0, 0.15] {
    DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
        warningFeedback.impactOccurred()
    }
}

更廣泛的啟示: 大多數應用程式將觸覺回饋視為事後考量——任何通知都是同一種嗡嗡聲。OKO 證明了觸覺可以承載語義:不同的模式對應不同的狀態。這讓所有人都能更好地使用應用程式,而不僅僅是視障使用者。「付款已確認」的強烈點觸與「收到訊息」的輕柔點觸感受截然不同,使用者會在不知不覺中學會這些模式。

攸關安全的設計原則

OKO 運作在一個設計錯誤可能造成身體傷害的環境中。其原則適用於任何與安全相關的介面(醫療、汽車、工業):

  1. 靜默失敗,而非大聲失敗。 在不確定時,OKO 不提供回饋而非提供錯誤回饋。在安全情境中,虛假的信心比承認不確定性更危險。

  2. 先二元,後細節。 首要溝通是二元的:安全或不安全。細節(倒數計時、信心程度)是疊加在上面的。使用者的第一個問題(「我可以過嗎?」)在任何額外細節之前先得到明確的是/否回答。

  3. 冗餘通道。 OKO 同時透過觸覺和音訊進行溝通。如果使用者錯過了一個通道(嘈雜環境淹沒音訊、厚手套削弱觸覺),另一個通道仍然能傳遞訊息。

  4. 無需學習。 觸覺和音訊模式利用普遍性聯想(上升 = 正面、快速 = 緊急),使初次使用者無需教學即可理解。攸關安全的介面不能假設使用者受過訓練。

攸關安全的設計層級:

1. 安全嗎?           → 二元回答(是/否)
2. 有多確定?         → 回饋的強度
3. 還有多少時間?     → 回饋的節奏
4. 我該怎麼做?       → 方向(通過/等待)
5. 什麼改變了?       → 轉換提示

每一層建立在前一層之上。
絕不跳過第 1 層直接到第 3 層。

結論

OKO 是大多數設計師永遠不會想到要研究的最重要設計案例,因為它挑戰了這門學科的根本假設:設計是視覺的。OKO 的核心使用者永遠不會看到它的應用程式圖示,永遠不會欣賞它的配色方案,永遠不會閱讀它的字體排版。整個設計挑戰是觸覺的、聽覺的、時序的。然而,所需的設計嚴謹度至少與任何視覺介面一樣高,因為攸關的是一個人在街道路口的人身安全。

OKO 教給我們的是:為最受限的使用者設計會產生最普遍的洞見。觸覺確認模式、音訊狀態溝通、先二元後細節的資訊層級、冗餘回饋通道,以及靜默失敗的錯誤處理——這些原則能提升每一款應用程式,而不僅僅是無障礙應用程式。當你為無法看到螢幕的人設計時,你會發現你的介面實際傳達了什麼,而非它僅僅顯示了什麼。

最適合學習: 如何以與視覺互動同等的嚴謹度設計非視覺互動,以及攸關安全的限制條件如何產生能提升所有軟體的設計原則(靜默失敗、冗餘通道、二元優先)。


常見問題

OKO 如何在沒有網路連線的情況下偵測行人穿越號誌?

OKO 透過 Apple 的 Core ML 框架使用裝置端機器學習,即時分析 iPhone 相機畫面。模型經過訓練以辨識標準行人號誌狀態(禁止通行手勢、行走人形、倒數計時器),並完全在裝置的 Neural Engine 上運行。不需要網路連線,這對於一款必須在行動網路收訊不佳的區域也能運作的安全工具至關重要。

為什麼 OKO 在無法偵測號誌時選擇靜默?

在攸關安全的設計中,虛假的信心比承認不確定性更危險。如果 OKO 在不確定時仍振動「可通行」,使用者可能會走入車流中。透過在不確定狀態下選擇靜默,OKO 清楚地傳達「我不知道」,促使使用者重新調整手機方向或使用其他線索(詢問附近行人、聆聽交通模式),而非信任錯誤的資訊。

OKO 的觸覺模式如何為觸覺敏感度降低的使用者服務?

OKO 將觸覺回饋與音訊提示冗餘配對,因此如果使用者感受不到振動(因神經病變、厚手套或手機保護殼),音訊通道仍然能傳遞完整訊息。應用程式也允許使用者獨立調整觸覺強度和音訊音量。雙通道方法確保失去一種回饋方式不會影響安全。

非無障礙應用程式能從 OKO 的設計中學到什麼?

OKO 證明了觸覺回饋可以承載超越「發生了某事」的語義。針對不同狀態(成功、錯誤、警告、進度)使用不同的振動模式,創造出一套無意識的詞彙,使任何應用程式都更好用。此外,OKO 的靜默失敗原則(沒有回饋優於錯誤回饋)、二元優先的資訊層級,以及冗餘回饋通道,適用於任何使用者信任至關重要的介面。

為什麼 OKO 獲得了 Apple Design Award 包容性獎?

OKO 解決了一個真實存在的市政基礎設施缺口:全球大多數路口缺乏無障礙行人號誌。OKO 沒有倡導基礎設施變革(那是一個長達數十年的過程),而是利用 iPhone 現有的相機和觸覺硬體創造了一個即時解決方案。這個獎項肯定了技術成就和設計理念——打造服務於那些通常被設計產業忽視的使用者的科技。


資源

  • App Store: OKO - Crosswalk
  • 開發者: AYES(專注於無障礙的開發工作室)
  • Apple Design Awards 2024: 包容性類別獲獎者
  • Core ML: Apple 的裝置端機器學習框架,實現即時號誌偵測