2017-08-28 10:30:11 cyril0007 阅读数 854
  • AndroidStudio开发APP-脸脸[网络版]

    本项目可拓展为适用于人脸识别、人脸签到、出席会议等相关场景中。【项目源码放在最后一节的课件里了】脸脸【网络版】项目的实现技术支撑包括My SQL数据库服务器、Java Web后台管理和Android移动APP。其中后台管理使用My Eclipse集成开发工具和Tomcat服务器;Android移动APP使用Android Studio集成开发工具。 后台管理提供接口与Android移动APP进行数据交互功能描述1.人脸库 通过移动端APP采集数据信息,提交到后台处理,最后存储到数据库中;也可以直接批量的存储到数据库中,完成人脸库的数据采集。2.移动端APP 具备采集和签到两个功能,采集功能收集用户的人脸图像和个人基本信息。 签到功能,用户刷脸后,与后台采集的信息对比,并显示最终的结果信息,成功识别则进行语音播报,在后台记录存储记录。 附: 移动端的开发是基于“AndroidStudio开发APP-脸脸[单机版]”,所以这块不熟悉的可以先看[单机版]后再来学习[网络版]。 最近周围有施工的噼里啪啦的心烦意乱脑仁疼,但是全部知识点都ok,大家只需要在自己关心的地方拓展完善即可,我相信大家只要看了之后,肯定都会有所收获的。

    124 人正在学习 去看看 朱松

近期工作上在研究语音识别的东西,找到了nuance的开发文档,又恰好有相关apicloud的二次开发需求,简单的基于apicloud封装了下nuance接口的iOS和Android

相关源代码在github中可download。

https://github.com/goheavenz/nuanceSpeechRecognizer



关于语音识别的使用 可看

http://blog.csdn.net/nicolelili1/article/details/76623768

2016-12-27 11:04:56 weixin_36429334 阅读数 6367
  • AndroidStudio开发APP-脸脸[网络版]

    本项目可拓展为适用于人脸识别、人脸签到、出席会议等相关场景中。【项目源码放在最后一节的课件里了】脸脸【网络版】项目的实现技术支撑包括My SQL数据库服务器、Java Web后台管理和Android移动APP。其中后台管理使用My Eclipse集成开发工具和Tomcat服务器;Android移动APP使用Android Studio集成开发工具。 后台管理提供接口与Android移动APP进行数据交互功能描述1.人脸库 通过移动端APP采集数据信息,提交到后台处理,最后存储到数据库中;也可以直接批量的存储到数据库中,完成人脸库的数据采集。2.移动端APP 具备采集和签到两个功能,采集功能收集用户的人脸图像和个人基本信息。 签到功能,用户刷脸后,与后台采集的信息对比,并显示最终的结果信息,成功识别则进行语音播报,在后台记录存储记录。 附: 移动端的开发是基于“AndroidStudio开发APP-脸脸[单机版]”,所以这块不熟悉的可以先看[单机版]后再来学习[网络版]。 最近周围有施工的噼里啪啦的心烦意乱脑仁疼,但是全部知识点都ok,大家只需要在自己关心的地方拓展完善即可,我相信大家只要看了之后,肯定都会有所收获的。

    124 人正在学习 去看看 朱松

1,首先打开百度语音识别官网,注册一个账户成为开发者,接着创建一个应用,下载百度提供源代码 。

下载地址: http://yuyin.baidu.com/sdk/
官方文档地址:http://yuyin.baidu.com/docs/asr/54

sdk下载

下载demo

2,打开源代码,进行配置参数或修改要识别的语言文件

demo1

<?php 
define('AUDIO_FILE', "./text2audio_1.wav"); //语音文件地址,值支持本地

$url = "http://vop.baidu.com/server_api";

//put your params here
$cuid = "";
$apiKey = "";
$secretKey = "";

$auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=".$apiKey."&client_secret=".$secretKey;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $auth_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$response = curl_exec($ch);
if(curl_errno($ch))
{
    print curl_error($ch);
}
curl_close($ch);
$response = json_decode($response, true);
$token = $response['access_token'];

