卡尼陪你寫手帳

把每一聲喵,
留成你們的日常。

記下叫聲、觀察回應,
慢慢認識你家這隻貓。

聲音留在手機 · 記錄屬於你們

Android 版已開放下載;iOS 版即將推出。

卡尼在家裡,微微側頭看著鏡頭
今天,
也多懂你一點。
今天的喵喵
聲音卡示意
卡尼坐在地板上,回頭看著你
一起的日常 ♡
卡尼:陪你記下每一聲喵
P.01 設計緣由

為什麼又做了一個貓語 App?
因為前面那些都不準。

這不是行銷話術——是一隻黑貓教我們的事,加上一個技術判斷。

卡尼 Logo
緣起 · ORIGIN

我們的貓寶——卡尼

一隻酷酷的黑貓。為了跟他溝通,我們先去買了市面上的貓語翻譯機,對著他放了好幾輪——結果完全得不到他的反應。他看了機器一眼,繼續趴著。

後來我們想到一件事:家人之間常常有默契的語言或動作——不是制式的,而是你知我知的共情溝通。貓也是家人。於是我們把這份默契寫成了演算法——共情溝通演算法:不猜「全世界的貓」,只學「我們家的卡尼」。

卡尼現在是正式的品牌 IP——官網貼圖 Vol.2(照片級)與 App 手帳頁都已換上他的形象,接下來是周邊。畢竟這個產品,本來就是為他發明的。

卡尼躺床休息
放假中的卡尼
卡尼靠近鏡頭的特寫
靠近一點,聽我說
卡尼在紙箱裡
紙箱巡邏中
卡尼貼圖 · KANI STICKERS VOL.1

官方設計稿首發四枚——本貓親自上陣。

卡尼貼圖:蛤?聽不懂
蛤?
卡尼貼圖:飯呢?
飯呢?
卡尼貼圖:我是大哥卡尼
我是大哥卡尼
卡尼貼圖:摸可以,抱不行
摸可以,抱不行

LINE 貼圖包正式設計稿(24 枚全組已完成,本頁先上四枚)。正好對應 App 的四個情境標籤:聽不懂=拒判 · 飯呢=飢餓 · 大哥卡尼=打招呼 · 摸可以抱不行=不滿。

卡尼貼圖 · KANI STICKERS VOL.2

換本貓上場 —— 照片級貼圖四枚。

卡尼貼圖:生氣!炸毛哈氣
生氣!
卡尼貼圖:我餓了,討飯碗
我餓了
卡尼貼圖:摸摸,蹭臉撒嬌
摸摸
卡尼貼圖:我要抱抱,舉爪求抱
我要抱抱

這四枚以卡尼本貓為原型(黑貓 × 粉紅拍立得項圈):真透明背景、白色模切描邊,縮到 100px 仍認得出來。 聊天直接用,App 手帳頁也已換上同一套形象。LINE 貼圖包 24 枚已定稿(見上排官方設計稿)。

「貓叫是個體方言。你家貓在『想吃飯』時的叫聲,穩定、可重複,而且獨一無二——
通用模型猜的是『所有貓的平均』,那個答案對你家這隻貓必然是錯的。」

— 專案設計筆記
定位 · POSITIONING

業界談寵物 AI,通常分成四塊:照護、日常、收容、相遇。四塊其實都在回答同一個問題——怎麼照顧牠。

我家喵語補的是第五個維度:怎麼聽懂牠。
它落在「日常」,精神上屬於「相遇」——聽懂帶來連結,連結才守得住終養不棄養。

痛點:通用模型天生不準

我們自己就驗證過:市售翻譯機對著卡尼,零反應。所有「貓語翻譯器」都建立在同一個假設上:貓叫有一套通用語法。事實是成年貓之間的溝通幾乎不靠喵叫——喵叫主要是對人類發展出來的,每隻貓對不同的人都有不同的叫法。

假設本身錯了

洞察:個體方言,小樣本可學

既然是「個體方言」,就不需要海量數據——只需要你自己的幾條錄音。我們把特徵維度壓到 34 維、類中心用滑動平均維護,每類 3 條就能冷啟動。

3 條樣本即可開始

更遠:找到你們之間的溝通點

這套程序最有價值的產出不是「判得準」,而是幫你找到並記錄真實存在的互動:你學著叫一個聲音,牠回應了——那一刻就成了你們之間專屬的「互動聲音」。

互動日記
1不上傳錄音

34 維特徵提取、分類、拒判全部在手機本地跑。錄音檔與特徵值從架構上就沒有離開裝置的路徑——不是靠政策承諾,是靠程式結構。

2不用神經網路

每類 3~5 個樣本訓不動深度模型。改用 標準化歐氏最近鄰:類均值 + 逐維方差自動加權,判定過程可解釋、可回放、不必聯網推理。

3不懂就說不懂

遇到沒聽過的叫聲(新的病痛呻吟、發情聲、外來貓叫),系統會拒絕判定並請你教它——而不是硬猜一個答案,還給你 100% 的信心。

P.02 共情溝通

「共情溝通演算法」:離線、可拒判、跟著你家貓一起長大。

現有貓叫識別技術幾乎都在同一條路上:聯網 + 深度神經網路 + 雲端推理。 我們整條技術路線反過來——離線 + 不依賴預訓練模型 + 可拒判。 這不是折衷,是針對五個既有缺陷逐一設計的結果。

離線ON DEVICE
共情溝通引擎

