使用阿里云 API 進行聲音身份識別的方案

使用阿里云 API 進行聲音身份識別的方案

阿里云提供 智能語音交互(智能語音識別 ASR)聲紋識別(說話人識別) 服務,你可以利用 阿里云智能語音 API 進行 說話人識別,實現客戶身份驗證。


方案概述

  1. 準備工作

    • 注冊阿里云賬號
    • 開通 智能語音交互聲紋識別 服務
    • 獲取 AccessKey ID 和 AccessKey Secret
  2. 安卓端錄制音頻

    • 錄制用戶的語音數據(建議 PCM/WAV 格式)
    • 預處理音頻(降噪、去靜音)
  3. 上傳音頻到阿里云

    • 直接上傳到 阿里云 OSS
    • 通過 API 發送音頻數據流
  4. 調用阿里云聲紋識別 API

    • 提交音頻進行 用戶注冊
    • 識別當前用戶的 身份
    • 獲取返回結果,判斷用戶是否匹配
  5. 根據結果執行相應操作

    • 如果 匹配成功,執行登錄或身份確認
    • 如果 匹配失敗,提示重新錄制或拒絕訪問

步驟詳解

1. 開通阿里云智能語音服務

  • 登錄 阿里云智能語音服務
  • 進入 控制臺 開通 聲紋識別(Voiceprint Recognition)
  • 獲取 AccessKey ID 和 AccessKey Secret

2. 錄制音頻(安卓端)

使用 AudioRecord 錄制 PCM 格式的音頻:

private void startRecording() {int sampleRate = 16000; // 16kHz 采樣率(阿里云推薦)int bufferSize = AudioRecord.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT, bufferSize);audioRecord.startRecording();// 讀取音頻數據并保存到文件new Thread(() -> {byte[] audioData = new byte[bufferSize];File file = new File(getExternalFilesDir(null), "voice.pcm");try (FileOutputStream fos = new FileOutputStream(file)) {while (isRecording) {int read = audioRecord.read(audioData, 0, audioData.length);if (read > 0) {fos.write(audioData, 0, read);}}} catch (IOException e) {e.printStackTrace();}}).start();
}

📌 說明

  • 錄制 PCM 格式(阿里云推薦)。
  • 可轉換為 WAV,或上傳 PCM 直接識別。

3. 上傳音頻到阿里云

方法1:上傳至 OSS

  1. 在阿里云 對象存儲 OSS 創建存儲桶
  2. 使用 OSS SDK 上傳文件
  3. 在 API 請求中提供音頻 URL

方法2:直接上傳數據流

  • 通過 HTTP POST 方式直接上傳音頻數據
OkHttpClient client = new OkHttpClient();
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("audio", "voice.pcm",RequestBody.create(MediaType.parse("audio/pcm"),new File("/sdcard/voice.pcm"))).build();Request request = new Request.Builder().url("https://nls-gateway.aliyuncs.com/recognize").post(body).addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN").build();Response response = client.newCall(request).execute();
String responseData = response.body().string();
Log.d("阿里云響應", responseData);

📌 說明

  • 這里的 Authorization 需要換成 阿里云 API 鑒權信息
  • 你可以使用 OSS 存儲音頻,再傳遞 URL 進行識別

4. 調用阿里云聲紋識別 API

在阿里云 API 文檔中,常用接口:

  • 用戶注冊(Enroll)
  • 身份驗證(Verify)
  • 說話人識別(Identify)
示例:注冊用戶
OkHttpClient client = new OkHttpClient();
String json = "{ \"uid\": \"user123\", \"audio_format\": \"pcm\", \"audio\": \"BASE64_ENCODED_AUDIO\" }";RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
Request request = new Request.Builder().url("https://nls-gateway.aliyuncs.com/enroll").post(body).addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN").build();Response response = client.newCall(request).execute();
Log.d("注冊用戶", response.body().string());

📌 參數說明

  • uid:用戶 ID
  • audio:錄制的 PCM 音頻 Base64 編碼
  • audio_format:設置為 "pcm"
示例:身份識別
String json = "{ \"audio\": \"BASE64_ENCODED_AUDIO\" }";Request request = new Request.Builder().url("https://nls-gateway.aliyuncs.com/verify").post(RequestBody.create(MediaType.parse("application/json"), json)).addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN").build();Response response = client.newCall(request).execute();
Log.d("身份驗證", response.body().string());

