00001 // Copyright (c) 2017, The Regents of the University of California 00002 // All rights reserved. 00003 // 00004 // Redistribution and use in source and binary forms, with or without 00005 // modification, are permitted provided that the following conditions are met: 00006 // * Redistributions of source code must retain the above copyright 00007 // notice, this list of conditions and the following disclaimer. 00008 // * Redistributions in binary form must reproduce the above copyright 00009 // notice, this list of conditions and the following disclaimer in the 00010 // documentation and/or other materials provided with the distribution. 00011 // * Neither the name of the University of California nor the 00012 // names of its contributors may be used to endorse or promote products 00013 // derived from this software without specific prior written permission. 00014 // 00015 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00016 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00017 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00018 // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA 00019 // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00020 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00021 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00022 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00023 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00024 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00025 // POSSIBILITY OF SUCH DAMAGE. 00026 00027 #ifndef COGROB_CLOUD_SPEECH_GOOGLE_SPEECH_INTERFACE_H_ 00028 #define COGROB_CLOUD_SPEECH_GOOGLE_SPEECH_INTERFACE_H_ 00029 00030 #include <string> 00031 #include <vector> 00032 00033 #include "util/status.h" 00034 #include "util/statusor.h" 00035 #include "cogrob/cloud/speech/audio_sample.h" 00036 #include "cogrob/cloud/speech/proto/recognition_result.pb.h" 00037 00038 namespace cogrob { 00039 namespace cloud { 00040 namespace speech { 00041 00042 class GoogleSpeechRecognizerInterface { 00043 public: 00044 GoogleSpeechRecognizerInterface() {} 00045 virtual ~GoogleSpeechRecognizerInterface() {} 00046 00047 // Starts voice recognition, non blocking, audio_queue and result_queue must 00048 // be valid until Stop() is called or IsRunning() returns false. 00049 virtual util::Status StartRecognize(AudioQueue* audio_queue, 00050 util::SimpleThreadSafeQueue<RecognitionResult>* result_queue, 00051 const std::vector<std::string>& hints = {}, int max_audio_seconds = 14, 00052 int max_wait_seconds = 17, int max_alternatives = 10) = 0; 00053 00054 // TODO(shengye): Add a StartRecognizeBlocking method 00055 00056 // Test whether the recognizer is still running. 00057 virtual bool IsRunning() = 0; 00058 00059 // Return the last result 00060 virtual util::StatusOr<RecognitionResult> GetLastResult() = 0; 00061 00062 // Wait until recognizer finishes 00063 virtual util::Status Wait() = 0; 00064 00065 // Stop recognition 00066 virtual util::Status Stop() = 0; 00067 }; 00068 00069 } // namespace speech 00070 } // namespace cloud 00071 } // namespace cogrob 00072 00073 #endif // COGROB_CLOUD_SPEECH_GOOGLE_SPEECH_INTERFACE_H_