$audio = file_get_contents(AUDIO_FILE);
$base_data = base64_encode($audio);
$array = array(
        "format" => "wav",
        "rate" => 8000,
        "channel" => 1,
//        "lan" => "zh",
        "token" => $token,
        "cuid"=> $cuid,
        //"url" => "http://www.xxx.com/sample.pcm",
        //"callback" => "http://www.xxx.com/audio/callback",
        "len" => filesize(AUDIO_FILE),
        "speech" => $base_data,
        );
$json_array = json_encode($array);
$content_len = "Content-Length: ".strlen($json_array);
$header = array ($content_len, 'Content-Type: application/json; charset=utf-8');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_array);
$response = curl_exec($ch);
if(curl_errno($ch))
{
    print curl_error($ch);
}
curl_close($ch);
echo $response;
$response = json_decode($response, true);
var_dump($response);

demo2


define('AUDIO_FILE', "./text.wav");

//put your params here
$cuid = "";
$apiKey = "";
$secretKey = "";

$auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=".$apiKey."&client_secret=".$secretKey;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $auth_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$response = curl_exec($ch);
if(curl_errno($ch))
{
    print curl_error($ch);
}
curl_close($ch);
$response = json_decode($response, true);
$token = $response['access_token'];

$url = "http://vop.baidu.com/server_api?cuid=".$cuid."&token=".$token;
$url = $url."&lan=zh";
$audio = file_get_contents(AUDIO_FILE);
$content_len = "Content-Length: ".strlen($audio);
$header = array ($content_len,'Content-Type: audio/pcm; rate=8000',);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, $audio);
$response = curl_exec($ch);
if(curl_errno($ch))
{
    print curl_error($ch);
}
curl_close($ch);
echo $response;
$response = json_decode($response, true);
echo '<pre>';
var_dump($response);

3、运行文件识别,运行后发现调取接口成功,但是识别出来的正确率百分之一都不到,于是查看原因发现,百度语音识别只支持 8k/16k 采样率 16bit 位深的单声道语音,进行音频格式转换后正确率可达成80% 。

注意事项:
语音识别接口支持 POST 方式
目前 API 仅支持整段语音识别的模式,即需要上传整段语音进行识别
语音数据上传方式有两种:隐示发送和显示发送
原始语音的录音格式目前只支持评测 8k/16k 采样率 16bit 位深的单声道语音
压缩格式支持:pcm(不压缩)、wav、opus、speex、amr、x-flac
系统支持语言种类:中文(zh)、粤语(ct)、英文(en)

4、因为是调用接口测试所以在转换音频格式使用的是格式工厂,如果项目需要可使用代码自动转换(自行百度)

这里写图片描述

这里写图片描述

这里写图片描述

然后进行确认转换得出来的格式再进行测试即可,谢谢~

2019-08-23 14:41:13 u011560555 阅读数 254
  • AndroidStudio开发APP-脸脸[网络版]

    本项目可拓展为适用于人脸识别、人脸签到、出席会议等相关场景中。【项目源码放在最后一节的课件里了】脸脸【网络版】项目的实现技术支撑包括My SQL数据库服务器、Java Web后台管理和Android移动APP。其中后台管理使用My Eclipse集成开发工具和Tomcat服务器;Android移动APP使用Android Studio集成开发工具。 后台管理提供接口与Android移动APP进行数据交互功能描述1.人脸库 通过移动端APP采集数据信息,提交到后台处理,最后存储到数据库中;也可以直接批量的存储到数据库中,完成人脸库的数据采集。2.移动端APP 具备采集和签到两个功能,采集功能收集用户的人脸图像和个人基本信息。 签到功能,用户刷脸后,与后台采集的信息对比,并显示最终的结果信息,成功识别则进行语音播报,在后台记录存储记录。 附: 移动端的开发是基于“AndroidStudio开发APP-脸脸[单机版]”,所以这块不熟悉的可以先看[单机版]后再来学习[网络版]。 最近周围有施工的噼里啪啦的心烦意乱脑仁疼,但是全部知识点都ok,大家只需要在自己关心的地方拓展完善即可,我相信大家只要看了之后,肯定都会有所收获的。

    124 人正在学习 去看看 朱松