📌 返回結果

  • 匹配成功:返回 uid,表示是哪個用戶
  • 匹配失敗:返回 error_code,可提示重新錄制

5. 處理返回數據

根據阿里云 API 響應:

{"request_id": "xxxx","result": {"uid": "user123","score": 98.5},"status": "success"
}

在 Android 代碼中解析:

JSONObject jsonResponse = new JSONObject(responseData);
if (jsonResponse.getString("status").equals("success")) {String userId = jsonResponse.getJSONObject("result").getString("uid");double score = jsonResponse.getJSONObject("result").getDouble("score");if (score > 90) {Log.d("身份驗證", "匹配成功,用戶:" + userId);} else {Log.d("身份驗證", "匹配失敗,分數:" + score);}
}

完整流程

? 錄制用戶語音
? 上傳音頻到 OSS 或直接上傳數據
? 調用 阿里云聲紋 API 進行注冊/驗證
? 返回結果,判斷是否匹配


擴展

  • 本地離線方案:如果想 離線識別,可以用 Vosk + TensorFlow 實現聲紋匹配。
  • 安全性:可結合 人臉識別 提升身份驗證的準確度。
  • 優化體驗:避免用戶長時間等待,使用 多線程 處理 API 請求。

總結

🚀 阿里云 API 是最簡單的方案,但依賴 網絡
🚀 本地方案更快,但需要訓練模型。
🚀 推薦結合人臉 + 聲音,提高安全性。

你是希望 云端 API 方案 還是 本地方案?有具體的 設備需求 嗎?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71659.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Pandas】pandas Series unstack

Pandas2.2 Series Computations descriptive stats 方法描述Series.argsort([axis, kind, order, stable])用于返回 Series 中元素排序后的索引位置的方法Series.argmin([axis, skipna])用于返回 Series 中最小值索引位置的方法Series.argmax([axis, skipna])用于返回 Series…

大模型發展歷程

大模型的發展歷程 大語言模型的發展歷程一、語言模型是個啥?二、語言模型的 “進化史”(一)統計語言模型(SLM)(二)神經語言模型(NLM)(三)預訓練語…

springboot項目使用中創InforSuiteAS替換tomcat

springboot項目使用中創InforSuiteAS替換tomcat 學習地址一、部署InforSuiteAS1、部署2、運行 二、springboot項目打包成war包 特殊處理1、pom文件處理1、排除內嵌的tomcat包2、新增tomcat、javax.servlet-api3、打包格式設置為war4、打包后的項目名稱5、啟動類修改1、原來的不…

Seata

Seata是一款開源的分布式事務解決方案,由阿里巴巴發起并維護,旨在幫助應用程序管理和協調分布式事務。以下是對Seata的詳細介紹: 一、概述 Seata致力于提供高性能和簡單易用的分布式事務服務,它為用戶提供了AT、TCC、SAGA和XA等…

Pytest自動化框架

Pytest簡單介紹 下載pytest pip install pytest 第一章:Pytest console命令 默認需要test開頭的py模塊,test_開頭的方法 1.pytest 執行pytest命令會自動匹配到test開頭或者結尾的文件 將其作為測試用例文件執行,在測試用例文件中自動匹配到test開…

【spring】注解版

1.管理bean 之前我們要想管理bean都是在xml文件中將想要添加的bean手動添加進ioc容器中,這樣太過麻煩了,在 Java 開發里,針對一些較為繁瑣的操作,通常會有相應的簡化方式,這個也不例外,就是spring提供的注…

RV1126+FFMPEG多路碼流監控項目

一.項目介紹: 本項目采用的是易百納RV1126開發板和CMOS攝像頭,使用的推流框架是FFMPEG開源項目。這個項目的工作流程如下(如上圖):通過采集攝像頭的VI模塊,再通過硬件編碼VENC模塊進行H264/H265的編碼壓縮,并把壓縮后的…

13.IIC-EEPROM(AT24C02)

1.為什么需要EEPROM? 在單片機開發中,斷電數據保存是常見的需求。例如,智能家居設備的用戶設置、電子秤的校準參數等都需要在斷電后仍能保留。AT24C02作為一款IIC接口的EEPROM芯片,具備以下優勢: 非易失性存儲:斷電后…

ubuntu22.04安裝P104-100一些經驗(非教程)

一、版本: 系統:ubuntu-22.04.5-desktop-amd64.iso Nvidia 驅動:NVIDIA-Linux-x86_64-570.124.04.run。官網下載即可 二、經驗 1、通用教程? 直接關鍵詞搜“ubuntu p104”會有一些教程,比如禁用nouveau等 安裝參考&#xff1a…

