M C LC v
B ng 3.42 Danh sách các mi liê nh ca mô hình logic d l iu
Tên Mã Th c th 2 Th c th 1 Ph thu c B n s c a: th c th 1 -> Th c th 2 B n s a c a: th c th 2 > Th c th 1
Cua CUA HocKy TKB 1,1 1,n
DangKy DANGKY2 SinhVien DangKy DangKy
SinhVien 1,1 1,n
DangKy DANGKY MonHoc DangKy DangKy
MonHoc 1,1 1,n
Day DAY2 MonHoc Day Day
MonHoc 1,1 1,n
Day DAY GiangVien Day Day
GiangVien 1,1 1,n
DD_TKB DD_TKB TKB DiemDanhSV 1,1 1,n
DiemDanh DIEMDANH SinhVien DiemDanhSV 1,1 1,n
HK_NamHoc HK_NAMHO
C NamHoc HocKy 1,1 1,n
Hoc HOC PhongHoc TKB TKB
PhongHoc 1,1 1,n
o O Khoa Lop 1,1 1,n
Thuoc THUOC Lop SinhVien 1,1 1,n
Trong TRONG CoSo PhongHoc 1,1 1,n
3.3 XÂY D NG MÔ HÌNH NH N DI N GI NG NÓI:
3.3.1 CÁC THÀNH PH N C B N C A NH N DI N GI NG NÓI:
Tr c tiên đ có th nh n di n đ c gi ng nói, chúng ta c n ph i có m t t đi n nh t đi n Anh Vi t, khi ta nh p ti ng Anh vào thì h th ng s tìm t ti ng Vi t t ng ng v i t ti ng Anh mà chúng ta v a nh p vào. đây t đi n là m t mô hình âm thanh t ng ng v i gi ng nói đã đ c ghi âm t tr c. Vi c hu n luy n t ng t nh vi c d y h c, chúng ta d y cho máy h c r ng gi ng nào s t ng ng v i t /s nào.
T d li u hu n luy n (ghi âm, t đi n, bài báo,..) chúng ta s hu n luy n đ c mô hình âm thanh, t đi n ng âm, mô hình ngôn ng s d ng trong h th ng nh n di n gi ng nói.
Hình 3.6 Các thành ph n c b n c a m t h th ng nh n di n gi ng nói
3.3.2 HU N LUY N MÔ HÌNH ÂM THANH
T o sao và khi nào thì chúng ta hu n luy n mô hình âm thanh:
Khi chúng ta mu n t o ra m t mô hình thanh cho ngôn ng m i c th đây là mô hình âm thanh cho các s t 0 đ n 9 trong Ti ng Vi t.
Ho c khi chúng ta c n mô hình âm thanh đ c tr ng cho m t ng d ng nào đó nh t
đi n và s t c n đ nh n di n là r t nh và không đáng k .
Khi chúng ta có r t nhi u d li u âm thanh đ c ghi t nhi u ngu n khác nhau:
M t gi ghi âm các l nh và các l nh đi u khi n cho m t ng i nói duy nh t. 5 gi ghi âm c a 200 ng i nói. 10 gi ghi âm nh n di n ch vi t c a m t ng i. 50 gi ghi âm 200 ng i nói cho vi c nh n di n ch vi t. B n c ng c n ph i có ki n th c v c u trúc âm
v c a ngôn ng và th i gian đ hu n luy n cho mô hình và t i u hóa toán t v âm thanh nh m giúp cho vi c nh n di n đ c chính xác h n.
Nh ng cách t t nh t đ có đ c m t c s d li u cho m t ngôn ng m i là ghi âm th công t ng đo n v i nh ng đo n v n có s n. Ghi âm gi ng c a b n, gia đình, đ ng nghi p.
đây chúng ta s s d ng m t m t b công c mã ngu n m có s n c a tr ng đ i h c Carnegie Mellon h tr t t trên môi tr ng Linux.
Chu n b môi tr ng và d li u ti n hành cho vi c xây d ng mô hình âm thanh. d dàng trong vi c hu n luy n, nhóm nghiên c u s d ng h đi u hành Ubuntu (Linux), t o m t th m c etc ch a các t p tin c n thi t cho vi c xây d ng mô hình, th m c wav ch a các t p tin t ghi âm b n thân, ng i thân, b n bè, đ ng nghi p, đây nhóm nghiên c u t p trung ghi âm gi ng c a b n thân và các sinh viên trong tr ng.
i u ki n là chúng ta đã cài đ t hai gói h tr cho vi c nh n di n gi ng nói là pocketsphins và sphinxbase
Bên trong th m c etc là các t p tin: TV.dic, TV.phone, TV.filler, TV_train.fileids, TV_train.transcription, sphinx_train.cfg
T p tin TV.dic là t p tin t đi n ti ng Vi t theo phiên âm do nhóm nghiên c u ch n. ây là lexicon cho đ c s , ch có 10 ch s t “0”, “1” đ n “9”. Do đó t đi n đ c s ti ng Vi t theo ki u đánh ch Telex c th nh sau:
0 KH OO NG 1 M OOJ T 2 H AI 3 B A 4 B OOS N 5 N AW M 6 S AUS 7 B AYR 8 T AS M 9 CH IS N
T p tin TV.filler là m t t p tin đóng vai trò là m t b l c nhi u: <S> SIL
<S>: kho ng l ng đ u câu <SIL>: kho ng l ng trong câu </S>: kho ng l ng cu i câu
T p tin TV.phone là t p tin ch a các âm v xu t hi n trong t p tinTV.dic và trong b l c nhi u TV.filler, có 20 âm v đ c s d ng cho 10 t t 0 đ n 9 là:
A AI AS AUS AW AYR B CH H IS KH M NG OO OOJ OOS S T TH
Các âm v này ph i duy nh t trong t p tin TV.phone và ch g m nh ng âm v mà chúng ta c n (xu t hi n trong TV.dic và TV.filler).
T p tin TV_train.transcription là t p tin ch a các câu mà chúng ta dùng đ h c. D i
đây là m t s câu trong 150 câu mà tôi dùng đ hu n luy n đ c s : <S> 1 2 3 4 5 </S> (12345) <S> 6 7 8 9 0 </S> (67890) <S> 0 2 4 6 8 </S> (02468) <S> 1 3 5 7 9 </S> (13579) <S> 1 1 1 1 1 </S> (11111) <S> 2 2 2 2 2 </S> (22222)
Thu âm 150 câu đ c s và l u các t p tin âm thanh .wav trong th m c wav. Chú ý: n m bên trong ngo c đ n là ch các t p tin âm thanh ghi âm, chúng ta không c n ghi ph n m r ng .wav mà ch c n ghi tên c a t p tin đó
T p tin TV _train.fileids
Là t p tin ch a t t c tên các t p tin âm thanh trong th m c wav th t tên t p tin âm7 thanh trong TV_train.fileids t ng ng v i th t câu đ c thu âm trong t p tin TV_train.transcription (s dòng trong TV_train.fileids ph i b ng s dòng trong TV_train.transcription). 12345 67890 02468 13579 11111 22222 T p tin sphinx_train.cfg
T p tin này đ c phát sinh t b công c dùng đ hu n luy n cho mô hình âm thanh có tên là SphinxTrain. có đ c t p tin này ta s d ng hai dòng l nh sau:
../SphinxTrain/scripts_pl/setup_SphinxTrain.pl -task TV ../pocketsphinx/scripts/setup_sphinx.pl -task TV
Trong t p tin này, chúng ta có th đi u ch nh s l ng senone trong nh n di n gi ng nói, s l ng senone m c đnh là 1000, v i s này, nhóm nghiên c u nh n th y t l nh n di n thành công là cao nh t và t l gi gi ng là th p nh t.
Sau khi đã chu n b đ y đ các t p tin, chúng ta b t đ u quá trình ghi âm: ./scripts_pl/make_feats -ctl etc/TV_train.fileids
./scripts_pl/RunAll.pl
Sau khi th c hi n xong các dòng l nh, chúng ta đã hoàn thành vi c hu n luy n mô hình âm thanh. Và có đ c th m c model_parameters ch a các th m c c a mô hình HMM.
3.3.3 XÂY D NG MÔ HÌNH NGÔN NG
Có hai lo i mô hình ngôn ng - mô hình ng pháp và mô hình ngôn ng th ng kê. Mô hình ng pháp là lo i mô hình r t đ n gi n mô t các lo i ngôn ng cho các l nh đi u khi n và ki m soát, và chúng th ng đ c vi t b ng tay ho c t đ ng t o ra v i các dòng l nh đ n gi n.
Có r t nhi u cách đ xây d ng mô hình ngôn ng th ng kê. Khi d li u c a b n quá l n, b n có th s d ng b công c c a CMU đ t o ra mô hình ngôn ng . Khi m t mô hình có quy mô nh , b n có th s d ng m t d ch v web tr c tuy n nhanh chóng t o ra mô hình này.
ph n m m có th đ c đ c mô hình ngôn ng có đuôi là .lm thì chúng ta c n ph i chuy n chúng sang d ng nh phân .dmp b ng l nh
sphinx_lm_convert -i TV.lm -o TV.dmp”
Sau khi đã có d c mô hình âm thanh và mô hình ngôn ng vi c ti p theo là cài đ t ng d ng nh n di n gi ng nói trên Android.
M terminal và gõ sudo-i đ l y quy n qu n tr c a h th ng ti p theo là m t kh u c a b n. Khi có quy n qu n tr , b n có th truy xu t vào các t p tin h th ng.
B n s c n swig đ th c thi ng d ng mà chúng ta s p vi t trên android vì th chúng ta s cài đ t swig b ng l nh apt-get install swig.
./configure make make install
i v i pocketsphinx c ng đánh các l nh t ng t .
Ti p theo vào th m c PocketSphinxDemo/jni và m t p tin Android.mk, trong th m c jni, và thay đ i SPHINX_PATH (dòng 5) vào th m c cha ch a pocketsphinx và sphinxbase mà chúng ta đã chu n b trên.Ti p t c gõ dòng l nh:
<đ ng d n đ n th m c ndk build>/ndk-build-B
Bây gi m Eclipse và import d án PocketSphinxDemo. Vào properties c a d án PocketSphinxDemo ch n Builder, b n s th y SWIG và NDK. Ch n NDK builder ch n
đ ng d n đ n th m c NDK và đi u ch nh “The project containing the selected resource” bên tab Refresh. B ch n “Specify working set of relevant resources” bên tab Build Option. Ti p theo ta tùy ch nh SWIG và ch nh “The folder containing the selected resource” bên tab Refresh và b ch n “Specifiy working set of relevant resources” bên tab Build Option
Thi t l p trên thi t b đi n tho i ch y h đi u hành Android. u tiên k t n i v i đi n tho i Android c a b n và t o ra các th m c edu.cmu.pocketsphinx t i /mnt/ sdcard. Ti p theo vào th m c edu.cmu.pocketsphinx n m trên đi n tho i c a b n và t o ra c u trúc th m c sau đây:
edu.cmu.pocketsphinx/hmm/vi/TV: th m c TV này là mô hình âm thanh mà chúng ta đã hu n luy n t tr c.
edu.cmu.pocketsphinx/lm/: trong th m c này ch a hai t p tin TV.dic và TV.dmp mà chúng ta t o ra khi xây d ng mô hình ngôn ng .
Ti p theo ta s đi u ch nh trong project đ tr đúng đ ng d n đ n th m c mà ta đã t o ra và thi t l p. Trong d án, ta theo đ ng đ n src/edu.cmu.pocketsphinx.demo/RecognizerTask.java sau đó tìm và s a các dòng sau:
c.setString("-hmm", "/sdcard/Android/edu.cmu.pocketsphinx/hmm/vi/TV"); c.setString("-dict", "/sdcard/Android/edu.cmu.pocketsphinx/lm/vi/TV.dic"); c.setString("-lm", "/sdcard/Android/edu.cmu.pocketsphinx/lm/vi/TV.DMP");
Nh v y ta chúng ta đã hoàn thành vi c xây d ng nên ng d ng nh n di n đ c các ch s t 0 đ n 9 trên đi n tho i Android.
3.4 CÀI T
3.4.1 CÀI T PHÍA CLIENT
Cài đ t phía client có nh ng ch c n ng chính là l y t a đ GPS t thi t b , g i và nh n d li u t server, nh n di n gi ng nói sinh viên.
Hình 3.7 Mô hình ho t đ ng bên phía Client
L y t a đ đ nh v toàn c u (GPS) c a thi t b
Tìm ki m m t Provider theo tiêu chí :
S d ng l p Criteria đ yêu c u thi t b x lý chính xác nh ng s li u có s n nh : v
đ và kinh đ , t c đ , đ cao, chi phí và yêu v c u n ng l ng đi n. Criteria criteria = new Criteria();
criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setSpeedRequired(false); criteria.setCostAllowed(true);
Chúng ta có th dùng getBestProvider là s k t h p t t nh t tr đ v cho Location Provider ho c dùng getProvider, s d ng getBestProvider nhà cung c p s tr l i các tiêu chí t t nh t, s d ng Boolean cho phép h n ch nh ng k t qu t nhà cung c p đang đ c ho t đ ng.
String bestProvider = locationManager.getBestProvider(criteria, true);
List<String> matchingProviders = locationManager.getProviders(criteria,false);
Tìm t o đ GPS:
M c đích c a d ch v đ nh v là tìm ra v trí v t lý c a thi t b .
truy c p vào Location Manager th c hi n các yêu c u LOCATION_SERVICES ta s d ng ph ng th c getSystemService:
String serviceString = Context.LOCATION_SERVICE; LocationManager locationManager;
locationManager = (LocationManager)getSystemService(serviceString);
Tr c khi s d ng Location Manager thì c n thêm m t ho c nhi u th uses- permission trong file mainfest đ truy c p vào các ph n c ng c a LBS trong đó bao g m c fine và coarse nh sau:
<uses-permission Android:name=”Android.permission.ACCESS_FINE_LOCATION”/> <uses-permission Android:name=”Android.permission.ACCESS_COARSE_LOCATION”/>
Chúng ta có th tìm th y v trí b ng cách xác đnh m t Location Provider s d ng ph ng th c getKnowLocation và đ a vào tên c a Location Provider.
Theo dõi s di chuy n (Tracking Movement):
S d ng ph ng th c requestLocationUpdate đ c p nh t b t k m t v trí, khi v trí hi n t i thay đ i chúng ta s d ng m t LocationListener.LocationListener th c hi n và
đ ng ký đ nh n thông tin.LocationListener r t linh ho t và nhi u tính n ng cho phép ch n nhi u lo i s ki n v v trí d a trên đ c tính khác nhau.
Ph ng th c requestLocationUpdate ch p nh n m t Location Provider ho c Criteria
đ xác đnh nhà cung c p đ c s d ng.
o n code sau s th hi n m t yêu c u c p nh t th ng xuyên d a trên m c t i thi u v th i gian và kho ng cách.
String provider = LocationManager.GPS_PROVIDER; int t = 5000; // milliseconds
int distance = 5; // meters
LocationListener myLocationListener = new LocationListener() { public void onLocationChanged(Location location) {
// Update application based on new location. }
public void onProviderDisabled(String provider){ // Update application if provider disabled.
}
public void onProviderEnabled(String provider){ // Update application if provider enabled.
}
public void onStatusChanged(String provider, int status,Bundle extras){ // Update application if provider hardware status changed.
} };
locationManager.requestLocationUpdates(provider, t, distance, myLocationListener); Giao ti p gi a client Android và Server :
ng d ng s d ng th vi n m KSOAP2 h tr h đi u hành Android đ k t n i web service client và Server. ây là m t th vi c soap hi u qu cho nên t ng android v i nhi u tính n ng c i ti n và phát tri n thêm các phiên b n sau.
KSOAP2 là gì ?
KSOAP2 là m t th vi n m cho các SOAP web service client trong môi tr ng Java nh Applet hay ng d ng J2ME. KSOAP2 đ c thi t k l i hoàn toàn d a trên nh ng th c nghi m t phiên b n đ u tiên ksoap1.x. KSOAP2-Android là m t nhánh trong th vi n KSOAP2 đ c thêm vào đ h tr cho n n t ng Android.
S d ng KSOAP2 đ l y d li u t Server :
th c hi n các ch c n ng chính c a ng d ng, ph n m m s k t n i đ n server và yêu c u tr v các d li u khác nhau. Nh ng k thu t đ g i, nh n d li u t server là t ng t nhau và theo m t quy đnh chung:
+ Kh i t o m t đ i t ng SoapObject đ g i yêu c u đ n server v i các tham s truy n vào là NAMESPACE và METHOD_NAME
+ Truy n vào giá tr c a tham s b ng cách dùng ph ng th c addProperty có s n c a
đ i t ng soapObject.
+ S d ng Soap Envelope dùng đ trao đ i gi a các client và webservice server. + X lý k t qu tr v b ng k thu t trong ngôn ng java và hi n th các thông tin c n thi t.
Ví d : Ki m tra Sinh viên có đang trong c c h c hay không B c 1 : kh i T o h ng s
private static final String SOAP_ACTION = "http://tempuri.org/XuLy"; private static final String OPERATION_NAME = "XuLy";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://androidws.somee.com/DD_WebService.asmx"; B c 2: Kh i t o SoapObject và các tham s truy n vào
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME); PropertyInfo propertyInfo = new PropertyInfo();
request.addProperty("kinhDo",viDo); request.addProperty("viDo",viDo);
B c 3. : G i d li u lên Server
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true;
envelope.setOutputSoapObject(request); B c 4 : Nh n giá tr tr v t server.
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); SoapObject response=null;
try {
httpTransport.call(SOAP_ACTION, envelope); response =(SoapObject) envelope.getResponse(); } catch (Exception exception){ … }
return response;
Cài đ t Google Maps API:
V i Google Map API, chúng ta có th thêm m t t m b n đ vào ng d ng d a trên d li u đ s c a Google Maps. API t đ ng qu n lý vi c truy xu t đ n server Google Map, t i các d li u v , hi n th b n đ , g i ph n h i đ n các thao tác trên b n đ . Ngoài
ra Google Maps còn có th thêm các đi m đánh d u, đánh d u các khu v c và che ph b n đ c b n b ng các tu ch nh c a riêng ng i dùng.