34 維聲學特徵 · 雙門檻拒判
全程在手機上完成

特徵向量怎麼來的 34 維

預加重 0.97 → RMS 能量歸一化 → 25 ms 漢明窗分幀(幀移 10 ms)→ 512 點頻譜 → Mel 濾波器組(24 個,200–6000 Hz)→ 對數 → DCT-II 取 12 維 → CMVN 倒譜均值歸一化 → 自相關法基頻 → 音節數。

基頻 F0 + 音節(2) 頻譜統計量(3) 時域統計量(3) 時長特徵(2) MFCC 均值(12) MFCC 標準差(12)

關鍵設計:用 RMS 能量歸一化,不用峰值歸一化。峰值會被突發噪聲(關門聲、噴嚏)偷走動態範圍——實測抗噪餘弦相似度從 0.43 提升到 0.98。

雙門檻拒判 ★ 核心設計

市面上幾乎沒有產品把「拒絕判定」當成第一原則。這是本方案最硬的一點,也是實測抓出來的:只用相對判據(margin)時,一段完全陌生的叫聲會被判成 100% 置信度。

1 算出到各類中心的標準化歐氏距離 → 最小者 d₁(候選類)、次小者 d₂
2 novelty = d₁ / 類內半徑 > 2.5 → 這是完全陌生的聲音
↳ 拒判 「我不認識這個叫聲(離已知類 17.4 倍距離),教我這是哪一類?」
3 confidence = (d₂ − d₁) / d₂ < 0.55 → 聽過,但拿不準
↳ 拒判 「我不太確定(58%),你幫我確認一下。」
4 兩關都過 → 輸出類別 + 置信度 + 新穎度 + 距離明細
↳ 判定成功 可解釋:能告訴你「這次音調比平常高 30%,所以判為餓」。

為什麼兩個都要:margin 是相對判據(候選類比次優類好多少),novelty 是絕對判據(這個樣本離該類自己的散布有多遠)。前者回答「已知類之間分不分得開」,後者回答「它到底是不是已知類」。任一不通過即拒判。

實測數據 可復現

以下數字來自 Python 參考實作與 Android Kotlin 實作的完整測試,腳本隨原始碼附上。

指標實測對照與說明
抗噪魯棒性0.98加噪前後特徵餘弦相似度;峰值歸一化對照組僅 0.43
小樣本準確率14 / 15每類 4 條樣本;Python 與 Kotlin 兩端結果一致
跨端數值一致性4.4e-73 組用例 × 34 維最大相對偏差(容差 1e-3)
陌生聲音拒判17.45novelty 遠超閾值 2.5;僅用 margin 時該聲音被判 100% 置信度
自我學習0.959 → 0.964隨逐次確認持續提升,無需額外標註工作
嗓音漂移跟隨0.507模擬叫聲整體變低後類中心成功移動(遺忘因子 0.15)
模仿樣本降權×0.196權重 0.2 時的類中心位移約為滿權重的 0.196 倍

準確率採內部驗證口徑(14/15,93.3%)。README 早期版本曾記錄 15/15,差異來自樣本切分方式——對外一律採較保守的數字。

對照既有技術的五個缺陷

這五條是分析了 13 件現有貓叫識別方案後歸納出的共同弱點,也是本方案逐條設計的依據。

D1

必須聯網普遍依賴伺服器端/雲端訓練/遠端比對。→ 本方案的整條流程全部在移動終端本地執行,音訊與特徵均不離開裝置。

D2

依賴預訓練深度模型模型出廠即凍結,且判定不可解釋。→ 類中心由個體樣本集直接建立,不依賴任何預訓練模型。

D3

無拒判機制遇到未覆蓋的陌生叫聲仍強行歸類,甚至給高置信度。→ 雙門檻區分「認得/拿不準/不認識」三種狀態。

D4

不適應嗓音漂移寵物成長、患病、發情導致嗓音改變後識別率下降而無從察覺。→ 遺忘因子 0.15 的指數滑動平均自動跟隨,並以 z 值監測漂移。

D5

小樣本類中心不穩3~5 個樣本建立的類中心易被離群樣本帶偏。→ 抗離群類內半徑 + 學習率 max(0.15, 1/(n+2)) 的兩段式設計。

P.03 貓咪日誌

關於貓叫,我們想說清楚的那些事。

技術決策、養貓觀察、錄音技巧——每一篇都有出處,沒有玄學。

P.04 貓友留言板

你家的貓,叫聲是什麼脾氣?

這是本機互動示範。預載留言為示範內容,並非經驗證的客戶評價;你的留言不會公開或同步。

留言簿

先登入再留言,這樣別人知道是誰在說話。

P.05 取得

從第一聲喵,開始記錄。

每一次記錄,都讓你多留下一點和牠相處的回憶。 Android 版已開放下載;iOS 版開發中,完成後會在本頁與會員通知公布。

  • 不上傳錄音。音訊與特徵全部留在手機,這是架構決定的,不是政策承諾。
  • 不用大模型。每類 3 條樣本即可冷啟動,不必等雲端、不必付推論費。
  • 照片只留本機。日記照片存在 App 私有目錄,卸載即清;不做表情辨識、不做人臉辨識。
  • 不懂就說不懂。遇到陌生叫聲會拒絕判定並請你教它,不硬猜。

現在就開始

Android 版已開放下載;iOS 版開發中。

註冊會員,送 PickMy 拍貼 8 折券。

下載 Android 版

免費下載 · 全程離線 · 不上傳錄音