TCP7680端口是什么服務

WAF上看到有好多tcp7680端口的訪問信息 于是上網搜索了一下,確認TCP7680端口是Windows系統更新“傳遞優化”功能的服務端口,個人理解應該是Windows利用這個TCP7680端口,直接從內網已經具備更新包的主機上共享下載該升級包,無需從微…

OSI七大模型 --- 發送郵件

我想通過電子郵件發送一張照片給我的朋友。從我開始寫郵件到發送成功,按照這個順序講一下我都經歷了OSI模型的哪一層,對應的層使用了什么樣的協議? 完整流程示例(補充物理層細節) 假設你通過Wi-Fi發送郵件&#xff1a…

LINUX網絡基礎 [一] - 初識網絡,理解網絡協議

目錄 前言 一. 計算機網絡背景 1.1 發展歷程 1.1.1 獨立模式 1.1.2 網絡互聯 1.1.3 局域網LAN 1.1.4 廣域網WAN 1.2 總結 二. "協議" 2.1 什么是協議 2.2 網絡協議的理解 2.3 網絡協議的分層結構 三. OSI七層模型(理論標準) …

【LLms】關鍵詞提取

1. 停用詞 在文本處理和信息檢索領域,停用詞(Stop Words)是指在文本中出現頻率較高,但通常不包含實際語義信息或對語義理解貢獻較小的詞匯。這些詞匯通常是一些常見的功能詞,如冠詞、介詞、連詞、代詞、感嘆詞、助動詞…

1998-2022年各地級市三次產業占比/地級市國內生產總值構成/地級市第一產業占比、第二產業占比、第三產業占比數據(全市)

1998-2022年各地級市三次產業占比/地級市國內生產總值構成/地級市第一產業占比、第二產業占比、第三產業占比數據(全市) 1、時間:1998-2022年 2、指標:第一產業占比、第二產業占比、第三產業占比 3、來源:城市統計年…

基于STM32的簡易出租車計費設計(Proteus仿真+程序+設計報告+原理圖PCB+講解視頻)

這里寫目錄標題 1.主要功能資料下載鏈接:2.仿真3. 程序4. 原理圖PCB5. 實物圖6. 設計報告7. 下載鏈接 基于STM32的簡易出租車計費設計(Proteus仿真程序設計報告原理圖PCB講解視頻) 仿真圖proteus 8.9 程序編譯器:keil 5 編程語言&#xff1…

HAL庫啟動ADC的三個函數的區別

HAL_ADC_Start 應該是啟動ADC轉換的最基本函數。只是啟動一次轉換,然后需要用戶自己去查詢轉換是否完成,或者可能只是單次轉換。比如,當調用這個函數后,ADC開始轉換,但程序需要不斷檢查某個標志位來看轉換是否完成&am…

EXIT原理和使用

要用到的控制器NVIC(中斷總控制器)、EXIT(外部中斷控制器) (EXIT是NVIC是下屬) GPIO外部中斷簡圖 EXIT的基本概念 EXIT主要特性 EXTI工作原理框圖(從輸入線開始看) 6個寄存器 EXTI和IO的映射關系 AFIO簡介 EXTI與IO對應關系 如…

經典核密度估計(Kernel Density Estimation):從直覺到數學

經典核密度估計(Kernel Density Estimation):從直覺到數學 作為一名在大模型時代進入深度學習領域的研究者,你可能對 Transformer、擴散模型等現代技術駕輕就熟。然而,在閱讀一些生成模型的文獻(如 Explic…

Halcon 算子 一維碼檢測識別、項目案例

首先我們要明白碼的識別思路 把窗口全部關閉讀取新的圖片圖像預處理創建條碼模型設置模型參數搜索模型獲取條碼結果顯示條碼結果 圖像預處理和條碼增強 對比度太低: scale_image(或使用外部程序scale_image_range),增強圖像的對比度圖像模糊…

vue-cli3+vue2+elementUI+avue升級到vite+vue3+elementPlus+avue總結

上一個新公司接手了一個vue-cli3vue2vue-router3.0elementUI2.15avue2.6的后臺管理項目,因為vue2在2023年底已經不更新維護了,elementUI也只支持到vue2,然后總結了一下vue3的優勢,最后批準升級成為了vitevue3vue-router4.5element…