最近研究了一下百度云AI,和科大讯飞、阿里、腾讯,各大公司都提供了全面的ai接口和文档,对一位入门或者初学者来说挺好的,如果想深入研究的还可以直接翻源码学习。这里就简单写了一个语音识别的功能。后面会不断更新人脸识别等相关ai方面的东西。

首先,上百度云注册账号,然后再“人工智能”-“语音识别”下创建一个自己的应用,创建完后会得到,APPID,APIKEY,SERET KEY, 这几个熟悉对于一个经常写接口的人都应该会知道,是用来获取百度ai提供的token的,然后通过token才能方位百度云AI上面的相关接口。

在这里插入图片描述

接着,创建完用户后,就可以左边的下拉菜单中查找对应的技术文档,和下载SDK。
在这里插入图片描述

SDK,地址https://github.com/Baidu-AIP/java-sdk,目前版本是 4.8.0最新的,里面有相关源码。

继续,阅读完技术文档后,开始写demo,本人使用eclipse,创建maven项目,然后pom
文件引入百度ai包,

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
	    <groupId>com.baidu.aip</groupId>
	    <artifactId>java-sdk</artifactId>
	    <version>4.8.0</version>
	</dependency>
    <dependency>
        <groupId>com.googlecode.soundlibs</groupId>
        <artifactId>mp3spi</artifactId>
        <version>1.9.5.4</version>
     </dependency>
  </dependencies>

然后,创建demo 代码;

package com.ai.asr.util;

import org.json.JSONException;
import org.json.JSONObject;

import com.baidu.aip.speech.AipSpeech;

public class Sample2 {
	//设置APPID/AK/SK
    public static final String APP_ID = "你的 ID";
    public static final String API_KEY = "你懂的";
    public static final String SECRET_KEY = "你的";
    private static final String testFileName = "C:\\Users\\johndgj\\Desktop\\20190101学习记录表\\test.pcm"; // 百度语音提供技术支持

    public static void main(String[] args) {
        // 初始化一个AipSpeech
        AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
//        System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

        // 调用接口
        JSONObject res = client.asr(testFileName, "pcm", 16000, null);
        try {
			System.out.println(res.toString(2));
		} catch (JSONException e) {
			e.printStackTrace();
		}
        
    }

}

最后,跑一下,完成了

{
  "corpus_no": "6728201278371111763",
  "err_msg": "success.",
  "err_no": 0,
  "result": ["北京科技馆。"],
  "sn": "285721224311566531434"
}

总结,这是比较简单的案例,想了解更深的,没有比研究源码更好的了。还有另外一个问题就是 现在的录音等文件都是 MP3,或MP4等其他格式的,要把这些转换成PCM文件,才能识别。后面会更新如果将MP3或其他文件转换为PCM,并进行识别。

2012-09-07 13:24:22 maimode 阅读数 111
  • AndroidStudio开发APP-脸脸[网络版]

    本项目可拓展为适用于人脸识别、人脸签到、出席会议等相关场景中。【项目源码放在最后一节的课件里了】脸脸【网络版】项目的实现技术支撑包括My SQL数据库服务器、Java Web后台管理和Android移动APP。其中后台管理使用My Eclipse集成开发工具和Tomcat服务器;Android移动APP使用Android Studio集成开发工具。 后台管理提供接口与Android移动APP进行数据交互功能描述1.人脸库 通过移动端APP采集数据信息,提交到后台处理,最后存储到数据库中;也可以直接批量的存储到数据库中,完成人脸库的数据采集。2.移动端APP 具备采集和签到两个功能,采集功能收集用户的人脸图像和个人基本信息。 签到功能,用户刷脸后,与后台采集的信息对比,并显示最终的结果信息,成功识别则进行语音播报,在后台记录存储记录。 附: 移动端的开发是基于“AndroidStudio开发APP-脸脸[单机版]”,所以这块不熟悉的可以先看[单机版]后再来学习[网络版]。 最近周围有施工的噼里啪啦的心烦意乱脑仁疼,但是全部知识点都ok,大家只需要在自己关心的地方拓展完善即可,我相信大家只要看了之后,肯定都会有所收获的。

    124 人正在学习 去看看 朱松

