Now that all text has been read by the program, have to parse and interpret all of them into a useable format.
Love Live Parser Pop'n Parser Sound Voltex Parser DDR Parser ITG Parser
Now that all text has been read by the program, have to parse and interpret all of them into a useable format.
~~**Love Live Parser**
**Pop'n Parser**
**Sound Voltex Parser**
**DDR Parser**
**ITG Parser**~~
sigonasr2
added this to the Arcade Parser milestone 3 years ago
[6,0,218,0,218,48,6,48,'32 5 4 1 5',0.9670235803680689] belongs to region 0.
[0,83,63,83,63,119,0,119,'8SS',0.2467347529877256] belongs to region 1.
[3,145,349,145,349,207,3,207,'PerfECT539',0.3292923548952823] belongs to region 2.
[2,229,296,229,296,298,2,298,'GREAT539',0.9871345731712017] belongs to region 3.
[5,317,277,317,277,379,5,379,'G000539',0.2910353102944313] belongs to region 4.
[2,399,235,399,235,471,2,471,'BAD539',0.9785050163533519] belongs to region 5.
[1,488,252,488,252,557,1,557,'miss539',0.7017463953237888] belongs to region 6.
[7,577,259,577,259,617,7,617,'CHALLENGEAC',0.895842763500017] belongs to region 7.
[5,649,259,649,259,687,5,687,'Oyasuminasanl',0.8081512526326268] belongs to region 8.
[9,723,111,723,111,761,9,761,'1 1 9',0.8759227114569494] belongs to region 9.
[145,725,215,725,215,761,145,761,'8 %',0.8628723621368408] belongs to region 9.
[45,799,147,799,147,843,45,843,'5 4 3',0.97511838572682] belongs to region 10.
Output parsing uses midpoints for region detection.
```
[6,0,218,0,218,48,6,48,'32 5 4 1 5',0.9670235803680689] belongs to region 0.
[0,83,63,83,63,119,0,119,'8SS',0.2467347529877256] belongs to region 1.
[3,145,349,145,349,207,3,207,'PerfECT539',0.3292923548952823] belongs to region 2.
[2,229,296,229,296,298,2,298,'GREAT539',0.9871345731712017] belongs to region 3.
[5,317,277,317,277,379,5,379,'G000539',0.2910353102944313] belongs to region 4.
[2,399,235,399,235,471,2,471,'BAD539',0.9785050163533519] belongs to region 5.
[1,488,252,488,252,557,1,557,'miss539',0.7017463953237888] belongs to region 6.
[7,577,259,577,259,617,7,617,'CHALLENGEAC',0.895842763500017] belongs to region 7.
[5,649,259,649,259,687,5,687,'Oyasuminasanl',0.8081512526326268] belongs to region 8.
[9,723,111,723,111,761,9,761,'1 1 9',0.8759227114569494] belongs to region 9.
[145,725,215,725,215,761,145,761,'8 %',0.8628723621368408] belongs to region 9.
[45,799,147,799,147,843,45,843,'5 4 3',0.97511838572682] belongs to region 10.
```
Output parsing uses midpoints for region detection.
After detecting regions, between JP and EN data, the one with the highest accuracy rating gets used as the data point.
[6,0,218,0,218,48,6,48,'32 5 4 1 5',0.9670235803680689] belongs to region 0.
[0,83,63,83,63,119,0,119,'8SS',0.2467347529877256] belongs to region 1.
[3,145,349,145,349,207,3,207,'PerfECT539',0.3292923548952823] belongs to region 2.
[4,240,214,240,214,290,4,290,'GREAT4',0.9896742349999751] belongs to region 3.
[49,331,159,331,159,373,49,373,'OoDe',0.22151468694210052] belongs to region 4.
[7,415,144,415,144,459,7,459,'BADO',0.9977061748504639] belongs to region 5.
[4,498,168,498,168,548,4,548,'misso',0.8744521192960715] belongs to region 6.
[9,579,259,579,259,617,9,617,'CHALLENGEAC',0.9009251011230952] belongs to region 7.
[5,649,259,649,259,687,5,687,'Oyasuminasanl',0.8081512526326268] belongs to region 8.
[9,723,111,723,111,761,9,761,'1 1 9',0.8759227114569494] belongs to region 9.
[145,725,215,725,215,761,145,761,'8 %',0.8628723621368408] belongs to region 9.
[45,799,147,799,147,843,45,843,'5 4 3',0.97511838572682] belongs to region 10.
JP[6,0,218,0,218,48,6,48,'325415',0.9925715360039831] belongs to region 0.
JP[0,83,63,83,63,119,0,119,'993',0.7373851976012579] belongs to region 1.
JP[3,145,349,145,349,207,3,207,'PERFECT539',0.9911197026586883] belongs to region 2.
JP[49,331,159,331,159,373,49,373,'ooり',0.24235530041541428] belongs to region 4.
JP[9,579,259,579,259,617,9,617,'CHALLENGEAC',0.9806470154110354] belongs to region 7.
JP[5,649,259,649,259,687,5,687,'Oyasuminasan!',0.9836859145803696] belongs to region 8.
JP[9,723,111,723,111,761,9,761,'1 1 9',0.9979707548538136] belongs to region 9.
JP[145,725,215,725,215,761,145,761,'8 %',0.9274387570876679] belongs to region 9.
JP[45,799,147,799,147,843,45,843,'543',0.9994211310415072] belongs to region 10.
[
'325415',
'993',
'PERFECT539',
'GREAT4',
'ooり',
'BADO',
'misso',
'CHALLENGEAC',
'Oyasuminasan!',
'1 1 9'
'8 %',
'543']
Reader [difficulty=0, maxcombo=0, notes=[0, 0, 0, 0, 0, 0, 0], other=null, pct=0, rank=0, score=325415, title=null]
The toString() method of these readers will display the relevant data after parsing.
After detecting regions, between JP and EN data, the one with the highest accuracy rating gets used as the data point.
```
[6,0,218,0,218,48,6,48,'32 5 4 1 5',0.9670235803680689] belongs to region 0.
[0,83,63,83,63,119,0,119,'8SS',0.2467347529877256] belongs to region 1.
[3,145,349,145,349,207,3,207,'PerfECT539',0.3292923548952823] belongs to region 2.
[4,240,214,240,214,290,4,290,'GREAT4',0.9896742349999751] belongs to region 3.
[49,331,159,331,159,373,49,373,'OoDe',0.22151468694210052] belongs to region 4.
[7,415,144,415,144,459,7,459,'BADO',0.9977061748504639] belongs to region 5.
[4,498,168,498,168,548,4,548,'misso',0.8744521192960715] belongs to region 6.
[9,579,259,579,259,617,9,617,'CHALLENGEAC',0.9009251011230952] belongs to region 7.
[5,649,259,649,259,687,5,687,'Oyasuminasanl',0.8081512526326268] belongs to region 8.
[9,723,111,723,111,761,9,761,'1 1 9',0.8759227114569494] belongs to region 9.
[145,725,215,725,215,761,145,761,'8 %',0.8628723621368408] belongs to region 9.
[45,799,147,799,147,843,45,843,'5 4 3',0.97511838572682] belongs to region 10.
JP[6,0,218,0,218,48,6,48,'325415',0.9925715360039831] belongs to region 0.
JP[0,83,63,83,63,119,0,119,'993',0.7373851976012579] belongs to region 1.
JP[3,145,349,145,349,207,3,207,'PERFECT539',0.9911197026586883] belongs to region 2.
JP[49,331,159,331,159,373,49,373,'ooり',0.24235530041541428] belongs to region 4.
JP[9,579,259,579,259,617,9,617,'CHALLENGEAC',0.9806470154110354] belongs to region 7.
JP[5,649,259,649,259,687,5,687,'Oyasuminasan!',0.9836859145803696] belongs to region 8.
JP[9,723,111,723,111,761,9,761,'1 1 9',0.9979707548538136] belongs to region 9.
JP[145,725,215,725,215,761,145,761,'8 %',0.9274387570876679] belongs to region 9.
JP[45,799,147,799,147,843,45,843,'543',0.9994211310415072] belongs to region 10.
[
'325415',
'993',
'PERFECT539',
'GREAT4',
'ooり',
'BADO',
'misso',
'CHALLENGEAC',
'Oyasuminasan!',
'1 1 9'
'8 %',
'543']
Reader [difficulty=0, maxcombo=0, notes=[0, 0, 0, 0, 0, 0, 0], other=null, pct=0, rank=0, score=325415, title=null]
```
The `toString()` method of these readers will display the relevant data after parsing.
Perhaps we write our own implementation or use it directly.
Because we're mostly recognizing numbers, this method may be promising: https://github.com/eyarng/sdr
Perhaps we write our own implementation or use it directly.
Perhaps we write our own implementation or use it directly.
Doesn't work due to python2. However, it gives me an idea. Instead, we just do our own number checking (since numbers always look the same and leave the font detection up to our original detection.)
Makes more sense. Will begin working on refactoring that.
> Because we're mostly recognizing numbers, this method may be promising: https://github.com/eyarng/sdr
>
> Perhaps we write our own implementation or use it directly.
Doesn't work due to python2. However, it gives me an idea. Instead, we just do our own number checking (since numbers always look the same and leave the font detection up to our original detection.)
Makes more sense. Will begin working on refactoring that.
Data format for storing glyphs is:
```
<width>
<height>
51
51
011111111111111111111111111111111111100000000000000111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000011111111111111111111111111111111111111100000000000011111111111111111111111111111111111111110000000000000000001111111111111111111111111111111111100000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000111111111110000000000000000000000000000000000000000111111111111000000000000000000000000000000000000000111111111111110000000000000000001111111111111111001111111111111110000000000000001111111111111111111111111111111111111000000000000001111111111111111111111111111111111111000000000000011111111111111111111111111111111111111000000000000111111111111111111111111111111111111111000000000001111111111111111111111111111111111111111000000000011111111111111111111111111111111111111111000000000111111111111111111111111110111111111111111000000001111111111111111111111111100111111111111111000000011111111111111111111111111000111111111111111000000111111111111111111111111110000111111111111111000001111111111111111111111111100000111111111111111000011111111111111111111111111000000111111111111111000011111111111111111111111110000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000000111111111111111000000000000000000000000000000000111111111111111111011111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111110011111111111111111111111111111111111110011111111000011111111111111111111111111111111110000000000000000011111111111111111111111111111111100000000000000000011111111111111111111111111111111000000000000000000011111111111111111111111111111110000000000000000000011111111111111111111111111111100000000000000000000011111111111111111111111111111000000000000000000000011111111111111111111111111110000000000000000000000011111111111111111111111111100000000000000000000000
```
WARNING! Font ddr_diff does not have glyph data for 2!
WARNING! Font ddr_diff does not have glyph data for 3!
WARNING! Font ddr_diff does not have glyph data for 4!
WARNING! Font ddr_diff does not have glyph data for 5!
WARNING! Font ddr_diff does not have glyph data for 6!
WARNING! Font ddr_diff does not have glyph data for 7!
WARNING! Font ddr_diff does not have glyph data for 8!
WARNING! Font ddr_score does not have glyph data for 2!
WARNING! Font ddr_score does not have glyph data for 3!
WARNING! Font ddr_score does not have glyph data for 6!
WARNING! Font itg_diff does not have glyph data for 0!
WARNING! Font itg_diff does not have glyph data for 3!
WARNING! Font itg_diff does not have glyph data for 4!
WARNING! Font itg_diff does not have glyph data for 5!
WARNING! Font itg_diff does not have glyph data for 6!
WARNING! Font itg_diff does not have glyph data for 7!
WARNING! Font itg_diff does not have glyph data for 8!
WARNING! Font itg_diff does not have glyph data for 9!
WARNING! Font lovelive_noteCount does not have glyph data for 1!
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 6!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 6!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 0!
WARNING! Font lovelive_score does not have glyph data for 6!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
WARNING! Font lovelive_score does not have glyph data for 9!
WARNING! Font popn_combo does not have glyph data for 6!
WARNING! Font sdvx_EXScore does not have glyph data for 2!
WARNING! Font sdvx_EXScore does not have glyph data for 8!
WARNING! Font sdvx_littleScore does not have glyph data for 5!
WARNING! Font sdvx_largeScore does not have glyph data for 1!
WARNING! Font sdvx_largeScore does not have glyph data for 4!
WARNING! Font sdvx_largeScore does not have glyph data for 6!
WARNING! Font sdvx_largeScore does not have glyph data for 7!
Just for clarity, output from the program:
```
WARNING! Font ddr_diff does not have glyph data for 2!
WARNING! Font ddr_diff does not have glyph data for 3!
WARNING! Font ddr_diff does not have glyph data for 4!
WARNING! Font ddr_diff does not have glyph data for 5!
WARNING! Font ddr_diff does not have glyph data for 6!
WARNING! Font ddr_diff does not have glyph data for 7!
WARNING! Font ddr_diff does not have glyph data for 8!
WARNING! Font ddr_score does not have glyph data for 2!
WARNING! Font ddr_score does not have glyph data for 3!
WARNING! Font ddr_score does not have glyph data for 6!
WARNING! Font itg_diff does not have glyph data for 0!
WARNING! Font itg_diff does not have glyph data for 3!
WARNING! Font itg_diff does not have glyph data for 4!
WARNING! Font itg_diff does not have glyph data for 5!
WARNING! Font itg_diff does not have glyph data for 6!
WARNING! Font itg_diff does not have glyph data for 7!
WARNING! Font itg_diff does not have glyph data for 8!
WARNING! Font itg_diff does not have glyph data for 9!
WARNING! Font lovelive_noteCount does not have glyph data for 1!
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 6!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 6!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 0!
WARNING! Font lovelive_score does not have glyph data for 6!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
WARNING! Font lovelive_score does not have glyph data for 9!
WARNING! Font popn_combo does not have glyph data for 6!
WARNING! Font sdvx_EXScore does not have glyph data for 2!
WARNING! Font sdvx_EXScore does not have glyph data for 8!
WARNING! Font sdvx_littleScore does not have glyph data for 5!
WARNING! Font sdvx_largeScore does not have glyph data for 1!
WARNING! Font sdvx_largeScore does not have glyph data for 4!
WARNING! Font sdvx_largeScore does not have glyph data for 6!
WARNING! Font sdvx_largeScore does not have glyph data for 7!
```
First testing proves successful. Reading algorithm reports scores like so:
Glyph 0 has a score of 1574.
Glyph 9 has a score of 1802.
Glyph 0 has a score of 983.
Glyph 5 has a score of 1683.
Glyph 0 has a score of 1574.
Glyph 9 has a score of 1802.
Glyph 0 has a score of 497.
Glyph 4 has a score of 1836.
Glyph 0 has a score of -1906.
Glyph 1 has a score of 1040.
Glyph 0 has a score of 1802.
959410
Matches currently allow for 1 pixel of wiggle room in any direction. Scoring system adds 1 point for correct pixels (including transparent ones) while it punishes it -2 for non-matches. This makes sure that incorrect pixels are forced a lot out than just somehow matching some.
publicStringconvertGlyphs(List<Glyph>glyphs){StringBuildersb=newStringBuilder();for(inti=0;i<glyphs.size();i++){intbestScore=Integer.MIN_VALUE;intbestGlyph=0;for(intj=0;j<data.length;j++){Glyphg_a=glyphs.get(i);Glyphg_b=data[j];intscore=0;for(intx=0;x<g_b.width;x++){for(inty=0;y<g_b.height;y++){booleanfound=false;//We can be up to 1 pixel off and still be valid.
inner:for(intxx=-1;xx<=1;xx++){for(intyy=-1;yy<=1;yy++){inta_x=x+xx;inta_y=y+yy;if(a_x>=0&&a_x<g_a.width&&a_y>=0&&a_y<g_a.height){inta_index=a_y*g_a.width+a_x;if(g_a.data[a_index]==g_b.data[y*g_b.width+x]){found=true;breakinner;}}}}if(found){score++;}else{score-=2;}}}if(score>bestScore){bestScore=score;bestGlyph=j;//System.out.println("Glyph "+j+" has a score of "+bestScore+".");
}}sb.append(bestGlyph);}returnsb.toString();}}
First testing proves successful. Reading algorithm reports scores like so:
```
Glyph 0 has a score of 1574.
Glyph 9 has a score of 1802.
Glyph 0 has a score of 983.
Glyph 5 has a score of 1683.
Glyph 0 has a score of 1574.
Glyph 9 has a score of 1802.
Glyph 0 has a score of 497.
Glyph 4 has a score of 1836.
Glyph 0 has a score of -1906.
Glyph 1 has a score of 1040.
Glyph 0 has a score of 1802.
959410
```
Matches currently allow for 1 pixel of wiggle room in any direction. Scoring system adds 1 point for correct pixels (including transparent ones) while it punishes it -2 for non-matches. This makes sure that incorrect pixels are forced a lot out than just somehow matching some.
```java
public String convertGlyphs(List<Glyph> glyphs) {
StringBuilder sb = new StringBuilder();
for (int i=0;i<glyphs.size();i++) {
int bestScore=Integer.MIN_VALUE;
int bestGlyph=0;
for (int j=0;j<data.length;j++) {
Glyph g_a = glyphs.get(i);
Glyph g_b = data[j];
int score=0;
for (int x=0;x<g_b.width;x++) {
for (int y=0;y<g_b.height;y++) {
boolean found=false;
//We can be up to 1 pixel off and still be valid.
inner:
for (int xx=-1;xx<=1;xx++) {
for (int yy=-1;yy<=1;yy++) {
int a_x=x+xx;
int a_y=y+yy;
if (a_x>=0&&a_x<g_a.width&&a_y>=0&&a_y<g_a.height) {
int a_index=a_y*g_a.width+a_x;
if (g_a.data[a_index]==g_b.data[y*g_b.width+x]) {
found=true;
break inner;
}
}
}
}
if (found) {
score++;
} else {
score-=2;
}
}
}
if (score>bestScore) {
bestScore=score;
bestGlyph=j;
//System.out.println("Glyph "+j+" has a score of "+bestScore+".");
}
}
sb.append(bestGlyph);
}
return sb.toString();
}
}
```
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
Here is what is still missing:
```
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
```
Had to redo Sound Voltex number parsing for large and tiny scores due to not realizing the version change moved some elements. Updated list of missing elements:
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
WARNING! Font sdvx_littleScore does not have glyph data for 0!
WARNING! Font sdvx_littleScore does not have glyph data for 4!
WARNING! Font sdvx_largeScore does not have glyph data for 0!
WARNING! Font sdvx_largeScore does not have glyph data for 3!
Had to redo Sound Voltex number parsing for large and tiny scores due to not realizing the version change moved some elements. Updated list of missing elements:
```
WARNING! Font lovelive_noteCount does not have glyph data for 2!
WARNING! Font lovelive_noteCount does not have glyph data for 7!
WARNING! Font lovelive_noteCount does not have glyph data for 8!
WARNING! Font lovelive_pct does not have glyph data for 0!
WARNING! Font lovelive_pct does not have glyph data for 2!
WARNING! Font lovelive_pct does not have glyph data for 3!
WARNING! Font lovelive_pct does not have glyph data for 4!
WARNING! Font lovelive_pct does not have glyph data for 5!
WARNING! Font lovelive_pct does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 7!
WARNING! Font lovelive_score does not have glyph data for 8!
WARNING! Font sdvx_littleScore does not have glyph data for 0!
WARNING! Font sdvx_littleScore does not have glyph data for 4!
WARNING! Font sdvx_largeScore does not have glyph data for 0!
WARNING! Font sdvx_largeScore does not have glyph data for 3!
```
Now that all text has been read by the program, have to parse and interpret all of them into a useable format.
Love Live ParserPop'n Parser
Sound Voltex Parser
DDR Parser
ITG Parser
Output parsing uses midpoints for region detection.
After detecting regions, between JP and EN data, the one with the highest accuracy rating gets used as the data point.
The
toString()
method of these readers will display the relevant data after parsing.Pop'n Sample
Actually decided to remove the initial newline, made no sense.
New sample output:
Because we're mostly recognizing numbers, this method may be promising: https://github.com/eyarng/sdr
Perhaps we write our own implementation or use it directly.
Doesn't work due to python2. However, it gives me an idea. Instead, we just do our own number checking (since numbers always look the same and leave the font detection up to our original detection.)
Makes more sense. Will begin working on refactoring that.
Data format for storing glyphs is:
Missing font glyphs:
Next is to do the actual reading and comparison in the readers (with the ones we have accomplished thus far)
Just for clarity, output from the program:
First testing proves successful. Reading algorithm reports scores like so:
Matches currently allow for 1 pixel of wiggle room in any direction. Scoring system adds 1 point for correct pixels (including transparent ones) while it punishes it -2 for non-matches. This makes sure that incorrect pixels are forced a lot out than just somehow matching some.
Here is what is still missing:
Had to redo Sound Voltex number parsing for large and tiny scores due to not realizing the version change moved some elements. Updated list of missing elements:
All that is left is grade parsing, but that will probably just be an output for displaying on the site as an image.