2015-04-16 11:14:41 c602273091 阅读数 9227
  • 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】了解HMM算法:http://www.cnblogs.com/pangxiaodong/archive/2011/10/17/2214542.html

             【2】再次加深印象:http://blog.csdn.net/likelet/article/details/7056068

             【3】一次综述:http://baike.baidu.com/link?url=1ajOQ5jh8lm2j234DeMJE1dA0b9N9mmGb6wFw5_-_vAlD15-PHjAg17Swm9Rr_CD9olkO-RNVTMP-pfuXDEziq



代码:

          

             免积分下载:

            【1】http://download.csdn.net/detail/c602273091/8599943

            【2】http://download.csdn.net/detail/c602273091/8599951    

            【3】http://download.csdn.net/detail/c602273091/8599961

            【4】http://download.csdn.net/detail/c602273091/8599969

            【5】http://download.csdn.net/detail/c602273091/8599979

            【6】http://blog.csdn.net/luxiaoxun/article/details/7726423    这是几种当前比较流行的开源代码

2017-12-01 17:00:49 zhenghongzhi6 阅读数 7994
  • 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 人正在学习 去看看 朱松

本文首发于“洪流学堂”公众号。
洪流学堂,让你快人几步!你好,我是你的技术探路者郑洪智,你可以叫我大智(vx: zhz11235)。

源码地址

https://github.com/zhenghongzhi/WitBaiduAip

功能概述

1 语音识别

  1. 从麦克风录制音频
  2. AudioClip的音频数据转换为百度语音识别的PCM16格式
  3. 百度语音识别Restful接口的封装以及一个测试场景

2 语音合成

  1. 百度语音合成Restful接口的封装以及一个测试场景
  2. mp3格式运行时转为AudioClip进行播放

为什么不使用百度的C# SDK
百度的C# SDK使用了一些Unity不支持的特性,直接导入unity不能用
而且百度C# SDK只是封装了Restful的接口,功能上并没有增多
自己编写更简洁

更新说明

2018-08-22更新

根据百度API的更新,语音合成性能优化,直接使用原生格式,移除第三方插件

2018-03-28更新

加入平台判断,更好的支持android和ios

2018-01-11更新

在工程中加入了语音合成

2018-01-02更新

应广大小伙伴的要求,对工程进行了重构,放出github源码
https://github.com/zhenghongzhi/WitBaiduAip

2017-12-23更新

教程首发


洪流学堂,让你快人几步
欢迎关注“洪流学堂”微信公众号

2019-03-23 09:31:45 m0_38055352 阅读数 917
  • 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 人正在学习 去看看 朱松

最近要跟着导师做一个语音识别的工程项目,由于在前期只需要快速的建立软件架构,所以选择使用科大讯飞提供的云接口进行快速开发,但科大讯飞在Linux的sdk中只提供了c++的实现,为了今后的开发方便,我将其进行了Python封装,也把源码分享在这里,为大家提供方便。

一、概述

      虽然在我的github源码中已经写了README,不过为了广大程序员朋友考虑,我还是写这样一个博客为好,既是为了方便大家使用,也是为自己以后提供便利。全文就是大致介绍一个实现思路和使用方法,视自己情况而定,如果不需要的话,可直接调到最后去star。
      对于本项目来说实现起来并不复杂(虽然过程中我也是去参考了一些人的代码),主要的思路就是把科大讯飞提供的sdk加载进来,然后由于里面是c的实现,所以这里需要使用python自带的ctypes库,将数据类型进行一下转换,这里相信对于尝试过python和c混合编程的人来说应该不是什么困难的事情。为了大家的编程方便,这里提供几个科大讯飞的Linux SDK文档资料。

二、 语音识别类ISR

      对于语音识别的实现,我主要封装了一个ISR的类用于实现,具体可参见我的github源码,大体思路是针对每一个在语音识别中用到的科大讯飞API函数,都在其上面封装一层功能相同的python函数,这样实现python编程时的灵活调用,这样说可能确实很抽象,下面我举几个具体的实现例子给大家看。

