stream - सी#- आरटीपी स्ट्रीम कैप्चर करें और भाषण मान्यता को भेजें




ffmpeg speech-recognition (2)

मैं क्या करने की कोशिश कर रहा हूं:

  • सी # में आरटीपी स्ट्रीम कैप्चर करें
  • सिस्टम को उस धारा को अग्रेषित करें। स्पीच.SpeechRecognitionEngine

मैं एक लिनक्स-आधारित रोबोट का निर्माण कर रहा हूं जो माइक्रोफ़ोन इनपुट लेगा, इसे विंडोज मशीन भेजें, जो माइक्रोसॉफ्ट स्पीच रिकग्निशन का उपयोग करते हुए ऑडियो पर कार्रवाई करेगा और रोबोट को जवाब वापस भेज देगा। रोबोट सर्वर से सैकड़ों मील की दूरी पर हो सकता है, इसलिए मैं इंटरनेट पर यह करना चाहता हूं।

मैंने अब तक क्या किया है:

  • रोबोट एमपी 3 प्रारूप में एन्कोडेड एक आरटीपी स्ट्रीम उत्पन्न करता है (अन्य फॉर्मेट उपलब्ध हैं) एफएफएमपीईजी (रोबोट एक रास्पबेरी पाई चल रहे आर्क लिनक्स पर चल रहा है)
  • VLC ActiveX नियंत्रण का उपयोग करते हुए क्लाइंट कंप्यूटर पर स्ट्रीम कैप्चर किया गया
  • पाया गया कि SpeechRecognitionEngine में उपलब्ध विधियां हैं:
    1. recognizer.SetInputToWaveStream ()
    2. recognizer.SetInputToAudioStream ()
    3. recognizer.SetInputToDefaultAudioDevice ()
  • ऐप्प के आउटपुट को लाइन-इन में भेजने के लिए जैक का इस्तेमाल करने पर देखा, लेकिन इसके द्वारा पूरी तरह से भ्रमित किया गया था।

मुझे किसके साथ मदद चाहिए:

मैं वास्तव में वीएलसी से भाषण RECognitionEngine तक स्ट्रीम को कैसे प्रसारित करने के बारे में सोच रहा हूं। वीएलसी स्ट्रीम को बिल्कुल भी उजागर नहीं करता है क्या ऐसा कोई रास्ता है जो मैं सिर्फ एक धारा को पकड़ सकता हूं और उस प्रवाह वस्तु को भाषण मान्यता पहचान में पास कर सकता हूं? या क्या यहां समाधान नहीं है?

आपकी सहायता के लिये पहले से ही धन्यवाद।


मुझे लगता है कि आपको इसे सरल बनाना चाहिए। आरटीपी को पकड़ने के लिए आरटीपी और विशेष पुस्तकालय का उपयोग क्यों करें? क्यों न सिर्फ रासप्रिरी पीई से ऑडियो डेटा लेते हैं और एचटीटीपी पोस्ट का इस्तेमाल अपने सर्वर पर भेजने के लिए करते हैं?

ध्यान रखें कि System.Speech एमपी 3 प्रारूप का समर्थन नहीं करता है यह सहायक हो सकता है - SAPI v5.1 के साथ सहायता SpeechRecognitionEngine हमेशा सी # के साथ एक ही गलत परिणाम देता है । सिस्टम के लिए। स्पीच ऑडियो पीसीएम, यूला, या एओएल प्रारूप में होना चाहिए। यह निर्धारित करने का सबसे विश्वसनीय तरीका है कि आपका पहचानकर्ता किस प्रारूप का समर्थन करता है, इसे RecognizerInfo.SupportedAudioFormats के साथ पूछताछ करना है।

तब आप अपने सर्वर पर डेटा पोस्ट कर सकते हैं (और ContentType = "audio / x-wav" का उपयोग करें)। हमने जैसे एक यूआरएल प्रारूप का इस्तेमाल किया है

http://server/app/recognize/{sampleRate}/{bits}/{isStereo}

अनुरोध में ऑडियो पैरामीटर शामिल करने के लिए POST बॉडी में कैप्चर किए गए wav फ़ाइल को भेजें।

हम एक पकड़ में आ गए, हमें डाटा को भेजने से पहले उसे एक वाएव फाइल हेडर जोड़ना पड़ा। स्पीच हमारा डेटा पीसीएम था, लेकिन WAV प्रारूप में नहीं। Https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ देखें अगर आपको यह करने की आवश्यकता है।


यह एक पुरानी धागा है, लेकिन मैं उस प्रोजेक्ट के लिए उपयोगी था जिस पर मैं काम कर रहा था। लेकिन, मेरे पास वही समस्याएं थीं जैसे कुछ अन्य लोगों ने विंडोज़ पीसी के साथ डीग्रीहिक कोड को स्रोत के रूप में इस्तेमाल करने की कोशिश की।

निम्नलिखित मानकों का उपयोग करके कोड में उस 0 परिवर्तनों के साथ काम करने वाले एफएफएमपीएग समझे:

ffmpeg -ac 1 -f dshow -i audio="{recording device}" -ar 16000 -acodec pcm_s16le -f rtp rtp://{hostname}:{port}

मेरे मामले में, रिकॉर्डिंग डिवाइस नाम "माइक्रोफोन (रियलटेक हाई डेफिनेशन ऑडिओ) था", लेकिन मैंने रिकॉर्डिंग डिवाइस का नाम प्राप्त करने के लिए निम्न का उपयोग किया था:

ffmpeg -list_devices true -f dshow -i dummy