Flutter Templates
วิธีสร้างแอปแปลเสียง AI โดยใช้ Flutter และ Back4App
29 นาที
บทนำ ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการสร้างแอป ai voice translator โดยใช้ flutter เป็นเฟรมเวิร์กด้านหน้าและ back4app เป็นบริการด้านหลัง แอปนี้จะอนุญาตให้ผู้ใช้แปลเสียง ข้อความ และภาพในหลายภาษา มันจะมีฟังก์ชันการแปลที่ขับเคลื่อนด้วย ai การรู้จำอักขระด้วยแสง (ocr) และฟังก์ชันการรู้จำเสียง เมื่อสิ้นสุดบทเรียนนี้ คุณจะได้สร้างแอปที่สามารถจัดการการแปลแบบเรียลไทม์และเก็บประวัติไว้ใน back4app เพื่อใช้งานในอนาคต ข้อกำหนดเบื้องต้น ในการทำบทเรียนนี้ให้เสร็จสมบูรณ์ คุณจะต้องมี บัญชี back4app account ลงทะเบียนสำหรับบัญชีฟรีที่ back4app https //www back4app com/ ติดตั้ง flutter sdk บนเครื่องของคุณ ทำตาม คู่มือการติดตั้ง flutter https //flutter dev/docs/get started/install ความรู้พื้นฐานเกี่ยวกับ dart และ flutter หากคุณเป็นมือใหม่ใน flutter ให้ตรวจสอบ เอกสาร flutter https //flutter dev/docs ก่อนดำเนินการต่อ บัญชีกับ ผู้ให้บริการ translation api เช่น google cloud translation หรือ deepl ความคุ้นเคยกับ rest apis และ การเขียนโปรแกรมแบบอะซิงโครนัส ใน dart ขั้นตอนที่ 1 — การตั้งค่า back4app backend ของคุณ ในขั้นตอนนี้ คุณจะตั้งค่าแอปพลิเคชัน back4app กำหนดโมเดลข้อมูล และกำหนดค่าด้านหลังเพื่อเก็บประวัติการแปล ภาษา และข้อมูลผู้ใช้ 1 1 สร้างแอปพลิเคชันใหม่บน back4app เข้าสู่ระบบที่ แดชบอร์ด back4app https //dashboard back4app com/ คลิกที่ "สร้างแอปใหม่" กรอก ชื่อแอป (เช่น "ai voice translator") และเลือก ไอคอนแอป เลือกตำแหน่งเซิร์ฟเวอร์ของคุณหากมีการแจ้งเตือน คลิก "สร้าง" 1 2 ดึงคีย์แอปพลิเคชัน ไปที่ การตั้งค่าแอป > ความปลอดภัยและคีย์ ในแดชบอร์ดของแอปของคุณ จด รหัสแอปพลิเคชัน และ คีย์ลูกค้า สิ่งเหล่านี้จะต้องใช้ในการกำหนดค่าแอป flutter 1 3 กำหนดโมเดลข้อมูลของคุณ เราจะสร้างคลาสต่อไปนี้ใน back4app ผู้ใช้ (ค่าเริ่มต้น) การแปล ภาษา วลี รายการพจนานุกรม 1 3 1 สร้างคลาสการแปล ไปที่ ฐานข้อมูล > เบราว์เซอร์ คลิก "สร้างคลาส" เลือก "กำหนดเอง" และตั้งชื่อเป็น การแปล คลิก "สร้างคลาส" เพิ่มคอลัมน์ต่อไปนี้ไปยัง การแปล ผู้ใช้ (pointer< user>) ชี้ไปที่ วัตถุผู้ใช้ ภาษาแหล่งที่มา (string) รหัสภาษาที่มา ภาษาที่ต้องการ (string) รหัสภาษาที่ต้องการ ข้อความต้นฉบับ (string) ข้อความต้นฉบับที่จะแปล ข้อความที่แปลแล้ว (string) ข้อความที่แปลแล้ว ประเภทการแปล (string) ประเภทของการแปล ( เสียง , ข้อความ , ภาพ ) เวลาประทับ (datetime) 1 3 2 สร้างคลาสภาษา ทำซ้ำขั้นตอนเพื่อสร้างคลาสใหม่ชื่อ language เพิ่มคอลัมน์ต่อไปนี้ไปยัง language ชื่อ (string) ชื่อของภาษา (เช่น "อังกฤษ") รหัส (string) รหัส iso ของภาษา (เช่น "en") flagiconurl (string) url ของภาพธงที่แสดงถึงภาษา 1 3 3 สร้างคลาสวลี สร้างคลาสชื่อ phrase เพิ่มคอลัมน์ต่อไปนี้ไปยัง วลี หมวดหมู่ (string) หมวดหมู่ของวลี (เช่น "คำทักทาย") ภาษาแหล่งที่มา (string) รหัสภาษาที่มา ภาษาที่ต้องการ (string) รหัสภาษาที่ต้องการ ข้อความต้นฉบับ (string) วลีต้นฉบับ ข้อความแปล (string) วลีที่แปลแล้ว 1 3 4 สร้างคลาส dictionaryentry สร้างคลาสชื่อ dictionaryentry เพิ่มคอลัมน์ต่อไปนี้ไปยัง dictionaryentry คำ (string) คำที่กำหนด ภาษา (string) ภาษา ของคำ คำจำกัดความ (string) คำจำกัดความของคำ ตัวอย่าง (array) ประโยคตัวอย่างที่ใช้คำ 1 4 ตั้งค่าการอนุญาตระดับคลาส ตรวจสอบให้แน่ใจว่าผู้ใช้ที่ผ่านการตรวจสอบแล้วเท่านั้นที่สามารถเข้าถึงข้อมูลของตนเองได้ สำหรับแต่ละคลาส ให้ไปที่ ความปลอดภัย > การอนุญาตระดับคลาส (clp) ตั้งค่า clp เพื่ออนุญาตการเข้าถึงอ่าน/เขียนเฉพาะผู้ใช้ที่ผ่านการตรวจสอบแล้วเท่านั้น ขั้นตอนที่ 2 — การเริ่มต้นโปรเจกต์ flutter ของคุณ ในขั้นตอนนี้ คุณจะตั้งค่าโปรเจกต์ flutter และกำหนดค่าให้เชื่อมต่อกับ back4app 2 1 สร้างโปรเจกต์ flutter ใหม่ เปิดเทอร์มินัลของคุณและรัน flutter create ai voice translator ไปที่ไดเรกทอรีโปรเจกต์ cd ai voice translator 2 2 เพิ่มการพึ่งพาที่จำเป็น เปิด pubspec yaml และเพิ่มการพึ่งพาต่อไปนี้ dependencies flutter sdk flutter parse server sdk flutter ^4 0 1 flutter tts ^3 3 1 speech to text ^5 3 0 google ml kit ^0 7 3 provider ^6 0 2 http ^0 13 4 รัน flutter pub get เพื่อติดตั้งแพ็คเกจ 2 3 เริ่มต้น parse ในแอป flutter ของคุณ สร้างไฟล์ใหม่ lib/config/back4app config dart // lib/config/back4app config dart const string keyapplicationid = 'your application id'; const string keyclientkey = 'your client key'; const string keyparseserverurl = 'https //parseapi back4app com'; แทนที่ 'your application id' และ 'your client key' ด้วยคีย์จาก back4app in lib/main dart , initialize parse // lib/main dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; import 'config/back4app config dart'; import 'app dart'; void main() async { widgetsflutterbinding ensureinitialized(); await parse() initialize( keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true, debug true, ); runapp(myapp()); } create lib/app dart // lib/app dart import 'package\ flutter/material dart'; import 'screens/home screen dart'; class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( title 'ai voice translator', theme themedata(primaryswatch colors blue), home homescreen(), ); } } step 3 — implementing text translation the first feature to implement is basic text translation 3 1 configure translation service create lib/services/translation service dart to manage interactions with a translation api (google cloud translation api or deepl) // lib/services/translation service dart import 'dart\ convert'; import 'package\ http/http dart' as http; class translationservice { final string apikey = 'your translation api key'; final string apiurl = 'https //translation googleapis com/language/translate/v2'; future\<string> translatetext(string text, string sourcelang, string targetlang) async { final response = await http post( uri parse(apiurl), headers { 'content type' 'application/json', 'authorization' 'bearer $apikey', }, body jsonencode({ 'q' text, 'source' sourcelang, 'target' targetlang, 'format' 'text', }), ); if (response statuscode == 200) { final data = jsondecode(response body); return data\['data']\['translations']\[0]\['translatedtext']; } else { throw exception('translation failed'); } } } 3 2 implement language model create lib/models/language dart to represent supported languages // lib/models/language dart class language { final string name; final string code; final string flagiconurl; language({ required this name, required this code, required this flagiconurl, }); } 3 3 สร้างหน้าจอการแปลข้อความ สร้าง lib/screens/text translation screen dart เพื่อจัดการการป้อนข้อความและการแปล // lib/screens/text translation screen dart import 'package\ flutter/material dart'; import ' /services/translation service dart'; import ' /models/language dart'; class texttranslationscreen extends statefulwidget { @override texttranslationscreenstate createstate() => texttranslationscreenstate(); } class texttranslationscreenstate extends state\<texttranslationscreen> { final translationservice translationservice = translationservice(); final texteditingcontroller textcontroller = texteditingcontroller(); string translatedtext = ''; language? sourcelanguage; language? targetlanguage; future\<void> translate() async { if (sourcelanguage != null && targetlanguage != null) { final translation = await translationservice translatetext( textcontroller text, sourcelanguage! code, targetlanguage! code, ); setstate(() { translatedtext = translation; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('text translation'), ), body padding( padding const edgeinsets all(16), child column( children \[ textfield( controller textcontroller, decoration inputdecoration(labeltext 'enter text to translate'), ), sizedbox(height 10), // implement language selectors here elevatedbutton(onpressed translate, child text('translate')), sizedbox(height 20), text(translatedtext), ], ), ), ); } } ขั้นตอนที่ 4 — การนำเสนอการแปลเสียง ในขั้นตอนนี้ คุณจะเพิ่มการแปลเสียงโดยการรวม speech to text และ text to speech ฟังก์ชันการทำงาน 4 1 ตั้งค่าการรู้จำเสียง สร้าง lib/services/speech recognition service dart โดยใช้ speech to text แพ็คเกจ // lib/services/speech recognition service dart import 'package\ speech to text/speech to text dart' as stt; class speechrecognitionservice { final stt speechtotext speech = stt speechtotext(); future\<string?> listenforspeech() async { bool available = await speech initialize(); if (available) { await speech listen(); return await future delayed(duration(seconds 5), () { speech stop(); return speech lastrecognizedwords; }); } return null; } } 4 2 เพิ่ม text to speech (tts) สร้าง lib/services/tts service dart โดยใช้ flutter tts แพ็คเกจ // lib/services/tts service dart import 'package\ flutter tts/flutter tts dart'; class ttsservice { final fluttertts fluttertts = fluttertts(); future\<void> speak(string text, string languagecode) async { await fluttertts setlanguage(languagecode); await fluttertts speak(text); } } 4 3 สร้างหน้าจอการแปลเสียง สร้าง lib/screens/voice translation screen dart เพื่อจัดการการแปลเสียง // lib/screens/voice translation screen dart import 'package\ flutter/material dart'; import ' /services/speech recognition service dart'; import ' /services/translation service dart'; import ' /services/tts service dart'; class voicetranslationscreen extends statefulwidget { @override voicetranslationscreenstate createstate() => voicetranslationscreenstate(); } class voicetranslationscreenstate extends state\<voicetranslationscreen> { final speechrecognitionservice speechrecognitionservice = speechrecognitionservice(); final translationservice translationservice = translationservice(); final ttsservice ttsservice = ttsservice(); string? recognizedtext; string? translatedtext; future\<void> translatespeech() async { recognizedtext = await speechrecognitionservice listenforspeech(); if (recognizedtext != null) { translatedtext = await translationservice translatetext( recognizedtext!, 'en', // hardcoded source language (english) 'es', // hardcoded target language (spanish) ); setstate(() {}); ttsservice speak(translatedtext!, 'es'); } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('voice translation'), ), body center( child column( mainaxisalignment mainaxisalignment center, children \[ if (recognizedtext != null) text('recognized $recognizedtext'), if (translatedtext != null) text('translated $translatedtext'), sizedbox(height 20), elevatedbutton(onpressed translatespeech, child text('start voice translation')), ], ), ), ); } } ขั้นตอนที่ 5 — การนำเสนอการแปลภาพ (ocr) 5 1 ตั้งค่า ocr service สร้าง lib/services/ocr service dart โดยใช้ google ml kit แพ็คเกจ // lib/services/ocr service dart import 'package\ google ml kit/google ml kit dart'; class ocrservice { final textrecognizer = googlemlkit vision textrecognizer(); future\<string?> extracttextfromimage(string imagepath) async { final inputimage = inputimage fromfilepath(imagepath); final recognizedtext = await textrecognizer processimage(inputimage); return recognizedtext text; } } 5 2 สร้างหน้าจอแปลภาพ สร้าง lib/screens/image translation screen dart เพื่อจัดการการนำเข้าภาพและ ocr // lib/screens/image translation screen dart import 'package\ flutter/material dart'; import 'package\ image picker/image picker dart'; import ' /services/ocr service dart'; import ' /services/translation service dart'; class imagetranslationscreen extends statefulwidget { @override imagetranslationscreenstate createstate() => imagetranslationscreenstate(); } class imagetranslationscreenstate extends state\<imagetranslationscreen> { final ocrservice ocrservice = ocrservice(); final translationservice translationservice = translationservice(); string? extractedtext; string? translatedtext; future\<void> pickandtranslateimage() async { final picker = imagepicker(); final pickedfile = await picker getimage(source imagesource gallery); if (pickedfile != null) { extractedtext = await ocrservice extracttextfromimage(pickedfile path); if (extractedtext != null) { translatedtext = await translationservice translatetext(extractedtext!, 'en', 'es'); setstate(() {}); } } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('image translation'), ), body center( child column( mainaxisalignment mainaxisalignment center, children \[ if (extractedtext != null) text('extracted $extractedtext'), if (translatedtext != null) text('translated $translatedtext'), sizedbox(height 20), elevatedbutton(onpressed pickandtranslateimage, child text('pick image for translation')), ], ), ), ); } } ขั้นตอนที่ 6 — ประวัติการแปลและหนังสือวลี ในขั้นตอนนี้ คุณจะดำเนินการบันทึกประวัติการแปลและจัดการหนังสือวลี 6 1 บันทึกประวัติการแปล อัปเดต lib/services/translation service dart เพื่อบันทึกประวัติการแปลใน back4app import 'package\ parse server sdk flutter/parse server sdk dart'; import ' /models/translation dart'; class translationservice { // existing translation logic future\<void> savetranslation(translation translation) async { final translationobject = parseobject('translation') set('user', parseuser currentuser) set('sourcelanguage', translation sourcelanguage) set('targetlanguage', translation targetlanguage) set('sourcetext', translation sourcetext) set('translatedtext', translation translatedtext) set('translationtype', translation type); await translationobject save(); } } 6 2 นำเสนอหนังสือวลี สร้าง lib/screens/phrase book screen dart เพื่อจัดการวลีทั่วไป // lib/screens/phrase book screen dart import 'package\ flutter/material dart'; import ' /models/phrase dart'; import ' /services/phrase service dart'; class phrasebookscreen extends statelesswidget { final phraseservice phraseservice = phraseservice(); @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('phrase book'), ), body futurebuilder\<list\<phrase>>( future phraseservice fetchphrases(), builder (context, snapshot) { if (snapshot connectionstate == connectionstate waiting) { return center(child circularprogressindicator()); } if (!snapshot hasdata || snapshot data! isempty) { return center(child text('no phrases found ')); } return listview\ builder( itemcount snapshot data! length, itembuilder (context, index) { final phrase = snapshot data!\[index]; return listtile( title text('${phrase sourcetext} → ${phrase translatedtext}'), subtitle text('category ${phrase category}'), ); }, ); }, ), ); } } บทสรุป โดยการติดตามบทแนะนำนี้ คุณได้สร้าง แอปแปลเสียง ai ที่มีฟีเจอร์ครบครัน ด้วย flutter และ back4app คุณได้ดำเนินการ การแปลข้อความพื้นฐานและขั้นสูง การแปลเสียงเป็นเสียงโดยใช้ การรู้จำเสียงพูด และ การแปลงข้อความเป็นเสียง การแปลจากภาพเป็นข้อความโดยใช้ ocr การจัดการประวัติการแปลและหนังสือวลีสำหรับวลีทั่วไป ขั้นตอนถัดไป ปรับปรุง ui/ux ปรับปรุงอินเทอร์เฟซของแอปเพื่อประสบการณ์ผู้ใช้ที่ราบรื่นขึ้น ปรับปรุงการจัดการข้อผิดพลาด เพิ่มการจัดการข้อผิดพลาดและกลไกสำรองสำหรับการล้มเหลวของ api ดำเนินการโหมดออฟไลน์ เก็บข้อมูลการแปล วลี และประวัติที่ใช้บ่อยสำหรับการเข้าถึงแบบออฟไลน์ เผยแพร่แอป เตรียมแอปสำหรับการเผยแพร่บนแพลตฟอร์ม ios และ android