MSPLogin()

@classmethod
    def MSPLogin(cls):
        """
        /**
         * @fn		MSPLogin
         * @brief	user login interface
         *
         *  User login.
         *
         * @return	int MSPAPI			- Return 0 in success, otherwise return error code.
         * @param	const char* usr		- [in] user name.
         * @param	const char* pwd		- [in] password.
         * @param	const char* params	- [in] parameters when user login.
         * @see
         */
        int MSPAPI MSPLogin(const char* usr, const char* pwd, const char* params);
        """

        assert cls.dll is not None, 'Please load libmsc.dll, Before load this function'

        _MSPLogin = cls.dll.MSPLogin
        _MSPLogin.argtypes = (ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p)
        _MSPLogin.restype = (ctypes.c_int)

        c_usr = get_c_char_p(cls.login['usr'])
        c_pwd = get_c_char_p(cls.login['pwd'])
        c_params = get_c_char_p(cls.login['params'])
        ret = _MSPLogin(c_usr, c_pwd, c_params)

        if ret != MSP_SUCCESS:
            raise ISRException('MSPLogin failed, error code: %d.' % (ret))

        if ret == MSP_SUCCESS:
            cls.ret = ret
            cls.login['logined'] = True

        return ret

      比如这个函数,可以看到我其实并没有做什么特别的工作,只是定义了一个_MSPLogin函数和它的参数类型、返回值类型,然后就把参数传入进去,获得返回值,完成的就只是原来接口实现的功能而已,只不过给它套了一个python的壳子。

QISRGetResult()

    def QISRGetResult(self):
        """
        /**
         * @fn		QISRGetResult
         * @brief	Get the text of the audio data
         *
         *  Get the text of the audio data from website
         *
         * @return	const char* - Return the recognition result
         * @param   const char*                 - [in]  sessionID which used to keep alive
         * @param   int*                        - [out] the status of result
                                                    0: recognize successfully
                                                    1: no match
                                                    2: recognizing
                                                    5: finished
         * @param   int                         - [in]  no use, make it 0
         * @param	int* errorCode				- [out] error code if failed, 0 to success.
         * @see
         */
         const char* MSPAPI QISRGetResult(const char *sessionID, int *rsltStatus, int waitTime, int *errorCode)
        """
        # 检查sessionID状态
        assert self.sessionID is not None, 'seesionId is None,Please call QISRSessionBegin defore QTTSSessionEnd called'

        _QISRGetResult = self.dll.QISRGetResult
        _QISRGetResult.argtypes = (ctypes.c_char_p, ctypes.POINTER(ctypes.c_int), ctypes.c_int, ctypes.POINTER(ctypes.c_int))
        _QISRGetResult.restype = ctypes.c_char_p

        c_sessionID = get_c_char_p(self.sessionID)
        c_rsltStatus = ctypes.c_int()
        c_waitTime = ctypes.c_int(0)
        c_errorCode = ctypes.c_int()

        bstr = _QISRGetResult(c_sessionID, c_rsltStatus, c_waitTime, c_errorCode)
        if bstr is not None:
            string = str(bstr, encoding='utf8')
        else:
            string = ''

        ret = c_errorCode.value
        self.ret = ret
        if ret != MSP_SUCCESS:
            self.MSPLogout()
            raise ISRException('QISRGetResult failed, error code: %d' % (ret))

        return string, ret, c_rsltStatus.value

      再比如这个函数,同样的开始先定义一个_QISRGetResult函数,以及它的参数类型、返回值类型,然后再传入函数的参数,获取返回值等等,这里有一点不同的是返回了多个不同的值。这是因为在科大讯飞中由于调用的是c++函数,只能有一个返回值,但在某些情况下,要监视不同的变量,那要怎么办呢,常用的方法就是用指针或者引用参数,通过参数把要返回的状态参数带回去。科大讯飞的很多函数都是采用这种方法,但如果用python的话,就大可不必那么麻烦了,直接返回就好,所以这里其实多返回的就是那些引用参数而已。
      大家可能会觉得我以上举的两个例子只是比较简单的个例,其实并不是,要在c++的基础上进行python封装其实就是这么简单!so easy!

