├── README.md ├── all_pic.txt ├── all_pic502.txt ├── config.py ├── create_lmdb.py ├── data ├── biànduàn.png ├── biànnǎo.png ├── biángjiānyǔ.png ├── biāopó.png ├── bàocháng.png ├── bàsǎbàn.png ├── bènwéng.png ├── béiyǎng.png ├── bíxié.png.png ├── bíyù.png ├── bònghěnlìn.png ├── bózá.png ├── búsōuzàn.png ├── bānxōu.png ├── būqǐxǎng.png ├── bǎolǎn.png ├── bǐbā.png ├── bǐjiǔ.png ├── bǐliǔ.png ├── bǐmǎ.png ├── bǐqǐ.png ├── bǐshí.png ├── bǐsì.png ├── bǐsān.png ├── bǐwǔ.png ├── bǐyè.png ├── bǐyī.png ├── bǐèr.png ├── chènglòngyù.png ├── chénbā.png ├── chénjǐu.png ├── chénlíng.png ├── chénqī.png ├── chénshī.png ├── chénsì.png ├── chénsān.png ├── chénwǔ.png ├── chényī.png ├── chénèr.png ├── chísí.png ├── chíxián.png ├── chóngqìng.png ├── chúcǐ.png ├── chōngzú.png ├── chǐshù.png ├── cènghòngyù.png ├── cénbā.png ├── cénlìu.png ├── cénlíng.png ├── cénqī.png ├── cénsì.png ├── cénsān.png ├── cénwǔ.png ├── cényī.png ├── cénèr.png ├── císhí.png ├── cíxiáng.png ├── cāozuò.png ├── cōngzú.png ├── cǐshù.png ├── diànnǎo.png ├── dànbái.png ├── dàshǎdàn.png ├── dàxuě.png ├── dòngwěnlì.png ├── dòubàn.png ├── dòubú.png ├── dòupàn.png ├── dòuyú.png ├── dāgōng.png ├── dānyōu.png ├── dāogōng.png ├── dǒuxīn.png ├── dǒuyīn.png ├── féngbā.png ├── féngjǐu.png ├── fénglìu.png ├── féngqī.png ├── féngsì.png ├── féngsān.png ├── féngwǔ.png ├── féngèr.png ├── fāngshì.png ├── fāngsì.png ├── fāngàn.png ├── fānàn.png ├── fīfú.png ├── fīnfú.png ├── guànghùdòng.png ├── guìyì.png ├── guòyǐn.png ├── guānggù.png ├── guāngùn.png ├── gúqì.png ├── gāfē.png ├── gāfēi.png ├── gāifē.png ├── gāifēi.png ├── gāifēn.png ├── gānfēi.png ├── gāngfē.png ├── gāofē.png ├── gāofēi.png ├── gāofēng.png ├── gūcǎo.png ├── gǎntàn.png ├── gǎntàng.png ├── gǔlì.png ├── gǔyì.png ├── hièjiàn.png ├── hiúlǎn.png ├── huángrào.png ├── huángxùdòng.png ├── huánrào.png ├── huìyì.png ├── huòlǐn.png ├── huǒyàn.png ├── hàishǔ.png ├── hàishǔn.png ├── héngshèn.png ├── hénshèn.png ├── héshè.png ├── héshèn.png ├── hésè.png ├── héyīlǐng.png ├── húqīn.png ├── húshōuzhàn.png ├── hāofēng.png ├── hǔjí.png ├── jièjiàn.png ├── jiǎncè.png ├── jìngxīruì.png ├── jìshù.png ├── jíqìe.png ├── jùdān.png ├── jùndāng.png ├── jùnpàn.png ├── jùpà.png ├── jīeqī.png ├── jīngshén.png ├── jīnshé.png ├── jīntiān.png ├── jīnì.png ├── jǐnjiā.png ├── kuàngyìng.png ├── kuànyì.png ├── kuànyìn.png ├── kuànyìng.png ├── kuìzèn.png ├── kuìzèng.png ├── késhí.png ├── kūcǎ.png ├── kūcǎi.png ├── kūcǎn.png ├── kūcǎng.png ├── kūcǎo.png ├── kūncǎo.png ├── kǒngpà.png ├── kǒpàn.png ├── kǒujiān.png ├── liàngjì.png ├── liúlǎn.png ├── liúlǎngchěng.png ├── liúxǎngchěng.png ├── liúzìwǔ.png ├── lìfùlán.png ├── lìngxīruì.png ├── líyù.png ├── līngbài.png ├── līnì.png ├── lǎngxì.png ├── lǐbā.png ├── lǐbīng.png ├── lǐfū.png ├── lǐhuì.png ├── lǐhóng.png ├── lǐjì.png ├── lǐjǐu.png ├── lǐlè.png ├── lǐlìu.png ├── lǐlěi.png ├── lǐlīng.png ├── lǐmēng.png ├── lǐngdài.png ├── lǐnlóu.png ├── lǐnà.png ├── lǐpǔ.png ├── lǐqī.png ├── lǐsì.png ├── lǐsān.png ├── lǐwǔ.png ├── lǐxīn.png ├── lǐyuè.png ├── lǐyóu.png ├── lǐyù.png ├── lǐyī.png ├── lǐzhuó.png ├── lǐzhèn.png ├── lǐzé.png ├── lǐèr.png ├── mányī.png ├── máoyī.png ├── máoyīn.png ├── máyī.png ├── mólàn.png ├── mónàn.png ├── měilì.png ├── mǐngxìng.png ├── niàngjì.png ├── nàhǎn.png ├── nàihǎng.png ├── nánrén.png ├── nénggōng.png ├── nóngfū.png ├── nǔjí.png ├── piànduàn.png ├── piāopó.png ├── pàochán.png ├── pángbābàn.png ├── péiyǎng.png ├── pínxié.png ├── píxié.png ├── pózá.png ├── pǎonǎo.png ├── pǐnghé.png ├── pǐngé.png ├── pǐnlèi.png ├── pǐnpīn.png ├── pǐnwèi.png ├── pǔgóngwěi.png ├── pǔyúnlà.png ├── qicē.png ├── qiánbā.png ├── qiángjiāyǔ.png ├── qiánjǐu.png ├── qiánlíng.png ├── qiánqī.png ├── qiánshí.png ├── qiánsì.png ├── qiánsān.png ├── qiánwǔ.png ├── qiányī.png ├── qiánèr.png ├── qiúzhìwǔ.png ├── qìchē.png ├── qíshí.png ├── qísí.png ├── qǐmǎ.png ├── qǐyè.png ├── qǔdāo.png ├── qǔhóngweǐ.png ├── rèděng.png ├── rénniǎnlǎo.png ├── rúzhāng.png ├── shuǐbēi.png ├── shènyòngyǒu.png ├── shíweǐkè.png ├── shòngjūnshèn.png ├── shùnfēng.png ├── shúchǐ.png ├── shābù.png ├── shānbù.png ├── shānquán.png ├── shānxī.png ├── shāobù.png ├── shāobēi.png ├── shīshí.png ├── shǎgǒu.png ├── shǐjǐnnán.png ├── shǐniǎng.png ├── shǐxiǎng.png ├── shǒujī.png ├── shǔxiǎo.png ├── síweǐhè.png ├── sòngjūshè.png ├── sāngwěnyū.png ├── sānkù.png ├── sānwěnyū.png ├── sīshí.png ├── sūnbā.png ├── sūnjǐu.png ├── sūnlìu.png ├── sūnlíng.png ├── sūnqī.png ├── sūnshí.png ├── sūnsì.png ├── sūnsān.png ├── sūnwǔ.png ├── sūnyī.png ├── sūnèr.png ├── sǎbǒu.png ├── sǐjǐnán.png ├── sǔxiǎo.png ├── tiāngnèi.png ├── tiānmāo.png ├── tiānnèi.png ├── tiānrán.png ├── tiāolāo.png ├── tàiměi.png ├── tāilái.png ├── tālá.png ├── tālái.png ├── tāláng.png ├── tānlán.png ├── tānláng.png ├── tāolá.png ├── tāolán.png ├── tāoláo.png ├── tōngshùn.png ├── tōngsùn.png ├── tǎngsònglín.png ├── tǎnsònglíng.png ├── wàiměi.png ├── wàishǔ.png ├── wàizǐ.png ├── wànzǐ.png ├── wàzhǐn.png ├── wàzǐ.png ├── wàzǐn.png ├── wángbā.png ├── wángbādàn.png ├── wángjǐu.png ├── wánglìu.png ├── wánglíng.png ├── wángqī.png ├── wángsì.png ├── wángsān.png ├── wángwǔ.png ├── wángyī.png ├── wángèr.png ├── wènwén.png ├── wùdòng.png ├── wúbā.png ├── wújǐu.png ├── wúlìu.png ├── wúlíng.png ├── wúqī.png ├── wúshí.png ├── wúsì.png ├── wúsān.png ├── wúwǔ.png ├── wúyī.png ├── wúèr.png ├── wēijiàn.png ├── wēikōng.png ├── wūlán.png ├── wūqǐyǎng.png ├── wūyán.png ├── wǎngjiànguó.png ├── wǎngqiànwěn.png ├── wǎngyì.png ├── wǎnqiàngwěng.png ├── wǔbāi.png ├── wǔbān.png ├── wǔbāo.png ├── wǔnbā.png ├── wǔnbāi.png ├── wǔnbān.png ├── wǔnbāo.png ├── xiàhiè.png ├── xiàjiè.png ├── xiàliè.png ├── xiànliè.png ├── xiànxiè.png ├── xuànsén.png ├── xuǎnbāo.png ├── xíngzhuàn.png ├── xínzhuàng.png ├── xùdòng.png ├── xùnyù.png ├── xúbèi.png ├── xúxè.png ├── xīhǎn.png ├── xīlín.png ├── xīnfēi.png ├── xīngfēi.png ├── xīnhǎng.png ├── xīnqíng.png ├── xōufān.png ├── xūnéng.png ├── xǎngjiàhuó.png ├── xǒuzhōng.png ├── yuànshén.png ├── yuánbǎ.png ├── yuángbǎn.png ├── yànshì.png ├── yángguāng.png ├── yéxīmǐng.png ├── yìhùlán.png ├── yìxì.png ├── yìyì.png ├── yùnyù.png ├── yúbèi.png ├── yúlè.png ├── yīfú.png ├── yīlín.png ├── yīngdài.png ├── yīngyòng.png ├── yōufāng.png ├── yōugù.png ├── yōukù.png ├── yǒuzhōng.png ├── yǔyúnnà.png ├── zhàobā.png ├── zhàojǐu.png ├── zhàolíng.png ├── zhàoqī.png ├── zhàoshí.png ├── zhàosì.png ├── zhàosān.png ├── zhàowǔ.png ├── zhàoyī.png ├── zhàoèr.png ├── zhèngbā.png ├── zhèngjǐu.png ├── zhènglìu.png ├── zhèngqī.png ├── zhèngshí.png ├── zhèngsì.png ├── zhèngsān.png ├── zhèngwǔ.png ├── zhèngèr.png ├── zhíbō.png ├── zhípō.png ├── zhíshēn.png ├── zhòngyán.png ├── zhāngbào.png ├── zhāngbīng.png ├── zhāngchōng.png ├── zhāngcàn .png ├── zhāngcàn.png ├── zhāngdān.png ├── zhāngdōng.png ├── zhānghuì.png ├── zhānghéng.png ├── zhānghóng.png ├── zhāngléi.png ├── zhāngpīn.png ├── zhāngpīng.png ├── zhāngqiàn.png ├── zhāngqí.png ├── zhāngqīng.png ├── zhāngshuò.png ├── zhāngtīng.png ├── zhāngwěi.png ├── zhāngxīn.png ├── zhāngyàn.png ├── zhāngyīng.png ├── zhāngyǒu.png ├── zhāngzhèn.png ├── zhāobái.png ├── zhāopái.png ├── zhěngtiáo.png ├── zhīchēng.png ├── zhīnqùn.png ├── zhīqù.png ├── zhōngguó.png ├── zhōngwén.png ├── zhōubā.png ├── zhōujǐu.png ├── zhōulìu.png ├── zhōulíng.png ├── zhōuqī.png ├── zhōushí.png ├── zhōusì.png ├── zhōusān.png ├── zhōuwǔ.png ├── zhōuyī.png ├── zhōuèr.png ├── zhūbā.png ├── zhūjǐu.png ├── zhūlì.png ├── zhūlíng.png ├── zhūqī.png ├── zhūshí.png ├── zhūsì.png ├── zhūsān.png ├── zhūwǔ.png ├── zhūyī.png ├── zhūèr.png ├── zàngqī.png ├── zàngqīn.png ├── zàngqīu.png ├── zànqī.png ├── zànqīn.png ├── zànqīu.png ├── zàoqī.png ├── zàoqīn.png ├── zàoqīu.png ├── zàowǔ.png ├── zàowǔn.png ├── zàqī.png ├── zàqīn.png ├── zàqīu.png ├── zàwǔ.png ├── zàwǔn.png ├── zìdòng.png ├── zísēn.png ├── zīchēn.png ├── ābò.png └── āmò.png ├── dataset.py ├── dataset.pyc ├── demo.py ├── environment.yml ├── hypy_alphabet.py ├── lib ├── LICENSE ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── __init__.cpython-37.pyc │ ├── evaluators.cpython-36.pyc │ ├── evaluators.cpython-37.pyc │ ├── trainers.cpython-36.pyc │ └── trainers.cpython-37.pyc ├── datasets │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── concatdataset.cpython-36.pyc │ │ ├── concatdataset.cpython-37.pyc │ │ ├── dataset.cpython-36.pyc │ │ └── dataset.cpython-37.pyc │ ├── _trial_temp │ │ ├── _trial_marker │ │ └── test.log │ ├── concatdataset.py │ └── dataset.py ├── evaluation_metrics │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── metrics.cpython-36.pyc │ │ └── metrics.cpython-37.pyc │ └── metrics.py ├── evaluators.py ├── loss │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── sequenceCrossEntropyLoss.cpython-36.pyc │ │ └── sequenceCrossEntropyLoss.cpython-37.pyc │ └── sequenceCrossEntropyLoss.py ├── models │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── attention_recognition_head.cpython-36.pyc │ │ ├── attention_recognition_head.cpython-37.pyc │ │ ├── model_builder.cpython-36.pyc │ │ ├── model_builder.cpython-37.pyc │ │ ├── resnet_aster.cpython-36.pyc │ │ ├── resnet_aster.cpython-37.pyc │ │ ├── stn_head.cpython-36.pyc │ │ ├── stn_head.cpython-37.pyc │ │ ├── tps_spatial_transformer.cpython-36.pyc │ │ └── tps_spatial_transformer.cpython-37.pyc │ ├── attention_recognition_head.py │ ├── model_builder.py │ ├── resnet_aster.py │ ├── stn_head.py │ └── tps_spatial_transformer.py ├── overview.png ├── tools │ ├── create_sub_lmdb.py │ ├── create_svtp_lmdb.py │ └── create_svtp_lmdb_bak.py ├── trainers.py └── utils │ ├── __init__.py │ ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── __init__.cpython-37.pyc │ ├── labelmaps.cpython-36.pyc │ ├── labelmaps.cpython-37.pyc │ ├── logging.cpython-36.pyc │ ├── logging.cpython-37.pyc │ ├── meters.cpython-36.pyc │ ├── meters.cpython-37.pyc │ ├── osutils.cpython-36.pyc │ ├── osutils.cpython-37.pyc │ ├── serialization.cpython-36.pyc │ ├── serialization.cpython-37.pyc │ ├── visualization_utils.cpython-36.pyc │ └── visualization_utils.cpython-37.pyc │ ├── hypy_alphabet.py │ ├── labelmaps.py │ ├── logging.py │ ├── meters.py │ ├── osutils.py │ ├── serialization.py │ └── visualization_utils.py ├── models ├── __init__.py ├── __init__.pyc ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── __init__.cpython-37.pyc │ ├── crnn.cpython-36.pyc │ └── crnn.cpython-37.pyc ├── alphabet_manwen.py ├── alphabets.py ├── crnn.py ├── crnn.pyc └── 说明.txt ├── pic_to_txt.py ├── py_train.py ├── split_data.py └── utils.py /README.md: -------------------------------------------------------------------------------- 1 | # OCR项目实战(一):手写汉语拼音识别 2 | 3 | 项目介绍: 4 | 5 | 本项目基于深度学习的手写汉语拼音识别方法研究与实现。项目采用Pytorch框架,整体采用主流深度学习文字识别算法CRNN+CTC方法,项目流程主要分为数据集采集及标注,算法构建、模型训练、预测与评估等。后续会补充PaddleOCR版本的手写汉语拼音识别,将引入更多模型测试,并结合数据增强手段提升模型泛化性。 6 | 7 | 8 | 📝项目讲解:https://blog.csdn.net/qq_36816848/article/details/128951065 9 | 10 | ✨欢迎订阅专栏,欢迎加群互相交流,q群:704932595 , 群内将分享更多大数据与人工智能专业资料!!!! 11 | 12 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/785fed7a6b4c4dc5a18e33bd71a37907.png) 13 | 14 | 15 | 16 | 1.首先将制作好的图片放入data目录下,图片名按具体写的拼音命名,格式jpg。 17 | 2.执行pic_to_txt.py文件,生成用于文字识别的图片及标注信息all_pic.txt,内容需要包含图片路径名+拼音,\t分割。 18 | 3.运行split.py数据集脚本将图片总数量按9:1比例 (将all_pic.txt分别生成train.txt 和test.txt) 19 | 4.将txt格式转为lmdb格式数据集执行create_lmdb,得到train和testd lmdb文件夹,将两个路径替换train.py里的训练及测试路径。 20 | 5.运行train.py训练,跑一定时间将模型保存运行demo进行测试。 21 | 22 | 算法介绍: 23 | 24 | 1.CRNN+CTC (vgg为特征提取网络) 25 | 26 | ![image](https://user-images.githubusercontent.com/30800097/219945486-bd6c9ac5-ebe3-47ec-bd84-32a8bb107b2b.png) 27 | 28 | 29 | 30 | 2.CRNN+Attention (resnet为特征提取网络) 31 | 32 | ![image](https://user-images.githubusercontent.com/30800097/219945469-f4d7ab0c-2808-4629-96f3-9516dd71716e.png) 33 | 34 | 欢迎Fork,后续将更新更多CV相关项目! 35 | -------------------------------------------------------------------------------- /all_pic.txt: -------------------------------------------------------------------------------- 1 | ./data/bàocháng bàocháng 2 | ./data/bíyù bíyù 3 | ./data/bózá bózá 4 | ./data/bǎolǎn bǎolǎn 5 | ./data/chènglòngyù chènglòngyù 6 | ./data/chōngzú chōngzú 7 | ./data/chǐshù chǐshù 8 | ./data/císhí císhí 9 | ./data/cíxiáng cíxiáng 10 | ./data/cāozuò cāozuò 11 | ./data/diànnǎo diànnǎo 12 | ./data/dàshǎdàn dàshǎdàn 13 | ./data/dòngwěnlì dòngwěnlì 14 | ./data/dòubàn dòubàn 15 | ./data/dòuyú dòuyú 16 | ./data/dānyōu dānyōu 17 | ./data/dāogōng dāogōng 18 | ./data/dǒuyīn dǒuyīn 19 | ./data/fāngshì fāngshì 20 | ./data/fāngàn fāngàn 21 | ./data/guòyǐn guòyǐn 22 | ./data/guānggù guānggù 23 | ./data/gúqì gúqì 24 | ./data/gāofēng gāofēng 25 | ./data/gǎntàn gǎntàn 26 | ./data/gǔlì gǔlì 27 | ./data/huángxùdòng huángxùdòng 28 | ./data/huánrào huánrào 29 | ./data/huìyì huìyì 30 | ./data/héyīlǐng héyīlǐng 31 | ./data/húshōuzhàn húshōuzhàn 32 | ./data/jièjiàn jièjiàn 33 | ./data/jìngxīruì jìngxīruì 34 | ./data/jíqìe jíqìe 35 | ./data/jùdān jùdān 36 | ./data/jùpà jùpà 37 | ./data/jīngshén jīngshén 38 | ./data/jīnì jīnì 39 | ./data/jǐnjiā jǐnjiā 40 | ./data/kuìzèng kuìzèng 41 | ./data/kǒngpà kǒngpà 42 | ./data/kǒujiān kǒujiān 43 | ./data/liúlǎn liúlǎn 44 | ./data/liúlǎngchěng liúlǎngchěng 45 | ./data/lìfùlán lìfùlán 46 | ./data/lǐyóu lǐyóu 47 | ./data/mónàn mónàn 48 | ./data/nàhǎn nàhǎn 49 | ./data/piànduàn piànduàn 50 | ./data/piāopó piāopó 51 | ./data/péiyǎng péiyǎng 52 | ./data/pǐngé pǐngé 53 | ./data/pǐnpīn pǐnpīn 54 | ./data/pǐnwèi pǐnwèi 55 | ./data/qiángjiāyǔ qiángjiāyǔ 56 | ./data/qiúzhìwǔ qiúzhìwǔ 57 | ./data/qìchē qìchē 58 | ./data/qíshí qíshí 59 | ./data/qǐmǎ qǐmǎ 60 | ./data/qǐyè qǐyè 61 | ./data/qǔdāo qǔdāo 62 | ./data/qǔhóngweǐ qǔhóngweǐ 63 | ./data/rúzhāng rúzhāng 64 | ./data/shíweǐkè shíweǐkè 65 | ./data/shòngjūnshèn shòngjūnshèn 66 | ./data/shúchǐ shúchǐ 67 | ./data/shǎgǒu shǎgǒu 68 | ./data/shǐjǐnnán shǐjǐnnán 69 | ./data/sānwěnyū sānwěnyū 70 | ./data/tiānmāo tiānmāo 71 | ./data/tiānnèi tiānnèi 72 | ./data/tàiměi tàiměi 73 | ./data/tānlán tānlán 74 | ./data/tōngshùn tōngshùn 75 | ./data/tǎngsònglín tǎngsònglín 76 | ./data/wángbādàn wángbādàn 77 | ./data/wènwén wènwén 78 | ./data/wēijiàn wēijiàn 79 | ./data/wēikōng wēikōng 80 | ./data/wūqǐyǎng wūqǐyǎng 81 | ./data/wūyán wūyán 82 | ./data/wǎngjiànguó wǎngjiànguó 83 | ./data/wǎngqiànwěn wǎngqiànwěn 84 | ./data/wǎngyì wǎngyì 85 | ./data/xuǎnbāo xuǎnbāo 86 | ./data/xínzhuàng xínzhuàng 87 | ./data/xīhǎn xīhǎn 88 | ./data/xīnfēi xīnfēi 89 | ./data/yuànshén yuànshén 90 | ./data/yuánbǎ yuánbǎ 91 | ./data/yìyì yìyì 92 | ./data/yúlè yúlè 93 | ./data/yōufāng yōufāng 94 | ./data/yōukù yōukù 95 | ./data/yǒuzhōng yǒuzhōng 96 | ./data/yǔyúnnà yǔyúnnà 97 | ./data/zhíbō zhíbō 98 | ./data/zhāopái zhāopái 99 | ./data/zhīchēng zhīchēng 100 | ./data/zhīqù zhīqù 101 | -------------------------------------------------------------------------------- /create_lmdb.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on Tue Dec 24 18:44:21 2019 5 | 6 | @author: fhk 7 | """ 8 | 9 | import os 10 | import lmdb # install lmdb by "pip install lmdb" 11 | import cv2 12 | import re 13 | from PIL import Image 14 | import numpy as np 15 | import imghdr 16 | 17 | 18 | def checkImageIsValid(imageBin): 19 | if imageBin is None: 20 | return False 21 | try: 22 | imageBuf = np.fromstring(imageBin, dtype=np.uint8) 23 | img = cv2.imdecode(imageBuf, cv2.IMREAD_GRAYSCALE) 24 | imgH, imgW = img.shape[0], img.shape[1] 25 | except: 26 | return False 27 | else: 28 | if imgH * imgW == 0: 29 | return False 30 | return True 31 | 32 | 33 | def writeCache(env, cache): 34 | with env.begin(write=True) as txn: 35 | for k, v in cache.items(): 36 | # print(k) 37 | if isinstance(k, str): 38 | k = k.encode('utf-8') 39 | if isinstance(v, str): 40 | v = v.encode('utf-8') 41 | txn.put(k, v) 42 | 43 | # 这注释部分是原来的 44 | # def writeCache(env, cache): 45 | # with env.begin(write=True) as txn: 46 | # for k, v in cache.items(): 47 | # txn.put(k, v) 48 | 49 | def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkValid=True): 50 | assert (len(imagePathList) == len(labelList)) 51 | nSamples = len(imagePathList) 52 | env = lmdb.open(outputPath, map_size=10995188) 53 | cache = {} 54 | cnt = 1 55 | for i in range(nSamples): 56 | imagePath = ''.join(imagePathList[i]).split()[0].replace('\n', '').replace('\r\n', '') 57 | label = ''.join(labelList[i]) 58 | print(label) 59 | 60 | # 这块可能要改 61 | with open(imagePath, 'r') as f: 62 | imageBin = f.read() 63 | 64 | if checkValid: 65 | if not checkImageIsValid(imageBin): 66 | print('%s is not a valid image' % imagePath) 67 | continue 68 | imageKey = 'image-%09d' % cnt 69 | labelKey = 'label-%09d' % cnt 70 | cache[imageKey] = imageBin 71 | cache[labelKey] = label 72 | if lexiconList: 73 | lexiconKey = 'lexicon-%09d' % cnt 74 | cache[lexiconKey] = ' '.join(lexiconList[i]) 75 | if cnt % 1000 == 0: 76 | writeCache(env, cache) 77 | cache = {} 78 | print('Written %d / %d' % (cnt, nSamples)) 79 | cnt += 1 80 | print(cnt) 81 | nSamples = cnt - 1 82 | cache['num-samples'] = str(nSamples) 83 | writeCache(env, cache) 84 | print('Created dataset with %d samples' % nSamples) 85 | 86 | 87 | if __name__ == '__main__': 88 | #LMDB文件输出路径 按需改,执行两次,一次train,一次test 89 | outputPath = r'./train' 90 | # outputPath = r'./test' 91 | 92 | if not os.path.exists(outputPath): 93 | os.makedirs(outputPath) 94 | 95 | imgdata = open(r"./train.txt", "rt") 96 | # imgdata = open(r"./test.txt", "rt") 97 | imagePathList = list(imgdata) 98 | 99 | labelList = [] 100 | for line in imagePathList: 101 | word = line.split()[1] 102 | labelList.append(word) 103 | 104 | createDataset(outputPath, imagePathList, labelList) 105 | 106 | -------------------------------------------------------------------------------- /data/biànduàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/biànduàn.png -------------------------------------------------------------------------------- /data/biànnǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/biànnǎo.png -------------------------------------------------------------------------------- /data/biángjiānyǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/biángjiānyǔ.png -------------------------------------------------------------------------------- /data/biāopó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/biāopó.png -------------------------------------------------------------------------------- /data/bàocháng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bàocháng.png -------------------------------------------------------------------------------- /data/bàsǎbàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bàsǎbàn.png -------------------------------------------------------------------------------- /data/bènwéng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bènwéng.png -------------------------------------------------------------------------------- /data/béiyǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/béiyǎng.png -------------------------------------------------------------------------------- /data/bíxié.png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bíxié.png.png -------------------------------------------------------------------------------- /data/bíyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bíyù.png -------------------------------------------------------------------------------- /data/bònghěnlìn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bònghěnlìn.png -------------------------------------------------------------------------------- /data/bózá.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bózá.png -------------------------------------------------------------------------------- /data/búsōuzàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/búsōuzàn.png -------------------------------------------------------------------------------- /data/bānxōu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bānxōu.png -------------------------------------------------------------------------------- /data/būqǐxǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/būqǐxǎng.png -------------------------------------------------------------------------------- /data/bǎolǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǎolǎn.png -------------------------------------------------------------------------------- /data/bǐbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐbā.png -------------------------------------------------------------------------------- /data/bǐjiǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐjiǔ.png -------------------------------------------------------------------------------- /data/bǐliǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐliǔ.png -------------------------------------------------------------------------------- /data/bǐmǎ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐmǎ.png -------------------------------------------------------------------------------- /data/bǐqǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐqǐ.png -------------------------------------------------------------------------------- /data/bǐshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐshí.png -------------------------------------------------------------------------------- /data/bǐsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐsì.png -------------------------------------------------------------------------------- /data/bǐsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐsān.png -------------------------------------------------------------------------------- /data/bǐwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐwǔ.png -------------------------------------------------------------------------------- /data/bǐyè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐyè.png -------------------------------------------------------------------------------- /data/bǐyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐyī.png -------------------------------------------------------------------------------- /data/bǐèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/bǐèr.png -------------------------------------------------------------------------------- /data/chènglòngyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chènglòngyù.png -------------------------------------------------------------------------------- /data/chénbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénbā.png -------------------------------------------------------------------------------- /data/chénjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénjǐu.png -------------------------------------------------------------------------------- /data/chénlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénlíng.png -------------------------------------------------------------------------------- /data/chénqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénqī.png -------------------------------------------------------------------------------- /data/chénshī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénshī.png -------------------------------------------------------------------------------- /data/chénsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénsì.png -------------------------------------------------------------------------------- /data/chénsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénsān.png -------------------------------------------------------------------------------- /data/chénwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénwǔ.png -------------------------------------------------------------------------------- /data/chényī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chényī.png -------------------------------------------------------------------------------- /data/chénèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chénèr.png -------------------------------------------------------------------------------- /data/chísí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chísí.png -------------------------------------------------------------------------------- /data/chíxián.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chíxián.png -------------------------------------------------------------------------------- /data/chóngqìng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chóngqìng.png -------------------------------------------------------------------------------- /data/chúcǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chúcǐ.png -------------------------------------------------------------------------------- /data/chōngzú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chōngzú.png -------------------------------------------------------------------------------- /data/chǐshù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/chǐshù.png -------------------------------------------------------------------------------- /data/cènghòngyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cènghòngyù.png -------------------------------------------------------------------------------- /data/cénbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénbā.png -------------------------------------------------------------------------------- /data/cénlìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénlìu.png -------------------------------------------------------------------------------- /data/cénlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénlíng.png -------------------------------------------------------------------------------- /data/cénqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénqī.png -------------------------------------------------------------------------------- /data/cénsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénsì.png -------------------------------------------------------------------------------- /data/cénsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénsān.png -------------------------------------------------------------------------------- /data/cénwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénwǔ.png -------------------------------------------------------------------------------- /data/cényī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cényī.png -------------------------------------------------------------------------------- /data/cénèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cénèr.png -------------------------------------------------------------------------------- /data/císhí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/císhí.png -------------------------------------------------------------------------------- /data/cíxiáng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cíxiáng.png -------------------------------------------------------------------------------- /data/cāozuò.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cāozuò.png -------------------------------------------------------------------------------- /data/cōngzú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cōngzú.png -------------------------------------------------------------------------------- /data/cǐshù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/cǐshù.png -------------------------------------------------------------------------------- /data/diànnǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/diànnǎo.png -------------------------------------------------------------------------------- /data/dànbái.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dànbái.png -------------------------------------------------------------------------------- /data/dàshǎdàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dàshǎdàn.png -------------------------------------------------------------------------------- /data/dàxuě.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dàxuě.png -------------------------------------------------------------------------------- /data/dòngwěnlì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dòngwěnlì.png -------------------------------------------------------------------------------- /data/dòubàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dòubàn.png -------------------------------------------------------------------------------- /data/dòubú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dòubú.png -------------------------------------------------------------------------------- /data/dòupàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dòupàn.png -------------------------------------------------------------------------------- /data/dòuyú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dòuyú.png -------------------------------------------------------------------------------- /data/dāgōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dāgōng.png -------------------------------------------------------------------------------- /data/dānyōu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dānyōu.png -------------------------------------------------------------------------------- /data/dāogōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dāogōng.png -------------------------------------------------------------------------------- /data/dǒuxīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dǒuxīn.png -------------------------------------------------------------------------------- /data/dǒuyīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/dǒuyīn.png -------------------------------------------------------------------------------- /data/féngbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngbā.png -------------------------------------------------------------------------------- /data/féngjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngjǐu.png -------------------------------------------------------------------------------- /data/fénglìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fénglìu.png -------------------------------------------------------------------------------- /data/féngqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngqī.png -------------------------------------------------------------------------------- /data/féngsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngsì.png -------------------------------------------------------------------------------- /data/féngsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngsān.png -------------------------------------------------------------------------------- /data/féngwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngwǔ.png -------------------------------------------------------------------------------- /data/féngèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/féngèr.png -------------------------------------------------------------------------------- /data/fāngshì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fāngshì.png -------------------------------------------------------------------------------- /data/fāngsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fāngsì.png -------------------------------------------------------------------------------- /data/fāngàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fāngàn.png -------------------------------------------------------------------------------- /data/fānàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fānàn.png -------------------------------------------------------------------------------- /data/fīfú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fīfú.png -------------------------------------------------------------------------------- /data/fīnfú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/fīnfú.png -------------------------------------------------------------------------------- /data/guànghùdòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/guànghùdòng.png -------------------------------------------------------------------------------- /data/guìyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/guìyì.png -------------------------------------------------------------------------------- /data/guòyǐn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/guòyǐn.png -------------------------------------------------------------------------------- /data/guānggù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/guānggù.png -------------------------------------------------------------------------------- /data/guāngùn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/guāngùn.png -------------------------------------------------------------------------------- /data/gúqì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gúqì.png -------------------------------------------------------------------------------- /data/gāfē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāfē.png -------------------------------------------------------------------------------- /data/gāfēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāfēi.png -------------------------------------------------------------------------------- /data/gāifē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāifē.png -------------------------------------------------------------------------------- /data/gāifēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāifēi.png -------------------------------------------------------------------------------- /data/gāifēn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāifēn.png -------------------------------------------------------------------------------- /data/gānfēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gānfēi.png -------------------------------------------------------------------------------- /data/gāngfē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāngfē.png -------------------------------------------------------------------------------- /data/gāofē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāofē.png -------------------------------------------------------------------------------- /data/gāofēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāofēi.png -------------------------------------------------------------------------------- /data/gāofēng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gāofēng.png -------------------------------------------------------------------------------- /data/gūcǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gūcǎo.png -------------------------------------------------------------------------------- /data/gǎntàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gǎntàn.png -------------------------------------------------------------------------------- /data/gǎntàng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gǎntàng.png -------------------------------------------------------------------------------- /data/gǔlì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gǔlì.png -------------------------------------------------------------------------------- /data/gǔyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/gǔyì.png -------------------------------------------------------------------------------- /data/hièjiàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hièjiàn.png -------------------------------------------------------------------------------- /data/hiúlǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hiúlǎn.png -------------------------------------------------------------------------------- /data/huángrào.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huángrào.png -------------------------------------------------------------------------------- /data/huángxùdòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huángxùdòng.png -------------------------------------------------------------------------------- /data/huánrào.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huánrào.png -------------------------------------------------------------------------------- /data/huìyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huìyì.png -------------------------------------------------------------------------------- /data/huòlǐn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huòlǐn.png -------------------------------------------------------------------------------- /data/huǒyàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/huǒyàn.png -------------------------------------------------------------------------------- /data/hàishǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hàishǔ.png -------------------------------------------------------------------------------- /data/hàishǔn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hàishǔn.png -------------------------------------------------------------------------------- /data/héngshèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/héngshèn.png -------------------------------------------------------------------------------- /data/hénshèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hénshèn.png -------------------------------------------------------------------------------- /data/héshè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/héshè.png -------------------------------------------------------------------------------- /data/héshèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/héshèn.png -------------------------------------------------------------------------------- /data/hésè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hésè.png -------------------------------------------------------------------------------- /data/héyīlǐng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/héyīlǐng.png -------------------------------------------------------------------------------- /data/húqīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/húqīn.png -------------------------------------------------------------------------------- /data/húshōuzhàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/húshōuzhàn.png -------------------------------------------------------------------------------- /data/hāofēng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hāofēng.png -------------------------------------------------------------------------------- /data/hǔjí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/hǔjí.png -------------------------------------------------------------------------------- /data/jièjiàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jièjiàn.png -------------------------------------------------------------------------------- /data/jiǎncè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jiǎncè.png -------------------------------------------------------------------------------- /data/jìngxīruì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jìngxīruì.png -------------------------------------------------------------------------------- /data/jìshù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jìshù.png -------------------------------------------------------------------------------- /data/jíqìe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jíqìe.png -------------------------------------------------------------------------------- /data/jùdān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jùdān.png -------------------------------------------------------------------------------- /data/jùndāng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jùndāng.png -------------------------------------------------------------------------------- /data/jùnpàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jùnpàn.png -------------------------------------------------------------------------------- /data/jùpà.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jùpà.png -------------------------------------------------------------------------------- /data/jīeqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jīeqī.png -------------------------------------------------------------------------------- /data/jīngshén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jīngshén.png -------------------------------------------------------------------------------- /data/jīnshé.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jīnshé.png -------------------------------------------------------------------------------- /data/jīntiān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jīntiān.png -------------------------------------------------------------------------------- /data/jīnì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jīnì.png -------------------------------------------------------------------------------- /data/jǐnjiā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/jǐnjiā.png -------------------------------------------------------------------------------- /data/kuàngyìng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuàngyìng.png -------------------------------------------------------------------------------- /data/kuànyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuànyì.png -------------------------------------------------------------------------------- /data/kuànyìn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuànyìn.png -------------------------------------------------------------------------------- /data/kuànyìng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuànyìng.png -------------------------------------------------------------------------------- /data/kuìzèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuìzèn.png -------------------------------------------------------------------------------- /data/kuìzèng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kuìzèng.png -------------------------------------------------------------------------------- /data/késhí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/késhí.png -------------------------------------------------------------------------------- /data/kūcǎ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūcǎ.png -------------------------------------------------------------------------------- /data/kūcǎi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūcǎi.png -------------------------------------------------------------------------------- /data/kūcǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūcǎn.png -------------------------------------------------------------------------------- /data/kūcǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūcǎng.png -------------------------------------------------------------------------------- /data/kūcǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūcǎo.png -------------------------------------------------------------------------------- /data/kūncǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kūncǎo.png -------------------------------------------------------------------------------- /data/kǒngpà.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kǒngpà.png -------------------------------------------------------------------------------- /data/kǒpàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kǒpàn.png -------------------------------------------------------------------------------- /data/kǒujiān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/kǒujiān.png -------------------------------------------------------------------------------- /data/liàngjì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/liàngjì.png -------------------------------------------------------------------------------- /data/liúlǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/liúlǎn.png -------------------------------------------------------------------------------- /data/liúlǎngchěng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/liúlǎngchěng.png -------------------------------------------------------------------------------- /data/liúxǎngchěng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/liúxǎngchěng.png -------------------------------------------------------------------------------- /data/liúzìwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/liúzìwǔ.png -------------------------------------------------------------------------------- /data/lìfùlán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lìfùlán.png -------------------------------------------------------------------------------- /data/lìngxīruì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lìngxīruì.png -------------------------------------------------------------------------------- /data/líyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/líyù.png -------------------------------------------------------------------------------- /data/līngbài.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/līngbài.png -------------------------------------------------------------------------------- /data/līnì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/līnì.png -------------------------------------------------------------------------------- /data/lǎngxì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǎngxì.png -------------------------------------------------------------------------------- /data/lǐbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐbā.png -------------------------------------------------------------------------------- /data/lǐbīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐbīng.png -------------------------------------------------------------------------------- /data/lǐfū.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐfū.png -------------------------------------------------------------------------------- /data/lǐhuì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐhuì.png -------------------------------------------------------------------------------- /data/lǐhóng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐhóng.png -------------------------------------------------------------------------------- /data/lǐjì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐjì.png -------------------------------------------------------------------------------- /data/lǐjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐjǐu.png -------------------------------------------------------------------------------- /data/lǐlè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐlè.png -------------------------------------------------------------------------------- /data/lǐlìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐlìu.png -------------------------------------------------------------------------------- /data/lǐlěi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐlěi.png -------------------------------------------------------------------------------- /data/lǐlīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐlīng.png -------------------------------------------------------------------------------- /data/lǐmēng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐmēng.png -------------------------------------------------------------------------------- /data/lǐngdài.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐngdài.png -------------------------------------------------------------------------------- /data/lǐnlóu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐnlóu.png -------------------------------------------------------------------------------- /data/lǐnà.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐnà.png -------------------------------------------------------------------------------- /data/lǐpǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐpǔ.png -------------------------------------------------------------------------------- /data/lǐqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐqī.png -------------------------------------------------------------------------------- /data/lǐsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐsì.png -------------------------------------------------------------------------------- /data/lǐsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐsān.png -------------------------------------------------------------------------------- /data/lǐwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐwǔ.png -------------------------------------------------------------------------------- /data/lǐxīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐxīn.png -------------------------------------------------------------------------------- /data/lǐyuè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐyuè.png -------------------------------------------------------------------------------- /data/lǐyóu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐyóu.png -------------------------------------------------------------------------------- /data/lǐyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐyù.png -------------------------------------------------------------------------------- /data/lǐyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐyī.png -------------------------------------------------------------------------------- /data/lǐzhuó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐzhuó.png -------------------------------------------------------------------------------- /data/lǐzhèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐzhèn.png -------------------------------------------------------------------------------- /data/lǐzé.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐzé.png -------------------------------------------------------------------------------- /data/lǐèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/lǐèr.png -------------------------------------------------------------------------------- /data/mányī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/mányī.png -------------------------------------------------------------------------------- /data/máoyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/máoyī.png -------------------------------------------------------------------------------- /data/máoyīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/máoyīn.png -------------------------------------------------------------------------------- /data/máyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/máyī.png -------------------------------------------------------------------------------- /data/mólàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/mólàn.png -------------------------------------------------------------------------------- /data/mónàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/mónàn.png -------------------------------------------------------------------------------- /data/měilì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/měilì.png -------------------------------------------------------------------------------- /data/mǐngxìng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/mǐngxìng.png -------------------------------------------------------------------------------- /data/niàngjì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/niàngjì.png -------------------------------------------------------------------------------- /data/nàhǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nàhǎn.png -------------------------------------------------------------------------------- /data/nàihǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nàihǎng.png -------------------------------------------------------------------------------- /data/nánrén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nánrén.png -------------------------------------------------------------------------------- /data/nénggōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nénggōng.png -------------------------------------------------------------------------------- /data/nóngfū.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nóngfū.png -------------------------------------------------------------------------------- /data/nǔjí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/nǔjí.png -------------------------------------------------------------------------------- /data/piànduàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/piànduàn.png -------------------------------------------------------------------------------- /data/piāopó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/piāopó.png -------------------------------------------------------------------------------- /data/pàochán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pàochán.png -------------------------------------------------------------------------------- /data/pángbābàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pángbābàn.png -------------------------------------------------------------------------------- /data/péiyǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/péiyǎng.png -------------------------------------------------------------------------------- /data/pínxié.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pínxié.png -------------------------------------------------------------------------------- /data/píxié.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/píxié.png -------------------------------------------------------------------------------- /data/pózá.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pózá.png -------------------------------------------------------------------------------- /data/pǎonǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǎonǎo.png -------------------------------------------------------------------------------- /data/pǐnghé.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǐnghé.png -------------------------------------------------------------------------------- /data/pǐngé.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǐngé.png -------------------------------------------------------------------------------- /data/pǐnlèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǐnlèi.png -------------------------------------------------------------------------------- /data/pǐnpīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǐnpīn.png -------------------------------------------------------------------------------- /data/pǐnwèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǐnwèi.png -------------------------------------------------------------------------------- /data/pǔgóngwěi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǔgóngwěi.png -------------------------------------------------------------------------------- /data/pǔyúnlà.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/pǔyúnlà.png -------------------------------------------------------------------------------- /data/qicē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qicē.png -------------------------------------------------------------------------------- /data/qiánbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánbā.png -------------------------------------------------------------------------------- /data/qiángjiāyǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiángjiāyǔ.png -------------------------------------------------------------------------------- /data/qiánjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánjǐu.png -------------------------------------------------------------------------------- /data/qiánlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánlíng.png -------------------------------------------------------------------------------- /data/qiánqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánqī.png -------------------------------------------------------------------------------- /data/qiánshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánshí.png -------------------------------------------------------------------------------- /data/qiánsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánsì.png -------------------------------------------------------------------------------- /data/qiánsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánsān.png -------------------------------------------------------------------------------- /data/qiánwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánwǔ.png -------------------------------------------------------------------------------- /data/qiányī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiányī.png -------------------------------------------------------------------------------- /data/qiánèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiánèr.png -------------------------------------------------------------------------------- /data/qiúzhìwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qiúzhìwǔ.png -------------------------------------------------------------------------------- /data/qìchē.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qìchē.png -------------------------------------------------------------------------------- /data/qíshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qíshí.png -------------------------------------------------------------------------------- /data/qísí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qísí.png -------------------------------------------------------------------------------- /data/qǐmǎ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qǐmǎ.png -------------------------------------------------------------------------------- /data/qǐyè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qǐyè.png -------------------------------------------------------------------------------- /data/qǔdāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qǔdāo.png -------------------------------------------------------------------------------- /data/qǔhóngweǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/qǔhóngweǐ.png -------------------------------------------------------------------------------- /data/rèděng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/rèděng.png -------------------------------------------------------------------------------- /data/rénniǎnlǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/rénniǎnlǎo.png -------------------------------------------------------------------------------- /data/rúzhāng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/rúzhāng.png -------------------------------------------------------------------------------- /data/shuǐbēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shuǐbēi.png -------------------------------------------------------------------------------- /data/shènyòngyǒu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shènyòngyǒu.png -------------------------------------------------------------------------------- /data/shíweǐkè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shíweǐkè.png -------------------------------------------------------------------------------- /data/shòngjūnshèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shòngjūnshèn.png -------------------------------------------------------------------------------- /data/shùnfēng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shùnfēng.png -------------------------------------------------------------------------------- /data/shúchǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shúchǐ.png -------------------------------------------------------------------------------- /data/shābù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shābù.png -------------------------------------------------------------------------------- /data/shānbù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shānbù.png -------------------------------------------------------------------------------- /data/shānquán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shānquán.png -------------------------------------------------------------------------------- /data/shānxī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shānxī.png -------------------------------------------------------------------------------- /data/shāobù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shāobù.png -------------------------------------------------------------------------------- /data/shāobēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shāobēi.png -------------------------------------------------------------------------------- /data/shīshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shīshí.png -------------------------------------------------------------------------------- /data/shǎgǒu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǎgǒu.png -------------------------------------------------------------------------------- /data/shǐjǐnnán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǐjǐnnán.png -------------------------------------------------------------------------------- /data/shǐniǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǐniǎng.png -------------------------------------------------------------------------------- /data/shǐxiǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǐxiǎng.png -------------------------------------------------------------------------------- /data/shǒujī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǒujī.png -------------------------------------------------------------------------------- /data/shǔxiǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/shǔxiǎo.png -------------------------------------------------------------------------------- /data/síweǐhè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/síweǐhè.png -------------------------------------------------------------------------------- /data/sòngjūshè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sòngjūshè.png -------------------------------------------------------------------------------- /data/sāngwěnyū.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sāngwěnyū.png -------------------------------------------------------------------------------- /data/sānkù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sānkù.png -------------------------------------------------------------------------------- /data/sānwěnyū.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sānwěnyū.png -------------------------------------------------------------------------------- /data/sīshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sīshí.png -------------------------------------------------------------------------------- /data/sūnbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnbā.png -------------------------------------------------------------------------------- /data/sūnjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnjǐu.png -------------------------------------------------------------------------------- /data/sūnlìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnlìu.png -------------------------------------------------------------------------------- /data/sūnlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnlíng.png -------------------------------------------------------------------------------- /data/sūnqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnqī.png -------------------------------------------------------------------------------- /data/sūnshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnshí.png -------------------------------------------------------------------------------- /data/sūnsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnsì.png -------------------------------------------------------------------------------- /data/sūnsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnsān.png -------------------------------------------------------------------------------- /data/sūnwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnwǔ.png -------------------------------------------------------------------------------- /data/sūnyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnyī.png -------------------------------------------------------------------------------- /data/sūnèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sūnèr.png -------------------------------------------------------------------------------- /data/sǎbǒu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sǎbǒu.png -------------------------------------------------------------------------------- /data/sǐjǐnán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sǐjǐnán.png -------------------------------------------------------------------------------- /data/sǔxiǎo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/sǔxiǎo.png -------------------------------------------------------------------------------- /data/tiāngnèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tiāngnèi.png -------------------------------------------------------------------------------- /data/tiānmāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tiānmāo.png -------------------------------------------------------------------------------- /data/tiānnèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tiānnèi.png -------------------------------------------------------------------------------- /data/tiānrán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tiānrán.png -------------------------------------------------------------------------------- /data/tiāolāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tiāolāo.png -------------------------------------------------------------------------------- /data/tàiměi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tàiměi.png -------------------------------------------------------------------------------- /data/tāilái.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tāilái.png -------------------------------------------------------------------------------- /data/tālá.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tālá.png -------------------------------------------------------------------------------- /data/tālái.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tālái.png -------------------------------------------------------------------------------- /data/tāláng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tāláng.png -------------------------------------------------------------------------------- /data/tānlán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tānlán.png -------------------------------------------------------------------------------- /data/tānláng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tānláng.png -------------------------------------------------------------------------------- /data/tāolá.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tāolá.png -------------------------------------------------------------------------------- /data/tāolán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tāolán.png -------------------------------------------------------------------------------- /data/tāoláo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tāoláo.png -------------------------------------------------------------------------------- /data/tōngshùn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tōngshùn.png -------------------------------------------------------------------------------- /data/tōngsùn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tōngsùn.png -------------------------------------------------------------------------------- /data/tǎngsònglín.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tǎngsònglín.png -------------------------------------------------------------------------------- /data/tǎnsònglíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/tǎnsònglíng.png -------------------------------------------------------------------------------- /data/wàiměi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàiměi.png -------------------------------------------------------------------------------- /data/wàishǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàishǔ.png -------------------------------------------------------------------------------- /data/wàizǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàizǐ.png -------------------------------------------------------------------------------- /data/wànzǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wànzǐ.png -------------------------------------------------------------------------------- /data/wàzhǐn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàzhǐn.png -------------------------------------------------------------------------------- /data/wàzǐ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàzǐ.png -------------------------------------------------------------------------------- /data/wàzǐn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wàzǐn.png -------------------------------------------------------------------------------- /data/wángbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángbā.png -------------------------------------------------------------------------------- /data/wángbādàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángbādàn.png -------------------------------------------------------------------------------- /data/wángjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángjǐu.png -------------------------------------------------------------------------------- /data/wánglìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wánglìu.png -------------------------------------------------------------------------------- /data/wánglíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wánglíng.png -------------------------------------------------------------------------------- /data/wángqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángqī.png -------------------------------------------------------------------------------- /data/wángsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángsì.png -------------------------------------------------------------------------------- /data/wángsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángsān.png -------------------------------------------------------------------------------- /data/wángwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángwǔ.png -------------------------------------------------------------------------------- /data/wángyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángyī.png -------------------------------------------------------------------------------- /data/wángèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wángèr.png -------------------------------------------------------------------------------- /data/wènwén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wènwén.png -------------------------------------------------------------------------------- /data/wùdòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wùdòng.png -------------------------------------------------------------------------------- /data/wúbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúbā.png -------------------------------------------------------------------------------- /data/wújǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wújǐu.png -------------------------------------------------------------------------------- /data/wúlìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúlìu.png -------------------------------------------------------------------------------- /data/wúlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúlíng.png -------------------------------------------------------------------------------- /data/wúqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúqī.png -------------------------------------------------------------------------------- /data/wúshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúshí.png -------------------------------------------------------------------------------- /data/wúsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúsì.png -------------------------------------------------------------------------------- /data/wúsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúsān.png -------------------------------------------------------------------------------- /data/wúwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúwǔ.png -------------------------------------------------------------------------------- /data/wúyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúyī.png -------------------------------------------------------------------------------- /data/wúèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wúèr.png -------------------------------------------------------------------------------- /data/wēijiàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wēijiàn.png -------------------------------------------------------------------------------- /data/wēikōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wēikōng.png -------------------------------------------------------------------------------- /data/wūlán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wūlán.png -------------------------------------------------------------------------------- /data/wūqǐyǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wūqǐyǎng.png -------------------------------------------------------------------------------- /data/wūyán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wūyán.png -------------------------------------------------------------------------------- /data/wǎngjiànguó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǎngjiànguó.png -------------------------------------------------------------------------------- /data/wǎngqiànwěn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǎngqiànwěn.png -------------------------------------------------------------------------------- /data/wǎngyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǎngyì.png -------------------------------------------------------------------------------- /data/wǎnqiàngwěng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǎnqiàngwěng.png -------------------------------------------------------------------------------- /data/wǔbāi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔbāi.png -------------------------------------------------------------------------------- /data/wǔbān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔbān.png -------------------------------------------------------------------------------- /data/wǔbāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔbāo.png -------------------------------------------------------------------------------- /data/wǔnbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔnbā.png -------------------------------------------------------------------------------- /data/wǔnbāi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔnbāi.png -------------------------------------------------------------------------------- /data/wǔnbān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔnbān.png -------------------------------------------------------------------------------- /data/wǔnbāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/wǔnbāo.png -------------------------------------------------------------------------------- /data/xiàhiè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xiàhiè.png -------------------------------------------------------------------------------- /data/xiàjiè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xiàjiè.png -------------------------------------------------------------------------------- /data/xiàliè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xiàliè.png -------------------------------------------------------------------------------- /data/xiànliè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xiànliè.png -------------------------------------------------------------------------------- /data/xiànxiè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xiànxiè.png -------------------------------------------------------------------------------- /data/xuànsén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xuànsén.png -------------------------------------------------------------------------------- /data/xuǎnbāo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xuǎnbāo.png -------------------------------------------------------------------------------- /data/xíngzhuàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xíngzhuàn.png -------------------------------------------------------------------------------- /data/xínzhuàng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xínzhuàng.png -------------------------------------------------------------------------------- /data/xùdòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xùdòng.png -------------------------------------------------------------------------------- /data/xùnyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xùnyù.png -------------------------------------------------------------------------------- /data/xúbèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xúbèi.png -------------------------------------------------------------------------------- /data/xúxè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xúxè.png -------------------------------------------------------------------------------- /data/xīhǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīhǎn.png -------------------------------------------------------------------------------- /data/xīlín.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīlín.png -------------------------------------------------------------------------------- /data/xīnfēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīnfēi.png -------------------------------------------------------------------------------- /data/xīngfēi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīngfēi.png -------------------------------------------------------------------------------- /data/xīnhǎng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīnhǎng.png -------------------------------------------------------------------------------- /data/xīnqíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xīnqíng.png -------------------------------------------------------------------------------- /data/xōufān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xōufān.png -------------------------------------------------------------------------------- /data/xūnéng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xūnéng.png -------------------------------------------------------------------------------- /data/xǎngjiàhuó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xǎngjiàhuó.png -------------------------------------------------------------------------------- /data/xǒuzhōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/xǒuzhōng.png -------------------------------------------------------------------------------- /data/yuànshén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yuànshén.png -------------------------------------------------------------------------------- /data/yuánbǎ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yuánbǎ.png -------------------------------------------------------------------------------- /data/yuángbǎn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yuángbǎn.png -------------------------------------------------------------------------------- /data/yànshì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yànshì.png -------------------------------------------------------------------------------- /data/yángguāng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yángguāng.png -------------------------------------------------------------------------------- /data/yéxīmǐng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yéxīmǐng.png -------------------------------------------------------------------------------- /data/yìhùlán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yìhùlán.png -------------------------------------------------------------------------------- /data/yìxì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yìxì.png -------------------------------------------------------------------------------- /data/yìyì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yìyì.png -------------------------------------------------------------------------------- /data/yùnyù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yùnyù.png -------------------------------------------------------------------------------- /data/yúbèi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yúbèi.png -------------------------------------------------------------------------------- /data/yúlè.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yúlè.png -------------------------------------------------------------------------------- /data/yīfú.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yīfú.png -------------------------------------------------------------------------------- /data/yīlín.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yīlín.png -------------------------------------------------------------------------------- /data/yīngdài.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yīngdài.png -------------------------------------------------------------------------------- /data/yīngyòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yīngyòng.png -------------------------------------------------------------------------------- /data/yōufāng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yōufāng.png -------------------------------------------------------------------------------- /data/yōugù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yōugù.png -------------------------------------------------------------------------------- /data/yōukù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yōukù.png -------------------------------------------------------------------------------- /data/yǒuzhōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yǒuzhōng.png -------------------------------------------------------------------------------- /data/yǔyúnnà.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/yǔyúnnà.png -------------------------------------------------------------------------------- /data/zhàobā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàobā.png -------------------------------------------------------------------------------- /data/zhàojǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàojǐu.png -------------------------------------------------------------------------------- /data/zhàolíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàolíng.png -------------------------------------------------------------------------------- /data/zhàoqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàoqī.png -------------------------------------------------------------------------------- /data/zhàoshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàoshí.png -------------------------------------------------------------------------------- /data/zhàosì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàosì.png -------------------------------------------------------------------------------- /data/zhàosān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàosān.png -------------------------------------------------------------------------------- /data/zhàowǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàowǔ.png -------------------------------------------------------------------------------- /data/zhàoyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàoyī.png -------------------------------------------------------------------------------- /data/zhàoèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhàoèr.png -------------------------------------------------------------------------------- /data/zhèngbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngbā.png -------------------------------------------------------------------------------- /data/zhèngjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngjǐu.png -------------------------------------------------------------------------------- /data/zhènglìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhènglìu.png -------------------------------------------------------------------------------- /data/zhèngqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngqī.png -------------------------------------------------------------------------------- /data/zhèngshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngshí.png -------------------------------------------------------------------------------- /data/zhèngsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngsì.png -------------------------------------------------------------------------------- /data/zhèngsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngsān.png -------------------------------------------------------------------------------- /data/zhèngwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngwǔ.png -------------------------------------------------------------------------------- /data/zhèngèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhèngèr.png -------------------------------------------------------------------------------- /data/zhíbō.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhíbō.png -------------------------------------------------------------------------------- /data/zhípō.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhípō.png -------------------------------------------------------------------------------- /data/zhíshēn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhíshēn.png -------------------------------------------------------------------------------- /data/zhòngyán.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhòngyán.png -------------------------------------------------------------------------------- /data/zhāngbào.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngbào.png -------------------------------------------------------------------------------- /data/zhāngbīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngbīng.png -------------------------------------------------------------------------------- /data/zhāngchōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngchōng.png -------------------------------------------------------------------------------- /data/zhāngcàn .png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngcàn .png -------------------------------------------------------------------------------- /data/zhāngcàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngcàn.png -------------------------------------------------------------------------------- /data/zhāngdān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngdān.png -------------------------------------------------------------------------------- /data/zhāngdōng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngdōng.png -------------------------------------------------------------------------------- /data/zhānghuì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhānghuì.png -------------------------------------------------------------------------------- /data/zhānghéng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhānghéng.png -------------------------------------------------------------------------------- /data/zhānghóng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhānghóng.png -------------------------------------------------------------------------------- /data/zhāngléi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngléi.png -------------------------------------------------------------------------------- /data/zhāngpīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngpīn.png -------------------------------------------------------------------------------- /data/zhāngpīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngpīng.png -------------------------------------------------------------------------------- /data/zhāngqiàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngqiàn.png -------------------------------------------------------------------------------- /data/zhāngqí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngqí.png -------------------------------------------------------------------------------- /data/zhāngqīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngqīng.png -------------------------------------------------------------------------------- /data/zhāngshuò.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngshuò.png -------------------------------------------------------------------------------- /data/zhāngtīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngtīng.png -------------------------------------------------------------------------------- /data/zhāngwěi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngwěi.png -------------------------------------------------------------------------------- /data/zhāngxīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngxīn.png -------------------------------------------------------------------------------- /data/zhāngyàn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngyàn.png -------------------------------------------------------------------------------- /data/zhāngyīng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngyīng.png -------------------------------------------------------------------------------- /data/zhāngyǒu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngyǒu.png -------------------------------------------------------------------------------- /data/zhāngzhèn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāngzhèn.png -------------------------------------------------------------------------------- /data/zhāobái.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāobái.png -------------------------------------------------------------------------------- /data/zhāopái.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhāopái.png -------------------------------------------------------------------------------- /data/zhěngtiáo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhěngtiáo.png -------------------------------------------------------------------------------- /data/zhīchēng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhīchēng.png -------------------------------------------------------------------------------- /data/zhīnqùn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhīnqùn.png -------------------------------------------------------------------------------- /data/zhīqù.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhīqù.png -------------------------------------------------------------------------------- /data/zhōngguó.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōngguó.png -------------------------------------------------------------------------------- /data/zhōngwén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōngwén.png -------------------------------------------------------------------------------- /data/zhōubā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōubā.png -------------------------------------------------------------------------------- /data/zhōujǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōujǐu.png -------------------------------------------------------------------------------- /data/zhōulìu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōulìu.png -------------------------------------------------------------------------------- /data/zhōulíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōulíng.png -------------------------------------------------------------------------------- /data/zhōuqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōuqī.png -------------------------------------------------------------------------------- /data/zhōushí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōushí.png -------------------------------------------------------------------------------- /data/zhōusì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōusì.png -------------------------------------------------------------------------------- /data/zhōusān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōusān.png -------------------------------------------------------------------------------- /data/zhōuwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōuwǔ.png -------------------------------------------------------------------------------- /data/zhōuyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōuyī.png -------------------------------------------------------------------------------- /data/zhōuèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhōuèr.png -------------------------------------------------------------------------------- /data/zhūbā.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūbā.png -------------------------------------------------------------------------------- /data/zhūjǐu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūjǐu.png -------------------------------------------------------------------------------- /data/zhūlì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūlì.png -------------------------------------------------------------------------------- /data/zhūlíng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūlíng.png -------------------------------------------------------------------------------- /data/zhūqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūqī.png -------------------------------------------------------------------------------- /data/zhūshí.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūshí.png -------------------------------------------------------------------------------- /data/zhūsì.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūsì.png -------------------------------------------------------------------------------- /data/zhūsān.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūsān.png -------------------------------------------------------------------------------- /data/zhūwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūwǔ.png -------------------------------------------------------------------------------- /data/zhūyī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūyī.png -------------------------------------------------------------------------------- /data/zhūèr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zhūèr.png -------------------------------------------------------------------------------- /data/zàngqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàngqī.png -------------------------------------------------------------------------------- /data/zàngqīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàngqīn.png -------------------------------------------------------------------------------- /data/zàngqīu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàngqīu.png -------------------------------------------------------------------------------- /data/zànqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zànqī.png -------------------------------------------------------------------------------- /data/zànqīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zànqīn.png -------------------------------------------------------------------------------- /data/zànqīu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zànqīu.png -------------------------------------------------------------------------------- /data/zàoqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàoqī.png -------------------------------------------------------------------------------- /data/zàoqīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàoqīn.png -------------------------------------------------------------------------------- /data/zàoqīu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàoqīu.png -------------------------------------------------------------------------------- /data/zàowǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàowǔ.png -------------------------------------------------------------------------------- /data/zàowǔn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàowǔn.png -------------------------------------------------------------------------------- /data/zàqī.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàqī.png -------------------------------------------------------------------------------- /data/zàqīn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàqīn.png -------------------------------------------------------------------------------- /data/zàqīu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàqīu.png -------------------------------------------------------------------------------- /data/zàwǔ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàwǔ.png -------------------------------------------------------------------------------- /data/zàwǔn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zàwǔn.png -------------------------------------------------------------------------------- /data/zìdòng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zìdòng.png -------------------------------------------------------------------------------- /data/zísēn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zísēn.png -------------------------------------------------------------------------------- /data/zīchēn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/zīchēn.png -------------------------------------------------------------------------------- /data/ābò.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/ābò.png -------------------------------------------------------------------------------- /data/āmò.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/data/āmò.png -------------------------------------------------------------------------------- /dataset.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # encoding: utf-8 3 | 4 | import random 5 | import torch 6 | from torch.utils.data import Dataset 7 | from torch.utils.data import sampler 8 | import torchvision.transforms as transforms 9 | import lmdb 10 | import six 11 | import sys 12 | from PIL import Image 13 | import numpy as np 14 | 15 | 16 | class lmdbDataset(Dataset): 17 | 18 | def __init__(self, root=None, transform=None, target_transform=None): 19 | self.env = lmdb.open( 20 | root, 21 | max_readers=1, 22 | readonly=True, 23 | lock=False, 24 | readahead=False, 25 | meminit=False) 26 | 27 | if not self.env: 28 | print('cannot creat lmdb from %s' % (root)) 29 | sys.exit(0) 30 | 31 | with self.env.begin(write=False) as txn: 32 | nSamples = int(txn.get('num-samples'.encode())) 33 | self.nSamples = nSamples 34 | 35 | self.transform = transform 36 | self.target_transform = target_transform 37 | 38 | def __len__(self): 39 | return self.nSamples 40 | 41 | def __getitem__(self, index): 42 | assert index <= len(self), 'index range error' 43 | index += 1 44 | with self.env.begin(write=False) as txn: 45 | img_key = 'image-%09d' % index 46 | imgbuf = txn.get(img_key.encode()) 47 | 48 | buf = six.BytesIO() 49 | buf.write(imgbuf) 50 | buf.seek(0) 51 | try: 52 | img = Image.open(buf).convert('L') 53 | except IOError: 54 | print('Corrupted image for %d' % index) 55 | return self[index + 1] 56 | 57 | if self.transform is not None: 58 | img = self.transform(img) 59 | 60 | label_key = 'label-%09d' % index 61 | label = str(txn.get(label_key.encode()).decode()) 62 | 63 | if self.target_transform is not None: 64 | label = self.target_transform(label) 65 | 66 | return (img, label) 67 | 68 | 69 | class resizeNormalize(object): 70 | 71 | def __init__(self, size, interpolation=Image.BILINEAR): 72 | self.size = size 73 | self.interpolation = interpolation 74 | self.toTensor = transforms.ToTensor() 75 | 76 | def __call__(self, img): 77 | img = img.resize(self.size, self.interpolation) 78 | img = self.toTensor(img) 79 | img.sub_(0.5).div_(0.5) 80 | return img 81 | 82 | 83 | class randomSequentialSampler(sampler.Sampler): 84 | 85 | def __init__(self, data_source, batch_size): 86 | self.num_samples = len(data_source) 87 | self.batch_size = batch_size 88 | 89 | def __iter__(self): 90 | n_batch = len(self) // self.batch_size 91 | tail = len(self) % self.batch_size 92 | index = torch.LongTensor(len(self)).fill_(0) 93 | for i in range(n_batch): 94 | random_start = random.randint(0, len(self) - self.batch_size) 95 | batch_index = random_start + torch.range(0, self.batch_size - 1) 96 | index[i * self.batch_size:(i + 1) * self.batch_size] = batch_index 97 | # deal with tail 98 | if tail: 99 | random_start = random.randint(0, len(self) - self.batch_size) 100 | tail_index = random_start + torch.range(0, tail - 1) 101 | index[(i + 1) * self.batch_size:] = tail_index 102 | 103 | return iter(index) 104 | 105 | def __len__(self): 106 | return self.num_samples 107 | 108 | 109 | class alignCollate(object): 110 | 111 | def __init__(self, imgH=10, imgW=30, keep_ratio=False, min_ratio=1): 112 | self.imgH = imgH 113 | self.imgW = imgW 114 | self.keep_ratio = keep_ratio 115 | self.min_ratio = min_ratio 116 | 117 | def __call__(self, batch): 118 | images, labels = zip(*batch) 119 | 120 | imgH = self.imgH 121 | imgW = self.imgW 122 | if self.keep_ratio: 123 | ratios = [] 124 | for image in images: 125 | w, h = image.size 126 | ratios.append(w / float(h)) 127 | ratios.sort() 128 | max_ratio = ratios[-1] 129 | imgW = int(np.floor(max_ratio * imgH)) 130 | imgW = max(imgH * self.min_ratio, imgW) # assure imgH >= imgW 131 | 132 | transform = resizeNormalize((imgW, imgH)) 133 | images = [transform(image) for image in images] 134 | images = torch.cat([t.unsqueeze(0) for t in images], 0) 135 | 136 | return images, labels 137 | -------------------------------------------------------------------------------- /dataset.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/dataset.pyc -------------------------------------------------------------------------------- /demo.py: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | from __future__ import absolute_import 3 | import sys 4 | sys.path.append('./') 5 | 6 | import argparse 7 | import os 8 | import os.path as osp 9 | import numpy as np 10 | import math 11 | import time 12 | from PIL import Image, ImageFile 13 | 14 | import torch 15 | from torch import nn, optim 16 | from torch.backends import cudnn 17 | from torch.utils.data import DataLoader 18 | from torchvision import transforms 19 | 20 | from config import get_args 21 | from lib import datasets, evaluation_metrics, models 22 | from lib.models.model_builder import ModelBuilder 23 | from lib.datasets.dataset import LmdbDataset, AlignCollate 24 | from lib.loss import SequenceCrossEntropyLoss 25 | from lib.trainers import Trainer 26 | from lib.evaluators import Evaluator 27 | from lib.utils.logging import Logger, TFLogger 28 | from lib.utils.serialization import load_checkpoint, save_checkpoint 29 | from lib.utils.osutils import make_symlink_if_not_exists 30 | from lib.evaluation_metrics.metrics import get_str_list 31 | from lib.utils.labelmaps import get_vocabulary, labels2strs 32 | 33 | global_args = get_args(sys.argv[1:]) 34 | 35 | def image_process(image_path, imgH=32, imgW=100, keep_ratio=False, min_ratio=1): 36 | img = Image.open(image_path).convert('RGB') 37 | 38 | if keep_ratio: 39 | w, h = img.size 40 | ratio = w / float(h) 41 | imgW = int(np.floor(ratio * imgH)) 42 | imgW = max(imgH * min_ratio, imgW) 43 | 44 | img = img.resize((imgW, imgH), Image.BILINEAR) 45 | img = transforms.ToTensor()(img) 46 | img.sub_(0.5).div_(0.5) 47 | 48 | return img 49 | 50 | class DataInfo(object): 51 | """ 52 | Save the info about the dataset. 53 | This a code snippet from dataset.py 54 | """ 55 | def __init__(self, voc_type): 56 | super(DataInfo, self).__init__() 57 | self.voc_type = voc_type 58 | 59 | assert voc_type in ['LOWERCASE', 'ALLCASES', 'ALLCASES_SYMBOLS','HYPY'] 60 | self.EOS = 'EOS' 61 | self.PADDING = 'PADDING' 62 | self.UNKNOWN = 'UNKNOWN' 63 | self.voc = get_vocabulary(voc_type, EOS=self.EOS, PADDING=self.PADDING, UNKNOWN=self.UNKNOWN) 64 | self.char2id = dict(zip(self.voc, range(len(self.voc)))) 65 | self.id2char = dict(zip(range(len(self.voc)), self.voc)) 66 | 67 | self.rec_num_classes = len(self.voc) 68 | 69 | 70 | def main(args): 71 | np.random.seed(args.seed) 72 | torch.manual_seed(args.seed) 73 | torch.cuda.manual_seed(args.seed) 74 | torch.cuda.manual_seed_all(args.seed) 75 | dataset_info = DataInfo(args.voc_type) 76 | cudnn.benchmark = True 77 | torch.backends.cudnn.deterministic = True 78 | 79 | args.cuda = args.cuda and torch.cuda.is_available() 80 | # if args.cuda: 81 | # print('using cuda.') 82 | # torch.set_default_tensor_type('torch.cuda.FloatTensor') 83 | # else: 84 | # torch.set_default_tensor_type('torch.FloatTensor') 85 | torch.set_default_tensor_type('torch.FloatTensor') 86 | # Create demo_data loaders 87 | if args.height is None or args.width is None: 88 | args.height, args.width = (32, 100) 89 | 90 | 91 | # Create model 92 | model = ModelBuilder(arch=args.arch, rec_num_classes=dataset_info.rec_num_classes, 93 | sDim=args.decoder_sdim, attDim=args.attDim, max_len_labels=args.max_len, 94 | eos=dataset_info.char2id[dataset_info.EOS], STN_ON=args.STN_ON) 95 | 96 | # Load from checkpoint 97 | if args.resume: 98 | checkpoint = load_checkpoint(args.resume) 99 | model.load_state_dict(checkpoint['state_dict']) 100 | 101 | # if args.cuda: 102 | # device = torch.device("cuda") 103 | # model = model.to(device) 104 | # model = nn.DataParallel(model) 105 | 106 | # Evaluation 107 | model.eval() 108 | img = image_process(args.image_path) 109 | # with torch.no_grad(): 110 | # img = img.to(device) 111 | input_dict = {} 112 | input_dict['images'] = img.unsqueeze(0) 113 | # TODO: testing should be more clean. 114 | # to be compatible with the lmdb-based testing, need to construct some meaningless variables. 115 | rec_targets = torch.IntTensor(1, args.max_len).fill_(1) 116 | rec_targets[:,args.max_len-1] = dataset_info.char2id[dataset_info.EOS] 117 | input_dict['rec_targets'] = rec_targets 118 | input_dict['rec_lengths'] = [args.max_len] 119 | output_dict = model(input_dict) 120 | pred_rec = output_dict['output']['pred_rec'] 121 | pred_str, _ = get_str_list(pred_rec, input_dict['rec_targets'], dataset=dataset_info) 122 | print('Recognition result: {0}'.format(pred_str[0])) 123 | 124 | 125 | if __name__ == '__main__': 126 | # parse the configs 127 | args = get_args(sys.argv[1:]) 128 | main(args) -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: recognition 2 | channels: 3 | - pytorch 4 | - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 5 | - defaults 6 | - conda-forge 7 | dependencies: 8 | - _libgcc_mutex=0.1=main 9 | - absl-py=0.7.1=py37_0 10 | - astor=0.7.1=py_0 11 | - blas=2.11=openblas 12 | - bzip2=1.0.8=h7b6447c_0 13 | - c-ares=1.15.0=h516909a_1001 14 | - ca-certificates=2019.6.16=hecc5488_0 15 | - cairo=1.14.12=h8948797_3 16 | - certifi=2019.6.16=py37_1 17 | - cffi=1.12.3=py37h2e261b9_0 18 | - cudatoolkit=9.0=h13b8566_0 19 | - cycler=0.10.0=py_1 20 | - dbus=1.13.6=h746ee38_0 21 | - editdistance=0.5.3=py37hf484d3e_0 22 | - expat=2.2.6=he6710b0_0 23 | - ffmpeg=4.0=hcdf2ecd_0 24 | - fontconfig=2.13.1=he4413a7_1000 25 | - freeglut=3.0.0=hf484d3e_5 26 | - freetype=2.9.1=h8a8886c_1 27 | - gast=0.2.2=py_0 28 | - gettext=0.19.8.1=hc5be6a0_1002 29 | - glib=2.56.2=hd408876_0 30 | - graphite2=1.3.13=h23475e2_0 31 | - grpcio=1.16.1=py37hf8bcb03_1 32 | - gst-plugins-base=1.14.0=hbbd80ab_1 33 | - gstreamer=1.14.0=hb453b48_1 34 | - h5py=2.8.0=py37h3010b51_1003 35 | - harfbuzz=1.8.8=hffaf4a1_0 36 | - hdf5=1.10.2=hba1933b_1 37 | - icu=58.2=h9c2bf20_1 38 | - intel-openmp=2019.4=243 39 | - jasper=2.0.14=h07fcdf6_1 40 | - jpeg=9c=h14c3975_1001 41 | - keras-applications=1.0.7=py_1 42 | - keras-preprocessing=1.0.9=py_1 43 | - kiwisolver=1.1.0=py37hc9558a2_0 44 | - libblas=3.8.0=11_openblas 45 | - libcblas=3.8.0=11_openblas 46 | - libedit=3.1.20181209=hc058e9b_0 47 | - libffi=3.2.1=hd88cf55_4 48 | - libgcc-ng=9.1.0=hdf63c60_0 49 | - libgfortran-ng=7.3.0=hdf63c60_0 50 | - libglu=9.0.0=hf484d3e_1 51 | - libiconv=1.15=h516909a_1005 52 | - liblapack=3.8.0=11_openblas 53 | - liblapacke=3.8.0=11_openblas 54 | - libopenblas=0.3.6=h5a2b251_1 55 | - libopencv=3.4.2=hb342d67_1 56 | - libopus=1.3=h7b6447c_0 57 | - libpng=1.6.37=hbc83047_0 58 | - libprotobuf=3.9.1=h8b12597_0 59 | - libstdcxx-ng=9.1.0=hdf63c60_0 60 | - libtiff=4.0.10=h2733197_2 61 | - libuuid=2.32.1=h14c3975_1000 62 | - libvpx=1.7.0=h439df22_0 63 | - libxcb=1.13=h14c3975_1002 64 | - libxml2=2.9.9=hea5a465_1 65 | - lmdb=0.9.24=h516909a_0 66 | - markdown=3.1.1=py_0 67 | - matplotlib=3.1.0=py37h5429711_0 68 | - matplotlib-base=3.1.1=py37hfd891ef_0 69 | - mkl=2019.4=243 70 | - mkl-service=2.1.0=py37h516909a_0 71 | - mkl_fft=1.0.14=py37h516909a_1 72 | - mkl_random=1.0.4=py37hf2d7682_0 73 | - mock=3.0.5=py37_0 74 | - ncurses=6.1=he6710b0_1 75 | - ninja=1.9.0=py37hfd86e86_0 76 | - numpy=1.16.4=py37h99e49ec_0 77 | - numpy-base=1.16.4=py37h2f8d375_0 78 | - olefile=0.46=py37_0 79 | - openblas=0.3.3=h9ac9557_1001 80 | - opencv=3.4.2=py37h6fd60c2_1 81 | - openssl=1.1.1c=h516909a_0 82 | - pcre=8.43=he6710b0_0 83 | - pillow=6.1.0=py37h6b7be26_1 84 | - pip=19.1.1=py37_0 85 | - pixman=0.38.0=h7b6447c_0 86 | - protobuf=3.9.1=py37he1b5a44_0 87 | - pthread-stubs=0.4=h14c3975_1001 88 | - py-opencv=3.4.2=py37hb342d67_1 89 | - pycparser=2.19=py37_0 90 | - pyparsing=2.4.2=py_0 91 | - pyqt=5.9.2=py37hcca6a23_2 92 | - python=3.7.3=h0371630_0 93 | - python-dateutil=2.8.0=py_0 94 | - python-lmdb=0.96=py37he1b5a44_0 95 | - pytorch=1.1.0=py3.7_cuda9.0.176_cudnn7.5.1_0 96 | - pytz=2019.1=py_0 97 | - qt=5.9.7=h5867ecd_1 98 | - readline=7.0=h7b6447c_5 99 | - scipy=1.1.0=py37he2b7bc3_2 100 | - setuptools=41.0.1=py37_0 101 | - sip=4.19.8=py37hf484d3e_1000 102 | - six=1.12.0=py37_0 103 | - sqlite=3.29.0=h7b6447c_0 104 | - tensorboard=1.13.1=py37_0 105 | - tensorflow=1.13.1=py37h90a7d86_1 106 | - tensorflow-estimator=1.13.0=py_0 107 | - termcolor=1.1.0=py_2 108 | - tk=8.6.9=hed695b0_1002 109 | - torchvision=0.3.0=py37_cu9.0.176_1 110 | - tornado=6.0.3=py37h516909a_0 111 | - tqdm=4.33.0=py_0 112 | - werkzeug=0.15.5=py_0 113 | - wheel=0.33.4=py37_0 114 | - xorg-libxau=1.0.9=h14c3975_0 115 | - xorg-libxdmcp=1.1.3=h516909a_0 116 | - xz=5.2.4=h14c3975_4 117 | - zlib=1.2.11=h7b6447c_3 118 | - zstd=1.3.7=h0b5b093_0 119 | prefix: /home/mkyang/miniconda3/envs/recognition 120 | 121 | -------------------------------------------------------------------------------- /hypy_alphabet.py: -------------------------------------------------------------------------------- 1 | # http://du.hanyupinyin.cn/shengdiao.html 2 | def alphabet(): 3 | 4 | py_char=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i','j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w','x','y','z', 5 | 'ā', 'á', 'ǎ', 'à', 'ō', 'ó', 'ǒ', 'ò', 'ē', 'é', 'ě', 'è', 'ī', 'í', 'ǐ', 'ì', 'ū', 'ú', 'ǔ', 'ù', 'ǖ', 'ǘ', 'ǚ','ǜ'] 6 | 7 | return py_char 8 | 9 | 10 | # ['a1','a2','a3','a4','e1','e2','e3','e4','e5','i1','i2','i3','i4','i5','o1','o2','o3','o4','o5','u1','u2','u3','u4','u5'] 11 | # ['ā', 'á', 'ǎ', 'à', 'ō', 'ó', 'ǒ', 'ò', 'ē', 'é', 'ě', 'è', 'ī', 'í', 'ǐ', 'ì', 'ū', 'ú', 'ǔ', 'ù','ǖ','ǘ','ǚ','ǜ'] 12 | # ['ǖ','ǘ','ǚ','ǜ'] 13 | # py_char=['b', 'p', 'm', 'f', 'd', 't', 'n', 'l', 'g', 'k', 'h', 'j', 'q', 'x', 'zh', 'ch', 'sh', 'r', 'z', 'c', 's', 'y','w', 14 | # # 'a', 'o', 'e', 'i', 'u', 'v', 'ai', 'ei', 'ui', 'ao', 'ou', 'iu', 'ie','ve','er','an','en','in','un','vn','ang','eng','ing','ong'] 15 | 16 | 17 | print(alphabet()) 18 | -------------------------------------------------------------------------------- /lib/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Mingkun Yang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from . import datasets 4 | from . import evaluation_metrics 5 | from . import loss 6 | from . import models 7 | from . import utils 8 | from . import evaluators 9 | from . import trainers 10 | 11 | __version__ = 'Mathorcuo_final.0.Mathorcuo_final.post2' -------------------------------------------------------------------------------- /lib/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/__pycache__/evaluators.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/evaluators.cpython-36.pyc -------------------------------------------------------------------------------- /lib/__pycache__/evaluators.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/evaluators.cpython-37.pyc -------------------------------------------------------------------------------- /lib/__pycache__/trainers.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/trainers.cpython-36.pyc -------------------------------------------------------------------------------- /lib/__pycache__/trainers.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/__pycache__/trainers.cpython-37.pyc -------------------------------------------------------------------------------- /lib/datasets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__init__.py -------------------------------------------------------------------------------- /lib/datasets/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/datasets/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/datasets/__pycache__/concatdataset.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/concatdataset.cpython-36.pyc -------------------------------------------------------------------------------- /lib/datasets/__pycache__/concatdataset.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/concatdataset.cpython-37.pyc -------------------------------------------------------------------------------- /lib/datasets/__pycache__/dataset.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/dataset.cpython-36.pyc -------------------------------------------------------------------------------- /lib/datasets/__pycache__/dataset.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/__pycache__/dataset.cpython-37.pyc -------------------------------------------------------------------------------- /lib/datasets/_trial_temp/_trial_marker: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/datasets/_trial_temp/_trial_marker -------------------------------------------------------------------------------- /lib/datasets/_trial_temp/test.log: -------------------------------------------------------------------------------- 1 | 2021-10-10 14:30:42+0800 [-] Log opened. 2 | -------------------------------------------------------------------------------- /lib/datasets/concatdataset.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | import bisect 3 | import warnings 4 | 5 | import torch 6 | from torch import randperm 7 | from torch._utils import _accumulate 8 | from torch.utils.data import Dataset 9 | 10 | class ConcatDataset(Dataset): 11 | """ 12 | Dataset to concatenate multiple datasets. 13 | Purpose: Useful to assemble different existing datasets, possibly 14 | large-scale datasets as the concatenation operation is done in an 15 | on-the-fly manner. 16 | Arguments: 17 | datasets (sequence): List of datasets to be concatenated 18 | """ 19 | 20 | @staticmethod 21 | def cumsum(sequence): 22 | r, s = [], 0 23 | for e in sequence: 24 | l = len(e) 25 | r.append(l + s) 26 | s += l 27 | return r 28 | 29 | def __init__(self, datasets): 30 | super(ConcatDataset, self).__init__() 31 | assert len(datasets) > 0, 'datasets should not be an empty iterable' 32 | self.datasets = list(datasets) 33 | self.cumulative_sizes = self.cumsum(self.datasets) 34 | self.max_len = max([_dataset.max_len for _dataset in self.datasets]) 35 | for _dataset in self.datasets: 36 | _dataset.max_len = self.max_len 37 | 38 | def __len__(self): 39 | return self.cumulative_sizes[-1] 40 | 41 | def __getitem__(self, idx): 42 | dataset_idx = bisect.bisect_right(self.cumulative_sizes, idx) 43 | if dataset_idx == 0: 44 | sample_idx = idx 45 | else: 46 | sample_idx = idx - self.cumulative_sizes[dataset_idx - 1] 47 | return self.datasets[dataset_idx][sample_idx] 48 | 49 | @property 50 | def cummulative_sizes(self): 51 | warnings.warn("cummulative_sizes attribute is renamed to " 52 | "cumulative_sizes", DeprecationWarning, stacklevel=2) 53 | return self.cumulative_sizes -------------------------------------------------------------------------------- /lib/evaluation_metrics/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from .metrics import Accuracy, EditDistance, RecPostProcess, Accuracy_with_lexicon, EditDistance_with_lexicon 4 | 5 | 6 | __factory = { 7 | 'accuracy': Accuracy, 8 | 'editdistance': EditDistance, 9 | 'accuracy_with_lexicon': Accuracy_with_lexicon, 10 | 'editdistance_with_lexicon': EditDistance_with_lexicon, 11 | } 12 | 13 | def names(): 14 | return sorted(__factory.keys()) 15 | 16 | def factory(): 17 | return __factory -------------------------------------------------------------------------------- /lib/evaluation_metrics/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/evaluation_metrics/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/evaluation_metrics/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/evaluation_metrics/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/evaluation_metrics/__pycache__/metrics.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/evaluation_metrics/__pycache__/metrics.cpython-36.pyc -------------------------------------------------------------------------------- /lib/evaluation_metrics/__pycache__/metrics.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/evaluation_metrics/__pycache__/metrics.cpython-37.pyc -------------------------------------------------------------------------------- /lib/loss/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from .sequenceCrossEntropyLoss import SequenceCrossEntropyLoss 4 | 5 | 6 | __all__ = [ 7 | 'SequenceCrossEntropyLoss', 8 | ] -------------------------------------------------------------------------------- /lib/loss/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/loss/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/loss/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/loss/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/loss/__pycache__/sequenceCrossEntropyLoss.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/loss/__pycache__/sequenceCrossEntropyLoss.cpython-36.pyc -------------------------------------------------------------------------------- /lib/loss/__pycache__/sequenceCrossEntropyLoss.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/loss/__pycache__/sequenceCrossEntropyLoss.cpython-37.pyc -------------------------------------------------------------------------------- /lib/loss/sequenceCrossEntropyLoss.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | import torch 4 | from torch import nn 5 | from torch.autograd import Variable 6 | import torch.nn.functional as F 7 | 8 | def to_contiguous(tensor): 9 | if tensor.is_contiguous(): 10 | return tensor 11 | else: 12 | return tensor.contiguous() 13 | 14 | def _assert_no_grad(variable): 15 | assert not variable.requires_grad, \ 16 | "nn criterions don't compute the gradient w.r.t. targets - please " \ 17 | "mark these variables as not requiring gradients" 18 | 19 | class SequenceCrossEntropyLoss(nn.Module): 20 | def __init__(self, 21 | weight=None, 22 | size_average=True, 23 | ignore_index=-100, 24 | sequence_normalize=False, 25 | sample_normalize=True): 26 | super(SequenceCrossEntropyLoss, self).__init__() 27 | self.weight = weight 28 | self.size_average = size_average 29 | self.ignore_index = ignore_index 30 | self.sequence_normalize = sequence_normalize 31 | self.sample_normalize = sample_normalize 32 | 33 | assert (sequence_normalize and sample_normalize) == False 34 | 35 | def forward(self, input, target, length): 36 | _assert_no_grad(target) 37 | # length to mask 38 | batch_size, def_max_length = target.size(0), target.size(1) 39 | mask = torch.zeros(batch_size, def_max_length) 40 | for i in range(batch_size): 41 | mask[i,:length[i]].fill_(1) 42 | mask = mask.type_as(input) 43 | # truncate to the same size 44 | max_length = max(length) 45 | assert max_length == input.size(1) 46 | target = target[:, :max_length] 47 | mask = mask[:, :max_length] 48 | input = to_contiguous(input).view(-1, input.size(2)) 49 | input = F.log_softmax(input, dim=1) 50 | target = to_contiguous(target).view(-1, 1) 51 | mask = to_contiguous(mask).view(-1, 1) 52 | output = - input.gather(1, target.long()) * mask 53 | # if self.size_average: 54 | # output = torch.sum(output) / torch.sum(mask) 55 | # elif self.reduce: 56 | # output = torch.sum(output) 57 | ## 58 | output = torch.sum(output) 59 | if self.sequence_normalize: 60 | output = output / torch.sum(mask) 61 | if self.sample_normalize: 62 | output = output / batch_size 63 | 64 | return output -------------------------------------------------------------------------------- /lib/models/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from .resnet_aster import * 4 | 5 | __factory = { 6 | 'ResNet_ASTER': ResNet_ASTER, 7 | } 8 | 9 | def names(): 10 | return sorted(__factory.keys()) 11 | 12 | 13 | def create(name, *args, **kwargs): 14 | """Create a model instance. 15 | 16 | Parameters 17 | ---------- 18 | name: str 19 | Model name. One of __factory 20 | pretrained: bool, optional 21 | If True, will use ImageNet pretrained model. Default: True 22 | num_classes: int, optional 23 | If positive, will change the original classifier the fit the new classifier with num_classes. Default: True 24 | with_words: bool, optional 25 | If True, the input of this model is the combination of image and word. Default: False 26 | """ 27 | if name not in __factory: 28 | raise KeyError('Unknown model:', name) 29 | return __factory[name](*args, **kwargs) -------------------------------------------------------------------------------- /lib/models/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/attention_recognition_head.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/attention_recognition_head.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/attention_recognition_head.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/attention_recognition_head.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/model_builder.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/model_builder.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/model_builder.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/model_builder.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/resnet_aster.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/resnet_aster.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/resnet_aster.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/resnet_aster.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/stn_head.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/stn_head.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/stn_head.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/stn_head.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/tps_spatial_transformer.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/tps_spatial_transformer.cpython-36.pyc -------------------------------------------------------------------------------- /lib/models/__pycache__/tps_spatial_transformer.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/models/__pycache__/tps_spatial_transformer.cpython-37.pyc -------------------------------------------------------------------------------- /lib/models/model_builder.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from PIL import Image 4 | import numpy as np 5 | from collections import OrderedDict 6 | import sys 7 | 8 | import torch 9 | from torch import nn 10 | from torch.nn import functional as F 11 | from torch.nn import init 12 | 13 | from . import create 14 | from .attention_recognition_head import AttentionRecognitionHead 15 | from ..loss.sequenceCrossEntropyLoss import SequenceCrossEntropyLoss 16 | from .tps_spatial_transformer import TPSSpatialTransformer 17 | from .stn_head import STNHead 18 | 19 | 20 | from config import get_args 21 | global_args = get_args(sys.argv[1:]) 22 | 23 | 24 | class ModelBuilder(nn.Module): 25 | """ 26 | This is the integrated model. 27 | """ 28 | def __init__(self, arch, rec_num_classes, sDim, attDim, max_len_labels, eos, STN_ON=False): 29 | super(ModelBuilder, self).__init__() 30 | 31 | self.arch = arch 32 | self.rec_num_classes = rec_num_classes 33 | self.sDim = sDim 34 | self.attDim = attDim 35 | self.max_len_labels = max_len_labels 36 | self.eos = eos 37 | self.STN_ON = STN_ON 38 | self.tps_inputsize = global_args.tps_inputsize 39 | 40 | self.encoder = create(self.arch, 41 | with_lstm=global_args.with_lstm, 42 | n_group=global_args.n_group) 43 | encoder_out_planes = self.encoder.out_planes 44 | 45 | self.decoder = AttentionRecognitionHead( 46 | num_classes=rec_num_classes, 47 | in_planes=encoder_out_planes, 48 | sDim=sDim, 49 | attDim=attDim, 50 | max_len_labels=max_len_labels) 51 | self.rec_crit = SequenceCrossEntropyLoss() 52 | 53 | if self.STN_ON: 54 | self.tps = TPSSpatialTransformer( 55 | output_image_size=tuple(global_args.tps_outputsize), 56 | num_control_points=global_args.num_control_points, 57 | margins=tuple(global_args.tps_margins)) 58 | self.stn_head = STNHead( 59 | in_planes=3, 60 | num_ctrlpoints=global_args.num_control_points, 61 | activation=global_args.stn_activation) 62 | 63 | def forward(self, input_dict): 64 | return_dict = {} 65 | return_dict['losses'] = {} 66 | return_dict['output'] = {} 67 | 68 | x, rec_targets, rec_lengths = input_dict['images'], \ 69 | input_dict['rec_targets'], \ 70 | input_dict['rec_lengths'] 71 | 72 | # rectification 73 | if self.STN_ON: 74 | # input images are downsampled before being fed into stn_head. 75 | stn_input = F.interpolate(x, self.tps_inputsize, mode='bilinear', align_corners=True) 76 | stn_img_feat, ctrl_points = self.stn_head(stn_input) 77 | x, _ = self.tps(x, ctrl_points) 78 | if not self.training: 79 | # save for visualization 80 | return_dict['output']['ctrl_points'] = ctrl_points 81 | return_dict['output']['rectified_images'] = x 82 | 83 | encoder_feats = self.encoder(x) 84 | encoder_feats = encoder_feats.contiguous() 85 | 86 | if self.training: 87 | rec_pred = self.decoder([encoder_feats, rec_targets, rec_lengths]) 88 | loss_rec = self.rec_crit(rec_pred, rec_targets, rec_lengths) 89 | return_dict['losses']['loss_rec'] = loss_rec 90 | else: 91 | rec_pred, rec_pred_scores = self.decoder.beam_search(encoder_feats, global_args.beam_width, self.eos) 92 | rec_pred_ = self.decoder([encoder_feats, rec_targets, rec_lengths]) 93 | loss_rec = self.rec_crit(rec_pred_, rec_targets, rec_lengths) 94 | return_dict['losses']['loss_rec'] = loss_rec 95 | return_dict['output']['pred_rec'] = rec_pred 96 | return_dict['output']['pred_rec_score'] = rec_pred_scores 97 | 98 | # pytorch0.4 bug on gathering scalar(0-dim) tensors 99 | for k, v in return_dict['losses'].items(): 100 | return_dict['losses'][k] = v.unsqueeze(0) 101 | 102 | return return_dict -------------------------------------------------------------------------------- /lib/models/resnet_aster.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torchvision 4 | 5 | import sys 6 | import math 7 | 8 | from config import get_args 9 | global_args = get_args(sys.argv[1:]) 10 | 11 | 12 | def conv3x3(in_planes, out_planes, stride=1): 13 | """3x3 convolution with padding""" 14 | return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, 15 | padding=1, bias=False) 16 | 17 | 18 | def conv1x1(in_planes, out_planes, stride=1): 19 | """1x1 convolution""" 20 | return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) 21 | 22 | 23 | def get_sinusoid_encoding(n_position, feat_dim, wave_length=10000): 24 | # [n_position] 25 | positions = torch.arange(0, n_position)#.cuda() 26 | # [feat_dim] 27 | dim_range = torch.arange(0, feat_dim)#.cuda() 28 | dim_range = torch.pow(wave_length, 2 * (dim_range // 2) / feat_dim) 29 | # [n_position, feat_dim] 30 | angles = positions.unsqueeze(1) / dim_range.unsqueeze(0) 31 | angles = angles.float() 32 | angles[:, 0::2] = torch.sin(angles[:, 0::2]) 33 | angles[:, 1::2] = torch.cos(angles[:, 1::2]) 34 | return angles 35 | 36 | 37 | class AsterBlock(nn.Module): 38 | 39 | def __init__(self, inplanes, planes, stride=1, downsample=None): 40 | super(AsterBlock, self).__init__() 41 | self.conv1 = conv1x1(inplanes, planes, stride) 42 | self.bn1 = nn.BatchNorm2d(planes) 43 | self.relu = nn.ReLU(inplace=True) 44 | self.conv2 = conv3x3(planes, planes) 45 | self.bn2 = nn.BatchNorm2d(planes) 46 | self.downsample = downsample 47 | self.stride = stride 48 | 49 | def forward(self, x): 50 | residual = x 51 | out = self.conv1(x) 52 | out = self.bn1(out) 53 | out = self.relu(out) 54 | out = self.conv2(out) 55 | out = self.bn2(out) 56 | 57 | if self.downsample is not None: 58 | residual = self.downsample(x) 59 | out += residual 60 | out = self.relu(out) 61 | return out 62 | 63 | 64 | class ResNet_ASTER(nn.Module): 65 | """For aster or crnn""" 66 | 67 | def __init__(self, with_lstm=False, n_group=1): 68 | super(ResNet_ASTER, self).__init__() 69 | self.with_lstm = with_lstm 70 | self.n_group = n_group 71 | 72 | in_channels = 3 73 | self.layer0 = nn.Sequential( 74 | nn.Conv2d(in_channels, 32, kernel_size=(3, 3), stride=1, padding=1, bias=False), 75 | nn.BatchNorm2d(32), 76 | nn.ReLU(inplace=True)) 77 | 78 | self.inplanes = 32 79 | self.layer1 = self._make_layer(32, 3, [2, 2]) # [16, 50] 80 | self.layer2 = self._make_layer(64, 4, [2, 2]) # [8, 25] 81 | self.layer3 = self._make_layer(128, 6, [2, 1]) # [4, 25] 82 | self.layer4 = self._make_layer(256, 6, [2, 1]) # [2, 25] 83 | self.layer5 = self._make_layer(512, 3, [2, 1]) # [Mathorcuo_final, 25] 84 | 85 | if with_lstm: 86 | self.rnn = nn.LSTM(512, 256, bidirectional=True, num_layers=2, batch_first=True) 87 | self.out_planes = 2 * 256 88 | else: 89 | self.out_planes = 512 90 | 91 | for m in self.modules(): 92 | if isinstance(m, nn.Conv2d): 93 | nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") 94 | elif isinstance(m, nn.BatchNorm2d): 95 | nn.init.constant_(m.weight, 1) 96 | nn.init.constant_(m.bias, 0) 97 | 98 | def _make_layer(self, planes, blocks, stride): 99 | downsample = None 100 | if stride != [1, 1] or self.inplanes != planes: 101 | downsample = nn.Sequential( 102 | conv1x1(self.inplanes, planes, stride), 103 | nn.BatchNorm2d(planes)) 104 | 105 | layers = [] 106 | layers.append(AsterBlock(self.inplanes, planes, stride, downsample)) 107 | self.inplanes = planes 108 | for _ in range(1, blocks): 109 | layers.append(AsterBlock(self.inplanes, planes)) 110 | return nn.Sequential(*layers) 111 | 112 | def forward(self, x): 113 | x0 = self.layer0(x) 114 | x1 = self.layer1(x0) 115 | x2 = self.layer2(x1) 116 | x3 = self.layer3(x2) 117 | x4 = self.layer4(x3) 118 | x5 = self.layer5(x4) 119 | 120 | cnn_feat = x5.squeeze(2) # [N, c, w] 121 | cnn_feat = cnn_feat.transpose(2, 1) 122 | if self.with_lstm: 123 | rnn_feat, _ = self.rnn(cnn_feat) 124 | return rnn_feat 125 | else: 126 | return cnn_feat 127 | 128 | 129 | if __name__ == "__main__": 130 | x = torch.randn(3, 3, 32, 100) 131 | net = ResNet_ASTER(use_self_attention=True, use_position_embedding=True) 132 | encoder_feat = net(x) 133 | print(encoder_feat.size()) -------------------------------------------------------------------------------- /lib/models/stn_head.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | import math 4 | import numpy as np 5 | import sys 6 | 7 | import torch 8 | from torch import nn 9 | from torch.nn import functional as F 10 | from torch.nn import init 11 | 12 | 13 | def conv3x3_block(in_planes, out_planes, stride=1): 14 | """3x3 convolution with padding""" 15 | conv_layer = nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=1, padding=1) 16 | 17 | block = nn.Sequential( 18 | conv_layer, 19 | nn.BatchNorm2d(out_planes), 20 | nn.ReLU(inplace=True), 21 | ) 22 | return block 23 | 24 | 25 | class STNHead(nn.Module): 26 | def __init__(self, in_planes, num_ctrlpoints, activation='none'): 27 | super(STNHead, self).__init__() 28 | 29 | self.in_planes = in_planes 30 | self.num_ctrlpoints = num_ctrlpoints 31 | self.activation = activation 32 | self.stn_convnet = nn.Sequential( 33 | conv3x3_block(in_planes, 32), # 32*64 34 | nn.MaxPool2d(kernel_size=2, stride=2), 35 | conv3x3_block(32, 64), # 16*32 36 | nn.MaxPool2d(kernel_size=2, stride=2), 37 | conv3x3_block(64, 128), # 8*16 38 | nn.MaxPool2d(kernel_size=2, stride=2), 39 | conv3x3_block(128, 256), # 4*8 40 | nn.MaxPool2d(kernel_size=2, stride=2), 41 | conv3x3_block(256, 256), # 2*4, 42 | nn.MaxPool2d(kernel_size=2, stride=2), 43 | conv3x3_block(256, 256)) # Mathorcuo_final*2 44 | 45 | self.stn_fc1 = nn.Sequential( 46 | nn.Linear(2*256, 512), 47 | nn.BatchNorm1d(512), 48 | nn.ReLU(inplace=True)) 49 | self.stn_fc2 = nn.Linear(512, num_ctrlpoints*2) 50 | 51 | self.init_weights(self.stn_convnet) 52 | self.init_weights(self.stn_fc1) 53 | self.init_stn(self.stn_fc2) 54 | 55 | def init_weights(self, module): 56 | for m in module.modules(): 57 | if isinstance(m, nn.Conv2d): 58 | n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 59 | m.weight.data.normal_(0, math.sqrt(2. / n)) 60 | if m.bias is not None: 61 | m.bias.data.zero_() 62 | elif isinstance(m, nn.BatchNorm2d): 63 | m.weight.data.fill_(1) 64 | m.bias.data.zero_() 65 | elif isinstance(m, nn.Linear): 66 | m.weight.data.normal_(0, 0.001) 67 | m.bias.data.zero_() 68 | 69 | def init_stn(self, stn_fc2): 70 | margin = 0.01 71 | sampling_num_per_side = int(self.num_ctrlpoints / 2) 72 | ctrl_pts_x = np.linspace(margin, 1.-margin, sampling_num_per_side) 73 | ctrl_pts_y_top = np.ones(sampling_num_per_side) * margin 74 | ctrl_pts_y_bottom = np.ones(sampling_num_per_side) * (1-margin) 75 | ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) 76 | ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) 77 | ctrl_points = np.concatenate([ctrl_pts_top, ctrl_pts_bottom], axis=0).astype(np.float32) 78 | if self.activation is 'none': 79 | pass 80 | elif self.activation == 'sigmoid': 81 | ctrl_points = -np.log(1. / ctrl_points - 1.) 82 | stn_fc2.weight.data.zero_() 83 | stn_fc2.bias.data = torch.Tensor(ctrl_points).view(-1) 84 | 85 | def forward(self, x): 86 | x = self.stn_convnet(x) 87 | batch_size, _, h, w = x.size() 88 | x = x.view(batch_size, -1) 89 | img_feat = self.stn_fc1(x) 90 | x = self.stn_fc2(0.1 * img_feat) 91 | if self.activation == 'sigmoid': 92 | x = F.sigmoid(x) 93 | x = x.view(-1, self.num_ctrlpoints, 2) 94 | return img_feat, x 95 | 96 | 97 | if __name__ == "__main__": 98 | in_planes = 3 99 | num_ctrlpoints = 20 100 | activation='none' # 'sigmoid' 101 | stn_head = STNHead(in_planes, num_ctrlpoints, activation) 102 | input = torch.randn(10, 3, 32, 64) 103 | control_points = stn_head(input) 104 | print(control_points.size()) -------------------------------------------------------------------------------- /lib/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/overview.png -------------------------------------------------------------------------------- /lib/tools/create_sub_lmdb.py: -------------------------------------------------------------------------------- 1 | import lmdb 2 | import six 3 | import numpy as np 4 | from PIL import Image 5 | 6 | read_root_dir = 'CRNN\dataset\满文\mw_test_999.txt' 7 | write_root_dir = 'tools' 8 | read_env = lmdb.open(read_root_dir, max_readers=32, readonly=True) 9 | write_env = lmdb.open(write_root_dir, map_size=1099511627776) 10 | 11 | def writeCache(env, cache): 12 | with env.begin(write=True) as txn: 13 | for k, v in cache.items(): 14 | txn.put(k.encode(), v) 15 | 16 | assert read_env is not None, "cannot create lmdb from %s" % read_root_dir 17 | read_txn = read_env.begin() 18 | nSamples = int(read_txn.get(b"num-samples")) 19 | sub_nsamples = 10000 20 | indices = list(np.random.permutation(nSamples)) 21 | indices = indices[:sub_nsamples] 22 | 23 | cache = {} 24 | for i, index in enumerate(indices): 25 | img_key = b'image-%09d' % index 26 | label_key = b'label-%09d' % index 27 | 28 | imgbuf = read_txn.get(img_key) 29 | word = read_txn.get(label_key) 30 | 31 | new_img_key = 'image-%09d' % (i+1) 32 | new_label_key = 'label-%09d' % (i+1) 33 | cache[new_img_key] = imgbuf 34 | cache[new_label_key] = word 35 | 36 | cache['num-samples'] = str(sub_nsamples).encode() 37 | writeCache(write_env, cache) -------------------------------------------------------------------------------- /lib/tools/create_svtp_lmdb.py: -------------------------------------------------------------------------------- 1 | import os 2 | import lmdb # install lmdb by "pip install lmdb" 3 | import cv2 4 | import numpy as np 5 | from tqdm import tqdm 6 | import six 7 | from PIL import Image 8 | import scipy.io as sio 9 | from tqdm import tqdm 10 | import re 11 | 12 | def checkImageIsValid(imageBin): 13 | if imageBin is None: 14 | return False 15 | imageBuf = np.fromstring(imageBin, dtype=np.uint8) 16 | img = cv2.imdecode(imageBuf, cv2.IMREAD_GRAYSCALE) 17 | imgH, imgW = img.shape[0], img.shape[1] 18 | if imgH * imgW == 0: 19 | return False 20 | return True 21 | 22 | 23 | def writeCache(env, cache): 24 | with env.begin(write=True) as txn: 25 | for k, v in cache.items(): 26 | txn.put(k.encode(), v) 27 | 28 | 29 | def _is_difficult(word): 30 | assert isinstance(word, str) 31 | return not re.match('^[\w]+$', word) 32 | 33 | 34 | def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkValid=True): 35 | """ 36 | Create LMDB dataset for CRNN training. 37 | ARGS: 38 | outputPath : LMDB output path 39 | imagePathList : list of image path 40 | labelList : list of corresponding groundtruth texts 41 | lexiconList : (optional) list of lexicon lists 42 | checkValid : if true, check the validity of every image 43 | """ 44 | assert(len(imagePathList) == len(labelList)) 45 | nSamples = len(imagePathList) 46 | env = lmdb.open(outputPath, map_size=1099511627776) 47 | cache = {} 48 | cnt = 1 49 | for i in range(nSamples): 50 | imagePath = imagePathList[i] 51 | label = labelList[i] 52 | if len(label) == 0: 53 | continue 54 | if not os.path.exists(imagePath): 55 | print('%s does not exist' % imagePath) 56 | continue 57 | with open(imagePath, 'rb') as f: 58 | imageBin = f.read() 59 | if checkValid: 60 | if not checkImageIsValid(imageBin): 61 | print('%s is not a valid image' % imagePath) 62 | continue 63 | 64 | imageKey = 'image-%09d' % cnt 65 | labelKey = 'label-%09d' % cnt 66 | cache[imageKey] = imageBin 67 | cache[labelKey] = label.encode() 68 | if lexiconList: 69 | lexiconKey = 'lexicon-%09d' % cnt 70 | cache[lexiconKey] = ' '.join(lexiconList[i]) 71 | if cnt % 1000 == 0: 72 | writeCache(env, cache) 73 | cache = {} 74 | print('Written %d / %d' % (cnt, nSamples)) 75 | cnt += 1 76 | nSamples = cnt-1 77 | cache['num-samples'] = str(nSamples).encode() 78 | writeCache(env, cache) 79 | print('Created dataset with %d samples' % nSamples) 80 | 81 | if __name__ == "__main__": 82 | data_dir = '/demo_data/mkyang/datasets/English/benchmark/svtp/' 83 | lmdb_output_path = '/demo_data/mkyang/datasets/English/benchmark_lmdbs_new/svt_p_645' 84 | gt_file = os.path.join(data_dir, 'gt.txt') 85 | image_dir = data_dir 86 | with open(gt_file, 'r') as f: 87 | lines = [line.strip('\n') for line in f.readlines()] 88 | 89 | imagePathList, labelList = [], [] 90 | for i, line in enumerate(lines): 91 | splits = line.split(' ') 92 | image_name = splits[0] 93 | gt_text = splits[1] 94 | print(image_name, gt_text) 95 | imagePathList.append(os.path.join(image_dir, image_name)) 96 | labelList.append(gt_text) 97 | 98 | createDataset(lmdb_output_path, imagePathList, labelList) -------------------------------------------------------------------------------- /lib/tools/create_svtp_lmdb_bak.py: -------------------------------------------------------------------------------- 1 | import os 2 | import lmdb # install lmdb by "pip install lmdb" 3 | import cv2 4 | import numpy as np 5 | from tqdm import tqdm 6 | import six 7 | from PIL import Image 8 | import scipy.io as sio 9 | from tqdm import tqdm 10 | import re 11 | 12 | def checkImageIsValid(imageBin): 13 | if imageBin is None: 14 | return False 15 | imageBuf = np.fromstring(imageBin, dtype=np.uint8) 16 | img = cv2.imdecode(imageBuf, cv2.IMREAD_GRAYSCALE) 17 | imgH, imgW = img.shape[0], img.shape[1] 18 | if imgH * imgW == 0: 19 | return False 20 | return True 21 | 22 | 23 | def writeCache(env, cache): 24 | with env.begin(write=True) as txn: 25 | for k, v in cache.items(): 26 | txn.put(k.encode(), v) 27 | 28 | 29 | def _is_difficult(word): 30 | assert isinstance(word, str) 31 | return not re.match('^[\w]+$', word) 32 | 33 | 34 | def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkValid=True): 35 | """ 36 | Create LMDB dataset for CRNN training. 37 | ARGS: 38 | outputPath : LMDB output path 39 | imagePathList : list of image path 40 | labelList : list of corresponding groundtruth texts 41 | lexiconList : (optional) list of lexicon lists 42 | checkValid : if true, check the validity of every image 43 | """ 44 | assert(len(imagePathList) == len(labelList)) 45 | nSamples = len(imagePathList) 46 | env = lmdb.open(outputPath, map_size=109951162777*0.01) 47 | cache = {} 48 | cnt = 1 49 | for i in range(nSamples): 50 | imagePath = imagePathList[i] 51 | label = labelList[i] 52 | if len(label) == 0: 53 | continue 54 | if not os.path.exists(imagePath): 55 | print('%s does not exist' % imagePath) 56 | continue 57 | with open(imagePath, 'rb') as f: 58 | imageBin = f.read() 59 | if checkValid: 60 | if not checkImageIsValid(imageBin): 61 | print('%s is not a valid image' % imagePath) 62 | continue 63 | 64 | imageKey = 'image-%09d' % cnt 65 | labelKey = 'label-%09d' % cnt 66 | cache[imageKey] = imageBin 67 | cache[labelKey] = label.encode() 68 | if lexiconList: 69 | lexiconKey = 'lexicon-%09d' % cnt 70 | cache[lexiconKey] = ' '.join(lexiconList[i]) 71 | if cnt % 1000 == 0: 72 | writeCache(env, cache) 73 | cache = {} 74 | print('Written %d / %d' % (cnt, nSamples)) 75 | cnt += 1 76 | nSamples = cnt-1 77 | cache['num-samples'] = str(nSamples).encode() 78 | writeCache(env, cache) 79 | print('Created dataset with %d samples' % nSamples) 80 | 81 | if __name__ == "__main__": 82 | 83 | # lmdb_output_path1 = 'mvtest' 84 | # with open('D:\Python\PycharmProjects\CRNN\dataset\manwen\mw_test_999.txt', 'r') as f: 85 | # lines = [line.strip('\n') for line in f.readlines()] 86 | 87 | # lmdb_output_path2 = 'mwtrain' 88 | # with open('D:\Python\PycharmProjects\CRNN\dataset\manwen\mw_train_999.txt', 'r') as f: 89 | # lines = [line.strip('\n') for line in f.readlines()] 90 | 91 | 92 | #下面两个是横向,报错调map_size=109951162777*0.01,原来109951162777*0.005 93 | # lmdb_output_path1 = 'mvtest_heng' 94 | # with open('D:\Python\PycharmProjects\CRNN\dataset\manwen\mw_test_999_heng.txt', 'r') as f: 95 | # lines = [line.strip('\n') for line in f.readlines()] 96 | 97 | lmdb_output_path2 = 'mwtrain_heng' 98 | with open('D:\Python\PycharmProjects\CRNN\dataset\manwen\mw_train_999_heng.txt', 'r') as f: 99 | lines = [line.strip('\n') for line in f.readlines()] 100 | 101 | imagePathList, labelList = [], [] 102 | for i, line in enumerate(lines): 103 | splits = line.split(' ') 104 | image_name = splits[0]+'.png' 105 | gt_text = splits[1] 106 | print(image_name, gt_text) 107 | imagePathList.append(image_name) 108 | labelList.append(gt_text) 109 | 110 | # createDataset(lmdb_output_path1, imagePathList, labelList) 111 | createDataset(lmdb_output_path2, imagePathList, labelList) -------------------------------------------------------------------------------- /lib/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | import torch 4 | 5 | 6 | def to_numpy(tensor): 7 | if torch.is_tensor(tensor): 8 | return tensor.cpu().numpy() 9 | elif type(tensor).__module__ != 'numpy': 10 | raise ValueError("Cannot convert {} to numpy array" 11 | .format(type(tensor))) 12 | return tensor 13 | 14 | 15 | def to_torch(ndarray): 16 | if type(ndarray).__module__ == 'numpy': 17 | return torch.from_numpy(ndarray) 18 | elif not torch.is_tensor(ndarray): 19 | raise ValueError("Cannot convert {} to torch tensor" 20 | .format(type(ndarray))) 21 | return ndarray -------------------------------------------------------------------------------- /lib/utils/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/labelmaps.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/labelmaps.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/labelmaps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/labelmaps.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/logging.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/logging.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/logging.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/logging.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/meters.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/meters.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/meters.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/meters.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/osutils.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/osutils.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/osutils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/osutils.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/serialization.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/serialization.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/serialization.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/serialization.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/visualization_utils.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/visualization_utils.cpython-36.pyc -------------------------------------------------------------------------------- /lib/utils/__pycache__/visualization_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/lib/utils/__pycache__/visualization_utils.cpython-37.pyc -------------------------------------------------------------------------------- /lib/utils/hypy_alphabet.py: -------------------------------------------------------------------------------- 1 | # http://du.hanyupinyin.cn/shengdiao.html 2 | def alphabet(): 3 | # py_char=['b', 'p', 'm', 'f', 'd', 't', 'n', 'l', 'g', 'k', 'h', 'j', 'q', 'x', 'zh', 'ch', 'sh', 'r', 'z', 'c', 's', 'y','w', 4 | # 'a', 'o', 'e', 'i', 'u', 'v', 'ai', 'ei', 'ui', 'ao', 'ou', 'iu', 'ie','ve','er','an','en','in','un','vn','ang','eng','ing','ong'] 5 | 6 | py_char=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i','j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w','x','y','z', 7 | 'ā', 'á', 'ǎ', 'à', 'ō', 'ó', 'ǒ', 'ò', 'ē', 'é', 'ě', 'è', 'ī', 'í', 'ǐ', 'ì', 'ū', 'ú', 'ǔ', 'ù', 'ǖ', 'ǘ', 'ǚ','ǜ'] 8 | 9 | # ['a1','a2','a3','a4','e1','e2','e3','e4','e5','i1','i2','i3','i4','i5','o1','o2','o3','o4','o5','u1','u2','u3','u4','u5'] 10 | # ['ā', 'á', 'ǎ', 'à', 'ō', 'ó', 'ǒ', 'ò', 'ē', 'é', 'ě', 'è', 'ī', 'í', 'ǐ', 'ì', 'ū', 'ú', 'ǔ', 'ù','ǖ','ǘ','ǚ','ǜ'] 11 | # ['ǖ','ǘ','ǚ','ǜ'] 12 | return py_char 13 | 14 | 15 | print(alphabet()) 16 | # mw_char = ['a', 'e', 'n', 'i', 'zy', 'o', 'u', 'uu', 'k', 'g', 'h', 'b', 'p', 's', 'sh', 't', 'd', 'l', 'm', 'ch', 'zh', 'y', 'r', 'f', 'w', 'ng', 'kk', 'gg', 'hh', 'c', 'cy', 'z', 'rr', 'sy', 'chy', 'zhy'] 17 | 18 | # ldchar_len = {'M001': 107, 'M002': 53, 'M003': 88, 'M004': 62, 'M005': 70, 'M006': 53, 'M007': 101, 'M008': 88, 19 | # 'M009': 115, 'M010': 60, 'M011': 96, 'M012': 73, 'M013': 132, 'M014': 76, 'M015': 85, 'M016': 57, 20 | # 'M017': 113, 'M018': 76, 'M019': 85, 'M020': 57, 'M021': 178, 'M022': 121, 'M023': 127, 'M024': 70, 21 | # 'M025': 53, 'M026': 61, 'M027': 105, 'M028': 89, 'M029': 89, 'M030': 73, 'M031': 95, 'M032': 91, 22 | # 'M033': 61, 'M034': 112, 'M035': 73, 'M036': 89, 'M037': 61, 'M038': 116, 'M039': 73, 'M040': 89, 23 | # 'M041': 78, 'M042': 89, 'M043': 105, 'M044': 79, 'M045': 90, 'M046': 93, 'M047': 93, 'M048': 102, 24 | # 'M049': 93, 'M050': 93, 'M051': 102, 'M052': 102, 'M053': 114, 'M054': 74, 'M055': 75, 'M056': 114, 25 | # 'M057': 150, 'M058': 109, 'M059': 124, 'M060': 74, 'M061': 75, 'M062': 70, 'M063': 53, 'M064': 76, 26 | # 'M065': 74, 'M066': 56, 'M067': 98, 'M068': 84, 'M069': 69, 'M070': 56, 'M071': 59, 'M072': 63, 'M073': 70, 27 | # 'M074': 64, 'M075': 69, 'M076': 81, 'M077': 81, 'M078': 63, 'M079': 70, 'M080': 69, 'M081': 126, 'M082': 119, 28 | # 'M083': 59, 'M084': 68, 'M085': 59, 'M086': 68, 'M087': 59, 'M088': 68, 'M089': 93, 'M090': 93, 'M091': 137, 29 | # 'M092': 137, 'M093': 176, 'M094': 93, 'M095': 93, 'M096': 34, 'M097': 46, 'M098': 138, 'M099': 137, 'M100': 176, 30 | # 'M101': 135, 'M102': 135, 'M103': 134, 'M104': 108, 'M105': 111, 'M106': 124, 'M107': 114, 'M108': 114, 31 | # 'M109': 151, 'M110': 142, 'M111': 101, 'M112': 134, 'M113': 113, 'M114': 113, 'M115': 183} 32 | 33 | # return mw_char,ldchar_len 34 | -------------------------------------------------------------------------------- /lib/utils/labelmaps.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | import string 4 | # import hypy_alphabet as hypy 5 | from . import to_torch, to_numpy 6 | 7 | def get_vocabulary(voc_type, EOS='EOS', PADDING='PADDING', UNKNOWN='UNKNOWN'): 8 | ''' 9 | voc_type: str: one of 'LOWERCASE', 'ALLCASES', 'ALLCASES_SYMBOLS' 10 | ''' 11 | voc = None 12 | types = ['LOWERCASE', 'ALLCASES', 'ALLCASES_SYMBOLS','HYPY'] 13 | if voc_type == 'LOWERCASE': 14 | voc = list(string.digits + string.ascii_lowercase) 15 | elif voc_type == 'ALLCASES': 16 | voc = list(string.digits + string.ascii_letters) 17 | # elif voc_type == 'HYPY': 18 | # voc = hypy.alphabet() 19 | elif voc_type == 'ALLCASES_SYMBOLS': 20 | voc = list(string.printable[:-6]) 21 | else: 22 | raise KeyError('vocls_type must be one of "LOWERCASE", "ALLCASES", "ALLCASES_SYMBOLS"') 23 | 24 | # update the voc with specifical chars 25 | voc.append(EOS) 26 | voc.append(PADDING) 27 | voc.append(UNKNOWN) 28 | 29 | return voc 30 | 31 | ## param voc: the list of vocabulary 32 | def char2id(voc): 33 | return dict(zip(voc, range(len(voc)))) 34 | 35 | def id2char(voc): 36 | return dict(zip(range(len(voc)), voc)) 37 | 38 | def labels2strs(labels, id2char, char2id): 39 | # labels: batch_size x len_seq 40 | if labels.ndimension() == 1: 41 | labels = labels.unsqueeze(0) 42 | assert labels.dim() == 2 43 | labels = to_numpy(labels) 44 | strings = [] 45 | batch_size = labels.shape[0] 46 | 47 | for i in range(batch_size): 48 | label = labels[i] 49 | string = [] 50 | for l in label: 51 | if l == char2id['EOS']: 52 | break 53 | else: 54 | string.append(id2char[l]) 55 | string = ''.join(string) 56 | strings.append(string) 57 | 58 | return strings -------------------------------------------------------------------------------- /lib/utils/logging.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | import os 3 | import sys 4 | import numpy as np 5 | import tensorflow as tf 6 | import scipy.misc 7 | try: 8 | from StringIO import StringIO # Python 2.7 9 | except ImportError: 10 | from io import BytesIO # Python 3.x 11 | 12 | from .osutils import mkdir_if_missing 13 | 14 | from config import get_args 15 | global_args = get_args(sys.argv[1:]) 16 | 17 | if global_args.run_on_remote: 18 | import moxing as mox 19 | mox.file.shift("os", "mox") 20 | 21 | class Logger(object): 22 | def __init__(self, fpath=None): 23 | self.console = sys.stdout 24 | self.file = None 25 | if fpath is not None: 26 | if global_args.run_on_remote: 27 | dir_name = os.path.dirname(fpath) 28 | if not mox.file.exists(dir_name): 29 | mox.file.make_dirs(dir_name) 30 | print('=> making dir ', dir_name) 31 | self.file = mox.file.File(fpath, 'w') 32 | # self.file = open(fpath, 'w') 33 | else: 34 | mkdir_if_missing(os.path.dirname(fpath)) 35 | self.file = open(fpath, 'w') 36 | 37 | def __del__(self): 38 | self.close() 39 | 40 | def __enter__(self): 41 | pass 42 | 43 | def __exit__(self, *args): 44 | self.close() 45 | 46 | def write(self, msg): 47 | self.console.write(msg) 48 | if self.file is not None: 49 | self.file.write(msg) 50 | 51 | def flush(self): 52 | self.console.flush() 53 | if self.file is not None: 54 | self.file.flush() 55 | os.fsync(self.file.fileno()) 56 | 57 | def close(self): 58 | self.console.close() 59 | if self.file is not None: 60 | self.file.close() 61 | 62 | 63 | class TFLogger(object): 64 | def __init__(self, log_dir=None): 65 | """Create a summary writer logging to log_dir.""" 66 | if log_dir is not None: 67 | mkdir_if_missing(log_dir) 68 | self.writer = tf.summary.FileWriter(log_dir) 69 | # self.writer = tf.summary.create_file_writer(log_dir) # tensorflow2.3.1版本 70 | def scalar_summary(self, tag, value, step): 71 | """Log a scalar variable.""" 72 | summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)]) 73 | self.writer.add_summary(summary, step) 74 | self.writer.flush() 75 | 76 | def image_summary(self, tag, images, step): 77 | """Log a list of images.""" 78 | 79 | img_summaries = [] 80 | for i, img in enumerate(images): 81 | # Write the image to a string 82 | try: 83 | s = StringIO() 84 | except: 85 | s = BytesIO() 86 | scipy.misc.toimage(img).save(s, format="png") 87 | 88 | # Create an Image object 89 | img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(), 90 | height=img.shape[0], 91 | width=img.shape[1]) 92 | # Create a Summary value 93 | img_summaries.append(tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum)) 94 | 95 | # Create and write Summary 96 | summary = tf.Summary(value=img_summaries) 97 | self.writer.add_summary(summary, step) 98 | self.writer.flush() 99 | 100 | def histo_summary(self, tag, values, step, bins=1000): 101 | """Log a histogram of the tensor of values.""" 102 | 103 | # Create a histogram using numpy 104 | counts, bin_edges = np.histogram(values, bins=bins) 105 | 106 | # Fill the fields of the histogram proto 107 | hist = tf.HistogramProto() 108 | hist.min = float(np.min(values)) 109 | hist.max = float(np.max(values)) 110 | hist.num = int(np.prod(values.shape)) 111 | hist.sum = float(np.sum(values)) 112 | hist.sum_squares = float(np.sum(values**2)) 113 | 114 | # Drop the start of the first bin 115 | bin_edges = bin_edges[1:] 116 | 117 | # Add bin edges and counts 118 | for edge in bin_edges: 119 | hist.bucket_limit.append(edge) 120 | for c in counts: 121 | hist.bucket.append(c) 122 | 123 | # Create and write Summary 124 | summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)]) 125 | self.writer.add_summary(summary, step) 126 | self.writer.flush() 127 | 128 | def close(self): 129 | self.writer.close() -------------------------------------------------------------------------------- /lib/utils/meters.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | 4 | class AverageMeter(object): 5 | """Computes and stores the average and current value""" 6 | 7 | def __init__(self): 8 | self.val = 0 9 | self.avg = 0 10 | self.sum = 0 11 | self.count = 0 12 | 13 | def reset(self): 14 | self.val = 0 15 | self.avg = 0 16 | self.sum = 0 17 | self.count = 0 18 | 19 | def update(self, val, n=1): 20 | self.val = val 21 | self.sum += val * n 22 | self.count += n 23 | self.avg = self.sum / self.count -------------------------------------------------------------------------------- /lib/utils/osutils.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | import os 3 | import errno 4 | 5 | 6 | def mkdir_if_missing(dir_path): 7 | try: 8 | os.makedirs(dir_path) 9 | except OSError as e: 10 | if e.errno != errno.EEXIST: 11 | raise 12 | 13 | 14 | def make_symlink_if_not_exists(real_path, link_path): 15 | ''' 16 | param real_path: str the path linked 17 | param link_path: str the path with only the symbol 18 | ''' 19 | try: 20 | os.makedirs(real_path) 21 | except OSError as e: 22 | if e.errno != errno.EEXIST: 23 | raise 24 | 25 | cmd = 'ln -s {0} {1}'.format(real_path, link_path) 26 | os.system(cmd) -------------------------------------------------------------------------------- /lib/utils/serialization.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, absolute_import 2 | import json 3 | import os 4 | import sys 5 | # import moxing as mox 6 | import os.path as osp 7 | import shutil 8 | 9 | import torch 10 | from torch.nn import Parameter 11 | 12 | from .osutils import mkdir_if_missing 13 | 14 | from config import get_args 15 | global_args = get_args(sys.argv[1:]) 16 | 17 | if global_args.run_on_remote: 18 | import moxing as mox 19 | 20 | 21 | def read_json(fpath): 22 | with open(fpath, 'r') as f: 23 | obj = json.load(f) 24 | return obj 25 | 26 | 27 | def write_json(obj, fpath): 28 | mkdir_if_missing(osp.dirname(fpath)) 29 | with open(fpath, 'w') as f: 30 | json.dump(obj, f, indent=4, separators=(',', ': ')) 31 | 32 | 33 | def save_checkpoint(state, is_best, fpath='checkpoint.pth.tar'): 34 | print('=> saving checkpoint ', fpath) 35 | if global_args.run_on_remote: 36 | dir_name = osp.dirname(fpath) 37 | if not mox.file.exists(dir_name): 38 | mox.file.make_dirs(dir_name) 39 | print('=> makding dir ', dir_name) 40 | local_path = "local_checkpoint.pth.tar" 41 | torch.save(state, local_path) 42 | mox.file.copy(local_path, fpath) 43 | if is_best: 44 | mox.file.copy(local_path, osp.join(dir_name, 'model_best.pth.tar')) 45 | else: 46 | mkdir_if_missing(osp.dirname(fpath)) 47 | torch.save(state, fpath) 48 | if is_best: 49 | shutil.copy(fpath, osp.join(osp.dirname(fpath), 'model_best.pth.tar')) 50 | 51 | 52 | def load_checkpoint(fpath): 53 | if global_args.run_on_remote: 54 | mox.file.shift('os', 'mox') 55 | checkpoint = torch.load(fpath) 56 | print("=> Loaded checkpoint '{}'".format(fpath)) 57 | return checkpoint 58 | else: 59 | load_path = fpath 60 | 61 | if osp.isfile(load_path): 62 | checkpoint = torch.load(load_path) 63 | print("=> Loaded checkpoint '{}'".format(load_path)) 64 | return checkpoint 65 | else: 66 | raise ValueError("=> No checkpoint found at '{}'".format(load_path)) 67 | 68 | 69 | def copy_state_dict(state_dict, model, strip=None): 70 | tgt_state = model.state_dict() 71 | copied_names = set() 72 | for name, param in state_dict.items(): 73 | if strip is not None and name.startswith(strip): 74 | name = name[len(strip):] 75 | if name not in tgt_state: 76 | continue 77 | if isinstance(param, Parameter): 78 | param = param.data 79 | if param.size() != tgt_state[name].size(): 80 | print('mismatch:', name, param.size(), tgt_state[name].size()) 81 | continue 82 | tgt_state[name].copy_(param) 83 | copied_names.add(name) 84 | 85 | missing = set(tgt_state.keys()) - copied_names 86 | if len(missing) > 0: 87 | print("missing keys in state_dict:", missing) 88 | 89 | return model -------------------------------------------------------------------------------- /models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__init__.py -------------------------------------------------------------------------------- /models/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__init__.pyc -------------------------------------------------------------------------------- /models/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /models/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /models/__pycache__/crnn.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__pycache__/crnn.cpython-36.pyc -------------------------------------------------------------------------------- /models/__pycache__/crnn.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/__pycache__/crnn.cpython-37.pyc -------------------------------------------------------------------------------- /models/alphabet_manwen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on Sun Dec 8 16:06:08 2019 5 | 6 | 7 | @author: fhk 8 | """ 9 | def manwen1(): 10 | 11 | manwen = ['a0', 'a1', 'n2.2', 'a2', 'g2', 'n3', 'h2', 'k2.2', 'uu3', 'uu2', 'zh2', 'n2.Mathorcuo_final', 'ng2', 'a3.Mathorcuo_final', 'm2', 'b2', 'i3', 'u2.Mathorcuo_final', 't2.Mathorcuo_final', 'd2.Mathorcuo_final', 'e3.Mathorcuo_final', 'e2.Mathorcuo_final', 'l2', 'i2', 'y2', 'ch2', 'sh2', 'f2.2', 'u3.Mathorcuo_final', "s'2", 'ai2', "g'2", 'e3.4', 'r2', 's2', 'a3.2', 't2.2', 'u2.2', 'd2.2', 'z2', 'u3.4', 'ai1', "k'2", "h'2", 'u3.2', 'oi3', 'e2.2', 'o2', 'o3.Mathorcuo_final', 'f2.Mathorcuo_final', 'ai0', 'ai3', 'e3.2', 'u3.3', 'r3', 't3', 'z1', 'w2', 'ng3', 'k3', 's3', 't2.3', 'b3', 'l3', 'm3', 'e0', 'e1', "k'3", 'e3.3', 'ei3', 'ei2', 'gg2', 'p2', 'ei0', 'ei1', 'i0', 'i1', 'o0', 'o1', 'o3.2', 'oi1', 'u0', 'u1', 'ui3', 'ui1', "s'3", 'uu0', 'uu1', 'n1', 'm1', 'b1', 'k1', 'h1', 'g1', 'oi2', 'sh3', 'uui3', 'uui2', "g'Mathorcuo_final", "h'Mathorcuo_final", 'p1', 's1', 'ui2', 'sh1', 't1.Mathorcuo_final', 'd1.Mathorcuo_final', 'd1.2', 't1.2', 'y3', "y'3.2", 'l1', "y'3.Mathorcuo_final", 'ch1', 'zh1', 'y1', 'kk2', "k'Mathorcuo_final", 'hh2', 'kk1', 'gg1', 'r1', 'f1.Mathorcuo_final', 'w1', 'f1.2', 'c1', 'c2', 'rr1', "y'2.2", "y'2.Mathorcuo_final"] 12 | 13 | return manwen -------------------------------------------------------------------------------- /models/crnn.py: -------------------------------------------------------------------------------- 1 | import torch.nn as nn 2 | 3 | 4 | class BidirectionalLSTM(nn.Module): 5 | 6 | def __init__(self, nIn, nHidden, nOut): 7 | super(BidirectionalLSTM, self).__init__() 8 | 9 | self.rnn = nn.LSTM(nIn, nHidden, bidirectional=True) 10 | self.embedding = nn.Linear(nHidden * 2, nOut) 11 | 12 | def forward(self, input): 13 | recurrent, _ = self.rnn(input) 14 | T, b, h = recurrent.size() 15 | t_rec = recurrent.view(T * b, h) 16 | 17 | output = self.embedding(t_rec) # [T * b, nOut] 18 | output = output.view(T, b, -1) 19 | 20 | return output 21 | 22 | 23 | class CRNN(nn.Module): 24 | 25 | def __init__(self, imgH, nc, nclass, nh, n_rnn=2, leakyRelu=False): 26 | super(CRNN, self).__init__() 27 | assert imgH % 16 == 0, 'imgH has to be a multiple of 16' 28 | 29 | ks = [3, 3, 3, 3, 3, 3, 2] 30 | ps = [1, 1, 1, 1, 1, 1, 0] 31 | ss = [1, 1, 1, 1, 1, 1, 1] 32 | nm = [64, 128, 256, 256, 512, 512, 512] 33 | 34 | cnn = nn.Sequential() 35 | 36 | def convRelu(i, batchNormalization=False): #batchNormalization批量归一化 37 | nIn = nc if i == 0 else nm[i - 1] 38 | nOut = nm[i] 39 | cnn.add_module('conv{0}'.format(i), 40 | nn.Conv2d(nIn, nOut, ks[i], ss[i], ps[i])) 41 | if batchNormalization: 42 | cnn.add_module('batchnorm{0}'.format(i), nn.BatchNorm2d(nOut)) 43 | if leakyRelu: 44 | cnn.add_module('relu{0}'.format(i), 45 | nn.LeakyReLU(0.2, inplace=True)) 46 | else: 47 | cnn.add_module('relu{0}'.format(i), nn.ReLU(True)) 48 | 49 | convRelu(0) 50 | cnn.add_module('pooling{0}'.format(0), nn.MaxPool2d(2, 2)) # 64x16x64 51 | convRelu(1) 52 | cnn.add_module('pooling{0}'.format(1), nn.MaxPool2d(2, 2)) # 128x8x32 53 | convRelu(2, True) 54 | convRelu(3) 55 | cnn.add_module('pooling{0}'.format(2), nn.MaxPool2d((2, 2), (2, 1), (0, 1))) # 256x4x16 56 | convRelu(4, True) 57 | convRelu(5) 58 | cnn.add_module('pooling{0}'.format(3), nn.MaxPool2d((2, 2), (2, 1), (0, 1))) # 512x2x16 59 | convRelu(6, True) # 512x1x16 60 | 61 | self.cnn = cnn 62 | self.rnn = nn.Sequential( 63 | BidirectionalLSTM(512, nh, nh), 64 | BidirectionalLSTM(nh, nh, nclass)) 65 | 66 | def forward(self, input): 67 | # conv features 68 | conv = self.cnn(input) 69 | b, c, h, w = conv.size() 70 | assert h == 1, "the height of conv must be Mathorcuo_final" 71 | conv = conv.squeeze(2) 72 | conv = conv.permute(2, 0, 1) # [w, b, c] 73 | 74 | # rnn features 75 | output = self.rnn(conv) 76 | 77 | return output 78 | -------------------------------------------------------------------------------- /models/crnn.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoAlers/Pinyin_recognize/e4f546867f9244c8604f753ee59b5d4e48226a25/models/crnn.pyc -------------------------------------------------------------------------------- /models/说明.txt: -------------------------------------------------------------------------------- 1 | 原本两个alphabets、alphabet_manwen文件路径在crnn.pytorch-master\下 -------------------------------------------------------------------------------- /pic_to_txt.py: -------------------------------------------------------------------------------- 1 | import os 2 | paths=r'./data' 3 | f=open('all_pic.txt','wt',encoding='utf-8') #all_pic502.txt'为500张所有数据集备份,可按自己情况更改 4 | 5 | filenames=os.listdir(paths) 6 | for filename in filenames: 7 | if os.path.splitext(filename)[1]=='.png': 8 | imgname=filename.split('.')[0] 9 | imgpath=r'./data' 10 | out_path=imgpath+'/'+imgname+' '+imgname 11 | print(out_path) 12 | #f.writable(out_path+'\n') 13 | f.write(out_path+'\n') 14 | 15 | f.close() 16 | 17 | 18 | -------------------------------------------------------------------------------- /split_data.py: -------------------------------------------------------------------------------- 1 | 2 | file_name='all_pic.txt' 3 | with open('train.txt', 'w') as train_txt: 4 | with open('test.txt', 'w') as test_txt: 5 | # 读取txt文件,每行按制表符分割提取数据 6 | with open(file_name, 'r') as file_txt: 7 | count = len(file_txt.readlines()) #获取文件总的行数 8 | print(count) 9 | file_txt.seek(0) #回到文件开头 10 | for i in range(count): 11 | line_datas = file_txt.readline() 12 | if(i%20==0): #每10个数据1个测试集 13 | test_txt.write(line_datas) 14 | else: 15 | train_txt.write(line_datas) 16 | --------------------------------------------------------------------------------