本文介绍使用android.speech包下的api实现一个简单的语音识别例子。

 

speech api参考:http://developer.android.com/intl/zh-CN/reference/android/speech/package-summary.html

 

android开发入门参考:http://maimode.iteye.com/blog/1634268

 

下文给出核心的代码部分:

 

EgSpeechActivity(启动的activity)

 

package com.example.androideg.speech;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class EgSpeechActivity extends Activity implements OnClickListener {
	 public final static String EXTRA_MESSAGE = "com.example.androideg.speech.MESSAGE";
	 
	 private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;  
	 private static final String SPEECH_PROMPT = "请讲话";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
		// 检查是否存在recognition activity
		PackageManager pm = getPackageManager();
		List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
				RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
		Button btn = (Button) findViewById(R.id.btn_speek);
		if (activities.size() != 0) {
			//如果存在recognition activity则为按钮绑定点击事件
			btn.setOnClickListener(this);
		} else {
			// 如果不存在则禁用按钮
			btn.setEnabled(false);
			btn.setText("语音识别不可用");
		}

    }

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.btn_speek){
			startVoiceRecognitionActivity();
		}
	}
	
	/**
	 * 启动语音识别activity,接收用户语音输入
	 */
	private void startVoiceRecognitionActivity(){
		//通过Intent传递语音识别的模式  
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
        //语言模式:自由形式的语音识别  
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        //提示语音开始  
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, SPEECH_PROMPT);  
        //开始执行我们的Intent、语音识别  并等待返回结果
        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// 确定是语音识别activity返回的结果
		if (requestCode == VOICE_RECOGNITION_REQUEST_CODE){
			// 确定返回结果的状态是成功
			if (resultCode == RESULT_OK){
				// 获取语音识别结果  
	            ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);  
	            startDisplayMessageActivity(matches);
			}
		}
		
		super.onActivityResult(requestCode, resultCode, data);
	}
	
	/**
	 * 启动展示activity,显示识别结果
	 * @param message
	 */
	private void startDisplayMessageActivity(ArrayList<String> strList){
		Intent intent = new Intent(this, DisplayMessageActivity.class);
    	intent.putExtra(EXTRA_MESSAGE, strList);
    	startActivity(intent);
	}
}

相应的layout文件activity_main.xml:

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".EgSpeechActivity" >


    <Button
        android:id="@+id/btn_speek"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button_speak" />

</LinearLayout>

 

DisplayMessageActivity(用于展示识别结果):

 

 

package com.example.androideg.speech;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class DisplayMessageActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		// 设置布局
		setContentView(R.layout.activity_display_message);
		
		// 从intent中获取数据
		Intent intent = getIntent();
		ArrayList<String> strList = intent.getStringArrayListExtra(EgSpeechActivity.EXTRA_MESSAGE);

		//找到list,然后赋值
		ListView list = (ListView) findViewById(R.id.list);
		list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strList));
    }

}
 

 相应的layout文件activity_display_message.xml:

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >
    </ListView>

 </LinearLayout>

 

经过测试,需要在网络支持的环境下才能识别,支持中文识别。 

 

附件有本示例的eclipse项目文件。

 

运行界面:

 

 

 

 

