2013-10-24 2 views
0

API Android VoiceRecognizer가있는 응용 프로그램이 있습니다. 그것은 잘 작동하지만 결과의 신뢰 점수를 얻을 수 없습니다. 이를 위해 RecognizerIntent.EXTRA_CONFIDENCE_SCORES를 사용하지만 아무런 결과도 반환하지 않습니다. 나는 API (16)와 장치를 가지고 있고 매니페스트에 지정한 : 이것은 내 코드RecognizerIntent.EXTRA_CONFIDENCE_SCORES에 대한 검색 결과가 없습니다.

public class MainActivity extends Activity { 
    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001; 

    private ListView mlvTextMatches; 
    private Button mbtSpeak; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mlvTextMatches = (ListView) findViewById(R.id.lvTextMatches); 
     mbtSpeak = (Button) findViewById(R.id.btSpeak); 
     checkVoiceRecognition(); 

     // Disable button if no recognition service is present 
     PackageManager pm = getPackageManager(); 
     List<ResolveInfo> activities = pm.queryIntentActivities(
       new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
     if (activities.size() == 0) 
     { 
      mbtSpeak.setEnabled(false); 
      mbtSpeak.setText("Recognizer not present"); 
     } 
    } 

    public void checkVoiceRecognition() { 
     // Check if voice recognition is present 
     PackageManager pm = getPackageManager(); 
     List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
       RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
     if (activities.size() == 0) { 
      mbtSpeak.setEnabled(false); 
      mbtSpeak.setText("Voice recognizer not present"); 
      Toast.makeText(this, "Voice recognizer not present", 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public void speak(View view) { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 

     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Straight talk please..."); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "fr-FR"); 
     startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 
      if(resultCode == RESULT_OK) { 
       ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
       ArrayList<String> confidence = data.getStringArrayListExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES); ; 
       if(confidence==null) 
        Log.d("VoiceRecognition","confidence null"); 
       else 
        Log.d("VoiceRecognition","confidence "+confidence.size()); 

       mlvTextMatches.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,matches)); 
      } 
      super.onActivityResult(requestCode, resultCode, data); 
    } 

} 

입니다

<uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="16" /> 

것은 내가 (I 신뢰 점수 발생하지 왜 당신에게 어떤 아이디어가 RecognizerIntent.EXTRA_RESULTS에 대한 검색 결과가 5 개 있습니까?) 도움 주셔서 감사합니다.

답변

2

EXTRA_CONFIDENCE_SCORES에 대한 링크에서 문자열 배열이 아닌 float 배열을 반환한다는 것을 알 수 있습니다.

따라서이 같은 것을 사용해야합니다 :

float [] confidence = data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES); 

그래도주의, 신뢰 점수 일부 bugs identified이있다.