andrzejlisek
|
|
« Odpowiedz #3 : Lutego 13, 2009, 15:08:42 » |
|
Nie wiem, czy sprawa wciąż aktualna (szukanie programu rozpoznajacego japońskie teksty w grach NES), ale myślę, że jest lepszy sposób niż taki FineReader.
Wykorzystamy następujące fakty: - Każdy znak w tekście (obojetnie jaki język) to obrazek 8*8 pikseli - Ekran gry można podzielć na obrazki 8x8 pikseli, tylko czasem trzeba siatkę podziału przesuwać o pojedyncze piksele, np. w grach z przewijającym się ekranem. - W obrazku ze znakiem wykorzystane są najczęściej tylko 2 kolory - Każde wystąpienie danego znaku w tekście to identyczny obrazek
Wobec powyższego myślę, że nie jest jakimś dużym problemem (poza poświęceniem temu trochę czasu) napisanie takiego progrmu przez siebie.
Wcześniej, przygotowujemy screeny w BMP z tekstami, które chcemy odczytać.
Do naszego programu ładujemy screen z pliku BMP, potem ewentualnie ustawiamy przesunięcie siatki podziału w pikselach. Ustawiamy kolory biały i czarny, to znaczy, że przykładowo na screenie jest zielony tekst na czerwonym tle, to ustawiamy, że czerwony ma być traktowany jako kolor czarny, a zielony jako kolor biały (otrzymamy białe znaki na czarnym tle), a inne kolory jako czarny.
Potem robimy START (w jakiejkolwiek formie byłby zrobiony), a program sam pobiera kolejne bloki 8x8 pikseli z obrazka kolejnymi wierszami.
Każdy blok "przepuszcza" przez wcześniej zdefiniowaną "funkcję zmiany kolorów" i jeżeli identycznego nie było, to wyświetla go na ekranie i program pyta się, jaką literę przedstawia. Dajemy odpowiedż i program dopisuje do swojej bazy, że taki, a taki blok przedstawia taką, a taką literę, oraz do tekstu wynikowego dopisuje odpowiedni znak. Natomiast jeżeli już był identyczny blok taki, jak bieżący, to program nic nie pokazuje i o nic się nie pyta, tylko dopisuje do tekstu wynikowego odpowiadajacą temu blokowi literę. A jeżeli blok porzedstawia np. fragment rysunku, to jako literę można dać spację.
W ten sposób program zbiera informację jak wyglądają poszczególne litery w danej grze, i im kolejny obrazek z gry przepuścisz tym mniej razy program się zatrzyma z pytaniem o to jaki znak przedstawia dany blok. Ewentualnie można ustawić taką opcję, że nawet, jak nie ma danego bloku w bazie, to program o nic nie pytając się, uzna ten blok jako spację.
W tym przypadku nic nie stoi na przeszkodzie, żeby blokom przypisywać litery w wersji fonetycznej, czyli w postaci odpowiedników alfabetu łacińskiego.
Czasem jedna baza może posłużyć do dwóch gier, jeżeli obie gry mają identyczny wygląd znaczków japońskich.
Oczywiście ten sam program może posłużyć do wydobywania tekstu angielskiego.
Obejrzyj program SubRip (ten program służy do wydobywania listy dialogowej z oryginalnych płyt DVD), on działa na podobnej zasadzie, jak algorytm, który proponuję.
Jeżeli ktoś umie trochę programować pod DOS lub Windows, ewentualnie Linux, jak ktoś ma ten system operacyjny, to powinien sobie poradzić bez większego problemu.
Polecam kompilatory FreeBasic, FreePascal, w nich programuje się odpowiednio w języku Basic i Pascal, oba języki są łatwe do opanowania.
|