2004-11-12 12:41:00 zcatlinux 阅读数 2646
  • AndroidStudio开发APP-脸脸[网络版]

    本项目可拓展为适用于人脸识别、人脸签到、出席会议等相关场景中。【项目源码放在最后一节的课件里了】脸脸【网络版】项目的实现技术支撑包括My SQL数据库服务器、Java Web后台管理和Android移动APP。其中后台管理使用My Eclipse集成开发工具和Tomcat服务器;Android移动APP使用Android Studio集成开发工具。 后台管理提供接口与Android移动APP进行数据交互功能描述1.人脸库 通过移动端APP采集数据信息,提交到后台处理,最后存储到数据库中;也可以直接批量的存储到数据库中,完成人脸库的数据采集。2.移动端APP 具备采集和签到两个功能,采集功能收集用户的人脸图像和个人基本信息。 签到功能,用户刷脸后,与后台采集的信息对比,并显示最终的结果信息,成功识别则进行语音播报,在后台记录存储记录。 附: 移动端的开发是基于“AndroidStudio开发APP-脸脸[单机版]”,所以这块不熟悉的可以先看[单机版]后再来学习[网络版]。 最近周围有施工的噼里啪啦的心烦意乱脑仁疼,但是全部知识点都ok,大家只需要在自己关心的地方拓展完善即可,我相信大家只要看了之后,肯定都会有所收获的。

    124 人正在学习 去看看 朱松
蓝色巨人IBM公司正在向开源组织Apache和Eclipse基金会提供其语音软件的源代码程序。但遗憾的是,用户必须购买一套IBM的语音识别系统才能享受这一好处。

  IBM公司将向开源组织公布各种运行时间和工具集代码,以便开发人员更加方便地给网页程序添加语音识别功能。该公司在本月初表示,将向提供许多源代码软件项目的组织——Apache 软件基金会(Apache Software Foundation)提供语音软件的源代码程序,此举是让网页开发人员可以更加容易地创建语音网页程序。

  公司也正计划向开放源软件开发平台Eclipse基金会提供语音标记编辑器,以便有利于开发人员编写标准语音程序。

  Eclipse基金会执行董事Mike Milinkovich周五向本社透露,标记编辑器将作为Eclipse插件集成到其它工具中。他说,增加语音程序的数目将不仅可以方便残疾人使用计算机,同时也将改变人类与计算机系统的互动方式。

  Milinkovich说道“声音是人与计算机互动的更好方式。易使用性是它的重要特征,由衷希望能够普及语音程序。”

  Linux桌面开发人员Olaf Schmidt透露,IBM公布的源代码有利于开发Web应用程序,但对于Linux桌面应用程序作用不大。Schmidt还指出,依赖于语音识别应用程序的残疾人将必须购买并安装IBM的ViaVoice或其他语音识别软件。否则,IBM所提供的源代码将失去作用。

  自由标准组织易用性工作小组的负责人JaninaSajka在一次访谈中指出,IBM语音软件的昂贵价格将使用户对该项应用程序望而却步,尤其是对那些没有工作的残疾人更是如此。

  Schmidt称,目前针对于Linux平台而开发的易用性软件的确很多,但还没有开发对Linux切实有用的语音-文本应用程序,这是一个大问题。因此,Linux用户要想使用语音识别应用程序,必须拥有IBM的ViaVoice软件及其授权许可。

  语音识别软件对不能使用双手来进行操作的用户非常有用,比如一些多发性硬化患者。Schmidt说到,“一些多发性硬化患者可以使用一个指头,并且只需敲入一个字符来使用计算机。

  IBM公司的ViaVoice语音识别软件是2000年6月向Linux系统开放的,但是后来又从市场取消其开放。IBM的雇员Aaron Leventhal在8月份举办的KDE会议表示,ViaVoice的语音文本文件将允许Linux通过使用WizzardSoftware获得。他向使用开发源浏览器Mozilla的开发人员做了类似赠送报告。

  据Wizzard网页介绍,由于其本身并不包括语音识别组件,因此Linux用户要是使用该系统,首先必须在Windows系统下开发出自己的应用程序,然后才能在Linux系统上进行编辑。

  IBM没有对此问题发表评论。 

  此外,对于需要使用语音识别软件的Linux用户来说,另一项选择是使用Sphinx,这是一个开放源语音识别软件。但是根据Sphinx的网站信息显示,到目前为止,公司目前尚未开发出最终的产品,而Schmidt也没有意识到要使用这一软件。


出处:http://www.zdnet.com.cn/developer/
没有更多推荐了,返回首页