三、语音合成类TTS

      语音合成其实是和语音识别是一样的,也同样是定义了一个TTS类用于控制与科大讯飞语音合成进行交互的一系列动作,当然会有一些操作上的不同,但也不会有太大差异,基本的思想都是一样的,这里我就不赘述了,如果有不明白的,非常欢迎在下方留言,我会及时回复的!

四、其他的一些必要的类或参数

      以上是提到了两个最主要的实现类,除此之外当然还有一些比如ISRException异常类、ISRSessionParam会话参数类等等,但这些其实就是为了更好的实现ISR和TTS所定义的一些结构,对整个实现的思路没有什么影响,无非是把代码写的好看一些,我就只做一个大体的陈述吧!

  • ISRSessionParam类,这个类定义了用于与科大讯飞相应服务建立会话的一些参数,下面针对类里面的几个函数做简要介绍(因为调接口的时候也并不会用到),需要提一下的是这个参数在ISR类中被作为成员变量使用,其中QISRSessionBegin()函数可以对Param进行设置,如果不进行设置,则使用默认参数。
    • 构造函数,用于初始化默认的参数,如无特殊需求,则无需对会话参数进行设置。
    • param()函数,用于将字典类型的参数传入转化为合法的字符串类型
    • setter,用于设置param参数,可传入合法字符串或字典
  • ISRException类,这个类还没有进行什么特殊的实现,目前仅仅继承了Exception类,用于捕获异常
  • utils.py,这个py文件中定义了一些功能函数,比如get_c_char_p()用来将一个python字符串类型值转化为c的char*类型
  • define.py,这个py文件中定义了一些常量,方便使用和修改

      这里就仅以语音识别为例进行举例,语音合成的结构和类框架也是类似的

五、API的使用

语音识别

      语音识别API存放在ISR_API.py文件中,这里的speech_to_text函数实现语音到文本的转化,它主要需要三个参数,isr、fp、piceLen,下面分别对这三个参数进行说明。

  • isr:是一个ISR类的对象,isr = ISR(),直接用初始化的ISR()就可以使用,如需特殊设置可自行解决
  • fp:是语音文件句柄,fp = open(‘文件路径’, ‘rb’)
  • piceLen:步长,就是一次传输的字节数,可自行定义

语音合成

      语音合成API存放在TTS_API.py文件中,这里的text_to_speech函数实现文本到语音的转化,它主要需要三个参数,tts、fp、src_text,下面分别对这三个参数进行说明。

  • tts:是一个TTS类对象,tts = TTS(),直接用初始化的TTS()就可以使用,如需特殊设置可自行解决
  • fp:是输出文件句柄,这里需要提醒的是,输出文件需要是用wave.open打开,即fp = wave.open(‘文件路径’, ‘wb’)
  • src_text:待转化的字符串,可含标点符号

以上是对Python API接口的大致说明,如果还是不理解的话,可下载我的github代码,其中有我实现的简单demo

六、关于APPID

      大家如果嫌麻烦的话,可以先使用我的APPID,但最好自己申一个,也都是免费的,这里我附上我另一篇关于申请APPID的博文,也算是进行科大讯飞接口使用的前期工作吧。
      【语音识别学习】科大讯飞APPID的申请以及SDK下载
      如果要修改APPID的话,在代码中的define.py中修改即可

七、总结

      之前,我是给大家提供源码链接的,但由于这是给公司做的项目,在产品没出来前公开源码不太好,所以我就暂时把链接关闭了,但如果有做类似项目(语音识别、语音合成、情感识别、声纹识别)遇到问题的,非常欢迎与我讨论!

没有更多推荐了,返回首页