خصم

للشراء من موقع نون استخدم كود الخصم LMN12 وأحصل على ١٠٪ خصم على سلة المشتريات

thumbnail

كود برمجة تطبيق أندرويد لتحويل الكلام إلى نص مكتوب بلغة جافا


نظام أندرويد يوفر لنا ميزة تحويل المحادثات إلى نص مكتوب من خلال Android Speech API. استخدمنا من قبل هذه الميزة في تحويل الكلام المكتوب إلى صوت منطوق في شرح سابق. واليوم نقوم بتحويل الصوت إلى كلام مكتوب. يُمكنك استخدام هذه الميزة لإضافة أوامر صوتية لتطبيق الأندرويد أو أن تقوم بإضافة إمكانية ملء البيانات عن طريق الصوت بدلاً من الكتابة.

صممت تطبيق بسيط يحتوي على زر واحد و textview واحدة كما ترى في الصورة التالية.

الصفحة الرئيسية لتطبيق أندرويد - تحويل الكلام المنطوق إلى كلام مكتوب

خطوات انشاء تطبيق أندرويد لتحويل الصوت إلى كلمات مكتوبة


١. عدّل ملف strings.xml الموجودة في هذا المسار res/values ليصبح مثل هذا الكود

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Speech To Text</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="speech_prompt">Say something&#8230;</string>
    <string name="speech_not_supported">Sorry! Your device doesn\'t support speech input</string>
    <string name="tap_on_mic">Tap on mic to speak</string>
</resources>

٢. عدّل ملف colors.xml الموجود في هذا المسار res/values إن لم تجد هذا الملف قم بإنشاؤه.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#ffffff</color>
    <color name="bg_gradient_start">#31244e</color>
    <color name="bg_gradient_end">#6b394c</color>
</resources>

٣. عدّل تصميم الصفحة الرئيسية من التطبيق وهى activity_main.xml للكود التالي:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_gradient"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/txtSpeechInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:textColor="@color/white"
        android:textSize="26dp"
        android:textStyle="normal" />
 
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="60dp"
        android:gravity="center"
        android:orientation="vertical" >
 
        <ImageButton
            android:id="@+id/btnSpeak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@null"
            android:src="@drawable/ico_mic" />
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/tap_on_mic"
            android:textColor="@color/white"
            android:textSize="15dp"
            android:textStyle="normal" />
    </LinearLayout>
 
</RelativeLayout>

٤. افتح ملف الكود MainActivity.java وقم بالتعديلات كما تجد في الشرح التالي.


أولاً: بدء RecognizerIntent لأخذ الصوت من المستخدم ب ACTION_RECOGNIZE_SPEECH وهي ببساطة تأخذ مدخلات المستخدم الصوتية وترسلها للـ main activity

ثانياً: استقبال النص داخل التطبيق. بعد الإنتهاء من الكلام، لابد أن تستقبل الرد داخل onActivityResult وتقوم بالعمليات التي تريدها. لفهم أعمق أقرأ الكود الكامل التالي.
package com.learns7.stt;
 
import java.util.ArrayList;
import java.util.Locale;
 
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.Menu;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private TextView txtSpeechInput;
    private ImageButton btnSpeak;
    private final int REQ_CODE_SPEECH_INPUT = 100;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        txtSpeechInput = (TextView) findViewById(R.id.txtSpeechInput);
        btnSpeak = (ImageButton) findViewById(R.id.btnSpeak);
 
        // hide the action bar
        getActionBar().hide();
 
        btnSpeak.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                promptSpeechInput();
            }
        });
 
    }
 
    /**
     * Showing google speech input dialog
     * */
    private void promptSpeechInput() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                getString(R.string.speech_prompt));
        try {
            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
        } catch (ActivityNotFoundException a) {
            Toast.makeText(getApplicationContext(),
                    getString(R.string.speech_not_supported),
                    Toast.LENGTH_SHORT).show();
        }
    }
 
    /**
     * Receiving speech input
     * */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        switch (requestCode) {
        case REQ_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {
 
                ArrayList<String> result = data
                        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                txtSpeechInput.setText(result.get(0));
            }
            break;
        }
 
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
لابد من تشغيل هذا التطبيق على موبايل أندرويد حقيقي وليس محاكي أندرويد. لأن هذا الكود لا يعمل على المحاكي. ولابد أن يكون الموبايل متصل بالإنترنت.

كيف نستخدم تحويل الكلام إلى نص مكتوب بدون إنترنت ؟

ليست كل الموبايلات لديها إمكانية تحويل الكلام إلى نص مكتوب بدون إنترنت.

خطوات تنزيل ملفات تحويل الأصوات إلى كلام مكتوب لكي تعمل بدون إنترنت:

  1. في موبايلك، اذهب إلى الإعدادات (settings) ثم اللغة والإدخال (Language and Input) ثم اختر أيقونة برنامج Google voice input
  2. تحت تبويب الكل (all) اختر اللغات التي تريد تحميلها
  3. بمجرد نزول ملف اللغة على جهازك، ستجد اللغة ظهرت في تبويب installed وبذلك يمكنك استخدام إمكانية تحويل الكلام إلى نص مكتوب بهذه اللغة.
إن كنت تعرف صديق لك أو مجموعة أصدقاء يمكن أن يستفيدوا من هذا الشرح ارسله لهم عن طريق الواتساب أو الفيس بوك أو ماسنجر أو انستاجرام أو أى طريقة أخرى كما تريد. وإن كان لديك أى سؤال أو استفسار أكتبه في تعليق وسأقوم بالرد عليك إن شاء الله.

لمزيد من المعلومات عن البرمجة ولينكس وأندرويد وويندوز وماك وآيفون وتصميم المواقع، ابحث عن "موقع أبانوب حنا للبرمجيات" على جوجل وادخل للموقع وستجد موضوع جديد يشرح فكرة أو معلومة جميلة ومفيدة كل يوم.

اشترك ببريدك الإلكتروني

احصل على الموضوعات الجديدة على إيميلك مباشرةً

لا يوجد تعليقات