diff --git a/.gitignore b/.gitignore index d1bde00..808ba35 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,12 @@ libs/gpu/build/ output/ .caches +data/chars/eng.txt +*.txt +data/chars/chn.txt +data/fonts/chn/msyh.ttc +data/fonts/chn/msyh.ttc +data/chars/eng.txt +*.jpg +*.png +*.npy diff --git a/.ipynb_checkpoints/perspective-checkpoint.ipynb b/.ipynb_checkpoints/perspective-checkpoint.ipynb new file mode 100644 index 0000000..e8c91b6 --- /dev/null +++ b/.ipynb_checkpoints/perspective-checkpoint.ipynb @@ -0,0 +1,412 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from functools import reduce\n", + "import numpy as np\n", + "import cv2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Construct 3D rotation matrix when rotations around x,y,z axes are specified \n", + "def construct_RotationMatrixHomogenous(rotation_angles):\n", + " assert(type(rotation_angles)==list and len(rotation_angles)==3)\n", + " RH = np.eye(4,4)\n", + " cv2.Rodrigues(np.array(rotation_angles), RH[0:3, 0:3])\n", + " return RH" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# https://en.wikipedia.org/wiki/Rotation_matrix\n", + "def getRotationMatrixManual(rotation_angles):\n", + " \n", + " rotation_angles = map(lambda x : np.deg2rad(x), rotation_angles)\n", + " \n", + " phi = rotation_angles[0] # around x\n", + " gamma = rotation_angles[1] # around y\n", + " theta = rotation_angles[2] # around z\n", + " \n", + " # X rotation\n", + " Rphi = np.eye(4,4)\n", + " sp = np.sin(phi)\n", + " cp = np.cos(phi)\n", + " Rphi[1,1] = cp\n", + " Rphi[2,2] = Rphi[1,1]\n", + " Rphi[1,2] = -sp\n", + " Rphi[2,1] = sp\n", + " \n", + " # Y rotation\n", + " Rgamma = np.eye(4,4)\n", + " sg = np.sin(gamma)\n", + " cg = np.cos(gamma)\n", + " Rgamma[0,0] = cg\n", + " Rgamma[2,2] = Rgamma[0,0]\n", + " Rgamma[0,2] = sg\n", + " Rgamma[2,0] = -sg\n", + " \n", + " # Z rotation (in-image-plane)\n", + " Rtheta = np.eye(4,4)\n", + " st = np.sin(theta)\n", + " ct = np.cos(theta)\n", + " Rtheta[0,0] = ct\n", + " Rtheta[1,1] = Rtheta[0,0]\n", + " Rtheta[0,1] = -st\n", + " Rtheta[1,0] = st\n", + " \n", + " R = reduce(lambda x,y : np.matmul(x,y), [Rphi, Rgamma, Rtheta]) \n", + " \n", + " return R" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def getPoints_for_PerspectiveTranformEstimation(ptsIn, ptsOut, W, H, sidelength):\n", + " \n", + " ptsIn2D = ptsIn[0,:]\n", + " ptsOut2D = ptsOut[0,:]\n", + " ptsOut2Dlist = []\n", + " ptsIn2Dlist = []\n", + " \n", + " for i in xrange(0,4):\n", + " ptsOut2Dlist.append([ptsOut2D[i,0], ptsOut2D[i,1]])\n", + " ptsIn2Dlist.append([ptsIn2D[i,0], ptsIn2D[i,1]])\n", + " \n", + " pin = np.array(ptsIn2Dlist) + [W/2.,H/2.]\n", + " pout = (np.array(ptsOut2Dlist) + [1.,1.]) * (0.5*sidelength)\n", + " pin = pin.astype(np.float32)\n", + " pout = pout.astype(np.float32)\n", + " \n", + " return pin, pout" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def warpMatrix(W, H, theta, phi, gamma, scale, fV):\n", + " \n", + " # M is to be estimated\n", + " M = np.eye(4, 4)\n", + " \n", + " fVhalf = np.deg2rad(fV/2.)\n", + " d = np.sqrt(W*W+H*H)\n", + " sideLength = scale*d/np.cos(fVhalf)\n", + " h = d/(2.0*np.sin(fVhalf))\n", + " n = h-(d/2.0);\n", + " f = h+(d/2.0);\n", + " \n", + " # Translation along Z-axis by -h\n", + " T = np.eye(4,4)\n", + " T[2,3] = -h\n", + " \n", + " # Rotation matrices around x,y,z\n", + " R = getRotationMatrixManual([phi, gamma, theta])\n", + " \n", + " \n", + " # Projection Matrix \n", + " P = np.eye(4,4)\n", + " P[0,0] = 1.0/np.tan(fVhalf)\n", + " P[1,1] = P[0,0]\n", + " P[2,2] = -(f+n)/(f-n)\n", + " P[2,3] = -(2.0*f*n)/(f-n)\n", + " P[3,2] = -1.0\n", + " \n", + " # pythonic matrix multiplication\n", + " F = reduce(lambda x,y : np.matmul(x,y), [P, T, R]) \n", + " \n", + " # shape should be 1,4,3 for ptsIn and ptsOut since perspectiveTransform() expects data in this way. \n", + " # In C++, this can be achieved by Mat ptsIn(1,4,CV_64FC3);\n", + " ptsIn = np.array([[\n", + " [-W/2., H/2., 0.],[ W/2., H/2., 0.],[ W/2.,-H/2., 0.],[-W/2.,-H/2., 0.]\n", + " ]])\n", + " ptsOut = np.array(np.zeros((ptsIn.shape), dtype=ptsIn.dtype))\n", + " ptsOut = cv2.perspectiveTransform(ptsIn, F)\n", + " \n", + " ptsInPt2f, ptsOutPt2f = getPoints_for_PerspectiveTranformEstimation(ptsIn, ptsOut, W, H, sideLength)\n", + " \n", + " # check float32 otherwise OpenCV throws an error\n", + " assert(ptsInPt2f.dtype == np.float32)\n", + " assert(ptsOutPt2f.dtype == np.float32)\n", + " M33 = cv2.getPerspectiveTransform(ptsInPt2f,ptsOutPt2f)\n", + "\n", + " return M33, sideLength" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def warpImage(src,theta, phi,gamma,scale,fovy,corners=None):\n", + " H,W,Nc = src.shape\n", + " M,sl = warpMatrix(W,H, theta,phi,gamma, scale,fovy); #Compute warp matrix\n", + " sl = int(sl)\n", + " print('Output image dimension = {}'.format(sl))\n", + " dst = cv2.warpPerspective(src,M, (sl,sl)); #Do actual image warp\n", + " return dst" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "src = cv2.imread('Lena.png')\n", + "src = src[...,::-1] # BGR to RGB\n", + "H,W,Nc = src.shape\n", + "plt.imshow(src)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Output image dimension = 809\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "imgwarped = warpImage(src, 0, 30, 0, 1., 53)\n", + "plt.imshow(imgwarped)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(512, 512, 3)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "src.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(809, 809, 3)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "imgwarped.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r = cv2.resize(imgwarped, dsize=(218,219))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(r)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "theta = np.rad2deg(np.arctan2(640,480))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "53.13010235415598" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "theta" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/configs/default.yaml b/configs/default.yaml index 8b4f4bf..c243e6c 100644 --- a/configs/default.yaml +++ b/configs/default.yaml @@ -1,6 +1,6 @@ # Small font_size will make text looks like blured/prydown font_size: - min: 14 + min: 16 max: 23 # By default, text is drawed by Pillow with (https://stackoverflow.com/questions/43828955/measuring-width-of-text-python-pil) @@ -20,6 +20,19 @@ curve: min: 1 # sin 函数的幅值范围 max: 5 +#水平方向拉伸 +stretch: + enable: true + fraction: 1.0 + min: 0.8 + max: 1.2 + +#扭曲 +rdistort: + enable: true + fraction: 0.1 + + # random crop text height crop: enable: false @@ -36,7 +49,7 @@ crop: # Use image in bg_dir as background for text img_bg: enable: true - fraction: 0.5 + fraction: 0.95 # Not work when random_space applied text_border: @@ -68,13 +81,17 @@ perspective_transform: blur: enable: true - fraction: 0.03 + fraction: 0.3 # If an image is applied blur, it will not be applied prydown prydown: + enable: false + fraction: 0.1 + max_scale: 1.5 + +pryup: enable: true - fraction: 0.03 - max_scale: 1.5 # Image will first resize to 1.5x, and than resize to 1x + fraction: 0.05 noise: enable: true @@ -97,20 +114,20 @@ noise: fraction: 0.25 line: - enable: false + enable: true fraction: 0.05 under_line: - enable: false - fraction: 0.2 + enable: true + fraction: 1.0 table_line: enable: false - fraction: 0.3 + fraction: 0.0 middle_line: enable: false - fraction: 0.5 + fraction: 0.0 # These operates are applied on the final output image, # so actually it can also be applied in training process as an data augmentation method. diff --git "a/data/bg/\350\203\214\346\231\257.png" "b/data/bg/\350\203\214\346\231\257.png" deleted file mode 100644 index 70a5174..0000000 Binary files "a/data/bg/\350\203\214\346\231\257.png" and /dev/null differ diff --git a/data/chars/chn.txt b/data/chars/chn.txt index 5f7accf..e2fd715 100644 --- a/data/chars/chn.txt +++ b/data/chars/chn.txt @@ -1,5071 +1,6917 @@ -第 -朱 -广 -沪 -= -3 -2 -联 -" +〕 +苻 +稆 +夏 +俐 +殿 +檬 +斌 +弄 +建 +舳 +绿 +砦 +] +啥 +嚼 +输 +侑 +瞬 +垤 +肯 +廾 +槊 +沌 +舴 +昀 +奎 +铭 +痫 +葡 +肚 +崦 +笠 +魔 +妖 +怩 +芰 +备 +韵 +圣 +鼋 +飕 +笄 +亘 +耜 +修 +烘 +轭 +窝 +杜 +劓 +舂 自 -治 -县 -驼 -P -r -i -m -a -y -身 -进 -行 -0 -纳 -税 -防 -火 -墙 -掏 -心 -内 -容 -万 -警 -钟 -上 -6 +民 +蚜 +幕 +社 +拗 +絷 +廷 +琦 +穑 +该 +毁 +硷 +钵 +世 +狰 +祗 +镀 +碣 +沛 +谆 +姐 +粲 +坑 +靥 +蒹 +颅 +日 +冽 +佃 +泰 +佬 +蒜 +楼 +腺 +耪 +^ +沧 +椿 +签 +淌 +婶 +忿 +栳 +椐 +屙 +诖 +幡 +羡 +从 +轻 +藁 +苘 +校 +醒 +嵊 +檑 +惺 +喹 +终 +辖 +楫 +峁 +苗 了 -解 -酝 -投 -资 -各 -| -L -O -W -砒 -晏 -维 -龙 -三 -收 -藏 -博 -客 -陈 -松 -伶 -组 -织 -请 -皂 -甙 -摊 -牌 -代 -替 -盲 -% -李 -洵 -桦 -你 -林 -美 -贞 -粳 -米 -面 -具 -章 -n -X -王 -嗒 -创 -新 -意 -大 -利 -气 -愤 -于 -苴 -近 -视 -] -烛 -台 -方 -向 -演 -习 -高 -年 -芥 -菜 -吞 -金 -全 -找 -平 -配 -送 -1 -9 -8 -5 -z -I -订 -阅 -孟 -丽 -姣 -动 -态 -发 -生 -山 -区 -昼 -夜 -, -怎 -样 -分 -痨 -病 -最 +鲦 +袂 +以 +数 +垴 +蚂 +候 +谋 +氧 +腽 +衽 +q +橄 +铝 +恝 +及 +穗 +走 +乃 +崧 +浓 +矿 +嫜 +蜇 +笕 +考 +互 +躞 +樗 +啁 +荚 +嗳 +筝 +欧 +坤 +桤 +剖 +撸 +氨 +磔 +垆 +鹎 ( -聆 -听 -唆 -地 -图 -下 -肢 -无 -疾 -而 -终 -两 -旁 -何 -纬 -宁 -育 -儿 -鲅 -站 -点 -建 -筑 -戈 -部 -门 -文 -学 -月 -份 -7 -煊 -_ -辐 +垛 +汕 +淑 +婕 +扰 +焙 +路 +险 +ⅸ +唾 +帧 +颜 +篝 +‰ +碱 +囹 +噬 +楠 +莞 +婵 +瞵 +鞯 +疑 +鬻 +彷 +疼 +黪 +谔 +河 +毂 +谥 +蝥 +甓 +钔 +秉 +皂 +咤 +异 +攸 +栾 +肜 +伙 +庇 +觞 +触 +谂 +妈 +锪 +檩 +届 +肺 +w +员 +屉 +牺 +蹁 +呵 +铌 +憩 +癍 +睽 +硼 +隗 +碰 +簪 +先 +几 +括 +粝 +邕 +出 +惝 +胸 +鳇 +氅 +蟊 +阃 +涎 射 -u -e -s -p -c -t -v -l -B -J -江 -南 -北 -汊 -药 -物 -浜 -和 +辞 +嫡 +滗 +趵 +谷 +笫 +ⅶ +瞎 +烂 +嫱 +觇 +绣 +仫 +叭 +窃 +泞 +也 +醛 +枪 +龈 +虔 +贡 +奔 +臼 +床 +噘 +h +逮 +溟 +遘 +双 +僦 +哑 +岈 录 -制 -现 -任 -徐 -梓 -珩 -@ -包 -围 -右 -翼 -诚 -信 -“ -实 -务 -弟 -子 -衰 -变 -猫 -咪 -房 -产 -九 -统 -计 -) -. -电 -镀 -赵 -雪 -妤 -菽 -品 -超 -市 -闲 -逛 -丰 -壮 -瞥 -戟 -满 -载 -归 -赤 -堀 -M -g -限 -系 -处 -理 -式 -程 -凤 -英 -海 -我 -专 -栏 -其 -仗 -/ -裴 -矩 -范 -力 -T -游 -戏 -个 -黑 -河 -刘 -华 -- -搔 -首 -弄 -姿 -绝 -对 -息 -楼 -村 -: -煸 -邮 -箱 -标 -注 -支 -公 +聪 +他 +塔 +窨 +糨 +遗 +桎 +疗 +娆 +琶 +崎 +腱 +焚 +嘏 +迄 +顺 +趄 +晷 +涨 +皆 +继 +嫫 +雌 +牯 +橹 +鬣 +绘 +煨 +缄 +翠 布 -省 -报 -刊 -畹 -芳 -> -传 -播 -为 -以 -4 -依 -法 -哥 -们 -原 -[ -苹 -果 -署 -芫 -荽 -油 -渍 -政 -达 -到 -快 -速 -红 -外 -的 -话 -保 -护 -拟 -关 -闭 -笔 -记 -批 -卫 -角 -逐 -钥 -匙 -渤 -域 -宋 -承 -宪 -周 -煅 -烧 -f -他 -有 -q -h -d -来 -濮 -园 -贴 -篮 -张 -世 -瑗 -床 -小 -庆 -麂 -国 -既 -往 -不 -咎 -藜 -抱 -歉 +柝 +袍 +绕 +雷 +吴 +谳 +近 +狮 +酴 +端 +估 +赂 +佥 +苤 +疯 +高 +榘 手 -机 -泮 -版 -权 -白 -砖 -茶 -褚 -喳 -莆 -表 -僵 -硬 -凌 -辱 -微 -帖 -胶 -开 -验 -证 -岖 -锻 -压 -妙 +雒 +彗 +玢 +谌 +瘌 +暖 +夷 +搔 +琥 +洌 +辽 +阂 +彩 +跋 +亠 +颧 +逦 +贶 +冲 +艘 +杵 +瓷 +甙 +式 +离 +驳 +磴 +橱 +钫 +蛞 +桁 +镘 +豢 +访 +蜾 +蹒 +鳍 +诂 +坎 +解 +貔 +驰 +哔 +缯 +侥 +盘 +缚 +含 +阮 +藓 +觑 +细 +橼 +鹉 +敷 +刖 +骺 +缉 +巨 +盗 +结 +泺 +熳 +差 +胝 +诮 +洧 +填 +家 +狙 +钍 +藏 +靶 +焓 +坛 +新 +片 +捻 +谲 +笛 +杳 +跏 +瞑 +欢 +坝 +群 +酱 +蝼 +如 +糙 +贮 +骁 +赌 +氲 +锖 +葱 +砩 +蛹 +旎 +阡 +粮 +漠 +幂 +鸣 +摺 +些 +凯 +忘 +驯 每 -帝 -猩 -事 -情 -网 -成 -都 -留 -责 -讲 -N -D -S -H -o -w -则 -员 -工 -榛 -滔 +故 +埠 +恪 +仵 +堙 +彬 +辄 +袅 +喷 +沾 +小 +腋 +钓 +枵 +市 +⑨ +妤 +压 +曝 +黔 +拈 +仝 +骟 +粗 +邙 +洼 +鹄 +塘 +臁 +磬 +她 +柔 +艨 +稍 +丛 +腭 +谣 设 -E -商 -临 -完 -神 -经 -麦 -当 -劳 -人 -由 -仰 -卧 -蚀 -刻 -闻 -媛 -芷 -摄 -影 -一 -鸣 -惊 -等 -费 -卑 -鄙 -贮 -存 -异 -型 -忑 -酌 -通 -群 -兴 -业 -说 -明 -双 -肩 -挑 -致 -使 -京 -民 -《 -乡 -亲 -滤 -波 -青 -衿 -可 -四 -起 -字 -迹 -众 -多 -隐 -形 -R -泥 -泞 -罄 -委 -会 -星 -夸 -耀 -能 -合 -, -殡 -仪 -馆 -环 -境 +删 +蠕 +贪 +售 +畏 +磺 +旃 +桓 +拼 +泳 +奈 +& +枯 +吩 +菀 +钽 +辊 +呓 +棋 +柰 +笈 +睚 +塥 +碍 +唐 +率 +旦 +悛 +倮 +灭 +箐 +镫 +姚 +必 +痃 +纩 +招 +呼 +喋 +焱 +诀 +碚 +惘 +疠 +韪 +咚 +淋 +烛 +隽 +驹 +氍 +祸 +筲 +滠 +咙 +鸨 +铸 +锌 +烹 +拐 +事 +鸠 +积 +瘐 +趼 +芒 +顸 同 -软 -b +彡 +甭 +倥 +纂 +犁 +坦 +别 +荷 +虮 +犷 +徙 +哜 +佻 +镶 +理 +犬 +够 +妍 +怼 +珐 +槐 +咐 +甜 +耥 +盈 +寄 +湄 +喝 +疵 +籁 +詹 +挛 +钝 +俚 +株 +陋 +瘛 +凇 +亥 +原 +沦 +缙 +缤 +眵 +盍 +村 +8 +璜 +筒 +然 +骘 +仑 +簸 +黯 +醍 +豳 +依 +褒 +鼻 +萦 +螨 +妨 +绺 +嵩 +疹 +亿 +嵘 +壮 +捷 +叠 +久 +穰 +卅 +杏 +晴 +坭 +醺 +红 +南 +皱 +半 +丕 +荛 +纣 +罡 +揶 +禚 +睥 +体 +腙 +屿 +唷 +霄 +曦 +芋 +苎 +沸 +劬 +裔 +闵 +氵 +犭 +珂 +蹋 +插 +螭 +菏 +樘 +丸 +邹 +骛 +痈 +伪 +凤 +蜚 +瘥 +洪 +忭 +蚶 +疮 +淦 +酩 +剞 +蚱 +艟 +陂 +万 +煳 +叶 +格 +嫔 +尕 +告 +贲 +剌 +望 +厢 +挎 +帖 +涕 +瞒 +槔 +饔 +邛 +薇 +逆 +岿 +乎 +罔 +溘 +田 +燕 +煲 +饺 +只 +娴 +佩 +岖 +庚 +莘 +蝰 +舒 +墚 +碎 +舯 +貂 +浃 +镑 +膦 +密 +, +绥 【 -吾 -社 -朋 +产 +鹚 +懋 +臬 +孚 +湿 +旄 +苋 +合 +鳌 +驶 +邪 友 -升 -序 -吆 -推 -荐 -巴 -蜀 -舅 -净 -化 -泛 -条 -罢 -岛 -更 -勾 -。 -应 -用 -磴 -者 -侗 -修 -复 -基 -知 -抓 -紧 -砸 -册 -七 -喜 -常 -盘 -C -简 -介 -A -Z -屠 -填 -写 -孙 -恩 -瑟 -秀 -期 -酬 -展 -望 -租 -车 -东 -芝 -集 -啃 +烬 +迂 +浩 +鸷 +弊 +殴 +阝 +祺 +侉 +躜 +躯 +鳐 +古 +究 +鹪 +盼 +沁 +踅 +悍 +喧 +埃 +漶 +宾 +拮 +狃 +掸 +瀣 +汰 +蟹 +饵 +骷 +郏 +肝 +葩 +肷 +庖 +讵 +耔 +或 +彳 +毹 +九 +恽 +箦 +寰 +蛇 +讹 +酵 +不 +犴 +篷 +肿 +於 +魏 +肖 +觚 +彰 +购 +铴 +诵 +鲰 +坷 +侵 +燠 +鞋 +瘁 +矗 +毪 +铠 +螳 +框 +楚 +麻 +枳 +苣 +嫠 +馔 +感 +攒 +谊 +褙 +佚 +恍 +镜 +对 +纟 +竹 +鹰 +逡 +舫 +镝 +毒 +仨 +揍 +砧 +/ +簌 +赙 +岁 +洗 +蝣 +臻 +蟑 +妇 +懒 +嘭 +抡 +拂 +福 +杭 +鲡 +餐 +愣 +啶 +帐 +\ +渍 +醋 +兼 +驴 +酤 +配 +缃 +泐 +镆 +玻 +苏 +将 空 -驶 -良 -好 -题 -k -粥 -象 -水 -营 -症 -状 -疆 -笨 -蛋 -天 -许 -稻 -评 -价 -司 -萜 -蘸 -日 -檗 -谥 -排 -放 -认 -漫 -骂 -阎 -韦 -螭 -在 -线 -活 -股 -犹 -太 -教 +初 +阊 +扭 +旬 +脆 +缜 +棺 +劐 +悱 +晌 +釜 +泫 +滁 +镦 +繁 +烷 +节 +钸 +葙 +美 +豉 +醵 +哒 +杠 +咫 +微 +附 +啼 +想 +棘 铁 -锹 -医 -改 -此 -查 -看 -赭 -剃 -刀 -农 -架 -体 -规 -< -蠹 -土 +麸 +榕 +卤 +髂 +蕾 +鸯 +跛 +扇 +祥 +峭 +蕊 +穹 +兵 +派 +跫 +令 +貅 +畔 +蜞 +鱿 +铀 +螅 +缱 +镬 +肱 +澎 +搐 +蝈 +焦 +探 +悼 +崭 +搞 +抚 +冖 +卷 +玲 +表 买 -尚 -武 -箬 -中 -驱 -索 -引 -没 -思 -淀 -凭 -促 -捎 -带 -至 -极 -洽 -召 -回 -贱 -只 -比 -特 -蕻 -晓 -籁 -朗 -试 -古 -典 -艺 -术 -帮 -辖 -二 +铒 +超 +垭 +荑 +镗 +挪 +槟 +搬 +浆 +狡 +锁 +辁 +骸 +孟 +尉 +ⅵ +嘱 +恢 +毖 +禽 +药 +炬 +咴 +猾 +谩 +汁 +曾 +睡 +刺 +淠 +樱 +桊 +畲 +系 +氤 +伶 +释 +龚 +儒 +点 +妗 +勾 +隙 +佶 +傥 +肃 +巡 +孛 +④ +/ +仃 +i +眙 +渫 +诃 +凰 +佯 +; +佾 +牢 +菹 +拷 +阻 +勉 +突 +暗 +渤 +衲 +惭 +郅 +氩 +栖 +_ +蝤 +Ⅴ +乾 +杩 +d +贽 +屹 +尔 +摔 +逑 +蓝 +曜 +静 +吲 +掘 +争 +簧 +扣 +士 +熔 +畜 +竦 +苕 +燧 +胩 +象 +蝌 +蒯 +谯 +庞 +陨 +饴 +攻 +受 +鑫 +斩 +蹈 +鬈 +嵫 +阱 +攫 +鲁 +鳗 +政 +町 +君 +觯 +诋 +诩 +阔 +哕 +楷 +萝 +址 +庥 +遨 +深 +窄 +函 +钡 +言 +爬 +忏 +荜 +缂 +睬 +纰 +虐 +鹈 +勇 +滚 +养 +孑 +裰 +孽 +瞌 +谫 +似 +陴 +去 +磁 +剁 +州 +鹂 +梳 +坍 +葬 +峒 +虫 +斜 +鸶 +抗 +髑 +妁 +舍 +掎 +焯 +辛 +辏 +脓 +汀 +脏 +炷 +升 +| +玑 +忄 +岬 +癸 +⑥ +葺 +C +膑 +晔 +睾 +宜 +' +获 +拭 +筠 +澄 +检 +份 管 -作 -出 -】 +巅 +满 +笸 +笥 +摄 +笮 +蜊 +嚓 +爆 +譬 +澉 +汤 +癣 +疒 +俜 +巩 +蹀 +蓓 +顼 +吆 +踩 +奁 +腠 +辑 +鹣 +菖 +具 +浊 +宝 +仓 +完 +苛 +蝽 +适 +圮 +慌 +跺 +啪 +麂 +馐 +镖 +蓄 +弥 +尥 +丞 +盹 +席 +毛 +萱 +说 +酹 +晚 +散 +偈 +禀 +溻 +追 +俗 +风 +栈 +犊 +肄 +嗍 +淀 婚 -姻 -威 -数 -彭 -聪 -龄 -袁 -咏 -妈 -告 -室 -翅 -膀 -爱 -立 -乙 -酰 -服 -川 -褶 -间 -检 -疫 -仟 -U -接 -触 -访 -问 -性 -钱 -齐 -鲁 -征 -晒 -斑 -斓 -背 -后 -府 -属 -卡 -币 -选 -择 -荔 -妇 -页 -交 -易 -犯 -罪 -干 -光 -析 -板 -主 -越 -附 -加 -泵 -鸾 -课 -扭 -捷 -龟 -吲 -温 +呢 +爝 +呷 +捌 +> +衰 +腑 +箍 +肴 +鄢 +坞 +秤 +菁 +众 +璐 +酥 +趣 +舻 +规 +抉 +摒 +胧 +樵 +杆 +答 +蛙 +菝 +辉 +的 +辋 +阗 +琼 +诎 +嗷 +丽 +芎 +枷 +拦 +翔 +嵬 +忮 +邂 +噗 +擞 +瓒 +酰 +裤 +黄 +匙 +帙 +译 +拉 +濠 +混 +停 +槌 +锏 +袜 +脑 +谨 +棚 +墉 +锲 +炖 +缁 +沿 +雳 +饣 +紧 +奠 +鸽 +稷 +猫 +螋 +怖 +削 +今 +龇 +毫 +伯 +乳 +逼 +寥 +遇 +怜 +峦 +沲 +骜 +榭 +燮 +麈 +疴 +谄 +5 +襦 +漩 +芑 +缇 +猜 +壹 度 -杨 -霭 -” -悄 -鲶 -虚 -缥 -缈 -滑 -欧 -邗 -盟 -雷 -揍 -隔 -断 -界 -G -奇 -+ -与 -确 -定 -算 -锦 -缎 -耘 -雍 -监 -V -Y -城 -戴 -叔 -伦 -及 -梆 -郭 +7 +螗 +谪 +趔 +迥 +矬 +夕 +震 +判 +揞 +淬 +黧 +症 +玺 +坨 +阍 +泡 +壅 +褪 +銮 +睨 +箱 +淙 +豪 +朵 +缵 +郡 +嘎 +熙 +檠 +兖 +坚 +咬 +倜 +泯 +辐 +丫 +屏 +侍 +厚 +咻 +癖 +善 +鞫 +陬 +噱 +遴 +D +钯 +鸩 +儿 +团 +罪 +褐 +峙 +酣 +绢 +玉 +赞 +詈 +粘 +月 +倪 +拴 +帽 +钺 +俯 +晃 +残 +施 +郓 +璁 +跆 +鲔 +垦 +娼 +毅 +绞 +恫 +仡 +• +稼 +等 +饪 +竟 +蛘 +溃 +眸 +俅 +赎 +蚋 +值 +铣 +潇 +摸 +呖 +毳 +忖 +肽 +颦 +$ +挈 +锊 +质 +丿 +缺 +东 +莳 +皮 +澜 +弟 +忉 +吞 +请 +亮 +鼎 +吊 +骰 +哿 玟 -步 -鸟 -巢 -恰 -场 -蜿 +锟 +娜 +悃 +祁 +颉 +瑜 +巷 +潞 +邳 +侠 +足 +措 +氇 +觉 +免 +林 +螺 安 -静 -预 -毒 -供 -瓤 -适 -转 -热 -潘 -允 -康 -时 -直 -岔 -路 -登 -陆 -招 -钌 -踝 -入 -料 -娇 -嫩 -妆 -柯 -尔 -克 -孜 -绰 -号 -格 -输 -尿 -班 -蔼 -然 -恭 -诊 -八 -幡 -件 -夹 -汽 -诵 -挥 -洒 -器 -缬 -坯 -窒 -靼 -霞 -均 -匀 -袄 -过 -春 -妹 -丶 -佩 -惬 -次 -甘 -肃 +座 +聒 +遁 +们 +扳 +溯 +桌 +寇 +骤 +牝 +馨 +蛑 +叁 +呐 +捍 +铕 鱼 -济 -曹 -拯 -研 -砌 -烘 -切 -磋 -账 -正 -西 -参 -拔 -赛 -督 -粉 -锢 -乳 -协 -议 -边 -贸 -翻 -柘 -木 -殆 -家 -六 -才 -靳 -粟 -按 -忆 -庭 +唉 +揩 血 -素 +蟪 +鲐 +靛 +寿 +划 +周 +呃 +蛊 +赋 +守 +兮 +玎 +嗵 +替 +队 +搪 +塌 +焘 +枧 +M +踬 +剃 +侯 +箧 +蛭 +掳 +要 +” +哭 +晗 +鳄 +帔 +盟 +柬 +珉 +变 +蝴 +缮 +讨 +玄 +咎 +怒 +歼 +聆 +驮 +颌 +缔 +绶 +猞 +傲 +架 +巛 +抬 +娓 +甏 +瞢 +搜 +狩 +扒 +官 +猎 +湮 +婪 +郎 +寻 +鹜 +嗅 +雇 +瑭 +悚 +螃 +丘 +宽 少 -模 -灵 -茌 -敌 -渝 -田 -梨 -珠 -哈 -佛 -前 -隘 -口 -却 -销 -蓄 -畏 +蔟 +- +, +沙 +旒 +冂 +锋 +伏 +耘 +沃 +澹 +干 +脬 +萌 +龙 +光 +铉 +绁 +硎 +涣 +羊 +馍 +漪 +祠 +茕 +稞 +戛 +揆 +裒 +訾 +糸 +幄 +斐 +、 +仰 +浑 +痢 +戥 +哗 +戮 +疋 +夤 +通 +蕖 +蹼 +蔽 +! +耵 +霉 +楮 +耕 +眷 +岩 +嵝 +栏 惧 -项 -目 -涓 -沈 -础 -举 -之 -丧 -葬 -居 -秦 -祟 -璞 -吊 -装 -勋 -据 -欲 -芜 -湖 -旱 -科 -奥 -德 -提 -案 -局 -圭 -镯 -测 -是 -橄 -榄 -绿 -论 -签 -叨 -胡 -团 -购 -去 -增 -强 -核 -准 -羞 -玛 -瑙 -就 -圈 -养 -渐 -; -漆 -拘 +阪 +蟆 +偬 +蠡 +f +潜 +折 +裾 +处 +咀 +琉 +穴 +耙 +隋 +换 +榈 +酿 +後 +供 +咩 +溆 +寅 +旨 +啊 +誊 +振 +仅 +鹅 +寞 +夜 +汊 +缦 +颡 +痼 +髁 +脊 +巍 +跹 +榔 +捶 +延 +称 +毯 +钨 +燥 +窗 +筐 +甲 +秒 +嵛 +拣 +橇 +儆 +贰 +撰 +摆 +鲷 +肮 +汆 +冕 +擎 +蘅 +垮 +赔 +珥 +务 +徭 +成 +铡 +抒 +洛 +挨 +侦 +霞 +凳 +鹇 +钱 +芾 +勹 +R +蛤 +蠼 +筌 +眦 +健 +荤 +江 +殒 +墩 +馆 +榄 +膏 +歪 +橙 +伟 +铧 +甘 +燎 +髓 +涿 +巳 +七 +闲 +挣 +翕 +助 +俨 +遵 +薯 +矫 +潆 +棕 +愎 +弪 +徨 +蔫 +椽 +董 +鄱 +即 +犍 +代 +笋 +怿 +衔 +楔 +礻 +姓 +见 +神 +六 +蟮 +赇 +剑 +撄 +钻 束 -危 -窈 -阳 -示 -聂 -运 -谈 -得 -猪 -蚯 -蚓 -葳 -摒 -弃 -道 -扬 -镳 -夏 -圻 -层 -共 -党 -湛 -抽 -搐 -矢 -互 -货 -根 -烟 -腓 -肠 -肌 -漏 +智 +暨 +髫 +坪 +踯 +仔 +叵 +丰 +埕 +张 +游 +K +虚 +嘣 +跃 +绝 +狳 +裥 +犒 +疙 +鹤 +瘘 +蒴 +竣 +馑 +劲 +铢 +若 +堵 +莩 +愉 +抹 +闻 +钮 +付 +芯 +枣 +憬 +矩 +伦 +匠 +恣 +蒂 +诰 +归 +年 +蹄 +邈 +邴 +芨 +灵 +猕 +廨 +L +方 +硫 +稔 +漭 +孔 +繇 +躔 +涮 +握 +俦 +葵 +啄 +猝 +膨 +谜 +锉 +嘉 +荣 +鳔 +搡 +臃 +剩 +诺 +篦 +侬 +套 +薹 +史 +冀 +照 +镢 +柑 +叩 +跄 +铪 +搦 +始 +皲 +瓦 +筏 +镣 +拆 +狯 +诱 +纯 +平 +逾 +磉 +哝 +当 +栊 +船 +嗥 +境 +撞 +蚬 +总 +俭 +唠 +俑 +禅 +决 +捩 +唇 +愀 +嗾 +虺 +熊 +叽 +愆 +偕 +赶 +颏 +鲍 +睫 +猷 +蔚 +烯 +悲 +曹 +早 +腴 +峥 +翡 +厶 +贼 +侃 +楂 +跳 +妾 +陇 +蒡 +悫 +镥 勺 -指 -本 -愧 -票 -抢 -占 -见 -怪 -识 -节 -邸 -玄 -流 -弊 -呼 -聘 -纸 -巾 -j -救 -里 -庇 -娄 -季 -宇 -颇 -校 -魔 -苜 -蓿 -名 -堂 -瑶 -财 -泡 -言 -怅 -惘 -击 -瑜 -珈 -晗 -霆 +喁 +抛 +潸 +烦 +孰 +勋 +起 +祛 +剀 +E +岵 +屦 +黜 +钙 +肇 +鳙 +腾 +蓑 +愕 +旮 +忸 +菠 +雠 +腌 +限 +箭 +昨 +轼 +切 +佣 +洫 +萸 +墅 +狴 +典 +劂 +猛 +咔 连 -袂 -鬓 -螯 -搬 -震 -岳 -汉 -锶 -义 -屏 -蔽 -蕙 -杰 -频 -脓 -五 -孳 -您 -浏 -览 -鸨 -振 -邦 -马 -鞍 -珞 -晋 -献 -策 -徽 -贺 -州 -争 -彤 -綦 -被 -审 -密 -码 -姘 -弑 -故 -港 -杖 -琬 -婷 -先 -队 -律 -渺 -执 -爷 -牧 -书 -童 -余 -球 -种 -炉 -渣 -如 -裂 -缝 -重 -缓 -慢 -初 -色 -列 -彼 -岸 -臂 -疤 -办 -伺 -候 -绪 -沱 -楔 -钣 -换 -印 -曾 -欢 -迎 -忐 -酒 -吧 -搪 -塞 -鲨 -质 -除 -怀 -念 -百 -努 +卧 +龋 +钜 +耽 +驺 +明 +衬 +羿 +砂 +苯 +裆 +符 +韭 +螽 +逐 +狭 +绩 +纷 +孀 +懿 +鲇 纪 -侃 -片 -取 -猾 -已 -眠 -级 -搜 -像 -褪 -蛀 +饧 +觏 +缧 牙 -靠 -枕 -宽 -店 -续 -剧 -精 -奋 -兰 -拍 -照 -申 -嘹 -亮 -吡 -啶 -脱 -肛 -反 -鞠 -效 -夯 -户 -脑 -F -吴 -泰 -璜 -彬 -胜 -痴 -呆 -积 -还 -债 -、 -志 -奢 -也 -昂 -札 -所 -奖 -功 -深 -位 -铜 -谎 -真 -捡 -拾 -喷 -嚏 +诒 +晟 +垣 +霾 +栋 +Z +曛 +馘 +滏 +琮 +郢 +斫 +褓 绍 -乌 -鳢 -昊 -玉 -恽 -寿 -榕 -暹 -单 -簧 -伽 -漂 -赚 -头 -俞 -昆 -Q -浩 -邬 -敏 -蛳 -卖 -秃 -孚 -蒂 -芙 -尼 -掠 -夺 -急 -熔 -梁 -必 -骐 -屡 -爽 -柬 -野 -蛮 -誓 -闪 -戛 -津 -瓦 -痰 -盂 -奉 -突 -总 -瞰 -曲 -敛 -十 -这 -些 -# -训 -诫 -帐 -晁 -唯 -伟 -惹 -衔 -冶 -绮 -雯 -给 -婉 -洋 -哨 -兵 -蝶 -圳 -鹳 -} -串 -消 -累 -湘 -潭 -倪 -匡 -卸 -贿 -霜 -坛 -陋 -匹 -咫 -尺 -涯 -豌 -毛 -纺 -臻 -镇 -墓 -镧 -若 -失 -鬣 -狗 -咧 -诿 -嫡 -郑 -澜 -备 -要 -窜 -今 -眷 -燕 -荪 -冼 -坤 -启 -谱 -牒 -椴 -& -黟 -囱 -瞻 -礼 -唐 -蕃 -鹊 -瞧 -姬 -花 -懋 -吸 -屈 -宣 -酷 -量 -纹 -骸 -肺 -腑 -语 -技 -历 -猎 -犬 -助 -邯 -郸 -袒 -相 -军 -汀 -弛 -芭 -蕉 -扇 -疗 -察 -移 -植 -缤 -纷 -女 -堇 -妩 -响 -尾 -蛇 -岭 -魅 -斯 -领 -跑 -傅 -叶 -仇 -襟 -艄 -诠 -辉 -甲 -让 -喻 -欣 -私 -吉 -叼 -筵 -胖 -赖 -戌 -需 -元 -黛 -癌 -荚 -败 -类 -因 -劫 -羲 -孺 -竞 -企 -K -煎 -熬 -走 -觊 -盗 -守 -便 -福 -荣 -瀛 -黄 -清 -埕 -奏 -侦 -捻 -浒 -砧 -矜 -持 -尖 -似 -乎 -院 -轮 -毂 -阴 -鲸 -械 -胎 -从 -朝 -夕 -嘉 -郡 -混 -凝 -厮 -刷 -芋 -溶 -脘 -但 -羽 -焰 -编 -氏 -将 -澳 -库 -朴 -硝 -郓 -槿 -究 -彩 -碚 -付 -谊 -倌 -赣 -猖 -獗 -疥 -疮 -佼 -陲 -冲 -决 -叹 -孩 -戎 -拉 -链 -千 -膦 -汇 -驸 -胃 -散 -忽 -略 -娱 -舜 -暖 -席 -融 -并 -筠 -罗 -踵 -蒸 -煮 -浇 -铸 -揭 -榜 -撒 -锏 -铃 -声 -炳 -庚 -辅 -约 -翰 -充 -扶 -贫 -丙 -酮 -扼 -杀 -咳 -嗽 -翠 -骈 -截 -享 -淑 -娴 -姊 -桌 -涤 -铼 -碳 -纤 -芒 -退 -免 -催 -卵 -斩 -获 -厅 -伍 -脉 -络 -睐 -詹 -蓉 -别 -售 -官 -吏 -搀 -靛 -啮 -黏 -瞠 -泊 -镊 -泸 -绚 -玻 -璃 -冒 -偷 -衣 -媒 -落 -着 -呛 -跪 -障 -括 -乐 -匿 -导 -燃 -絮 -疽 -哲 -男 -坐 -庄 -央 -碧 -冯 -赓 -狞 -笑 -珑 -暴 -父 -吓 -孕 -顶 -普 -壬 -崇 -云 -雾 -伊 -甸 -洹 -香 -艳 -酥 -钢 -琴 -受 -耸 -霰 -石 -叱 -咤 -风 -足 -杞 -柳 -俄 -溪 -砝 -愈 -益 -镜 -拨 -浪 -鼓 -》 -判 -x -龚 -蓓 -芘 -摆 -炼 -喉 -址 -琥 -敦 -垛 -巡 -舰 -滕 -永 -彦 -趣 -唇 -齿 -恐 -茂 -馗 -韵 -憬 -寻 -稿 -〈 -阵 -侵 -涠 -抠 -榨 -葡 -萄 -膨 -笃 -埔 -雕 -塑 -款 -囹 -练 -抵 -旋 -糖 -酐 -姆 -阮 -污 -垢 -难 -卯 -浦 -豆 -豉 -袅 -娜 -尤 -估 -泪 -淳 -很 -俚 -佑 -荟 -萃 -卉 -虱 -把 -结 -丑 -鸭 -半 -描 -摹 -绘 -卦 -碰 -撞 -戮 -邱 -菀 -且 -丿 -皇 -' -拚 -例 -迩 -妖 -培 -衡 -旖 -旎 -漱 -萍 -冬 -焱 -远 -瞩 -补 -庞 -贵 -雄 -灰 -蝴 -佗 -笛 -挨 -打 -旅 -翔 -脸 -寺 -廓 -谛 -啸 -驷 -沐 -哀 -毅 -歆 -歹 -词 -垃 -圾 -做 -撅 -翩 -坨 -仍 -佟 -捏 -慰 -藉 -掴 -陶 -斤 -隆 -坡 -睇 -绎 -杜 -鹃 -缘 -唬 -肖 -赐 -婴 -墉 -雅 -阁 -译 -筱 -柔 -稀 -糊 -涂 -徕 -嬉 -皮 -士 -唑 -祁 -隽 -藻 -贝 -忙 -低 -靡 -严 -峻 -眼 -睛 -鼻 -舒 -恶 -激 -街 -碑 -考 -偕 -老 -谕 -藩 -调 -长 -潮 -枭 -鸿 -郝 -彪 -盛 -脚 -栀 -蚧 -棺 -浙 -鲜 -画 -屋 -捉 -丁 -泽 -钊 -吮 -沮 -授 -显 -露 -豹 -崔 -琮 -倒 -觞 -观 -丞 -琳 -棕 -榈 -躯 -壳 -杵 -臼 -碎 -扑 -簌 -廉 -称 -羡 -遗 -袭 -? -谭 -熹 -吕 -洁 -砬 -颗 -俊 -晖 -砀 -怡 -寡 -讯 -逍 -娘 -晶 -婧 -航 -番 -伪 -麻 -碱 -剖 -师 -洞 -帛 -堰 -座 -倾 -硐 -史 -仓 -兜 -耳 -穹 -庐 -扰 -衍 -鞭 -挞 -赞 -亚 -灶 -宜 -想 -咖 -啡 -扫 -帚 -皿 -栽 -郁 -闷 -葱 -烽 -燧 -娉 -乱 -庙 -涕 -诸 -暨 -砂 -锅 -它 -昙 -船 -降 -荷 -骆 -禄 -善 -炜 -峄 -狼 -仕 -嫖 -砻 -肚 -渊 -源 -涉 -嫌 -毕 -阀 -丫 -鬟 -贩 -袖 -舞 -篡 -芮 -延 -施 -琅 -艇 -衬 -昀 -朔 -抉 -答 -造 -飚 -奎 -枪 -姑 -骨 -骺 -槟 -烤 -喧 -噪 -蔷 -薇 -蕴 -铺 -叫 -采 -疱 -疹 -惠 -茹 -随 -瑛 -玲 -漕 -粮 -觉 -虎 -眈 -澄 -蹼 -缺 -陷 -另 -炸 -赡 -酱 -湟 -遂 -荀 -淇 -旧 -麾 -稽 -叉 -* -尘 -卓 -啤 -盈 -姓 -竹 -副 -氓 -短 -… -屯 -蒯 -雌 -谢 -杭 -墒 -返 -患 -骷 -髅 -崖 -襄 -孢 -蹂 -躏 -嶂 -哑 -湾 -整 -综 -洛 -巧 -迟 -钝 -聋 -鲲 -柿 -饼 -逾 -轰 -烈 -践 -辨 -魁 -粗 -垣 -阙 -沛 -氡 -磷 -肥 -什 -刹 -骥 -食 -拥 -俭 -炕 -{ -钳 -值 -逝 -鹄 -煜 -左 -醇 -咨 -询 -聿 -吨 -捶 -憩 -饱 -沙 -咀 -派 -毙 -嫔 -濉 -赶 -泼 -势 -乘 -掐 -蕾 -窗 -滓 -』 -够 -劲 -拼 -凑 -蝮 -烯 -酸 -须 -峨 -嵋 -弩 -! -禅 -锷 -寝 -曝 -忠 -跃 -么 -鳞 -炬 -冠 -键 -昭 -赳 -垅 -董 -穷 -玖 -树 -疯 -悉 -蓝 -耕 -瘦 -棣 -娶 -冉 -跌 -慧 -韫 -音 -佚 -戢 -该 -构 -呕 -沥 -袱 -辈 -邓 -稼 -蚤 -爪 -郗 -涛 -栓 -逆 -差 -灾 -探 -讨 -陇 -愁 -划 -透 -呦 -腐 -拆 -迁 -筝 -邰 -宵 -腊 -佯 -秘 -嬴 -卢 -桀 -螺 -钿 -泌 -鳅 -折 -篇 -宝 -或 -甫 -框 -桶 -拱 -胺 -氧 -酶 -崆 -裘 -薛 -彻 -孔 -佳 -晚 -绾 -懿 -澍 -堵 -磨 -独 -辟 -蹊 -径 -底 -岁 -哇 -始 -末 -遭 -遇 -驿 -纵 -横 -倡 -优 -篓 -锴 -谁 -扯 -炅 -珍 -弦 -妓 -惶 -措 -贪 -婪 -苏 -柏 -昌 -奴 -婢 -禀 -猜 -吹 -枷 -著 -悍 -富 -庶 -忍 -禁 -又 -那 -韶 -涵 -负 -战 -刺 -胍 -栾 -敷 -离 -栋 -吐 -辜 -濂 -凉 -濒 -婕 -莉 -莎 -儒 -艮 -揩 -森 -悲 -悯 -驰 -援 -硒 -刁 -钻 -肤 -椋 -映 -嵇 -涪 -陵 -姝 -祸 -莺 -乍 -咯 -烷 -茅 -孝 -彰 -剥 -顺 -邺 -侯 -鞣 -坷 -凇 -悬 -疑 -敬 -虔 -殿 -莫 -葛 -贻 -遣 -固 -啵 -睿 -置 -诒 -翘 -貔 -貅 -肪 -饮 -巨 -怖 -惦 -牦 -牛 -赊 -诟 -跋 -眸 -罕 -浅 -脾 -琐 -胸 -淦 -忻 -拙 -鹰 -草 -阶 -休 -嘌 -呤 -辽 -佐 -皆 -废 -率 -峤 -缠 -汪 -棉 -姗 -铿 -柱 -幼 -铧 -吃 -懒 -函 -岑 -奚 -侏 -酉 -釜 -薪 -糗 -噜 -钦 -髯 -翁 -求 -职 -非 -凡 -麓 -苍 -蝇 -读 -丛 -钜 -嫣 -麸 -瞳 -染 -甥 -溢 -抹 -豫 -怒 -斥 -拗 -陕 -粑 -掩 -盖 -硅 -磬 -雨 -槲 -炭 -汤 -祚 -茨 -饲 -智 -仁 -竟 -痕 -擅 -柑 -喝 -妞 -洪 -畴 -乏 -侥 -详 -细 -景 -猷 -瀑 -丘 -铰 -逼 -仄 -绅 -暮 -鸡 -疲 -倦 -乒 -乓 -饕 -餮 -舍 -曜 -珂 -裳 -啦 -贤 -佶 -粼 -铎 -沃 -鸳 -霸 -骁 -骏 -滢 -母 -霁 -胬 -颂 -歌 -锆 -蛆 -早 -秋 -妃 -樱 -释 -弥 -黎 -诺 -旭 -嫂 -匮 -颖 -昶 -掂 -飞 -憨 -掬 -莴 -笋 -滨 -槌 -伯 -零 -沓 -谷 -牟 -畅 -诗 -亭 -冗 -啧 -仅 -吼 -遮 -荆 -沧 -昴 -祛 -蚜 -虫 -扣 -饰 -柜 -洲 -坝 -错 -愕 -乜 -肘 -味 -叮 -停 -止 -徒 -芯 -潞 -诀 -哄 -冤 -貉 -剜 -祈 -篆 -吠 -银 -甜 -弹 -唱 -俐 -弘 -舸 -臭 -剪 -沫 -晨 -驳 -旷 -浓 -困 -馀 -涌 -挠 -姐 -匠 -感 -聚 -焦 -帽 -滴 -丕 -默 -玩 -桢 -添 -垂 -朽 -慷 -慨 -挎 -潢 -淞 -霄 -亡 -况 -陌 -秤 -鸦 -寞 -痧 -绢 -逯 -悌 -勿 -蜂 -窝 -桐 -湃 -兑 -伐 -蚝 -椅 -凳 -辄 -藤 -蔓 -咸 -蒜 -苔 -浈 -阿 -汗 -垌 -爻 -毯 -彗 -糯 -损 -毁 -铲 -瘪 -屿 -穗 -惕 -勤 -淄 -刑 -魍 -銮 -轧 -坍 -臣 -衫 -箴 -咿 -唔 -姜 -宛 -勇 -迸 -歪 -骗 -弼 -疸 -励 -坪 -杂 -耍 -铷 -睫 -霍 -毓 -纱 -罚 -韩 -旮 -旯 -筹 -茫 -控 -鬼 -掳 -砺 -缀 -髋 -乞 -丐 -萝 -卜 -沁 -捕 -淋 -亏 -欠 -封 -胪 -狮 -碴 -尽 -儡 -爵 -诬 -蔑 -堪 -顾 -奶 -呱 -眉 -酵 -饵 -覆 -辙 -猕 -猴 -桃 -卅 -绑 -块 -啬 -趸 -〖 -讽 -闫 -鹤 -祥 -耿 -丹 -档 -轲 -闵 -肄 -桥 -熊 -杆 -隙 -皈 -缩 -芽 -咱 -氯 -螨 -遵 -勉 -耐 -涎 -撩 -蚂 -衷 -梯 -仆 -垄 -咋 -诉 -矮 -嗡 -庾 -轩 -追 -髁 -迷 -恋 -趾 -枫 -阉 -灯 -盏 -牺 -牲 -绞 -渥 -惫 -睾 -瑰 -隋 -减 -螳 -螂 -仙 -磁 -操 -韬 -晦 -族 -傻 -瓜 -呓 -兽 -未 -靓 -饶 -舌 -牵 -挂 -嘟 -捣 -槽 -篝 -胀 -粘 -剂 -颓 -炮 -啼 -髂 -彝 -尊 -嗷 -待 -哺 -樊 -茜 -肉 -宓 -摩 -拳 -擦 -掌 -挺 -破 -哉 -叻 -述 -赠 -隗 -剑 -獠 -斗 -膜 -液 -茆 -恨 -斐 -坠 -汾 -馨 -惟 -镛 -淬 -菁 -晕 -酯 -谋 -劈 -腿 -咽 -险 -抗 -胞 -麽 -磅 -募 -颤 -荧 -陡 -摇 -晃 -蹴 -拒 -誉 -革 -鼎 -倍 -凯 -兔 -逵 +绊 +掩 +泻 +绋 +鞠 +棱 +蟀 +荒 掉 -际 -役 -氖 -祺 -繁 -蝈 -唤 -悚 -借 -莳 -『 -般 -宗 -泳 -腕 +埝 +刽 +鞔 +昃 +痪 +薏 +赏 +云 +翁 +挥 +黹 +反 +闱 +锐 +废 +罱 渚 -摔 -跤 -褒 -跟 -醋 -贾 -琢 -\ -尧 -腻 -慈 -睬 -菱 -胭 -脂 -矸 -君 -瓮 -荡 -羁 -髻 -闾 -寥 -桂 -墨 -汁 -掷 -庸 -铳 -绒 -琪 -锟 -岌 -籍 -炫 -谍 -凹 -屹 -浴 -盆 -猗 -魂 -阪 -沸 -鲛 -旬 -矿 -懈 -贯 -吖 -棒 -疝 -簿 -喀 -逗 -厘 -邵 -珊 -蜡 -$ -撤 -屁 -〔 -谜 -乃 -麟 -痱 -厌 -霓 -夫 -曙 -暄 -涿 -娥 -巷 -瘟 -踢 -娲 -鲍 -苟 -锋 -惨 -蹭 -镣 +环 +富 +艽 +嫖 +瓠 +亵 +酾 +忾 +句 +筅 坏 -眯 -辑 -潜 -町 -撑 -腰 -撰 -讼 -闹 -薹 -爆 -叛 -逃 -涸 -汕 -凶 -皓 -饥 -渴 -瓢 -纲 -耗 -材 -芸 -鼾 -崭 -凋 -蜒 -押 -拣 -奘 -阗 -魏 -辩 -罘 -帘 -暂 -胆 -囊 -概 -跷 -怜 -泄 -蛤 -蟆 -衢 -潺 -腔 -珐 +溶 +袒 +航 +抄 +軎 +膊 +德 +腚 +髹 +舵 +璺 +秋 +逯 +笱 +思 +垡 +镇 +撺 +操 +则 +滋 +漏 +赐 +轧 +益 +唏 +篪 +块 +飧 +俊 +渡 +悖 +瑟 +验 +惟 +谛 +痂 +贩 +茜 +腧 +瞄 +彻 +崤 +洁 +媸 +溴 +耦 +屮 +# +沭 +倾 +策 +籀 +冤 +进 +驵 +) +藿 +僭 +约 +跻 +辗 +葫 +鼐 +惦 +岑 +珈 +奖 +炙 +迅 +澍 +仕 +滥 +蛴 +抽 +笤 +倡 +咏 +鲂 +撙 +赤 +袖 +饫 +驾 +埯 +泪 +距 +丢 +戤 +甸 +碗 +惆 +龟 +呔 +牾 +瑕 +呈 +捉 +雪 +缌 +挞 +澧 +长 +俟 +脚 +m +疫 +条 +坼 +非 +蔻 +e +刃 +织 +幸 +愿 +寂 +柒 +鄄 +胚 +r +崂 +扯 +芘 +充 +阅 +杯 +椒 +胛 +品 +区 +嘴 +溅 +基 +乱 +鄂 +欣 +著 +墒 +℉ +橛 +垲 +涩 +仿 +煮 +荭 +妃 +卫 +痍 +眇 +颈 +囝 +香 +阏 +课 +绱 +卢 +鲵 +淫 +泶 +颢 +甑 +芝 +霓 +蓟 +岢 +集 +饮 +莉 +倌 +秀 +仳 +哽 +武 +捞 +蜷 +陧 +种 +毙 +纸 +俘 +拯 +钭 +链 +媾 +撬 +怊 +场 +鹨 +茅 +蛏 +娌 +掣 +悔 +乒 +萜 +按 +炽 +吭 +眢 +霁 +谮 +攵 +啻 +慕 +亳 +镧 +噙 +裼 +颥 +镤 +莠 +觳 +府 +烁 +跎 +负 +文 +绰 +且 +蓖 +迎 +秫 +礁 +漱 +瘿 +獾 +柩 +祉 +淞 +芽 +秕 +颃 +塑 +衤 +弹 +淆 +媚 +栀 +匦 +醣 +绽 +钣 +掖 +翼 +蓠 +瑞 +洚 +鼠 +蔓 +办 +制 +贱 +气 +奚 +娠 +馊 +撩 +荽 +镯 +堂 +蜡 +啭 +蜩 +大 +绡 +忍 +疔 +生 +弋 +膜 +特 +缳 +娅 +嚏 +憷 +鲞 +赘 +龠 +觐 +鋈 +侈 +疟 +叙 +. +蒽 +潘 +艚 +溏 +柽 +溪 +邃 +池 +呸 +捏 +齄 +粒 +耋 +锆 +婿 +樾 +殇 +仆 +僖 +荬 +饲 +嫂 +咖 +牍 +睃 +抻 +类 +多 +刁 +愤 +I +嗄 +梦 +闰 +盛 +篥 +谁 +搠 +椤 +崇 +蜜 +潭 +蟠 +铗 +刭 +牲 +毓 +鼯 +蚣 +勰 +2 +璃 +叔 +嘘 +蘼 +沫 +箸 +迳 +针 +姣 +坫 +母 +酏 +芏 +俾 +懵 +遑 +囫 +蒸 +狞 +邬 +拎 +茫 +箔 +堑 +独 +定 +谕 +逵 +蓥 +关 +肉 +喙 +糜 +鸿 +担 +习 +咣 +麽 +镙 +瘴 +漆 皎 -骑 -愿 -橱 -冕 -厂 -蟒 -袍 -纭 -箐 -咕 -咚 -碲 -羌 -绥 -燥 -睡 -砥 -涅 +犏 +肩 +莅 +御 +荠 +核 +磋 +噍 +铯 +珠 +挟 +磅 +襟 +魄 +鸾 +串 +殳 +警 +货 +橘 +佝 +锎 +坟 +苇 +监 +柁 +鄞 +脘 +殖 +刘 +女 +哺 +P +带 +耿 +缀 +阚 +拶 +昴 +缓 +庶 +陕 +瘵 +撤 +黑 +疽 +竽 狄 -肟 -氨 -纶 -潇 -杠 -锈 -雁 -栖 +郭 +移 +娈 +注 +租 +擢 +菌 +邶 +历 +猥 +棰 +虑 +[ +锿 +酞 +宁 +逻 +刎 +莎 +馗 +启 +蜣 +任 +牒 +噌 +臌 +苔 +藕 +窕 +亭 +砖 +橐 +苊 +圃 +埚 +娃 +骗 +页 +闶 +轱 +锄 +贞 +愍 +榨 +落 +嚅 +情 +犟 +甄 +茵 +霍 +咽 +狂 +短 +午 +炭 +瀛 +氢 +瀚 +送 +摞 +皙 +吕 +廑 +蹦 +治 枚 -储 -橡 -蠢 -芹 -枯 -虐 -袋 -届 -惆 -炊 -泓 -猝 -扳 -幕 -跚 -翡 -豇 +尺 +羯 +敌 +崛 +吨 +漳 +惜 +贤 +猃 +污 +钊 +郐 +诟 +挹 +怙 +稚 +珩 +铿 +炯 +砑 +罗 +昌 +知 +砬 +窜 +糌 +姘 +谎 +菰 +魁 +祀 +伐 +瞳 +肋 +蔸 +悴 +黍 +冉 +潲 +圉 +舢 +宵 +羧 +八 +3 +挺 +牿 +桴 +鲸 +讦 +此 +驱 +噼 +奴 +头 +尽 +蓊 +湔 +洒 +鐾 +苜 +狍 +浯 +剿 +腓 +垓 +玖 +茄 +忑 +霹 +涅 +铵 +亦 +庀 +愁 +嚯 +弦 +盂 +娟 +姹 +孪 +愈 +刑 +眈 +泷 +髋 +筱 +炮 +ⅰ +雍 +喜 +傻 +帛 +缨 +缣 +诠 谟 -膛 -喇 -叭 -鞑 -闽 -菊 -嘶 -逮 -健 -毫 -骄 -狸 -胛 -哭 -嚎 -郫 -疼 -苦 -锯 -夷 -垫 -鸪 -疏 -蕊 -瞎 +猖 +酆 +鲴 +冢 +硕 +灸 +嘞 +舭 +伸 +鲋 +猗 +吟 +徵 +桠 +觖 +癃 +左 +吼 +鼽 +茔 +抨 +碓 +崞 +碲 +篾 +沐 +裂 +加 +噎 掰 -侍 -飒 -跳 -磺 -洼 -噱 -巩 -羹 -峰 -托 -菲 -宾 -俘 -娼 -叩 -旺 -傣 -瑞 -厥 -讹 -昏 -沉 -逊 -膊 -轻 -雀 -曳 -滩 -耻 -蔺 -披 -胳 -孰 -篷 -舟 -狐 -荸 -荠 -狒 -岗 -冀 -鄂 -婶 -寅 -咔 -嚓 -契 -株 -蕹 -榆 -梅 -针 -呢 -朵 -虏 -刨 -臀 -浚 -捌 -椒 -瘫 -囡 -稳 -慕 +开 +¥ +茇 +唿 +蚤 +荏 +祯 +瓤 +惯 +犸 +看 +博 +嗟 +娱 +枨 +鹩 +旋 +秸 +樟 +榫 +栓 +瘩 +消 +戟 +抑 +鸫 +狈 +骞 +阋 +镂 +遭 +茬 +餮 +除 +昱 +曷 +瘀 +吱 +枕 +虍 涝 -即 -缇 -脊 -孤 -僻 -廿 -後 -囝 -琰 -崽 -迭 -廖 -侠 -镶 -嵌 -较 -锵 -酗 -鸽 -噻 -吩 -沭 -寒 -玺 -溱 -焚 -溯 -禽 -御 -垦 -檬 -鑫 -穆 -窕 -圣 -茴 -瓷 -釉 -踞 -颛 -烩 -钧 -殓 -逸 -呋 -喃 -淆 -筒 +腹 +帚 +唔 +羰 +赍 +忝 +盎 +扔 +悉 +挤 +艮 +骢 +葑 +莶 +公 +缘 颐 -邪 -抒 -倘 -偶 -涞 -希 -攀 -娟 -敢 -死 -婵 -踪 -筛 -铅 -陪 -嫁 -棋 -予 -龛 -棍 -仿 -迅 -崧 -削 -贬 -黜 -豪 -锐 -馄 -饨 -黾 -扩 -覃 -奔 -悟 -唷 -鳄 -灿 -烂 -洗 -滁 -割 -叁 -渠 -寓 -枝 -桠 -恒 -踹 -鹿 -砦 -遁 +党 +窳 +枞 +沽 +罨 +概 +遄 +牵 +篡 +桥 +铛 +镪 秽 +苄 +嗪 +孵 +廛 +粳 +潋 +诣 +拿 +爹 +逢 +扁 +椎 +掐 +躬 +豚 +焊 +响 +髭 +忽 +绫 +跸 +喔 +沏 +衄 +谙 +培 +埒 +阶 +段 +一 +浦 +豫 +怦 +苑 +渠 +选 +痱 +忧 +耀 +綮 +芪 +澶 +迩 +缑 +蓿 +廊 +璨 +僳 +冼 +哼 +强 +脖 +豕 +< +死 +蠖 +昭 +参 +稳 +害 +徊 +佤 +诅 +裁 +召 +趾 +葜 +诌 +腈 +滑 +眉 +栩 +寸 +苦 +廿 +殂 +猹 +谭 +误 +银 +拧 +嗯 +V +辔 +粉 +擒 +炜 +靡 +呦 +惮 +缭 +唣 溥 -钪 -帕 -锡 -鲱 -嚼 -亿 -蒌 -丈 -寄 -摘 -俪 -辛 -癸 -痫 -缪 -婀 -鳙 -黔 -菌 -勘 -纂 -闯 -耦 -兼 -午 -昕 -驾 -‖ -擂 -徨 -殉 +镱 +骆 +呲 +濑 +榇 +菩 +柜 +桫 +椟 +指 +剔 +创 +翥 +鬲 +夫 +旆 +鬯 +景 +悟 +粥 +唛 +鲶 +囵 +啤 +卿 +藻 +斥 +碇 +稹 +韧 +掮 +堕 +罐 +瞅 +铆 +遢 +泉 +捋 +涑 +旷 +紫 +记 +撇 +纡 +〈 +倨 +弘 +舷 +y +筇 +顷 +拊 +迨 +聂 熟 -柄 -歇 -猛 -亨 -肿 -棱 -硕 +机 +骈 +讲 +痄 +椅 +洹 +沮 +瓮 +侗 +郾 +勤 +镳 +审 +屺 +斓 +徽 +靓 +澳 +个 +抿 +鲼 +膀 +蛩 +侪 +栎 +: +殛 +哳 +瘰 +屣 +斋 +喳 +饨 +并 +哇 +轸 +鹳 +拘 +础 +徕 +螵 +霜 +O +嗫 +汹 +褴 +昧 +往 +蔷 +阢 +就 +邰 +袱 +伥 +矢 +宰 +雎 +耧 +帘 +麓 +茸 +隳 +蜍 +叱 +嫣 +奘 +膻 +额 +枉 +劳 +衩 +菘 +拄 +耍 +Ⅳ +广 +摅 +忤 +伞 +鼾 +膛 +籍 +镐 +凵 +笪 +幅 +卡 +搓 +抟 +隅 +过 +杰 +逍 +簋 +便 +垠 +锕 +鲚 +蚯 +纛 +粑 +末 +慢 +吒 +蔺 +恨 +蚵 +里 +谏 +晤 +仞 +轫 +勘 +锷 +砸 +湟 +阳 +洮 +锩 +芊 +甥 +穸 +氕 +冶 +茑 +印 荫 -剔 -棠 -妊 -娠 -圆 -窃 -樘 -邋 -涟 -淮 -辞 +居 +铙 +舾 +承 +述 +鞒 +掾 +宕 +测 +逝 +漕 +蕴 +蕨 +坶 +痧 +讴 +沤 +欠 +锵 +埂 +厣 +丑 +力 +披 箩 -筐 -窦 -莲 -塘 -颈 -籼 -啊 +叼 +杲 +瘪 +颇 +鳞 +诼 +柱 +钟 +鲆 +墙 +妄 +沱 +苹 +报 +意 +嗽 +贺 +沔 +憧 +禄 +敝 +彦 +锍 +裸 +医 +铘 +塬 +蠛 +刂 +扃 +邾 +硐 +U +畹 +鉴 +藐 +坊 +… +囿 +踝 +法 +魇 +拨 +銎 +娉 +器 +鼓 +保 +艾 +妮 +鲥 +谵 +梃 渑 -韧 -撂 -荒 -偿 -ˇ -烬 -讳 -鞋 -璧 -倚 -瑾 -琨 -疚 -俸 -祀 -蒙 -攻 -坚 -沼 -劣 -蝙 -蝠 -缔 -鳝 -脏 -搞 -撸 -苗 -圃 -旌 -蜇 -缴 -瘘 -腹 -沟 +援 +诞 +佰 +戚 +伛 +钏 +楱 +呱 +怪 +铟 +摇 +芈 +邀 +倩 +栝 +暄 +Y +狼 +裟 +粼 +踣 +钉 +笞 +阵 +匕 +赈 +艴 +郦 +襄 +馁 +童 +晏 +锭 +全 +鸡 +榉 +痒 +正 +飨 +镰 +呒 +喑 +因 +碧 +珞 +楣 +揸 +络 +苞 +传 衙 -髦 -郎 -伤 -隍 -狩 -岱 -葆 -裹 -尸 -绩 +潢 +戕 +旱 +聚 +翳 +簇 +竺 +倍 +埏 +) +赣 +与 +致 +樊 +殍 +婊 +岙 +你 +蔹 +孤 +酽 +踊 +镅 +氘 +幔 +否 +隼 +渭 +蟋 +孢 +楦 +荃 +桶 +炕 +惚 +簏 +讪 +台 +演 +珑 +蔼 +昆 +涞 +芟 +遂 +渐 +砀 +幛 +那 +恰 +洙 +嫘 +佗 +寮 +幽 +鲠 +谖 +瞍 +莨 +亟 +邢 +浚 +茧 +汝 +元 +喱 +毗 +鹏 +窬 +愫 +奋 +揖 +鳅 +虎 +搋 +砟 +佞 +镌 +啷 +儇 +觥 +锅 +蛋 +浼 +亡 +媒 +涠 +琵 +妥 +费 +幺 +濡 +肤 +雀 +姊 +碛 +熘 +腔 +塾 +窿 +惊 +蹭 +亏 +郊 +渖 +枋 +赊 +! +锾 +惠 +掭 +贴 +杷 +人 +琳 +辫 +蜈 +糇 +狲 +档 +墼 +呜 +偻 +葭 +绷 +闳 +惬 +伺 +敛 +簟 +晦 +谓 +龌 +傣 +旰 +暾 +窥 +邵 +锥 +者 +父 +讶 +挢 +壁 +亓 +豆 +编 +旯 +碑 +掴 +釉 +菡 +晰 +芸 +狻 +听 +喀 +惫 +捃 +枇 +岂 +鬃 +哥 +再 +昏 +槿 +蓼 +诸 +占 +氰 +怏 +掺 +啜 +亚 +阎 +砒 ++ +泾 +筚 +娩 +实 +獭 +暑 +磷 +瀹 +煅 +粤 +瘟 +缈 +郛 +笆 +缍 +膣 +嗣 +纳 +⑤ +妓 +搴 +擀 +抓 +洲 +局 +掂 +较 +宪 +弱 +捱 +啐 +浜 +跤 +诘 +鲫 +很 +骑 +茭 +项 +藤 +珧 +趴 +痖 +姿 +戌 +酉 +跷 +翎 +筮 +傀 +省 +辂 +哐 +弓 +糟 +蕺 +绎 +十 +眩 +岸 +酢 +两 +刹 +耶 +吓 +℃ +囗 +赦 +? +城 +诶 +逶 +鼙 +缎 +亻 +键 +尾 +锞 +戋 +跽 +臧 +檄 +昝 +允 +款 +算 +它 +醑 +娄 +嗬 +辇 哮 -郾 -浑 -命 -避 -垠 -夥 -珏 -谨 -慎 -嘀 -雏 +u +蒋 +岘 +蕉 +骥 +苁 +魍 +磙 +① +损 +阉 +t +咨 +诈 +宣 +晕 +揠 +悒 +J +问 +蜮 +箝 +嬗 +帱 +琅 +》 +茹 捐 -笈 +俪 +嫩 +蹉 +夼 +荀 +丐 +畛 +槎 +o +俸 +浸 +园 +舨 +廉 +闫 +严 +瑙 +递 +剽 +翌 +弗 +芤 +乏 +更 +冁 +贬 +鸢 +边 +韫 +刍 +芍 +欷 +虼 +岱 +病 +酶 +圳 +眺 +悦 +樯 +鹞 +袭 +凛 +瑛 +洇 +院 +乞 +荪 +瞰 +帏 +某 +婀 +纠 +髻 +纵 +踽 +鲕 +篁 +灾 +黝 +峡 +踮 +拥 +均 +盆 +槠 +硅 +芗 +謇 +佧 +薤 +鲟 +ⅴ +销 +谘 +梓 +乩 +雄 +凶 +紊 +铩 +植 +厩 +呤 +艋 +艇 +匿 +黻 +收 +迭 +栽 +位 +雹 淡 -腋 -虾 -镭 -疳 -甚 -亩 +蒺 +鳕 +模 +镄 +炫 +嗨 +兕 +讫 +薪 +咕 +股 +: +论 +㎡ +拖 +底 +伎 +哲 +酋 +劢 +向 +研 +爽 +鞑 +尿 +迢 +涔 +览 +观 +邗 +渌 +囡 +庑 +砰 +圪 +扪 宸 -碗 -聊 -否 -斧 -溟 -苞 -娃 -朊 -戍 -恺 -晾 -虞 -再 -秉 -梵 -冈 -廷 -萧 -茁 -豁 -芬 -缆 -绳 -符 -绯 -椎 -喘 -楝 -幻 -煌 -轨 -秒 -宙 -梧 -奄 -糟 -蹋 -溜 -匣 -芦 -苇 -弱 -蛙 -刚 -耶 -住 -戒 +怃 +秧 +搌 +渥 +主 +椁 +麝 +怕 +钷 +迷 +何 +s +昶 +取 +逅 +赜 +檎 +胆 +袼 +期 +播 +瞿 +业 +巧 +职 +扑 +妹 +滦 +瑶 +脲 +錾 +堍 +画 +蹑 +硪 +屑 +桕 +耷 +蟛 +汽 +鳝 +瘠 +逖 +蘩 +蚧 +蝻 +褫 +氙 +橡 +阼 +跖 +闸 +a +饩 +讧 +烊 +湘 +教 +挽 +黏 躁 -瞪 -殷 -恕 筋 -钺 -久 -熄 -辣 -茗 -她 -竺 -赢 -梦 -葵 -簪 -仑 -罹 -拓 -伎 -俩 -滇 -池 -饭 -怦 -辰 -攫 -玮 -哌 -尉 -蹇 -扁 -氙 -害 -挡 -猿 -舶 -桓 +甯 +持 +析 +示 +馀 +壕 +胺 +鳃 +膺 +巯 +果 +欤 +柴 +浏 +软 +跨 +筵 +獠 +疖 +顾 +瞽 +梧 +⑩ +锢 +焖 +骋 +昕 +窖 +轾 +鹫 +玩 柚 -窥 -龋 -糕 -邀 -壁 -徙 -坂 -拦 -己 -笼 -罩 -娆 -苯 -楹 -讥 -钎 -菡 -檀 -嗪 -畿 -颍 -巍 -靴 -痒 -几 -徵 -妥 -燎 -删 -淼 -蚊 -钠 -假 -隧 -瑕 -尝 -郧 -夙 -俱 -喙 -忌 -栩 -峪 -嘈 -淤 -浮 -泉 -阑 -囤 -攘 -獭 -灌 -溉 -炒 -轴 -奕 -珙 -咬 -畸 -筏 -厢 -瑚 -幄 -啄 -麒 -姚 -渭 -吵 -嚷 -谓 -卷 -赴 -抚 -摸 -莹 -赔 -睹 -灏 -殒 -茉 -噬 -艰 -碟 +舀 +着 +颁 岷 -祖 -晟 -酚 -醛 -浆 -扮 -抛 -宠 -诈 -颢 -颜 -俨 -窟 -窿 -髓 -嘱 -咐 +奇 +g +狁 +踞 +姒 +噢 +吉 +。 +堆 +咸 +蛟 +缗 +袷 +呀 +蒈 +标 +蚕 +逊 +氐 +飒 +斗 +荔 +癞 +偾 +朦 +鞴 +曙 +铃 +尚 +匆 +戊 +鹌 +鹁 +猸 +裣 +霈 +专 +谧 +许 +口 +疸 +柢 +嗒 +地 +檐 +冷 +泸 +酌 +滩 +穿 +仄 +悸 +x +袋 +墨 +鼷 +顽 +揿 +郝 +舁 +鏊 +舣 +羸 +庠 +食 +季 +缥 +嗌 +骚 +埸 +来 +贻 +泮 +锔 +儡 +翮 +慰 +议 +铊 +笔 +蜗 +冈 +溷 栅 -赫 -簸 +割 +咿 +涉 +暂 +茆 +怯 +毕 +窆 +临 +蚺 +战 +丧 +偶 +蔑 +驿 +辎 +谦 +臂 +秦 +氓 +撂 +幻 +躅 +嘤 +兰 +佟 +璧 +寝 +桦 +抠 箕 -闺 -蔫 -豺 -仡 -佬 -端 -贰 -箫 -骝 -焕 -缄 -勒 -绸 -怕 -痪 -弯 -菠 -冰 -酣 -额 -搅 -翱 -蔬 -瞬 -赌 -迂 -骊 -墩 -麝 -彷 -貂 -籽 -粒 -邂 -逅 -违 -绣 -沽 -钓 -铠 -壹 -撮 -瞅 -壕 -崴 -掣 -套 -峭 -段 -俳 -棘 -仲 -泱 -纯 -炀 -谏 -渗 -粹 -悔 -壤 -嗣 -拿 -蜚 -蓁 -宏 -獒 -荨 -篪 -鹫 -脖 -垡 -疙 -忧 -莅 -桉 -斟 -句 -挽 -蓬 -勃 -盒 -翟 -夭 -~ +瑁 +芙 +尬 +烙 +懑 +尘 +横 +腮 +椭 +肘 +纲 +梗 +鳜 +鹆 +畴 +慈 +脎 +于 +戽 +丬 +祷 +衅 +肥 +芥 +孬 +灞 +忐 +⑧ +京 +面 +囊 +鼍 +晋 +剧 +嚆 +叉 +飓 +耨 +轰 +H +冥 +衮 +厨 +还 +逭 +沼 +伢 +绔 +慷 +鹃 +栌 +颀 +裱 +钕 +凿 +蓣 +箬 +纥 +朕 +襻 +怨 +蒌 +形 +偿 扎 -偏 -凛 -巯 -枸 -寂 -搓 -祭 -畔 -苄 -谴 -醒 -帧 -竣 -距 -埠 -裙 -轼 -侧 -邡 -滋 -锗 -趁 -裕 -盐 -佃 -邢 -钞 -冻 -帆 -妨 -碍 -隅 -丝 -裁 -簇 -砷 -锁 -蔡 -曦 -搭 -塌 -硫 -锚 -祢 -坑 -遥 -呜 -岚 -拖 -莨 -菪 -钒 +驼 +需 +绅 +戢 +钪 +奥 +清 +蚁 +鲒 +扉 +汔 +荻 +蚰 +糗 +币 +料 +尸 +砗 +困 +醢 +臣 +碳 +汜 +嗜 +号 +复 +琛 +箪 +阒 +庆 +泛 +牌 +绌 +鞲 +圈 +铨 +庙 +檀 +军 +堪 +鲣 +铹 +恬 +沩 +厥 +胨 +亨 +磐 +虬 +胃 +濮 +赵 +唪 +鞍 +曲 +到 +瓜 +刻 +内 +怎 +爨 +坐 +髌 +憨 +洱 +控 +糍 +痴 +骇 +垸 +踺 +锺 +肢 +辚 +读 +室 +绯 +私 +缆 +补 +鹱 +狠 +捡 +圾 +袄 +觅 +彐 +降 +枰 +咭 +贝 +痞 +恤 +匐 +辈 +拒 +骐 +嗑 +敲 +蹇 +屋 +瀵 +右 +侨 +吻 +1 +虢 +阌 +骝 +嗤 +" +仲 +渎 +镡 +桔 +脞 +怔 +黛 +是 +咪 +塄 +禁 +齐 +沅 +竖 +擦 +螯 +疤 +蹲 +戴 +秩 泗 -愚 -昧 -陂 -厨 -羚 -羊 -堆 -逄 -铭 -粕 -沣 -葩 -诏 -剩 -兆 -畦 -鄢 -氮 -皖 -蜻 -蜓 -拈 -藁 -歙 -烦 -淘 -汰 -驴 -楷 -琼 -拌 -禾 -犊 -玫 -肽 -蝗 -泷 -乾 -贡 -漪 +蓉 +埴 +肌 +鳖 +ⅷ +有 +舸 +腰 +砍 +笊 +认 +兄 +戾 +“ +男 +尼 +醇 +砼 +菪 +抵 +白 +贾 +况 +獒 +泌 +礤 +篇 +炸 +帅 +摊 +旺 +巫 +锬 +土 +洋 +盖 +颖 +构 +么 +造 +麦 +菸 +燃 +嬉 +闪 +错 +醌 +猴 +赅 +怄 +v +萼 +痤 +巴 +胖 +杀 +艏 +篚 +歇 +哓 +海 +馇 +乓 +枫 +扮 +蛆 +图 烃 -赃 -铐 -屉 -狙 -抖 -茬 -鹅 -榭 -肯 -赋 -穸 -恳 -〉 -橇 -宅 -〗 -吁 -蛰 -伏 -傍 -睽 -桅 -罡 -姨 -魄 -譬 -飘 -旗 -狱 -惭 -暑 -喋 -猥 -亵 -瞿 -呻 -吟 -刃 -哎 -呀 -煤 -诣 -暧 -溏 -郊 -陟 -瘩 -糜 -骠 -荼 -擒 -递 -舆 -遛 -担 -阂 -楞 -肾 -炎 -吻 -挖 -掘 -霉 -磊 -婿 -葭 -缮 -拇 -穿 -讫 -渡 -屑 -檐 -捞 -宫 -褐 -羿 -贼 -锰 -枞 -钰 -嘻 -绶 -插 -尻 -厕 -楠 -叙 -妍 -胱 -厚 -腺 -靖 -憾 -蓦 -搂 -痞 -润 -颚 -靶 -桁 -噗 -钙 -汴 -惩 -迢 -枇 -杷 +净 +鹛 +哉 +裨 +罅 +肟 +诲 +哆 +涵 +烈 +羟 +亩 +隐 +首 +潮 +瑚 +脉 +骅 +聍 +绠 +凉 +铈 +壬 +窟 +喘 +摹 +悬 +寨 +吐 +鳏 +憎 +源 +舅 +极 +茗 +矛 +乔 +趸 +椴 +楹 +岛 +热 +颊 +藉 +顶 +炱 +秣 +狗 +疆 +傈 +乘 +榧 +扦 +舰 +名 +惕 +裕 +梢 +花 +糊 +齿 +夙 +味 +侏 +讣 谬 -掸 -蒋 -呐 -喊 -衮 -嗝 -劝 -宕 -秧 -迥 -璐 -皙 -酿 -莱 -弧 -槐 -瘤 -媳 -椿 -镖 -醉 +梵 +祢 +量 +拟 +氖 +雾 +辣 +埙 +铑 +邯 +齑 +黼 +澌 +千 +黟 +颍 +滕 +簖 +慝 +锗 +帮 +9 +兹 +略 +捆 +仉 +喈 +歌 +卜 +邝 +殄 +煞 +掷 +让 +宦 +嵴 +耳 +睇 +恹 +仂 +钬 +功 +闹 +烨 +荐 +耻 +浮 +莛 +宴 +妫 +尤 +详 +眯 +廒 +氡 +邋 +嬲 +僵 +涌 +酮 +绐 +茚 +滟 +肓 +猁 +川 +协 +赁 +准 +耖 +聿 +皑 +萃 +鲺 +癜 +慎 +姬 +嗓 +矣 +好 +酎 +导 +瞪 +熵 +搀 +恃 +犀 +淤 +粜 +爸 +埭 +仇 +祭 +皓 +厌 +籴 +迦 +诫 +随 +国 +斟 +诬 +哨 +铎 +熹 +峪 +靳 +势 +b +为 +苴 +鹋 +龉 +辘 +踟 +擅 +坯 +唳 +飑 +貉 +胜 +渴 +萁 +卓 +寺 +氦 +蜒 +站 +辆 +脔 +码 +相 +亍 +蒎 +颠 +浅 +携 +袈 +罴 蛛 -洱 -迈 -秩 -媚 -盼 -驻 -氘 -苣 -宰 -眩 -夔 -骚 -踊 -铆 -钉 -毡 -扈 -嗲 -峥 -卿 -酋 -雒 -酪 -肼 -蜱 -缉 -幸 -钮 -亦 -浣 -甄 -甬 +钛 +阙 +谅 +兔 +钰 +濒 +叹 +根 +桷 +朊 +喵 +谚 +礼 +朗 +车 +钌 +唼 +诊 +怍 +翟 +绒 +慧 +芦 +妊 +倚 +庄 +郜 +咛 +鳊 +畋 +怫 +掠 +廖 +卩 +线 +浠 +瘭 +裉 +胀 +隔 +宠 +彘 +棍 +铮 +舐 +阈 +农 +蝉 +司 +卺 +件 +厂 +嘛 +呛 +聱 +烫 +艺 +婷 +巽 +璎 +努 +鲨 +奉 +莸 +威 +踢 +岳 +财 +褰 +敦 +铅 +西 +岚 +太 +讽 +钴 +镁 +山 +袤 +草 +峨 +蝾 +砘 +笑 +靼 +击 +镞 +春 +尹 +扩 +狎 +谶 +惩 +救 +歧 +蕹 +恩 +匏 +勖 +嘲 +掬 +靠 +旗 +馏 +鲎 +窍 +唯 +墓 +拢 +睦 +敖 +北 +劈 +痰 +觎 +跞 +眠 +尴 +扼 +圻 +睁 +{ +衷 +呆 +但 +唱 +使 +砣 +尢 +硭 +揣 +腐 +瑗 +~ +峻 +Ⅰ +偃 +竿 +脯 +臾 +乜 +泅 +淅 +查 +嗔 +梆 稣 -幔 -藿 -胤 -悦 -贷 -鲇 -讷 -熏 -娅 -殊 -皋 -陀 -履 -抑 -娓 -褂 -砚 -铉 -篱 -笆 -坊 -翎 -洙 -锥 -堕 -伴 +炝 +榍 +刮 +臭 +壳 +砷 +越 +螬 +趑 +退 +音 +T +Ⅲ +破 +伍 +绮 忱 -滚 -餐 -樟 -烙 -妮 -皑 -邛 -崃 -闸 -氰 -脍 -炙 -潼 -俯 -仔 -幌 -渎 -碘 -酊 -岘 -谧 -沂 -崩 -溃 +识 +钳 +厉 +漉 +杉 +褥 +提 +吧 +漤 +葚 +徇 +拜 +疬 +槁 +( +嗝 +蘖 +槽 +亲 +桨 +鼢 +垌 +眍 +泊 +痨 +Ⅸ +陟 +恺 +骓 +攉 +润 +痹 +癫 +命 +描 +托 +伧 +媲 +岭 +湾 +觊 +畿 +族 +县 +马 +鸹 +靴 +赫 +醐 +沥 +支 +艄 +癔 +屁 +立 +涟 +贯 +鸳 +挲 +忒 +忙 +囤 +蒇 +铰 +碜 +蕙 +薅 +黥 +莴 +猱 +傧 +慵 +悌 +芫 +骖 +戡 +淳 +屈 +匀 +佼 +酗 +精 +稻 +蜱 +桩 +番 +砜 +哌 +谗 +闾 +夔 +融 +铽 +凝 +窦 +蹂 +麒 +鍪 +饿 +诨 +缟 +庸 +丹 +俎 +搅 +轲 +爪 +囱 +综 +炳 +瘃 +缋 +蹰 +丙 +嚷 +宄 +腕 +孩 +醭 +渝 +罢 +账 +申 +败 +晖 +野 +岗 +蟾 +津 +Q +虽 +皇 +铼 +由 +祓 +葛 +匈 +蜂 +昼 +零 +哂 +札 +帷 +夹 +槭 +营 +流 +榜 +篙 +耩 +衢 +鲽 +铷 +咂 +镟 +蠢 +笾 +涸 +睛 +焕 +悻 +骄 +陶 +怠 +阖 +累 +锼 +没 +爷 +暌 +粽 +耢 +投 +裘 +艉 +菲 +水 +摘 +膝 +搿 +劝 +铜 +漫 +动 +煺 +弩 +郗 +蠹 +犯 +态 +汇 +盥 +玮 +利 +陵 +钎 +腿 +硗 +堠 +现 +驽 +硖 +狱 +舱 +姻 +淮 +鸟 +百 +膈 +邮 +火 +卒 +刊 +棠 +被 +睢 +煊 +罚 +敢 +镨 +宓 +荩 +蛄 +难 +蚍 +桢 +啉 +癀 荞 -诽 -谤 -痛 +弈 +猊 +惋 +挡 +歹 +噩 +唰 +锝 +蜃 +胥 +呙 +揲 +其 +心 佘 -叟 -阐 -残 -怔 -忡 -貌 -碣 -裆 -裤 -偃 -晔 -搁 -梳 -铱 -嫦 -鄱 -撷 -碉 -盱 -眙 -辫 -垮 -蔻 -荃 -蚱 -梗 -阻 -徊 -揽 -棚 -楚 -幽 -裸 -饷 -狠 -痣 -窄 -焊 -伞 -紫 -拢 +纶 +岽 +钠 +殷 +吸 +隆 +呗 +俞 +最 +胬 +韬 +k +珊 +掏 +练 +恼 +励 +牮 +缴 +陛 +躇 +化 +炀 +倘 +寐 +铍 +索 +奸 +揪 +溱 +宅 +遣 +娑 +勿 +举 +聋 +* +刨 +菥 蛾 -琦 -煽 -爹 -岫 -笺 -鹏 -阚 -茸 -遢 -焯 -欺 -瞒 -仝 -莽 -掺 -诲 -骞 -祷 -淌 -缸 -茱 -萸 -熙 -薄 -俑 -捍 -惰 -弈 -挤 -剁 -砾 -茄 -痢 -虑 -咛 -琉 -昱 -橙 -斜 -尹 -遐 -沾 -腱 -寇 -迫 -镂 -亘 -惚 -诞 -竭 -镍 -嘧 -翦 -溴 +禊 +痉 +疲 +棵 +蒿 +跌 +讼 +纺 +檫 +忠 +锡 +普 +埽 +胄 +物 +恕 +辅 +试 +岌 +康 +窭 +迟 +唁 +诉 +户 +粱 +诓 +倭 +步 +汪 +把 +奂 +莰 +店 +萨 +叮 +影 +眭 +直 +僬 +褛 +崾 +苈 +菅 +蹴 +搛 +榴 +榀 +衿 +订 +猿 +笃 +刚 +粹 +瘙 +瞠 +宫 +冰 +皋 +玫 +嶷 +诤 +彀 +噔 +谱 +邱 +察 +琬 +茉 +蛮 +浞 +泓 +蜢 +奕 +崽 +雏 +〔 +獍 +镏 +砥 +孳 +耸 +瓶 +攮 +瘢 +饽 +鼗 +学 +汗 +聃 +孕 +券 +耱 +祈 +锤 +包 +饕 +能 +擤 +蒲 +匪 +饭 +冯 +冬 +箜 +醪 +裴 +鲛 +哟 +瞩 +辟 +‘ +宏 +嫒 +耠 +肠 +钲 +倒 +臀 +宿 +牧 +预 +甫 +祟 +树 +膂 +徐 +排 +啡 +部 +妲 +疡 +轮 +话 +崆 +鼬 +缏 +享 +汨 +希 +鳎 +佐 +蘧 +槲 +秆 +倔 +远 +询 +尖 +嗡 +装 +板 +扛 +拾 +级 +莼 +酝 +峤 +茱 +苠 +遏 +鸬 +摭 +育 +锶 +宙 +泄 +钤 +纭 +肆 +掼 +轴 +躏 +螂 +棂 +舡 +恋 +卯 +厮 +躐 +撒 +妻 +防 +革 +梅 +镔 +优 钾 -辕 -睢 -矾 -矗 -顿 -盔 -浠 -钡 -枉 -钗 -舫 +崔 +客 +瓞 +蜥 +诳 +孥 +达 +球 +敞 +荨 +羞 +溺 +蚩 +哙 +憝 +啕 +岐 +柿 +胙 +峄 +孱 +圆 +储 +娇 +蹶 +盱 +禹 +豇 +整 +奢 +稿 +徒 +臆 +窈 +册 +菊 +辩 +液 +陷 +祧 +缰 +忆 +禺 +疃 +曩 +褂 +垧 +觋 +波 +咦 +矶 笙 -稚 -顽 -噩 -璋 -谚 -盎 -璇 -呗 -宥 -谒 -亢 -稍 -拜 -携 -倬 -斌 -薏 -苡 -旦 -含 -〕 -爬 -栗 -怠 -惜 -溧 -辆 -沌 -铮 -癣 -耙 -萤 -畜 -阜 -剌 -膺 -祠 -燮 -涨 -涣 -茯 -焉 -凰 -侄 -桑 -赘 -肝 -摧 -脆 -啾 -戊 -赎 -馏 -镁 -荬 +镊 +胞 +钐 +轶 +沟 +荟 +入 +撑 +粢 +缠 +祆 +诧 +弭 +偎 +唤 +押 +拔 +患 +咱 +姑 +网 +峋 +哪 +冫 +漓 +房 +崖 +辕 +蛲 +疣 +酐 +应 +鲜 +缅 迪 -禹 -蹦 -悠 -缙 -圹 -坭 -乖 -继 -侨 -辗 -剽 -槎 +夥 +岫 +袁 +僧 +锦 +胯 +桧 +返 +坩 +肀 +璀 +术 +苫 +扈 +暴 +踔 +促 +恁 +隹 +俩 +秃 +轵 +煽 +薮 +炔 +闷 +呶 +愦 +虿 +烀 +窀 +痘 +鸺 +庋 +另 +蜘 +刳 +滢 +脍 +骧 +裳 +科 +妙 +贸 +之 +伫 +睐 +兽 +阄 +馋 +例 +老 +绑 +乡 +仪 +唧 +缲 +孜 +浴 +鸵 +饶 +鞭 +泽 +皴 +礓 +憔 +挑 +闩 +岣 +谝 +锻 +叻 +% +改 +潦 +港 +癌 +阽 +疏 +逄 +轹 +萏 +辙 锣 -膏 -徘 -堤 -疟 +子 +鹕 +摈 +呋 +隰 +龅 +街 +敫 +锛 +夭 +潼 +际 +剪 +羲 +柯 +蠓 +迓 +拱 +朝 +礅 +炎 +在 +畸 +署 +苍 +蹯 +漯 +霏 +求 +貘 +摁 +牦 +晶 +帜 +袢 +胲 +赖 +鸦 +胪 +瞥 +瞻 +昂 +涪 +鼹 +酪 +玷 +畦 +攘 +桄 +翩 +蛀 +媵 +螓 +酬 +盲 +厍 +蚓 +茴 +洵 +沂 +发 +蹙 +孝 +谤 +忌 +蛔 +骡 +掀 +彼 +魂 +肪 +鬓 +晨 +良 +懔 +昵 +添 +唬 +饬 +庵 +@ +炒 +遥 +吠 +杨 +栉 +沣 +璇 +卉 +钅 +裎 +华 +埔 +僚 +幞 +驻 +雩 +角 +汉 +矮 +蕤 +盏 +次 +钩 +恧 +增 +趿 +阕 +锨 +褊 +确 +斑 +痣 +罂 +溽 +绵 +莲 +斧 +牡 +杖 +耗 +挝 +猢 +枢 +四 +l +钧 +贫 +杪 +嬴 +糠 +铬 +评 +绾 +凑 +芳 +葆 +镒 +獗 +尊 +舌 +障 +铂 +锹 厄 -呈 -缚 -蛐 -戚 -濡 -兢 -苷 -肴 -轿 -淹 -炯 -痿 -孛 -奈 -汶 -诱 -宴 -肱 -犁 -膳 -菅 -飙 -弓 -箭 -噢 -蚺 -鸵 -骋 -辊 -钴 -悼 -曼 -柞 -蚕 -佰 -饺 -轶 -柴 -糙 -汹 -霖 -驹 +盅 +郑 +蛉 +楞 +傅 +骀 +忡 +罾 +麴 +萧 +骱 +黩 眶 -卒 -枢 -隼 -湿 -嘴 -踩 -狭 -敲 -涮 -杉 -鞅 -珉 -纽 -骤 -鸯 -於 -循 -哗 -灼 -钩 -锂 -戡 -湮 -灭 -肇 -羔 -窍 -戳 -搏 -渔 -萱 -诅 -狡 -杏 -艾 -娣 -谅 -毗 -隶 -鉴 -亥 -胯 -倩 -兮 -绷 +秭 +蓁 +祝 +郯 +蛳 +趱 +材 +分 +踱 +悄 +擐 +剂 +ⅹ +犋 +彪 +艰 +跑 +蚝 +钹 +刈 +灏 +危 +胫 +钶 +醉 +胡 +稽 +频 +欺 +篮 +跟 +谇 +堰 +喂 +茛 +揽 +责 +赴 +徘 +采 +Ⅱ +弛 +目 +捺 +鲲 +瞧 +潺 +钦 +咆 +背 +佳 +嘧 +蹩 +鸭 +胗 +卦 +缝 +骨 +咝 +凌 +拌 +征 +澡 +攴 +畚 +匍 +韦 +轨 +汛 +钼 +踌 +鹊 +咋 +捧 +敕 +铱 +寤 +晁 +鹑 +后 +芡 +诜 +舜 +铥 +殃 +壑 +济 +F +燔 +懈 +蔡 +蚌 +茏 +铳 +羁 +胴 +萋 +眼 +淖 +色 +共 +龊 +嘀 +荡 +渊 +蜉 +疾 +衡 +汩 +缶 +摩 +芴 +打 +疚 +夂 +恸 +酡 +S +垅 +涫 +宥 +趁 +勃 +石 +ⅲ +婧 +班 +腼 +李 +贿 煦 -缅 -炖 -垭 -蛔 -蜃 -杯 -瀚 -抄 -瓯 -蓟 -粲 -憎 -唁 -诧 -吭 -颠 -宿 -逞 -矶 -苑 -窘 -谦 -鲈 -祯 -哪 -胥 -途 -铀 -痂 -鏖 -茧 -褥 -鳗 -泾 -寸 -冥 +瑾 +绨 +曼 +淇 +捕 +溉 +髡 +N +榱 铖 -裱 -萌 -遨 -哽 -令 -逻 -琛 -挝 -庵 -萘 -蝉 -馥 -眺 -栈 -洮 -氢 -疡 -埃 -愫 -骶 -墅 -煞 -祝 -蟾 -蜍 -畈 -膑 -乔 -蘑 -遴 -伸 -忏 -沿 -峙 -匪 -蜥 -蜴 -瓶 -塔 -箍 -咒 -拐 -恍 -逢 -秭 -挚 -歼 -箔 -肋 -冷 -傲 -膈 -尕 -嘎 -帅 -羧 -蹲 -颌 -萼 -愉 -禧 -芩 -遍 -亓 -矫 -澎 -拴 -痘 -蜊 -赏 -锄 -俗 -罐 -妄 -漓 -婆 -氟 -螃 -腾 -鞘 -抬 -邻 -骜 -碌 -蛟 -丢 -蔚 -肆 -惮 -寰 -枣 -嵊 -滞 -缢 -峡 -诡 -氦 -跨 -颧 -尬 -楂 -嚣 -骅 -昨 -琏 -莓 -幅 -癖 +杈 +栗 +蔗 +梁 +爱 +佛 +堡 +梨 +矍 +鸲 +兜 +税 +滓 +朱 +登 +兆 +裹 +稗 +涛 +囔 +偏 +艹 +涓 +灶 +豁 +瘼 +凄 +茶 +桃 +醚 +曰 +蝓 +暧 +姥 +掊 +转 +毽 +陀 +滤 +堋 +廓 +綦 +萎 +柙 +葳 +遽 +馈 +徂 +傺 +垂 +虻 +阆 +经 +蹊 +邡 +羽 +衍 +峰 +俱 +愚 +隍 +猪 +忻 +据 +邑 +蚪 +珀 +偷 +帕 +堇 +牛 +宗 +絮 +丝 +莫 +犰 +嵇 +稀 +瑷 +搭 +苌 +渔 +狷 +蓰 +酃 +赳 +橥 +莱 +中 +佴 +蜀 +鹦 +卟 +赠 +淹 +嶙 +坡 +搂 +泣 +樨 +鳓 +钿 +丈 +~ +嗉 +借 +辨 +哀 +授 +票 +本 +氯 +待 +泥 +聘 +朔 +蔌 +玛 +肫 +芜 +霰 +声 +道 +吏 +洽 +脱 +陲 +崮 +枸 +字 +侩 +拽 +碉 +枝 +锇 +劾 +垩 +璩 +朋 +蹿 +徜 +阐 +尜 +糕 +瘊 +隘 +嫦 +璋 +煸 +尧 +铐 +稂 +荸 +庾 +嘶 眨 -俏 -馈 -烨 -熵 -腈 -塾 -莘 -饿 -荻 -劭 -岐 -狂 -杳 +杼 +烤 +觜 +氽 +拍 +磨 +莓 +熨 +弑 +缡 +溢 +畅 +志 +朽 +p +禳 +窘 +猓 +厝 +湓 +啵 +轷 +腻 +烽 +作 +柃 +噤 +乐 +绉 +低 +赝 +鹗 +倦 +伲 +笏 +黢 +氏 +琊 +惨 +激 +叫 +n +滇 +娥 +馄 +胱 +筛 +做 +邸 +庐 +郁 +帑 +谍 +鲈 +珍 +姜 +黠 +蝶 +吾 +飚 +讠 +雅 +程 +戳 +诗 +枘 +卞 +氛 +罩 +兑 +撕 +艳 +畈 +硒 +谡 +跗 哚 -恪 -竖 -矛 +咧 +这 +缪 +爿 +嘈 +天 +缫 +4 +信 +蓍 +幌 +引 +讯 +霸 +给 +锯 +炼 +螟 +弯 +捎 +鲱 +梭 +霭 +维 +泔 +晒 +鲮 +工 +昊 +伽 柠 -胚 -亳 -颊 -铡 -盾 -瞌 -舵 -虹 -羟 -鲟 -慌 -鄯 -撬 -敞 -蜕 -梢 -焙 -懦 -纠 -氩 -晰 -迄 -疣 -澈 -拭 -跻 -忘 -咆 -颉 -茵 -恢 -扦 -握 -恤 -铍 -厉 +莒 +哏 +G +柳 +蕞 +炅 +假 +砌 +绀 +联 +涧 +既 +亢 +俣 +碥 +扶 +蚊 +欲 +恭 +狨 +螈 +层 +型 +歃 +挚 +碾 +萆 +憋 +鄣 +坌 +氮 +纹 +魃 +毋 +篌 +嘁 +藜 +睑 +脒 +龆 +炊 +滹 +无 +馕 +蚀 +鲤 +③ +慨 +牟 +欹 +臊 +貊 +易 +掇 +灰 +镓 +噜 +蝠 +瀑 +妯 +恐 +章 +邓 +苡 +《 +恙 +莆 +睹 +蟥 +遒 +莽 +荥 +劭 +鲑 +琐 +钋 +菟 +镭 +蛱 +狸 +锒 +酷 +爻 +邦 +芹 +箨 +蟒 +燹 +糯 +馓 +- +歆 +砭 +; +趟 +瞀 +矧 +B +魈 +勒 +缛 +匮 +勐 +娘 +镩 +瘳 +慑 +渗 +弁 +啦 +晾 +粪 +饯 +陔 +孙 +债 +崃 +戎 +魉 +ⅳ +幢 +龛 +谈 +脸 +绂 +蟓 +箅 +瘕 +覃 +湎 +髯 +茯 +五 +像 +縻 +纨 +库 +狐 +腆 +焰 +巢 +篱 +吡 +而 +啬 +胳 +尝 +冻 +庭 +旅 +鲧 +捭 +碌 +胭 +舟 +笳 +埋 +搏 +酯 +映 +侔 +瘤 +杂 +已 +题 +僮 +蘸 +旁 +凫 +洎 +鹘 +砝 +戬 +湖 +嘟 +怛 +砚 +硇 +娲 +凸 +婉 +悠 +玳 +舛 +茈 +铺 +醴 +闽 +垢 +桑 +行 +遐 +奶 +郴 +篼 +竭 +蛸 +辜 +丌 +叟 +谑 +浈 +蠲 +歉 +容 +纾 +镍 +蚨 +灌 +琪 +攥 +锃 +儋 +疱 +覆 +息 +杓 +役 +腩 +沓 +鹾 +桐 +砻 +薨 +圯 +缢 +浍 +乖 +耐 +趋 +傩 +途 +三 +挠 +喊 +恚 +嗖 +镎 +忪 +噻 +泱 +迸 +护 +逗 +斛 +胼 朐 -钛 -沦 -蝎 -寨 -匾 -阔 -埭 +瓢 +弧 +怡 +逸 +灬 +髀 +剜 +版 +伊 +锸 +撖 +麟 +噪 +偌 +王 +犄 +琢 +浔 +痔 +外 +毡 +皿 鸥 -绵 -浸 -鳌 -脲 -蛎 -躲 -葫 -豚 -鼠 -珥 -辍 -泅 -揉 -訾 -秸 -秆 -啥 -躬 -膝 -阱 -某 -惺 -暗 -贲 -剿 -滥 -腥 -兄 -扔 -紊 -丸 -堡 -焘 -苎 -汐 -憔 -悴 -幢 -嵴 -蹿 -掇 -扒 -苓 -黯 -沅 -霏 -怯 -懵 -嗓 -荥 -挛 -唉 -绊 -垒 -蟋 -蟀 -廊 -毋 -驯 -榔 -舱 -炽 -忒 -攸 -芍 -竿 -磕 -蔗 -仵 -砍 -郜 -泻 +渲 +麾 +得 +匣 +嘌 +拚 +驸 +敬 +舞 +所 +畎 +辱 +礞 +列 +烩 +褡 +谐 +誉 +单 +英 +淘 +衫 +皖 +骠 +惰 +熠 +翦 +馅 +旧 +缒 +椠 +毵 +桀 +柞 +狺 +琨 +瘗 +俏 +茨 +攀 +捅 +减 +氟 +纱 +褚 +雕 +罄 +懂 +油 +铞 +棹 +籽 +妞 +嘹 +沪 +j +懊 +潴 +沆 +甩 锑 -孪 +执 +纫 +交 +讥 +舆 +用 +诽 +寡 +斤 +镲 +甾 +恳 +硝 +蝇 +殉 +舄 +铄 +癯 +催 +萍 +失 +琏 +羝 +鲩 +汴 +溧 +颤 +茺 +惹 +染 +迹 +电 +猬 +脂 +瑰 +贳 +璞 +榷 +词 +圬 +湫 +邺 +濯 +阴 +萤 +夺 +膘 +俳 +轿 +第 +霎 +赆 +菜 +抱 +敉 +鲳 +米 +疰 +戏 +郫 +甍 +顿 +拇 +嗲 +铋 +筘 +耆 +鲭 +绻 +推 +哄 +鳆 +庳 +擂 +闺 +碹 +惴 +赢 +柄 +翰 +逞 +蘑 +拳 +兀 +仟 +溲 +倏 +琰 +隈 +荮 +嶝 +休 +帻 +锘 +獯 +姗 +戆 +芮 +缸 +辍 +濂 +髦 +X +嬷 +钞 +眄 +翅 +塍 +前 +祜 +鹿 +枭 +酲 +芄 +帼 +逋 +郇 +碴 +挫 +诚 +熏 +疝 +腥 +瓣 +薜 +盾 +獐 盯 -邃 -潍 -靥 -谩 -袜 -淫 -磐 -湄 -仨 -′ -妒 -谯 -涧 -踏 -哦 -牢 -渲 -趵 -畲 -诙 -谐 -桡 -翊 -井 -蚩 -帜 -芊 -癫 -吱 -瘢 -嗅 -酞 -谣 -楣 -澡 -谌 -汝 -殖 -呵 -薰 -橘 -晴 -鄞 -傈 -僳 -恼 -嵩 -幂 -萎 -惯 -裨 -坎 -旨 -僚 -烫 -镑 -羯 -漯 -汛 -悸 -烁 -喽 -粤 -叠 -糠 -铟 -颅 -荤 -蓼 -遏 -昵 -攒 -涡 -擎 -丨 -屎 -滦 -诛 -蛊 -硼 -奠 -崎 -讪 -凸 -邹 -寐 -翌 -窑 -僧 -樽 -卞 -昔 -卤 -藓 -抨 -陉 -蒡 +磲 +贵 +唢 +楗 +昙 +篑 +蝮 +墟 惑 -颁 -厩 -梭 -悖 -漠 -雇 -鲆 -粪 -耆 -蜜 -厦 -弗 -涩 +悭 +灿 +钇 +缬 +匝 +跚 +翘 +仗 +陆 +透 +肼 +颓 +鸱 +糈 +巾 +才 +蛐 +松 +啧 +阜 +森 +茳 +6 +搽 +颚 +檗 +徉 +拓 +c +缩 +茂 +珏 +陉 筷 -锌 -圩 -弋 -赈 -骼 -窖 -歧 -嘲 -嗜 -券 -瞄 -蚁 -绕 -薯 -兹 -铂 -犀 -斋 -懂 -椰 -妻 -睑 -敖 -雹 -误 -榴 -铈 -囚 -臧 +伉 +砹 +粟 +崩 +壶 +骂 +兢 +W +抖 +和 +嫁 +澈 +庹 +芬 +锴 +憾 +褶 +挖 +止 +厦 +瘫 +秘 +梏 +陈 +置 +疥 +垃 +赚 +性 +〉 +韶 +婴 +蝙 +旖 +簦 +鬏 +楸 +箫 +鳟 +睿 +诹 +写 +炉 +糁 +遛 +踵 +愧 +侄 +麇 +茼 +身 +剐 +廪 +侧 +夯 +绗 +篓 稠 -邝 -喱 -禺 -犍 -鹦 -偎 -笠 -吗 -匕 -妲 -峒 -驭 -拧 -匝 -宦 -淖 -阈 -濑 -腭 -苛 -灬 -桔 -蒲 -泠 -鸠 -烹 -殃 -胴 -瘙 -藕 -邳 -牡 -唛 -俺 -溺 -喵 -瘾 -阆 -帷 -铣 -哟 -镗 -慑 -醴 +放 +禧 +渺 +露 +喇 +鎏 +焉 +雨 +岍 +批 +显 +卣 +惶 +薄 +恂 +殓 +岜 +蕈 +怂 +骒 +痿 菇 -刮 -拷 -骇 -锭 -蛭 +苓 +荦 +啃 +伤 +烧 +踹 +壤 +骊 +榛 +肛 +飞 +舔 +桉 +钆 +笨 +吝 +喽 +訇 +涯 +彖 +重 +珙 +比 +汲 +鳢 +领 +谢 +存 +喟 +狒 +载 +髅 +搁 +剥 +媛 +续 +A +寓 +摧 +颞 +卸 +竞 +嚣 +胍 +阀 +岔 +坂 +戗 +迤 +哞 +绚 +螫 +撵 +汶 +圭 +寒 +隧 +謦 +吵 +间 +芭 +聩 +胰 +耒 +谴 +爵 +鲢 +浙 +躺 +己 +丨 +碡 +暹 +裢 +鬼 +帆 +鳋 +糖 +吁 +喻 +颛 +粕 +瓿 +辰 +权 +虾 +娣 +襁 +捂 +颟 +绪 +麋 +罟 +纤 +妩 +滔 +凡 +时 +舶 +糅 +雯 +牖 +烟 暇 -匈 -蓖 +陌 +痦 +暮 +Ⅷ 雉 -掖 -莪 -邑 -趴 -鳟 -魉 -甩 -馋 -^ -奸 -碾 -赂 -觐 -趋 -壶 -兀 -挪 -醚 -鲳 -侩 -噶 -扉 -鱿 -榻 -揣 -姥 -舷 -茎 -纫 -嗉 -鳐 -痔 -啉 -脐 -巫 -侮 -凿 -痉 -衅 -鲢 -氛 -埋 -怨 -镐 -珀 -漳 -桧 -稷 -魇 -厝 -礁 -蝌 -蚪 -鳍 -昝 -妾 -坻 -矽 -椭 -婊 -挟 -赁 -捧 -锤 -侣 -唧 -咙 -铨 -呸 -孵 -哩 +酒 +遮 +训 +罕 +鳘 +予 +绦 +鞣 +豌 +圊 +乌 +鹬 += +棼 +樽 +胎 +殊 +吹 +殚 +暝 +赀 +郧 +慊 +常 +蓬 +徼 +溜 +郄 +幼 +范 +笼 +冱 +Ⅶ +企 +悯 +鏖 +翊 +宇 +豺 +z +鹧 +菱 +迫 +戍 +醮 +濉 +嫉 +蚴 +井 +哦 +肾 +闯 +晡 +蒙 珲 -馒 -蟠 -撼 -坟 -蟑 -菏 -钵 -馍 -茼 -蒿 -镰 -瓣 -艘 -祜 -喔 -叽 -寮 -皱 -镒 -穴 -憋 -栎 -顷 -岩 -孽 +窑 +碘 +谀 +砉 +笺 +鄯 +厅 +辶 +卖 +皤 +属 +蒉 +找 +籼 +靖 +履 +揭 +杞 +赕 +磊 +墀 +冒 +效 +默 +唑 +违 +脾 +蓐 +绛 +殁 +迕 +酊 +衾 +滴 +刿 +凋 +吃 +ⅱ +洄 +簿 +煜 +梯 +闭 +渣 +宋 +掌 +泠 +羚 +咒 +£ +诡 +鄙 莜 -胁 -樨 -钯 -巽 -蚣 -崂 -坦 -嵘 -鳕 -铝 -岙 +垄 +貌 +饥 +乍 +劣 +蝗 +襞 +锂 +断 +匡 +窒 +羹 +圄 +下 +畀 +赧 +犹 +戒 +师 +雁 +揉 +怵 +督 +屎 +匹 汞 -瘀 -蹈 -陛 -钼 -剐 -爸 -匆 -嘛 -榷 -凄 -璎 -斛 -萨 -轭 -巳 -邈 -铵 -陨 -赦 -拂 -斡 -蟹 -牍 -嬗 -佤 -尴 -堑 -颡 -漩 -铬 -睁 -痊 -菖 -戬 -拽 -芪 -帼 -琵 -琶 -蹄 -焖 -鸢 -吝 -撇 -唠 -勐 -淅 -坞 -醌 -唾 -缭 -朦 -胧 -鲤 -灸 -虽 -玑 -饯 -坩 -埚 -驮 -捆 -耽 -捂 -棵 -鹉 -傀 -汲 -挫 -粱 -蜘 -徇 -芎 -郅 -潴 -蕨 -绽 -泺 -郴 -亟 -蚌 -殇 -胫 -郢 -鲫 -熨 -垩 -璨 -蠕 -澧 -裔 +钥 +箢 +Ⅹ +殡 +唆 +椹 +韩 +纽 +蛰 +茌 +鄹 +噫 +语 +屡 +苟 +哧 +涂 +兴 +商 +匾 +组 +飘 +霖 +彭 +荆 +诙 +劁 + +扌 +卵 +莹 +哈 +厕 +箴 +弃 +曳 +浣 +未 +骼 +磕 +讷 +陡 +黾 +缕 +耄 +吗 +熄 +猩 +奄 +菽 +弼 +厘 +怆 +坻 +萑 +婆 +】 +呻 +馥 +篆 +桡 +门 +椰 +回 +哩 +瓴 +湍 +又 +序 +虱 +吣 +喃 +圹 +温 +瘸 +祖 +铲 +郸 +金 +镛 +钢 +堞 +域 +念 +轺 +脶 +坠 +拙 +灯 +罹 +琚 +劫 +僻 +迁 +礴 +啸 +二 +契 +咳 +颂 +矸 +虏 +锈 +胂 +阑 +窠 +蜿 +屐 +抢 +瓯 +赓 +沉 +钚 +孓 +翻 +砺 +煌 +服 +价 +豹 +咯 +淼 +薰 +殆 +蜕 +嚎 +般 +爰 +钗 +甬 +怀 +俄 +驷 +屯 +猡 +椋 +锓 +禾 +瘦 +衣 +虞 +鞅 +② +活 +陪 +氪 +视 +0 +会 +卑 +桂 +筹 +蠃 +蕃 +’ +快 +跣 +饰 +真 +颔 +聊 +鲅 +胤 +鸸 +飙 +案 +围 +克 +粞 +佑 +锱 +龀 +荼 +洞 +迮 +至 +囟 +饷 +潍 +丁 +漂 +夸 +择 +痛 +浒 +锚 +浪 +媳 +汐 +骶 +凭 +赃 +绳 +筻 +嵋 +匚 +蔬 +萄 +灼 +涤 +柏 +央 +乙 +葸 +堀 +稃 +墁 +伴 +蛎 +撼 +氆 +枥 +轳 +汾 +魅 +罘 +踏 +漾 +柘 +须 +啮 +崴 +永 +卮 +泼 +遍 +上 +践 +歙 +凹 +煎 +碟 +硌 +莪 +腊 +酚 +可 +噶 +堤 婺 -伙 -缨 -膘 -倭 -喹 -鳖 -侬 -腮 -饽 -绛 -哼 -挣 -孀 -蓥 -脯 -桨 -搽 -缕 -讴 -疃 -龌 -龊 -愣 -颞 -樵 -憧 -螟 -睦 -娩 +我 +} +嵯 +栲 +都 +冗 +氚 +昔 +霆 +邻 +熬 +固 +封 鹭 -胰 -苋 -趟 -炔 -硖 -闰 -郯 -晤 -喂 -矣 -蕲 -漾 -阡 -绀 -莞 -邕 -霹 -迦 -侈 -诶 -` -骡 -钕 -拎 -濠 -菩 -溅 -鲷 -〇 -痤 -鹧 -嫉 -吒 -湍 -泣 -腌 -鼬 -崛 -璀 -浔 -舔 -祉 -虬 -卟 -钨 -煲 -饪 -倔 -跆 -佣 -铑 -蜗 -鹌 -鹑 -讶 -韭 -「 -″ -盅 -萦 -罂 -」 -猬 -拮 -绫 -躺 -峦 -粽 -芗 -铢 -墟 +阁 +翱 +婢 +纬 +矾 +嘬 +尻 +蜻 +骣 +献 +殪 +阿 +妆 +募 +祚 +逃 +啾 +赭 +嵌 +嗦 +茁 +迈 +傍 +泵 +眚 +艿 +朴 +菔 +筢 +嬖 +简 +啖 +滨 +矜 +跪 +诔 +恿 +乇 +恶 +穷 +豸 +介 +槛 +恻 +馒 +媪 +运 +敏 +书 +龃 +剡 +谰 +藩 +皈 +调 +诏 +木 +痊 +闼 +锰 +苷 +叛 +撮 +械 +姨 +饱 +冠 +急 +楝 +委 +酸 +统 +炻 +髟 +斯 +撅 +旌 嘿 -奂 -觅 +垒 +宀 +宛 +矽 +讳 +资 +瘾 +诿 +揄 +胁 +撷 +绲 +喾 +蕲 +星 +蜴 +奏 +计 +界 +葶 +虹 +沈 +砾 +苒 +蕻 +扫 +孺 +觌 +湃 +蒗 +琴 +滞 +餍 +捣 +戈 +钒 +赛 +肭 +赡 +淄 +煤 +Ⅵ +旭 +趺 +避 +懦 +泖 +蹬 +速 +铤 +妒 +帝 +却 +浇 +踉 +截 +胶 +斡 +膳 +圜 +觫 +刀 +蓦 +醯 +涡 +茎 +绸 +接 +驭 +叨 +您 +洳 +盒 +姆 +娶 +⑦ +擗 +薷 +坜 +跬 +循 +躲 +疳 +悝 +鞘 +桅 +嶂 +棣 +筑 +誓 +逛 +魑 +坳 +囚 +擘 +埘 +垫 +圩 +律 +鬟 +薛 +黉 +羔 +仙 +甚 +龄 +湛 +刷 +榻 +脐 +屠 +埤 +愠 +醅 +侮 +咄 +蜓 +瘅 +妣 +晓 +瞟 +留 +硬 +揎 +隶 +怅 +扬 +副 +各 +吖 +踪 +盔 +棒 +住 +诛 +铫 +膪 +棉 +羼 +青 +盐 +痕 +莺 +技 +余 +萘 +颗 +饼 +仁 +样 +黎 +滂 +素 +廴 +彤 +展 +羌 +状 +俺 +塞 +荇 +妪 +姝 +锫 +霪 +焐 +嫌 赉 -蛹 -髌 -哆 -嗦 -岂 -浊 -儋 -痹 -灞 -掀 -跖 -※ -恬 -骰 -熠 -壑 -兖 -刍 -霾 -毽 -郦 -癜 -曰 -砜 -媲 -‰ -鄄 -腩 -撕 -槛 -嘘 -橼 -蠡 -冢 -咩 +径 镉 -蒽 -肮 -疵 -诃 -巅 -蜈 -飓 -殴 -铋 -鲑 -鳃 -龈 -坳 -呃 -岿 -桩 -嗯 -啪 -幺 -馅 -雳 -钽 -捅 -纾 -砼 -蹬 -琊 -扛 -嗨 -揪 -哒 -枳 -铛 -稔 -茭 -汨 -铌 -莒 -苘 -甾 -鳜 -阊 -劾 -羰 -迳 -柒 -慵 -唰 -耒 +证 +獬 +濞 +贷 +杌 +什 +蝎 +倬 +哎 +裙 +仍 +彝 +谒 +挂 +芷 +喏 +轩 +凼 +喉 +荧 +骏 +鲻 +鸪 +呕 +嘻 +义 +芩 +淝 +吮 +穆 +恒 +榆 +谠 +侣 +蠊 \ No newline at end of file diff --git a/data/chars/eng.txt b/data/chars/eng.txt deleted file mode 100644 index 62c60d7..0000000 --- a/data/chars/eng.txt +++ /dev/null @@ -1,93 +0,0 @@ -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 -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 -1 -2 -3 -4 -5 -6 -7 -8 -9 -0 -, -. -< -> -/ -? -; -: -' -" -[ -] -{ -} -! -@ -# -$ -% -^ -& -* -( -) -- -= -+ -\ -| -` - diff --git a/data/corpus/The Hitchhiker's Guide to the Galaxy.txt b/data/corpus/The Hitchhiker's Guide to the Galaxy.txt deleted file mode 100644 index 2749409..0000000 --- a/data/corpus/The Hitchhiker's Guide to the Galaxy.txt +++ /dev/null @@ -1,11 +0,0 @@ -  在银河系西螺旋臂的末端那片未曾标明的寂静虚空中,悬挂着—颗不被人注意的小小的黄色太阳。距离它大约9800万英里的轨道上,运行着一颗完全无足轻重的蓝绿色小行星。这颗行星上由猿演化而来的生命形式原始得令人吃惊,他们居然还认为电子表是一项非常了不起的设想。 -  这颗行星上存在着——或者说曾经存在——一个问题,那就是:大部分的居民在大部分的时间里都感到不开心。针对这一问题曾提出过各种各样的解决方案,但其中大部分都是紧紧围绕那些绿色小纸片的运动来着手的——这很奇怪,因为实际上并不是这些绿色小纸片不开心。 -  于是,问题依旧困扰着这颗星球。所有的人都感到不自在,其中大部分简直可以说是凄凄惨惨,甚至包括那些拥有电子表的人。 -  不过这与我们这里要讲的故事无关。 -  我们这个故事是关于一场可怕而又愚蠢的灾难,以及它的一系列后果。 -  同时这个故事也是关于一本书的,书名叫做《银河系漫游指南》,这不是一本地球上的书,它从来没有在地球上出版过,并且一直到那场可怕的灾难发牛之前,没有任何地球人见过或者听说过它。 -  然而,这绝对是一本非凡的书。 -  事实上,它可能是小熊星座那些伟大的出版公司所出版过的最非凡的书了——当然,这些公司也没有任何—个地球人听说过。但是,在银河系东部外缘的许多更加开放的文明里,《银河系漫游指南》已经取代伟大的《银河系百科全书》成为所有知识和智慧的标准。这是因为,尽管显得冗长,并且包含许多虚假或者至少是不够准确的信息,但它却在两个极其重要的方面超越了那部更加陈旧和呆板的著作。 -  第一,它稍微便宜一点儿;第二,在它的封面上以大而友善的字体写着“不要恐慌”这句话。 -  不过,这个关于那个可怕而又愚蠢的星期四的故事,这个关于那次灾难的奇特后果的故事,这个关于这些后果如何无可逃避地与这本非凡的书交织在一起的故事,它的开始却非常简单。 -  它的开始与一所房子有关。 diff --git a/data/fonts/chn/msyh.ttc b/data/fonts/chn/msyh.ttc deleted file mode 100644 index 37c28de..0000000 Binary files a/data/fonts/chn/msyh.ttc and /dev/null differ diff --git a/data/fonts/eng/Hack-Regular.ttf b/data/fonts/eng/Hack-Regular.ttf deleted file mode 100644 index a35ea2e..0000000 Binary files a/data/fonts/eng/Hack-Regular.ttf and /dev/null differ diff --git a/imgs/bad_example1.jpg b/imgs/bad_example1.jpg deleted file mode 100644 index 3174023..0000000 Binary files a/imgs/bad_example1.jpg and /dev/null differ diff --git a/imgs/bad_example2.jpg b/imgs/bad_example2.jpg deleted file mode 100644 index 6bb6290..0000000 Binary files a/imgs/bad_example2.jpg and /dev/null differ diff --git a/imgs/bad_example3.jpg b/imgs/bad_example3.jpg deleted file mode 100644 index fc6ab7a..0000000 Binary files a/imgs/bad_example3.jpg and /dev/null differ diff --git a/imgs/debug_demo.jpg b/imgs/debug_demo.jpg deleted file mode 100644 index 2f02358..0000000 Binary files a/imgs/debug_demo.jpg and /dev/null differ diff --git a/imgs/effects/blur.jpg b/imgs/effects/blur.jpg deleted file mode 100644 index cd15cd0..0000000 Binary files a/imgs/effects/blur.jpg and /dev/null differ diff --git a/imgs/effects/curve.jpg b/imgs/effects/curve.jpg deleted file mode 100644 index 73b4302..0000000 Binary files a/imgs/effects/curve.jpg and /dev/null differ diff --git a/imgs/effects/dark_border.jpg b/imgs/effects/dark_border.jpg deleted file mode 100644 index 0353edf..0000000 Binary files a/imgs/effects/dark_border.jpg and /dev/null differ diff --git a/imgs/effects/emboss.jpg b/imgs/effects/emboss.jpg deleted file mode 100644 index 26ec6bf..0000000 Binary files a/imgs/effects/emboss.jpg and /dev/null differ diff --git a/imgs/effects/light_border.jpg b/imgs/effects/light_border.jpg deleted file mode 100644 index c465213..0000000 Binary files a/imgs/effects/light_border.jpg and /dev/null differ diff --git a/imgs/effects/line_middle.jpg b/imgs/effects/line_middle.jpg deleted file mode 100644 index 30c4268..0000000 Binary files a/imgs/effects/line_middle.jpg and /dev/null differ diff --git a/imgs/effects/line_table.jpg b/imgs/effects/line_table.jpg deleted file mode 100644 index 34a5b7a..0000000 Binary files a/imgs/effects/line_table.jpg and /dev/null differ diff --git a/imgs/effects/line_under.jpg b/imgs/effects/line_under.jpg deleted file mode 100644 index 6a1b7cc..0000000 Binary files a/imgs/effects/line_under.jpg and /dev/null differ diff --git a/imgs/effects/origin.jpg b/imgs/effects/origin.jpg deleted file mode 100644 index 0b73eef..0000000 Binary files a/imgs/effects/origin.jpg and /dev/null differ diff --git a/imgs/effects/perspective_transform.jpg b/imgs/effects/perspective_transform.jpg deleted file mode 100644 index 797cc2e..0000000 Binary files a/imgs/effects/perspective_transform.jpg and /dev/null differ diff --git a/imgs/effects/random_crop.jpg b/imgs/effects/random_crop.jpg deleted file mode 100644 index 1e0e1df..0000000 Binary files a/imgs/effects/random_crop.jpg and /dev/null differ diff --git a/imgs/effects/random_space_big.jpg b/imgs/effects/random_space_big.jpg deleted file mode 100644 index 2562731..0000000 Binary files a/imgs/effects/random_space_big.jpg and /dev/null differ diff --git a/imgs/effects/random_space_small.jpg b/imgs/effects/random_space_small.jpg deleted file mode 100644 index 949c0bb..0000000 Binary files a/imgs/effects/random_space_small.jpg and /dev/null differ diff --git a/imgs/effects/reverse.jpg b/imgs/effects/reverse.jpg deleted file mode 100644 index 2e21f2e..0000000 Binary files a/imgs/effects/reverse.jpg and /dev/null differ diff --git a/imgs/example1.jpg b/imgs/example1.jpg deleted file mode 100644 index eadd432..0000000 Binary files a/imgs/example1.jpg and /dev/null differ diff --git a/imgs/example2.jpg b/imgs/example2.jpg deleted file mode 100644 index 6b0d3aa..0000000 Binary files a/imgs/example2.jpg and /dev/null differ diff --git a/imgs/example3.jpg b/imgs/example3.jpg deleted file mode 100644 index 1196740..0000000 Binary files a/imgs/example3.jpg and /dev/null differ diff --git a/imgs/example4.jpg b/imgs/example4.jpg deleted file mode 100644 index 0f5420f..0000000 Binary files a/imgs/example4.jpg and /dev/null differ diff --git a/libs/font_utils.py b/libs/font_utils.py index f4299a3..e3ba01b 100644 --- a/libs/font_utils.py +++ b/libs/font_utils.py @@ -16,7 +16,7 @@ def get_font_paths(fonts_dir): :return: path of all fonts """ print('Load fonts from %s' % os.path.abspath(fonts_dir)) - fonts = glob.glob(fonts_dir + '/**/*', recursive=True) + fonts = glob.glob(os.path.abspath(fonts_dir) + '/**/*', recursive=True) fonts = list(filter(lambda x: os.path.isfile(x), fonts)) print("Total fonts num: %d" % len(fonts)) diff --git a/libs/utils.py b/libs/utils.py index cb2c7b2..a943f5d 100644 --- a/libs/utils.py +++ b/libs/utils.py @@ -93,8 +93,9 @@ def load_bgs(bg_dir): def load_chars(filepath): + filespath = os.path.abspath(filepath) if not os.path.exists(filepath): - print("Chars file not exists.") + print("Chars file {} not exists.".format(filepath)) exit(1) ret = '' @@ -104,6 +105,7 @@ def load_chars(filepath): if not line: break ret += line[0] + print(len(ret)) return ret diff --git a/main.py b/main.py index fc01353..4b39171 100644 --- a/main.py +++ b/main.py @@ -28,7 +28,8 @@ flags = parse_args() cfg = load_config(flags.config_file) -fonts = font_utils.get_font_paths_from_list(flags.fonts_list) +#fonts = font_utils.get_font_paths_from_list(flags.fonts_list) +fonts = font_utils.get_font_paths(flags.fonts_dir) bgs = utils.load_bgs(flags.bg_dir) corpus = corpus_factory(flags.corpus_mode, flags.chars_file, flags.corpus_dir, flags.length) @@ -129,7 +130,6 @@ def get_num_processes(flags): processes = max(os.cpu_count(), 2) return processes - if __name__ == "__main__": # It seems there are some problems when using opencv in multiprocessing fork way # https://github.com/opencv/opencv/issues/5150#issuecomment-161371095 @@ -150,7 +150,7 @@ def get_num_processes(flags): timer = Timer(Timer.SECOND) timer.start() - with mp.Pool(processes=get_num_processes(flags)) as pool: + with mp.Pool(processes=4) as pool: if not flags.viz: pool.apply_async(start_listen, (q, tmp_label_path)) diff --git a/module1.py b/module1.py new file mode 100644 index 0000000..50a51bf --- /dev/null +++ b/module1.py @@ -0,0 +1,61 @@ +import sys +sys.path.append(r'C:\jianweidata\ocr') + + +""" +缩小 再扩大 +""" +import glob +import cv2 +import os +import numpy as np + +interpolation = {'LINEAR':cv2.INTER_LINEAR , 'NEAREST':cv2.INTER_NEAREST , 'AREA':cv2.INTER_AREA } + +def pydown(img,interpolation,scale): + img = cv2.resize(img,None,fx = scale ,fy = scale, interpolation = interpolation) + img = cv2.resize(img,(256,32),interpolation = interpolation) + return img + +def apply_gauss_blur(img, ks=[3,5]): + if ks is None: + ks = [7, 9, 11, 13] + ksize = np.random.choice(ks) + + sigmas = [0, 1, 2, 3, 4, 5, 6, 7] + sigma = 0 + if ksize <= 3: + sigma = np.random.choice(sigmas) + img = cv2.GaussianBlur(img, (ksize, ksize), sigma) + return img + + +srcpath = r'C:\jianweidata\ocr\test\src' +dstpath = r'C:\jianweidata\ocr\test\dst' + +imgfiles = glob.glob(os.path.join(srcpath,'*.jpg')) +#for file in imgfiles: +# basename = os.path.basename(file).split('.')[0] +# img = cv2.imread(file) +# for scale in [0.8,0.9,1.1,1.25,1.35]: +# cimg = np.copy(img) +# cimg = pydown(cimg,cv2.INTER_NEAREST,scale) +# cv2.imwrite(os.path.join(dstpath,basename)+'_'+'NEAREST'+str(scale)+'.jpg',cimg) + + +#for file in imgfiles: +# basename = os.path.basename(file).split('.')[0] +# img = cv2.imread(file) +# for sigma in np.arange(0.1,1.01,0.1): +# cimg = np.copy(img) +# cimg = cv2.GaussianBlur(cimg, (0,0),sigma) +# cv2.imwrite(os.path.join(dstpath,basename)+'_'+str(int(sigma*10))+'.jpg',cimg) + + +for file in imgfiles: + basename = os.path.basename(file).split('.')[0] + img = cv2.imread(file) + for sigma in np.arange(1,5): + cimg = np.copy(img) + cimg = cv2.blur(cimg, (sigma,sigma)) + cv2.imwrite(os.path.join(dstpath,basename)+'_'+str(int(sigma))+'.jpg',cimg) \ No newline at end of file diff --git a/module2.py b/module2.py new file mode 100644 index 0000000..e1b862c --- /dev/null +++ b/module2.py @@ -0,0 +1,51 @@ + + + +# 增加指纹的 +import os +import random + +import cv2 +import math +import numpy +import numpy as np +from PIL import ImageFont, Image, ImageDraw +from numpy import asarray, amax +from scipy.ndimage import filters, measurements, interpolation +from numpy.random import randn +import matplotlib.pyplot as plt + + + +# 颜色减淡操作 +def dodge(gray, factor=1.0): + return np.minimum(gray+100*factor, 255) +def reverse(gray): + return 255 - gray + +def rotat(img): + img = reverse(img) + rows, cols = numpy.shape(img) + angle = random.randint(-30, 30) + m = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1) + img = cv2.warpAffine(img, m, (cols, rows)) + img = reverse(img) + return img + + +def get_smudginess(filename, size=(60, 120)): + + smu = cv2.imread(filename, 0) + smu = cv2.resize(smu, size,interpolation = cv2.INTER_NEAREST) + smu = asarray(smu, 'f') + smu = dodge(smu, random.uniform(0.4, 0.9)) + smu = rotat(smu) + return smu + + +import glob +dir = r'C:\jianweidata\ocr\text_renderer\textrenderer\tmp\zhiwen' +files = glob.glob(os.path.join(dir,'*.png')) +for idx,file in enumerate(files): + smu = get_smudginess(file) + cv2.imwrite(os.path.join(dir,str(idx)+'.jpg'),smu) \ No newline at end of file diff --git a/parse_args.py b/parse_args.py index e81c687..e28b2c0 100644 --- a/parse_args.py +++ b/parse_args.py @@ -6,7 +6,7 @@ def parse_args(): parser = argparse.ArgumentParser() - parser.add_argument('--num_img', type=int, default=20, help="Number of images to generate") + parser.add_argument('--num_img', type=int, default=1000, help="Number of images to generate") parser.add_argument('--length', type=int, default=10, help='Chars(chn) or words(eng) in a image. For eng corpus mode, default length is 3') @@ -28,6 +28,9 @@ def parse_args(): parser.add_argument('--fonts_list', type=str, default='./data/fonts_list/chn.txt', help='Fonts file path to use') + parser.add_argument('--fonts_dir', type=str, default='./data/fonts/chn', + help='Fonts dir path to use') + parser.add_argument('--bg_dir', type=str, default='./data/bg', help="Some text images(according to your config in yaml file) will" "use pictures in this folder as background") @@ -36,11 +39,12 @@ def parse_args(): help='When corpus_mode is chn or eng, text on image will randomly selected from corpus.' 'Recursively find all txt file in corpus_dir') - parser.add_argument('--corpus_mode', type=str, default='chn', choices=['random', 'chn', 'eng', 'list'], + parser.add_argument('--corpus_mode', type=str, default='npychn', choices=['random', 'chn', 'eng', 'list','npychn'], help='Different corpus type have different load/get_sample method' 'random: random pick chars from chars file' 'chn: pick continuous chars from corpus' - 'eng: pick continuous words from corpus, space is included in label') + 'eng: pick continuous words from corpus, space is included in label' + 'npychn:pick continuous chars form npy file') parser.add_argument('--output_dir', type=str, default='./output', help='Images save dir') @@ -50,7 +54,7 @@ def parse_args(): parser.add_argument('--viz', action='store_true', default=False) - parser.add_argument('--strict', action='store_true', default=False, + parser.add_argument('--strict', action='store_true', default=True, help="check font supported chars when generating images") parser.add_argument('--gpu', action='store_true', default=False, help="use CUDA to generate image") diff --git a/perspective.ipynb b/perspective.ipynb new file mode 100644 index 0000000..e9c2330 --- /dev/null +++ b/perspective.ipynb @@ -0,0 +1,328 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from functools import reduce\n", + "import numpy as np\n", + "import cv2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Construct 3D rotation matrix when rotations around x,y,z axes are specified \n", + "def construct_RotationMatrixHomogenous(rotation_angles):\n", + " assert(type(rotation_angles)==list and len(rotation_angles)==3)\n", + " RH = np.eye(4,4)\n", + " cv2.Rodrigues(np.array(rotation_angles), RH[0:3, 0:3])\n", + " return RH" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# https://en.wikipedia.org/wiki/Rotation_matrix\n", + "def getRotationMatrixManual(rotation_angles):\n", + " \n", + " rotation_angles = list(map(lambda x : np.deg2rad(x), rotation_angles))\n", + " \n", + " phi = rotation_angles[0] # around x\n", + " gamma = rotation_angles[1] # around y\n", + " theta = rotation_angles[2] # around z\n", + " \n", + " # X rotation\n", + " Rphi = np.eye(4,4)\n", + " sp = np.sin(phi)\n", + " cp = np.cos(phi)\n", + " Rphi[1,1] = cp\n", + " Rphi[2,2] = Rphi[1,1]\n", + " Rphi[1,2] = -sp\n", + " Rphi[2,1] = sp\n", + " \n", + " # Y rotation\n", + " Rgamma = np.eye(4,4)\n", + " sg = np.sin(gamma)\n", + " cg = np.cos(gamma)\n", + " Rgamma[0,0] = cg\n", + " Rgamma[2,2] = Rgamma[0,0]\n", + " Rgamma[0,2] = sg\n", + " Rgamma[2,0] = -sg\n", + " \n", + " # Z rotation (in-image-plane)\n", + " Rtheta = np.eye(4,4)\n", + " st = np.sin(theta)\n", + " ct = np.cos(theta)\n", + " Rtheta[0,0] = ct\n", + " Rtheta[1,1] = Rtheta[0,0]\n", + " Rtheta[0,1] = -st\n", + " Rtheta[1,0] = st\n", + " \n", + " R = reduce(lambda x,y : np.matmul(x,y), [Rphi, Rgamma, Rtheta]) \n", + " \n", + " return R" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def getPoints_for_PerspectiveTranformEstimation(ptsIn, ptsOut, W, H, sidelength):\n", + " \n", + " ptsIn2D = ptsIn[0,:]\n", + " ptsOut2D = ptsOut[0,:]\n", + " ptsOut2Dlist = []\n", + " ptsIn2Dlist = []\n", + " \n", + " for i in range(0,4):\n", + " ptsOut2Dlist.append([ptsOut2D[i,0], ptsOut2D[i,1]])\n", + " ptsIn2Dlist.append([ptsIn2D[i,0], ptsIn2D[i,1]])\n", + " \n", + " pin = np.array(ptsIn2Dlist) + [W/2.,H/2.]\n", + " pout = (np.array(ptsOut2Dlist) + [1.,1.]) * (0.5*sidelength)\n", + " pin = pin.astype(np.float32)\n", + " pout = pout.astype(np.float32)\n", + " \n", + " return pin, pout" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def warpMatrix(W, H, theta, phi, gamma, scale, fV):\n", + " \n", + " # M is to be estimated\n", + " M = np.eye(4, 4)\n", + " \n", + " fVhalf = np.deg2rad(fV/2.)\n", + " d = np.sqrt(W*W+H*H)\n", + " sideLength = scale*d/np.cos(fVhalf)\n", + " h = d/(2.0*np.sin(fVhalf))\n", + " n = h-(d/2.0);\n", + " f = h+(d/2.0);\n", + " \n", + " # Translation along Z-axis by -h\n", + " T = np.eye(4,4)\n", + " T[2,3] = -h\n", + " \n", + " # Rotation matrices around x,y,z\n", + " R = getRotationMatrixManual([phi, gamma, theta])\n", + " \n", + " \n", + " # Projection Matrix \n", + " P = np.eye(4,4)\n", + " P[0,0] = 1.0/np.tan(fVhalf)\n", + " P[1,1] = P[0,0]\n", + " P[2,2] = -(f+n)/(f-n)\n", + " P[2,3] = -(2.0*f*n)/(f-n)\n", + " P[3,2] = -1.0\n", + " \n", + " # pythonic matrix multiplication\n", + " F = reduce(lambda x,y : np.matmul(x,y), [P, T, R]) \n", + " \n", + " # shape should be 1,4,3 for ptsIn and ptsOut since perspectiveTransform() expects data in this way. \n", + " # In C++, this can be achieved by Mat ptsIn(1,4,CV_64FC3);\n", + " ptsIn = np.array([[\n", + " [-W/2., H/2., 0.],[ W/2., H/2., 0.],[ W/2.,-H/2., 0.],[-W/2.,-H/2., 0.]\n", + " ]])\n", + " ptsOut = np.array(np.zeros((ptsIn.shape), dtype=ptsIn.dtype))\n", + " ptsOut = cv2.perspectiveTransform(ptsIn, F)\n", + " \n", + " ptsInPt2f, ptsOutPt2f = getPoints_for_PerspectiveTranformEstimation(ptsIn, ptsOut, W, H, sideLength)\n", + " \n", + " # check float32 otherwise OpenCV throws an error\n", + " assert(ptsInPt2f.dtype == np.float32)\n", + " assert(ptsOutPt2f.dtype == np.float32)\n", + " M33 = cv2.getPerspectiveTransform(ptsInPt2f,ptsOutPt2f)\n", + "\n", + " return M33, sideLength" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def warpImage(src,theta, phi,gamma,scale,fovy,corners=None):\n", + " H,W,Nc = src.shape\n", + " M,sl = warpMatrix(W,H, theta,phi,gamma, scale,fovy); #Compute warp matrix\n", + " sl = int(sl)\n", + " print('Output image dimension = {}'.format(sl))\n", + " dst = cv2.warpPerspective(src,M, (sl,sl)); #Do actual image warp\n", + " return dst,M" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def transform_pnts( pnts, M33):\n", + " \"\"\"\n", + " :param pnts: 2D pnts, left-top, right-top, right-bottom, left-bottom\n", + " :param M33: output from transform_image()\n", + " :return: 2D pnts apply perspective transform\n", + " \"\"\"\n", + " pnts = np.asarray(pnts, dtype=np.float32)\n", + " pnts = np.array([pnts])\n", + " dst_pnts = cv2.perspectiveTransform(pnts, M33)[0]\n", + "\n", + " return dst_pnts" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf8AAABnCAYAAAAOs0skAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJztvWuMZMd1JvhFZlZVVmbWu6sfJJvNJrubalJmU+JDpDiU\nSIqWsSZsazwrabS2BWt/GANqAc9gMR4YkC1pZXgwHnihnbFp+Mesx4ZkAzM7ksfrpSWPaIqWzSZF\nkRTF5qtJNputZr/rlVWV9crMuz+yvqjvnop7M7O6qptU3wMkqjLvK+LEiXO+84i4LooiZJRRRhll\nlFFGVw7lLncDMsooo4wyyiijS0uZ8c8oo4wyyiijK4wy459RRhlllFFGVxhlxj+jjDLKKKOMrjDK\njH9GGWWUUUYZXWGUGf+MMsooo4wyusIoM/4ZZZRRRhlldIVRZvwzyiijjDLK6AqjzPhnlFFGGWWU\n0RVGmfHPKKOMMsoooyuMtsz4O+c+75x7yzm34Jx7yjl3x1Y9K6OMMsooo4wy6py2xPg75z4N4PcB\nfBHABwC8AODbzrltW/G8jDLKKKOMMsqoc3Jb8WIf59xTAJ6OoujXV787AD8G8B+iKPq9TX9gRhll\nlFFGGWXUMRU2+4bOuR4AtwH4Xf4WRVHknPsOgLsD548B+BkAxwEsbnZ7Msooo4wyyugnmIoArgPw\n7SiKJjq9aNONP4BtAPIAzprfzwK4MXD+zwD4+ha0I6OMMsooo4yuFPolAH/e6clbYfy7peMAUCqV\ncMMNN8QO3HHHHbjjjvQ6wVZGoUVMYURRhFA6Q891zmF5eRnVahWFQgGVSgWFQosdzWYTzWYTuVzO\nX6P3c86h0WgAAPL5PHK5HKIoQrPZjJ2by+WQy+X8/TqlpFSMcw7OOTSbTX8O22f7xmfyGqU//uM/\nxq/92q+tu458c875/5UHeg6Jz8jlcrG26zlpY2H70WkaSvkd6ke7a0O/ad/YJx0721YAwXHV+3zt\na1/Dr/zKr7R9drt2cly67Zdtb+h3Kyccd3tuPp9HoVBAo9HAyspKaluS2sd+5PN5/2weO3z4MF54\n4QXce++9eP/739/1/b/2ta/hl3/5lxOPJ8k6j+ncsjzjnOiW0q5JG0+rbzo9JySjen5oXrebg/Ze\nIT5zPpKP+izOJd6n0WggiiIUCgXk8/l19+cYhPR5Wr/s8W51it5vM6idDbLnkXfa7q9//ev4zGc+\n44+/9NJLeOGFF2L3W1hYwIkTJ4BVW9opbYXxvwCgAWCH+X0HgDOB8xcB4IYbbsBXv/rVi364FRql\nJMGwEyJk/O39eA2FN+mZNCCdCNRGhDRkoAHEjL/te7lcxg033LDuWMhg28kcej6VeQgAdWuwQtfp\nb8rnizH+SePF+w4NDWHbtm2YmprC1NRU7HlWdtKoXC7j+uuvDz4zia+2PaF2dmo4bHv1N/1dx7Ad\niFC5I/BNAzV23BQs6hhOTk6i0WjgwIEDuO6669r201KpVMLevXvXtSEEgDsBXBdrnHlet6Cs3TOS\njIrlsX6sId2I/JBKpRL27NkT1KFWrux4A2vGPSQ/SePUifHvRlbSKKQHLaUZ8TTq5DrlV6lUis2F\n66+/Hg899FAMaL311lv48pe/DHSZNt904x9F0Ypz7lkAHwPwV6uNdqvf/8MmPyv1eBLysyiVvzUa\nDf+berL8XyeRXkegEGpfvV7fVKFsNBoeMdfr9SAgSVPE+r9VFkrWu1WPyPLB8sJe303/0o7ZPmzU\nG0t6rgKYkZERHDx4EG+88Qaq1aqXjaR2hhQukA4UNsvD6JRCSpJtzefzsf5bXjcaDeRyOfT29qLR\naGB5eRm5XA75fD54fpIBsfzg3Mnlcjh06BBuuukmFAqFTVPmaVEP66GmAQXrDHTato16n7x2ow6B\nOgWhPnXqkITur89JOoc6NKR3eKzZbGJ5eRkrKyteH1MOrQ5WCvE+NGYhHfVuoSRdQP2pURHlI/lU\nKBQ2PIakrQr7/58A/vMqCPg+gH8FoATgP2/R82JkUXI7YaHQ6flWMbSj0HXWMLa7vpN+sZ1MO4Qm\nSJKCspMv6dkhlK0AiOcob63R34rJpvzdLMOvY8Q+5PN5zM7O4s0338Tk5GTqc0JRnxCQsnLQDui0\nozRPKM3g2eNW6SQ9n4aEIVuVwyRQoX+TZIz3jaIIvb296O3tvWillgRM+Vfvb+dqKIrGdgJryre3\ntxe7du1CPp/HmTNnUKvV1vVdKSSvaXM2BHZtn0LP0L/KWz3HAvhQm5J0B4nG2+q8pDbquTx/ZWUF\ni4uLqNVqHgD09PSgv78fhUIh9gm1SdsVavdmgseNAvd2fCRZB1N52i61uFHaimr/L6K1vh8A/nT1\n7wKAj0RRdH6Tn5V6PEkwrMKnB0NGq4BqztcKdZoC5u+dhP27EaRcLodGoxFMS9g2qkIOTV6SVYZp\nz9Y2h8BREo/SPMF2fLT3torrYicBkTUBVU9PD6anp3H+/PmgAk1qq05Wy4cQaOm033rOxfQ1yXBo\njjVJgSuPCEKbzWYs92+Npyo0ggQrmxa8brWXxj7U6/VYv+lpaT/IGzvvaPyvvfZaFItFVKvVmPHX\nZ4UAdCcAUO9BSgLWnehBC7ZCfO7EQbE6lLKgzogFA5wTrI9yznmvf35+HtVqFQsLC1hZWUGxWMTg\n4CD6+vrQ19eHYrGIQqEQrFEI8bGbOdUNdcKrkN7r9N4hoEq7Y+2PBawb7etWef5H0Arzs1X1KIom\n0y5oV9jXjpKQWcgrUaJA2pAeBZQT3hah8Dx9nlVujUbDh0uTcqOdKgA72KpIbLv1WMhD/+hHPxoT\nKHt/5Z0VSlsQ1YmnkOZhdNJvjgP5SNqsCW5rB/g9ZJiSxo8GjsVwNHa33nor5ubmYuHMEDCw99Lv\n9v/NJCphNWy5XA59fX3o6elZ1xbtw8LCAmq1Gur1OoAWaNJPoVDw59J7U1lTr8aCgY3Q3Xe3VhKH\njCSf12g0UKvVUKvVMD8/78epVCqhv78f/f39QYOjMpHL5VCv13H8+HHk83nUarVEWdzoGIbulyQ3\noX4CWCePOr6URyuTaW3kOXfffXdMR3D88/k8du/ejaGhIZw4cQJTU1P+Oq2NYhsKhYKXlaWlJTQa\nDSwsLKDZbKJUKnkHh+dRhybNnc2cI0l6Po03/NuOh0nP0+uoZ++8886Y3ttMcLNVxr/erZd/scY/\njelJCMl6KkqhaIH1jNo9m6Chp6cnho43Snx+OzChCjUEfmj8bZ+0P1TYavD1fyuMaYDjYvqrecE0\nxaXXdOMlhya5KnrLnyQgwO8rKytYWFjA4uIi6vU69u3bh2q16j0ZykJau+091Vjatl4MEejU63Us\nLi5iaWnJK1sqbP5Pj1/ny/LyMmZnZ7G0tIRms4lisegNKK+3fQtV01svcaP9+/CHPxzrm+0r77+0\ntIRqtYrJyUkfARgcHMTg4KCXe40C6Biw//V6HadOnUqU9dCYpZGeb8F8p9fyf37q9TqWl5exuLiI\nlZUVb6Sdc96rJkjTiIC9t+WhNf4aPR0bG8P27dtx7ty5WLtCxqtQKKC3t9c/n2OzvLzsU0CUPYLH\npDbpOG02UE6am5ZCYCxEVj+pXiXRVtx5551B/azXb5S2yvjvd869g1b14WEAvxlF0Y+36FltEXGS\nQDNsSYTMcKAKKIuc1Njoc+ySOjWGilTpYWy0f+2qqqnEV1ZW/ETnpCkUCn6ih8JyvIf2oVwu46qr\nrsLCwgJOnz7tCxdtO0JG31KoXkCvSepzFEV+Oebs7Kx/Pg1Mf39/0DvtlreWl2nemgUIKntqFOfn\n51Gr1fwYlMtlVCoVlMtln9MMVdfr/Szg6ma5aIhCz+F40pBTDijT/f39XkGHiN4alXaj0YjNFRYH\nEsARXJRKJT+vkoDNxSi3pL5q22gg6/W6b//y8jLq9Tr6+vpi46OFidQVvHeofsaCmxCF5oMes6Fu\nC8RDH+oj8n1paQkLCwue/7w35w8jHuxvp7zX/pFPjUYDb7/9Ns6fP4/Z2VkPoADEiqm1toaev45J\ns9nEnj17cPfdd+P48eM4d+6cfx51tKYZOK6huRNq70YpzUns5NyQrmF/+FFdHkWRB+AaUbP32qhe\n2Arj/xSAXwXwGoBdAL4E4O+dc++Pomh+Mx9kJ1oSw1W5cHLQ8C8uLvqJsbS0hKWlJS84PT09KBaL\nqFQqKBaLsTX92gaLDOfm5jA5OYlKpYKxsbGLRqNUBEmpBwrR0tKSD2lSIXOC01u36Y2ktuXzefT3\n9weNHydwyMu2nrH9G+pb6Bnkc71ex/z8PCYmJnzecHBw0I8PvQZ99kaonSLmbyFDZT9sN5Wues7q\n7ei9LC/TlMdmeTYKZJaXl30IP4oir3BoLMljjQBYueOxYrHo5ZXGp1arYWlpCYVCAf39/V5hkw8X\nC2yUkpQ+223D+VS8BM2hlUD8S8OqXrQaOf5mQWE7kKuGXflro3wEHqrH9KNODI0/ozorKyu+HQoG\nOA7WuelEzlQfNJtNTExMYHJyMsZ7e59isYi+vr4YONZ6gChqpWHGx8fX1d0QqFFPO+dihjG0b8Bm\nkZ2XVld0IsN6DceJDhsdUYIbAk7aIZ03QPsUQzvaiqV+35avR5xz3wfwNoBPAfiTpOseeeQRVCqV\n2G8PPPAAHnjggXbPW1epHDJoOjk0zEm0r//zfpVKxYftFXGFPH4V9DfeeAOPPvoobrnlFjz00ENt\nONaetOhQ+6kbpajBmZmZwezsLObm5lCpVDA4OOiNDieI5Z9NFczNzeGtt96KRUOUp1RIVlGqogqN\nhXo0acpRC4PYJ4b+m82m9x77+vq8odkIhaIQtm3WSCvg03NpMPv7+71MEWQSaHIS69iFxlfbp0Yr\n1PZOKRSl0DlB+W80GrGcP+cAANTrda+M2G4qMPKAedt8Po/FxUWfBmFBV09Pj1duykf7fTPJymIo\nfRQaf22n9temwngd78eIWwhEJLWPSl+BohYja6RCo5VsoxYyqmGhoefYajv6+vpiID+trdbpIR+T\nAIPOE/XMr7nmGuzcuRNvvvkmFhYWPL8UmP34xz/GE088gUaj4SOWnEu1Wg2zs7N+hQDnFKMY6hBs\nFoUMvAVtSd/1Nys36vUrANXx6Onp8Xbpueeew/PPPx+bx6Fi005oy3f4i6Joxjl3FMC+tPMefvhh\nHDhwoOv7K3JW1KuTVicNGbywsIBqtYoLFy7ECkxWVla8MBaLxaCXZ59vv9sJvxmKTJUijR4RMI8z\n1Mdiprm5OS88RP71ej0YTrTtrNfrmJmZSfVYQpED/Y3jQIUEwId91aNsx0N6pkT7xWLRVweHKusv\nlixvko6R7ETt7+/3/XbOYXFx0Stwei4AUuVVxzvk2YSiEJ30S/lE5UPjoEaFYIXriRWs9PX1IYoi\nL1Mcn6mpKV8sRwNGo8NogkYUQvKzWfOF/eU9VXkr2CJPKJc0HDSS7F/I8NooAL203t5eFItFAPAA\ngM9KGi+OhXro2ib2wxp9jQJoOkKNLsdQ26zXhvilv7UDLfZ8e9wCTv2fbaThp/MwOzuLkydPYnBw\nEOVy2Y8Fo0ysNanX6+jv749FMTZLH4ScGM3NKyDkh7/pElg7z0P31esoT5aHy8vLOHToEB588EGM\nj49jdnYWtVoNx48fx2//9m933b8tN/7OuQpahv/PtuDecM55IaaBoBev+XwNrfDzzjvv4Nlnn0V/\nfz9uuukm9Pb2IopaIadisegnsRalAOsVv/Ua9u3bh8985jOoVCodI/9O+sn/x8fHsX37dvz4xz/G\n+fPn14Uw2e8k7856rRS+UNGPGiL16i0C1pyoAhGOBxUaIxC9vb3o6+uLhRtDIICKQXPI6s1o7nWj\nvNV+2D6l8UYNCP9qWNu51pKwWq3mQQpD4Vy9YOs01HOj4qdXQ9oMr4bKlOusGaVQJcx8/vLysu9f\nLpfzEYL5+Xl/bGVlBUePHkVPTw8GBwdj6TEFrCw0I0iwY7HZHr/2NxRm5bhwrjO9Ry9ZK+UVzHIu\nKbB1znkvlDKj3mw7I0qnZGFhIeb90/MF4htuWRkF4jlwXkOjyagMgFjUI8kZICnY5DmqO9Qg2jFU\nHcRzTp06hampKczPz/tzLJ8IfDT9R13CaBJTmxwDBZahSFm3FAJMIf7reaGPygtljmOlKRcdNzum\nKr87duzArbfeipdffhnHjx/fcNRzK9b5/3sA/y9aof6rAXwZwAqAv+j0HipIab9Z75ACUqvVfC5f\nQ5m61jiXy6FSqWDHjh3esHCw8vk8isUiSqVSrCBGq9/TjHqlUokp66Q+hlBxyDDrcXpT8/Pz3rOk\nYNAoMkSUz+e9kaUHOjc3B6DlkWjFr+aRLM9t+0Leme0Hjdzc3Bzm5ua8QmMBpS2AsxEAG8YE1jwr\n9YK7meAh5Zvm2euktuMQQv+nTp3CzMwMrrrqKgwMDCCKIj8GqjAUnNmIFD/Ly8teOSuYZQGeLUBN\n8sBC/aOsLy8vx0LyNIIMBds6F15LY7KwsODTAJVKBePj4/6ZBAU9PT3o6+tDuVxGqVSKFS9ZMJ3k\n9ad5lqFzrYzqGC4uLvr+8jdNYVFObThWlb46FCobQHyHNvZRwa3tS9K8IUBkJEFTj3qtrqjg7zt3\n7sTw8DBmZmY8QGN+fWJiAidPnsRVV12F0dFR9PX1xWpQbH9CfA9598AaKC0UChgbG4NzDhcuXPCb\n+JAIRCxApF7mvbiXBOW0Vqv5PRWoS3SFiTppnYDIpLmvY6G1YDZtYs/XZ2puXuWL80Jz+XQwdXyt\nHKsuX1lZwdTUVCzquxHq2vg75+4F8K/Rem3vLgCfiKLor+SUawD8NYABABFab/P7dNTBqwa1qC1k\nFK1ysApYi1yo1Cg0JArLwMAAxsbGsHv3bszNzaFarXoPtbe3F6VSCeVy2SstGlA+h22zk0UFo1Ol\npjl4nmcLwnSiTExMYGJiwgsFvUYKKcPjDEGXy2XkcjnUajWcPXsWKysr6Ovrw/DwMEZHR1GpVLyi\nChUWpk0kAiGLtKOoFRaenZ3F5OQkZmdnsbi46L0ZPhsAent713kfjByooiZC5pio92gnQDsvy363\n3r2ifQ336jhR7qggvve97+Ho0aN48MEHcfDgwXXblvK5Gp61hoWGc35+3vNUC+YImNQwE0SEvK8k\nRc7x0WWJuVwOpVIJg4ODsQpwrb9oNBqoVquYmZnxz+zt7cX27dsxPDwcSwOwaLRUKmFgYMDX9KiS\nD7UxybgkAWU7jhqZItjiGFInaG0PI0r0JPldPX8aG1Xklp9aga57HdjlnUmAjHxmXnt5edmDdM5h\n9RLVwOh9brrpJuzbtw8vvfQSTpw4gcXFRURRhFqthomJCTz//PPo7e3FwYMHvW7jPdO8SGvkLQ/Y\nt97eXuzduxc9PT2YnZ3FxMSEj37xeG9vrwf9KhNq/AF4UMwVP9Vq1QMJ6oBKpYJKpeIjSzbn361x\nVPlaWVnx9VMEHQT1ulqBwEOjKRx7BcosAO7t7UWlUsHAwAAGBgY82OYcUx5b3TQxMYGZmZmYPtoI\nbcTzLwP4IYD/BOAbgeM/ROs1vT+H1luGfgfAf3LOHYyiaDntxtbwA+moX8NqtoiNk5HoSAU1n8/H\nQpAAfKWz5swYhouiCAsLC+uQHQfEhmlsu+33UEWqhohCBTwUOC0CYlW1ruelUqN3PTw8jOHhYTjn\nfHHN4uIi5ufn10UGVNGrYKWNQQic8V5UWuoh0YOlEibg0r7R8C8sLGB+ft57QdYwcz3w1VdfjVqt\nti4FYgGMBWTaB2swFUiyjarcNQfOcdq+fTuazVYB0uLiYowvNmLED9E+eUODqoVfVDhUNH19fYl5\na97LKmZVhjbcz3vTaNEAqaJmf6mYqPho4Ht7ewG0qsjn5uY8QOY8o4cZmhtKSWBFx5VjbyN6SfdQ\nfrLfWodAkMz9CeyYqQJWEKftY9v0fjREVg5C3i7vPTIygj179mBychIvv/yyT//QIVE+kixIPXny\nJFZWVjAxMbEuLTEyMoL9+/dj+/bt3tu0jkbaWLCfof7z/Hq97qv0yWfynoCmp6cH9Xodvb29wdod\nDZfzf+fW9iewKSQ6AhoN7NSBSSIacBpl6iY9xr7YFQtWn4QALMdVIxeU7xBflf+ctxdDXRv/KIq+\nBeBbq40LcfTXAXwliqK/Xj3ns2h5/58A8F/S7k1lF8qtK/GxajAAxMKJVJr0QNQ4aWEOX1CihhyA\nr5x3rlVNSQPPAeMktKFnCwIM7/wzdJ23ru/UyIWGZGnQ6UmVSiXffw3D0vgXi0WMjIxgdHQUQ0ND\nXqD6+/u98a/VaigWixgYGPAGO5/PxwxQiO+2P9pvNf70VjREPT8/71GwhrOp0DjBmL6Zn5/H4uKi\nNzqq/BcWFtDX14frr78e586dw4ULF2LtDIUw7YTSyageHNtHPmmxJEETgQjpxhtvxIEDB/y1GkpV\n75G8IEDSF9koaNAwM9AKl/b19cUKh/h88lhTFeSnGi0qDo4Dw/30MFkcRqVdLpdj84JKmgqY8sgi\nQAIyAiaeZ1eZpHktFpjp/CJv6Y3RoKhXagEW+U1AR/njfC6VSutSdfYeaqTTIhXKb7t8TsfLRjE4\nfiMjI/jwhz+M06dP45133sHs7Cz6+vp89KRcLqOvry9m8Dn/GTF48cUX8corr3hvmADGOYddu3Zh\nbGwMQ0ND3njZ1EHSeLCtHDsLbHjOysoKjh075h0ojTRVq1Wv/5rNpl+GrLpDo7iaO1fwy+iXpsC0\nvRYchygEeJRoJ8hH3blT9Zqtmwjl+9WgK5hkf0LRCjp8ynNttwK7jdCm5vydc3sB7ATwGH+Loqjq\nnHsawN1oY/xX7xH7Xz01Csfrr7+Op59+Gvv378ftt98eKwbTXHepVAoaRvXWODD0wnhtoVBAvV73\nS0qo/HUiDgwMeOVm255mdBiGAxALLepyK4Z6qeAYqi+VShgbG/OIs9FY2650cXHRG/6BgQGMjIz4\nkBKfMTIy4ttDZD43NxdDrxRMhudZWUrjqkos5G3SmGjoi4aCRoeImktzVBlSUXDfb3oIvA+BwtLS\nEt555x089dRTHqzZ+gWVoSTDb8OZNLi69zh5YkPhyktOWM2RU9b4nUaBiozL/rSojApdDcno6Chu\nvvlmFItFnD59OtY/Pke9p5AioXzNz89jfn7eP4Mhx3K57M+ngdQiLPKJRYgcCwI28kyXmFn5121a\nOyU7TqoLtI/8rgBLQ8laJMr5Xi6XMTQ0hEql4j1/fa7ew3p0SfPd3kPHwB5X5V0oFFCr1fDcc89h\nYmLC77hojQTbZJ2VZrPpgTKJssfomfIntL5egaPtL0kNrfYzFFWjs1QsFmPLX9k2rVuyskuHp6en\nJxY14T0pdxoZCI1PmtcfOqb6QPWOrf3RcdAxZmSNH/ab803rFAj8NeKswJ+/aVScz7zYPQ02u+Bv\nJ9by/EpnV48lkk5eUijs4ZzDyZMn8bd/+7dYWFjAwYMH1wkMBaRYLHpviUJnURkBAZUBB6enp8d7\nSTMzMz5EyhdPWC9Qla32SfsBwHu1VklaUELvnEU7CwsLXkH39fX5PD29aXrIAHwebHh42HtlQCsE\nOzAwsG71w9zcXCw3zZQC0fWuXbuQy+X8ssiQ8Wd/GR5jWJjhOXqIjGjw2lKpFCv+AuD7zyU9zjl/\nD13Hu7KygtOnT+PUqVM+V00wpso6RCHFrUZODWW1WvV9UUBDeWN/qYgYoQjxitdryJJ94bmUC80b\n79q1C7feeiucc/5FKGyzGv+k3DJrEzTqU6/Xfdie+Uc+XyMKNhJnw51UeLy/LZDSlA3Dm2lRvTSP\nTI0x26HAR9fYq9GmEWR7OAaUG+aPVSb0WQooQ7Jlw/qqZ0LAINRHpuSOHDmCmZkZLC0t+blBfltD\nyWgPZY58p6fM52nqTee58igpVWZJgS7vp3+1fRopJQBQD5ptt+NPntKJs1EH9tfWulhPvJ08hUh5\npPcIgTqSne+sIaHzyHbm8/lYpImOjMow+6ljQT5ptMWC/G5py5f6dUp/9Ed/5AuC2DHd5EdRzg03\n3IBPfepTGBsbi6331Imp4VudxKoAqHSpDOiJseCJ0QJWyxJVcwCTqj+TvH4aXRq12dlZPxloLKlo\naLA5mekF6IRlv2dnZ70x6O/vx9DQEAYGBrxipCElCqUxBeALWqrVquczhdM5h8nJSbz99tv+5SXs\nC8cjFD4H1m9MVCgUfNhSBZuTlQa3Xq/Hwv31et2vvBgdHcXAwAAAxOocOE5LS0u+SJMhwZACs0pb\nlZ+Ghjk+QMtjpaEol8ve+KsS0126VAlywqpCsWPJSFOhUPD3VxBVKBTw5ptvep5zbIG1UHdSuoxK\nicukaAgIXG2xEu+thUzWaOn9NFqhhl8BMq/VfuvYJIUvVQFS7ljsyMgeFSv5ayvjOX8XFhZiXq/W\nImhKKbTKRNts98O3/LZtDsmdnqu8TeKPLQLVsdJ7hGoUFByqkVaes78qR0n6LOThq1zonNIxU4+f\nhp1pRl1SyWt0RY/OMbvfAtuh46rvBtD2dUohEBSKJFhesJ26HwH7RAeIQLtcLnseWO/eAo18Po/t\n27fjyJEj+OY3v+n1PYB3zSY/ZwA4ADsQ9/53AHg+7cLPf/7z2L9/v2eCCi0QD61eddVVGBkZwdzc\nnDdcNE4cfA3/hvJvNn/HkK5WktMbo3AmbcbSCfH+AFCtVv2yO4bjiADZdrZ/fn7e/699c855pabG\nn1EBFo9w6ZI+S1cr0Cti3pTPYV+5QiDUHyAc3bB8CSFyFXb1drnHPNsLwFfGsniR0ROuIOB1uoc5\nkbWNKliyBsiuGKEM0PizspgGXZfo2dBdGm/sB0DM0GtlPPtw5syZGC9VDtXDsQZFvRHNWeocYJ5f\nf9eiRmANvOq9KE+af1bDqeOrxatsG42u5ZPKlnpE7LtGXrTPmlahwaODoHNfoypsgy4N1jX8ChgU\nNISWq4UoyRmwY2c/OscYVeH1GlmzdR68VqMFBEhJxl+/J8lryOgl9VmPEWTyHvocOmMqI6obNDqr\ndUIcH00Bq4l0AAAgAElEQVRx6LjzuUnRi07IGnYLAkJznP3RdDPtEtNMamNCOf3Q85xr7ZXxuc99\nDh/5yEfw0ksv+XNOnDiBL33pS133b1ONfxRFbznnzqD1Ot8frTZuEMCHAPxh2rUqELZAT4VVPSUA\n3lOcnp5Gs9mqth0cHPT78fN8KioNiefz+dge14ouAfiCO/X2BwcHfcEMjYuiyiRQkM/nsXPnTq9o\nmP+hIaZiYZieBltzfuVyGaOjoz4MxnX0NFLqjXJpiu7tzUgB+cpwHFMIVHAMnWv6I2m8OGZGDmK/\na7RFySq6KGptK8ztien1VyoVz28qXS0kajabPvXBlMHi4qLP42phpnpX1kCqMlKQR17xRULq1bDd\nCgI0rWRTTZoy4HX0rJ1rFdLZSR/iswUt+t2CHfZZiyopC1Suc3NzMe8/lPul3FoAoStG2B4F1VT+\nTN1o6NKGxe3zbL+TIk1KNORUwnQQdNth9lXz5ASVWiPE6IXWqFQqlZgMpUUvOjWSGkq3Hro6HjyH\nOqm/vz/WX8q51mVEUeQjfvaZ7IeCNI5bqM06V2xkgLpb55kCUgIndaJ03lAWGZWlM8JxsqDT6lnq\nSZU9ALEoUDcUinzoM8kHBWkKhvU4ox+6tDKkF9XeaRuazSbOnTvn56pGZ7qJaChtZJ1/Ga0d+ygZ\n1zvnDgGYjFpv7vsqgC84595Aa6nfVwCcBPDf0+57+vRpXHfddTElEgo3UelozpGKgkUVirIoELpR\nBr9TCWjeC4A3kFSQuVzOT6SRkRGMj49jYGAgZvy1fZb4mxa/lEolb/w5aRny5SoEokaNSnCffqYP\nuBROQ206iTVtwCJCDbn19PT4EJR6QzqJk5RaCAmvyoj/roWVGnGwnpdWcdOjJ+BicaWNilgPU1/S\nRP4RYevzdO21VXIcQ65LP3v2LCYnJ2ObcSha15C3TQEpwKDy0nXj3LRH+6XgwhrTkLEPRVlCpBEE\nKlTKDmWChlzTJQrCGSGisiYfOR9t1IC81uWpdllZSJkmGcwkD9r+z3tS5qvVqjf+jLKxnQBi8qm1\nMLqSgJ4X0yHc+rtTr1LPbaesrcepRoRGk+1iZIryxLHQJXH8vR3Z9tkIku2rRo2U1DArWAnNAY0I\naf+tTguBYe2TnsvvSfq4Wz6EyHrnWqtF4GgLfQlCzp07h1wuh7GxMfT29nqwoysvQnLFWp1Q/zdC\nG/H8PwfgP8r331/9+6cA/lcABwGMAtCNf56I2qzxf+aZZ/BTP/VTsfCQVT6qGIh6h4eHY7lsVfy1\nWi2G+lRYKXBEXWoIVCidc95b4cZA4+PjHkzY8HeS8V9ZWcGZM2d8nYGu6VThZxGWeos0/vQ8uMMf\n93bmNRrGpYKqVCqo1+s+p0/vWNd1U4lT8Ycmke2bVvwmeZyMOszOzvocvnPORxsGBwf9dcyxs8Cx\n2WzG6hcIioC1EBm9ZH017NzcnH/WzMxMrLBO15xbQKBIOp/PY8+ePThw4ACeeeYZPP/88x6xk28E\nKwo4APgcrPKIylq3J9V9851bqwtQnquBCskY5STkGYfyhzT6bBeNIdvOqIq+clijK0wL6AoV3dRH\nQTnXXTM0Td6meZO2/zYyoxQCPOpBA2t7DtDzp/wRsGvUiaCEAF0LHQmguTZdo0LavqT2hoyp7Ysa\nRysDnJuMCFKWmPbTMW82mz5NxjHQaJ815qH6hqRIjB0bnffUZerB2+1s9ZnaT85nFtSqTCkoDoFj\nCxY1EqVAvVtqB6hVdgD4PWG4GZECADXotVoNhw8fxuLiIu666y6Mj4/7MVMnQJ+bBPS7AZ8h2ojx\nfwMtb/5ZtDb5+adRfIc/AHgUrdf6smVL7W5aLpfXDZQ1/tb4DA8PY9u2bV5gc7mcz/0D8KFhDYUx\nBMZNbhiKVQWguUvnnM/RDA0N+eVzavRDxtF6N41GA/Pz875tNP6aQ6VnzEmjW+La/B2RvyJG9fpp\nFNlnpkfIK05UzXFqnleNjoYk2Tf2K1RExL+MTExPT/sJwdSGc84XAdFo0+NX74oVscpvVVQM81Uq\nFd8+rR9g7m1xcTFm+Lkenb8xEqB8I/Djqgl9r71GKqg8KWc2L62V5roREw0t+xKqrE8zeqFjzjnM\nzs7i7bffRl9fH6699tp1xpcGXMdRUz7lcjm27FPl1NbikBdsC5Uv+ch7p3lTIU8/BGjSSKMiWlir\nm0Sp0dK8P1NbGkVUkKQettYYhNrQ7nersO2xJL5oISMjf4x0sm2UIQIuG91K8oqt8bSRJtu2JBBH\n/tM5oQFUIGsdG85/yg3BF3Xt+fPnMTMzE9sMR9Nk1ihqWljlbqNkgU6Sx89l2dRz1OVW9nO5nI/6\nMsKhhbIa2dQ0nI5hmqPZDW3FJj8AsBRF0flu7nvnnXeue6VvCFmrIG3fvh27du3yIWCienrLnKwq\nEKwQn5mZ8YaDE4rP5Dn0qLkWeGRkJLZxRijvlERqsLRQiIVIuvOdGngiRxpADS/TE1blq96YGiDd\nzYv3pVdOPhGRqzdsi8vIIzUKRO4aMSHAmpubw/T0tC/go/fCNAYVbLVaxdzc3LqVF0wDserehv/Y\npt7eXgwODsZygpp/C4EdAoFGoxHbzjafz2NmZgYvvPAC5ubmMDIyEnsHAu/HaAUNKRWXVsmTaNTV\nkJJUsZPXodApKaT01FM8f/48HnvsMYyNjWHnzp3+RTNq+GxuVpe+MadN5Ua+hTxCjW5Q4VH2yF+2\nSwFiyJOxfVMKnad/lQdczsjIGA27Ld7TJWgaZePc4vhxrljZs21LU8pJwCDUB1sHoYaNQI7eP/UU\n55amMynL1ktlXykTapCTvMykMdJohT5Dt7S10RUNkTcaDQ/0WQAXRREOHTqE22+/HY899hief/55\nH8XUlTA65gpW2slOpxQCpfY4bQXTlYzEqj7guYxm3nnnnX6OUOeT9xwzTdvoq9gVkKojtBHaqqV+\n9znnzgKYAvB3AL4QRdFk2gXMZSdNchsB4CRnOJtb2TKErBNd11JS8XPnLBaE9ff3xwwul9axdoA5\nYFuTEPKGkyIA6p0AiHlaALy3opXG9KAYElNAwjbTm9RKWZuz1K1c2SZeqx6rhr9VWVhPgBNYXxVM\nL0SXR9L7srt18Vp6GvTQNFzc09PjJ4YtoCG/dJ8EAjm+VY4ePo2z1naoB2c9B42g5PN5VCoVP/Hs\nmJOPTKVQ7lQetGCL405FrgWJSZ6vpZAXolQul7Fv3z6/KkHnjn2G5unVwyTPbcGoyqamTwhMFZzb\n9JkuT2zXrzRlHvJIFcAy/ErjQ+VJvaBGnPciyCFP6Ehoqkf5lAQAQn1KMyIh8KIGledoDQWAWJhY\n9YKu57eyGnoW0EoFvvbaa1heXsYNN9zgwV8SiLF9tn1kdI9zW9ufz+dj75RgyolOCnVQtVrF66+/\njqmpqZg8aJ2W8iskL6HIxsWQ8oMOAB0cbsbGsent7fXFvOqwqT6hjmSUVzd/sy/YYrGxrVG7mD5t\nhfH/GwD/DcBbAG4A8G8BPOqcuztqA8HUOIaEVc9pNBqYmpryO8Bx8x0aBtYAEFUC8IJGw1iv173H\nV6lUvDASBFCx8Q10Gq6xE7Rdv9QgaJ0BdxVrNpt+r3u+vCKXy2FgYMB7kowIsM1UsBQ+FoMQkdKr\n1+p/XY7G/KEWwdkUCACvvHVMCDCIfNVAaJEhP0S6dmkVjScR8/DwsI8IEFFz/28N51HJc9KQzyxg\nZG0Ex1Qr+BVhhwqK9LiG9zSlweOFQsH3n89QHtH4a12AFn1y0yYLtNLmR9IxHh8fH8dP//RPA2gB\nDY659T6tR6hzjONLudH11RpZ0oJKXaut1czcxyIUxQhRO68zdD7BWr1e98af/dZVGgSc9lqCHI49\nQb4WLFqlmxSl2Aixz5r7V4+aTgz5SAOjv4Xk3UZIbNQsilorbL773e9ifn7er5RSPRfivfZZUwV0\nmLgkl2BYeTg7OwsAPtIHIAYce3p6cOzYMbz44ouxZX62MNCOocqytnczxscSbcTs7Cymp6e9jqOx\nLhaL3vizzoqkexFQh2uNBIEclxeXSiUfLdX6j4sFAJtu/KMo0i18X3LOvQjgTQD3AXg86bpHHnlk\nXdj/wQcfxCc/+Un09vZiYmIihtyB9VtjauGWnsd8EqMFXBpHT5keDr3Enp4eH2IaGhryG7vwHlTi\nq/0F0BmqtIpX21Yul9flqjWfpy/2YNU5w5G2HXpPTmIqCL6oiNEOfbUu76tVp2xjUvvJDxrvKGrt\nBz8yMuIVqq7ZZ6SDxVNUclxuyApY5sHoMbO6nAa3Xq/7UJtuUKTbLnNDIVWo1kNRjyqttoF84HXs\np6ZJeI7mWnk9P5zs5DNlj+kdBR7Ka2tk0hSaynvS+RbMUW40IqQ5Wyod3p+rYNQjU4PP3wDEqs3t\nPFGep/VpeHgYu3btwvT0NM6cORM7pgCSQJjpIwJ7prtoRFgbxJoPHqOR1ShTaBxDfE3SBUketz1P\n01XW8KtRKxaL2LlzJ6rVKl544QU/PsoHGhbdXMe2g/OhVCrh9ttvx9LSEoaHh1P7EiKreyirnCc0\n/gom9BpGWGjcGCGiJ6yFqrrS5tixYzhy5Aj279+P/fv3x/itXr+C31D0S69Ru6E6ms+kTmZEc25u\nDsvLa2+w5AZx+XzebyzFe2lqFVjb/IiyVigUfLSUUTPef2lpCf39/Th69ChefvnlmOMyPz/fdoxC\ntOU7/EWttf8X0FoemGj8H374Yezfvz82OD09Pf6Vs2Skem4csFDY2k4yIuT5+XnvrdlCLAICesFD\nQ0N+32/mg+1yLlUIFlULD2J/9TwqauZl1WASEdLAcI0xQ+OqnBV503NRr5IGc3p6GlEUoVgsxgoY\nGYrSPpEYomKRnHrEwNqWxVRCg4ODGBkZ8WGtyclJ3x+2i94C+TkwMODbAwAzMzN+wtAYaRETvdKp\nqSlMTEx4eQHg322QVJipY5dUy0BFZvOZKmN8Pz2BAz1iXS6pxAlOw6QRDI1E6DpgykioDyFKAmhW\n4YUMlB1PzdnqUlkAfrc8W8vC6xVMEPgBiBUS0rCGiuhs+4aGhnDjjTfi+PHjsXcbsH8sMpucnPT1\nIdzOmvLGIjTynCCMa+GBtUJcHXN9TihddLHhZN5ba1R0PqtTE0WRf5lVtVrFyy+/7NvNaylPodVI\n6jjxOYODg7jnnnvWVeHbsUgDxvxN5VZ5yLosrcFh/xgJo/PB62y9lnXujh07hkcffRQPPfRQzPgr\nWdBvgTWfpfqAz1SdzmPUaXytNXUFaxJGR0djqzI0JcExZt/V+aB+n56eRi6X8/ZOX0tfLpdx/fXX\n4wMf+ACGhoZ8xO3YsWP40uXe5CdEzrlrAIwBON3J+aqIl5eXcfbsWUxPT/s17yFvRb1bFlno2uuV\nlRUvWOVyGQsLC94YcVA5WPSkWTvgXGszHS260PBzmldgUaX2UT0jXqdeP5E8vfWpqSnfLk5sG37k\ns+i96Ba3nDzqjc3NzQFo5fx0mYm+iY3te/HFF/Hkk0/innvuwaFDhzxiJ2ghIKDxJ2Cjh8j70Lgx\n7EVlwzA4jaP2k9fW63W/DJDLuHS9uebGdJyoSHR81LCqR0IeqkJXBaI1ATqRdWxpMHm+jrf1jrQW\ngqTRHV12prJu54v9P0RqkJOABIEjvSUaSQse1CgSoHG+MYKmfNP3O1BpaWrJtlP745zD1NQUXnzx\nRb8ZEceMIIXLSZli6Ovrw+DgoK8DYlSKSpchVRode0w3x1Gyhl/ba+d5uzEKhakpP7Y4UQHm+fPn\n8fTTT6NarWJ6etqvGuEYRFHkU2bNZtMviWX+mc/Qeh3bhqS+hEgBkHVw1KFgqJwGjUCZ85YFfzpW\nyl8SeXbjjTfik5/8JK677rogoKVcqhFmwaStsVFwYGWbqUs1yEwr33LLLdizZw9OnTqF2dlZv7Gc\nTbWF6hJUL1BPqwwyEkCnYmlpyetE3atio+BzUzf5Wf18Ea2c/5nV8/4dgKMAvt3pM5RZ3MGOCigt\npEZG6nIYGn+uYaZCBRBD2jS+WvTDugBgLZxLI1UqlXy+3jm3zggktVHPURRLb4sTkmFhCi9fhamG\n3SoSfhQtq3LRZ6oS0GgBdzGksmCbz5w5g2effRb79u3z96Hy5rXkEZUq6xi0DUT6TDWwDwpOrOJT\nr4iTgZEIAD4doq+XDRla8sl6bFbZKS81b6+bFGlUwtaocOIz961RHjW+7JPdTpbeqO5voEsRrRx1\nYvS13SEQpHygjLF/em5IianBZ7pG13hT6Wq0jc9Jqpux48H0Dj03u+KCW/gCa1tcDw4OYnBwMJbi\nAxCTdRbO8n68Px0I6/nrx6aRbLstWYOmH3VCtDiMhoARkqmpKUxPT/saG+q2gYGB2Cob7v6pMqjO\nCo2/pjusntJ5ov1Lkjvbd85h9o01CfwAiFX60zDr/LHGTXm2e/duXH311UHZYfs0raZRKk3n8Fzr\nSPH6hYUFv3pE387X09ODPXv24NZbb0Uul8PJkydjNTZ27EO/8Xlab6WV/c45XwSuBbiLi4teT2yU\nujL+zrnfBPBZAO+Tn3WTn4cB3LL6twwgAvAOgH8WRdEK2pAKDzu/Y8cOFItFnDlzBnNzc7HwCScL\nsBb6syCBDKMh4+BpZbBzLrbTEu/PnBPv2dvb61+Yo1sHq5FQCk0O7SPbwBySAh2ufmBon+2kUiC6\n1CIYi1ZnZ2e90uByOwU7vF4BU5JXc8stt2BwcBB79+6N9Y15RXoX9OxtiM6GMRkmIw9CiFgNN8eZ\n/VF0rEu2GFUgf5TXKmMhxW3HicRIg+71r0qJnr5VdAQnGrbkR4EEn6F7ElBeaQC68cSSyEY49Hca\nHXpmNN4cBwtUeC/1IK03o+3VzVn0uda4KNAIjQvbQQXIXc/o8bOGhcCJToAdb03h0Nu0AIBjp/PW\n5uXJh068r1Af9X9dYkwPkECfBc5PPfUUTpw4gX379mHbtm2+bmdoaMjrLJUlAOuWsVJf6WZBzFPT\nIbDFm+pMpEUy9DfyR9NIjNAwhUhHivtoqD7X8dICW7ZfCwoJJKkfgbUaCs5FgjkbdbJAmLJgIxWc\n54zK9fX1YXJyEq+88gpmZ2dj9wwVbYbG3tYjMNJHAMrnzM/Pr4vAXSx16/nfC+B3Afxg9dp/C+D9\nAA5GUbSw2onHAdwJ4J+jtb3v7wD4C+fcwajNLn8k9WDZ+RAyVQbT4Nk11LrEiqhYK7O1Qt4qcJ5D\nobEGpV0kIoT0lXRS6N70hULBV6wzv8TzmKdkmMi2B1gz/nNzc17AqtVqbMmdThIKmi7d0nCdcw7X\nXHMNdu/eHTMgGmWwHq7233oRGrqiEVSP0KJwa7SswWeoX5dkUYmxHWyXer76u8pAyNOhwdFUhnpl\nVIzOre3ZQFl0bq2wTA0OicVNNKTkUalU8oZgsya9VdYqM41GAxMTE5iYmPARFJ6vUTKCAvLSLpEj\nXxTEUXETGNr5rG0KzRmNtNgNfGyony9PYWpMdQXbxP5qkS3rVnRctV/kk03ThNqeRqFIAoEX5yeN\nFA0VU17nz5/H2bNnsXv3bh9l48umWEtCAGm3mdX0AY0/z2N0ie1ie5iCtMtROwWilBfqOBb/MsJF\nw0+5sOk3/d8CMZ3DIf6qfGpENeQw6f04D+1LhNQg0+Gp1Wp45513AKwvXrX1BrbNFuhqUaOmljlm\nWv9l0xMboa6MfxRFP2uY/KsAzgG4DcA/rP786wC+EkXRX6+e81m03vD3CQC6EsDeex2TVlZWcPbs\nWS/Qmkth/ksVrW7gQsWry3+Atc0neFz3z7f5P80Tc+CJUDVfr39DZD1+NU6Li4uYnp72248WCgVf\nLV+pVPyueFR41Wo1NmH0vtpuns9JzA0oVMFptT+XMoa2dtX+qQLV0JmmR3ierVrWyauIXCM2WvDD\n+/BenBD06the3XuBbdVlM6r41ItO82DspOJ48dXIQMuj0qWYPIf91ldNEwRoxIIGMp/P+2VmGtWw\nBZgaZdoIsV/kqY4f2/7GG2/g9ddfx6233ooDBw7EaiIYtgXiq2sUuOmuiQra7XI52zc7fioDNFba\nBn3pFpfjUibIO8qBLWTj2ADwER2NdOjGKlZGVP7tHOh0XGykg7zXNihQoqFeXl7G3r17MT4+jh07\ndniPn3tFcA6Vy2Wv3zTUTR3W09PjDdvCwsI6YKo8mp+f9xEUHRMla8S0f9S93P2ODomuNqLDoTwh\nb8lX/fD+NJTkXwjcqw3Q5aoqsxZQcCzsMmVtK3WkRhxItr2h2iCOCXmk84B9t8tNCUJopzQtuxG6\n2IK/YbRC+5MA4JzbC2AngMd4QhRFVefc0wDuRorxt8SBs++RV4OkBR2cOKr01bPWAiRFfhq6ZNjb\n7nBHQaNS1rW1SYxP8l54jJOC+9kzxcBcJXPizOlQ0dHz5Pp8naxU6NpO9odeji4r07wnl9pR0RL9\na3iUFAphqXK1bbK84L11Axk+Sw2UImIaFb7oh6seVEnrmKpnA6y9B8CuVNB+JI2dKnnel0YaWIuc\nqGJSpQOsLY+j7NkQphaQ6jrgULg8qd1pMqhjZ8Gt9lVzsFobo143FTeNLJUSz+XSJ84T9oWGjHwK\nzR8LlFVeVCFTXijnXGKlXhFl3np6IYOuxkSVu6YRlWfqGFgKAceQTPEYPWMFi5SBmZkZvP32214f\njI2NYWxsLLb3iG5/DcAX//Gj6bFms+lf9kPnh3xkpJXjfO7cORw/fhx79+4Nvsgoqe88h2kIevyM\nbml9jnWm9B7sky0eBRBLK3GMLBDTqI7aB+7uqTon9GzKMADv+ClQCcmwc60XQHHV0tmzZ2OpDAsU\ngPXbp/M+HA8+i04Sx/KyGX/X4thXAfxDFEUvr/68Ey0wYF8Af3b1WCLZ4hDLDDKQ56hC0gmpaIvL\nMljZT6WrgsKBpMIiw+lFqPcS8njV6PA7/4bCVsDaJkOs1uWytt7eXoyMjGBsbMyjft3Ok5PJeq+a\ngyRitDsSTk9P48KFC7EJT0VHo0YAol4qjS7Rp46HFWQdM8sfzYuqwuO6VhpAKl2iYfZHN8Wh4Vfv\nzhoLhvpYJ2JD7Xa8eK39jX1Rg0dDTq+d7VaEbz0VlVmCL16v+UxWmlM52lfg6kfb3U4BWK+Kcshc\nPWXh5ptvxgc+8AEMDg6iWCzG8uoanVHwpeOoL47S5aQKVBUMh7z/kPInkKPHyvaySlznKa/V/Lzm\nVjnvCa6p4IG1d8LT2IWMv843zrk0flvjr2MWRZF3AgjwFby/+uqreOKJJ/DBD34Qt912m5+Lg4OD\nwegfwZamNcgjOgMEUQzFqyPBDWUWFxfx5ptv4vHHH8eDDz6IXbt2xXSM7Yv2m4BWa5nsenhG77Q+\nSHlEHct5pgBO6xY0gqUpP85/gioCVPZd9xSwgIx6l7pXa7tCQJx6ivfYtm0bbrzxRvT19eHIkSNe\nhuy81bZT1ng/ze8zBagOEdt1MXQxnv8jAG4CcM9FtWCV7CSxAqZGlURBp5GiUFABawiWKI73pSAy\npMUBpJLRfIsNwyqpctd+kNQLptLQHP+ZM2fw6quv4tprr8X+/fv9q4JVmKlsKcDce0CNJD3pKIpi\nhSfsp77chHy116lCA9YmAUNNKvx2XFRZW69fFQLfq6DpDN1bwQIr3lujL+ol8zwdFyoe8pkAQjdv\nsZPRXq/EMdA8n6385zirMaeBJ5BiDlc9S534HDsCDfvCoTRq55GFAAP/KvAYHR3F6OhoDFhTSen7\n7AkOaKSYL9ZoHA2ZhpTVA7dylNRu284oimLLUskjPp/nagSIXjWwJte6xEyNpy3K5PMtqLP8DIGw\n0DnKJ61fYD5Xl3qOjo7iuuuuw7Zt27yuI+ixoXIS+zcwMIBGoxGLIjWbTZRKpRgAYHFwFEXeAVhe\nbr3oa2RkJLYhV0iOrCPClMHCwgJmZmb8fGGhr27EZVckKVDnGLDegfOAxdZJYJjPZ5qBBaFaL0Xv\nPwRmtH7Hyij1WEhOeV6tVsPp06cxMTERWw0UigDx2lBEQEGFdV6S5ks3tCHj75z7AwA/C+DeKIp0\n/f4ZtJYA7kDc+98B4Pm0eybt8Pexj31sXb5utQ2xTUeiKPJvreMOfFSoRE6lUsmjQiomvieehonr\nY7WWgNsGM9SiA6kTggaepDlaDXNzs5GlpSWcPHkSTz75JPr6+nDXXXehUqnEjBQFgG+XKxQKPtxH\nxQGsFaQR5XJpCicMow2aw+Ik4bWq2Nh+7n7Ga7RimHzXvmp0Q+9DUEbPUEPcVExE24zEAGshfPUM\nOP7W+PMZVPj0SHO5nN/tLxSpsN6Y3pO/M2RKL5OFeUqaz7ZFY2psWFmt7ec4ENDqnv/23G5JZcny\nz6azGOlhHlwL6gh+WCPC+aDLtIC1QlbK3NzcXMxj4nND/bLjw7Zy3mmxqM5HyorOQ/6vKzUAxAws\no0l0FNIKqSyoVT7yf9t25TfPVX1AgKqvu2bEp1gs4sCBA9izZ09srrDfCqaU6OioU0N+s21ayKaR\nB3WiRkdHcccdd2D79u1B40+50lQhU4vM8fOtlzTaXInBXRdDQF8BGLC2Jwm9ec4N1a8EU7pqRSNS\nlIfFxcVYaitkdDUlR7li21S2dFwVhJw/fx7Hjh3DuXPnYqtg7DUK/HUcrRwpCDl8+DCefPLJGM9o\nA7qljazz/wMAvwDgo1EUndBjUWs3vzMAPgbgR6vnDwL4EIA/TLsvd/iT5wBYm9ChCaYepVYiU6ij\naG1zEYaZWMRSq9W8QuMOYAoeiFYpQFR4VHQ25BX6qx8OsoavCoUCdu/ejfvuuw8333wzhoaG/IS1\ngscth+kV9vb2+k167H25DpUTSdtULpe9MtWiLVViNt8eCi+FhJ/GT+sLdF2vFllpURgLf7jJD4CY\ncaCHpEU2NMgWUVOh8r3auqMjQ5rKlzSP2obYFKiwn3YfA6sckkjD0cyFKt9D3kfIc08aFyUdW6AF\nFKBv3koAAB1ZSURBVKempnDkyBHMz89jx44dfj28emsEqVrNz+sJDggidWWDhmW1kJGASXnJ9I0d\nCxsRUFnkUk410qonrAGv1+uoVqt466230Gg0cODAAQwPD8fGkgZMi69sxEBBvgX9VmEnefw8X8PS\nBB3kBw2/RjdIduvokNEgr5Ly6NxlU/mqNQI8j3OOAEq9WO2vRjFYjMmVGIzSUM9WKpXUqAWwtqcK\n5yvnlO7OqPNDAZ/WefCjsqLhfgUeFtToWKoTw78ql+SXggPKTLFYjIFO6jdNCWo/7H2Vx845fOhD\nH8KHPvSh2LnHjx/Hl7/8ZXRL3a7zfwTAZwD8PIB559yO1UMzURQtrv7/VQBfcM69gdZSv68AOAng\nv3dw/1hoxTLXGiE7+Lp0hZ6jhikrlYp/4QcNCUPqDI0518qPMyyfy+UwMzODSqWCoaGhGGpVTzgU\nJlJvFFgbcGCtWvrgwYP44Ac/6At6GJWwhpjeDjd9YYW4zUECazkjAiIqW04ott2iUZtL03aGQk5W\n6HUM6dlwVyx9AQ/vReNPYMX8tkYZtB5BDbH+rwq5Vqv5IkoaMXrqumSHbbURhSS5tMafxWDz8/P+\n+Vp5HPKSVEnxLw2uraGweUwLcux8add+BcorKyuYmJjAD37wAywsLOCee+5Bf3+/D5XS09L3NVBZ\nMkqkO9+xHQoA1ODTE2MEQPP1jUYjBqhDBkF5QllUkKUGWL1ca/xfeuklNBoNXH311bGUoY4Ro30c\nG277redohEwjU7a9lv8k3pvGP4rW3t3BdI8WdPH+2i+NOvIZVl6tDlGAznQnv3OPEUYGVQ8oCGJb\nrMfL/ljQyKglnS8uwVT9ozLDtpMfnBdcIshVXxYUU/+wvVbvUY/p7qUaCbFjZ8ebFEpH27YQvNOx\nYT2Qpsc0BUUZVN2QBiaV2umuNOrW8/8XaIX1/15+awL4HIA/W/1+EMAogL+Sc56IOljjHwonWeWp\nTKcyZzXpzMyMD18557zR5z7ImmPVCcu0gOb2C4WCnxDVatUXrhC9aoiU/ysq53PUY+PAM/dGhMuc\nqK7pDgkhsL5am8qc17LIink1RbjWk7dGw3pb5I0WpOm51uvi/enpqyIgAuekZmEj20oPjM/W4jcW\nQvE+NCb9/f2x8eRqiLm5Of9KV3ov6hEomAn1OSSTwJrx4ZhTKZIHVEr6kigqDuZQ+ZwDBw5gaGgI\nP/zhD31bCfIUcFklkNQ2O44h4KwebaFQwPve9z4f6qVBZ72LFgOyDarQrYzyf40C2DCzRhDoWbKN\n9AST5ryVtaSx4pwgiNQVCjfddBMKhQJGR0dj6UJ9FusVNGJFudP5YA1QEjjTtvGjcsE5oTtjqh6x\nqTM1+CF50PFSg6jtIQhgNJGeuaYjdZMfjfgQPOszWFjNpcSsM2Alv9YwKKBJkuFcLhfT15wLOv9D\nAIv90g3YGD1hG3Q3QTp72g6Va20PKZRmUYBAHUinxjnndQHbRV2qYf+QQ6X3137a9m6UujX+3wLw\nF1i/yc9/Nec9CuBXAb8F8BK6JCvsarD5PycnK+Zp+AH4NyyNjIxgdHQUwNpObJobjKLIh/91dzhO\nPObP6/XWG5Y0LKc5XK2otdszclD5uyJdLWLSegEgbJCs4dfwFo3H4OAgxsbGMDo6GtsmmJMDWAsj\npeVc7XM13JnkjZJvdqMRKuRSqYShoSGMjY1h+/bt3uPXSnkgvvEQvQQif3qfavypqJimYdiRZD01\nNSoW+VtUT+IYEuzR2yHwIE8INHRCE7CQd6Ojo9i1axdeeOEFX2OiqRj1ykIKKYlCgI7jTP4yh3/9\n9dd7hcq2cf9wHU9V/gxhqjHTMVNArd6drbjnOUtLS+u2qtax0D7wN63At2SNI73Vvr4+7N+/3+sF\nDTvzXM1ba20Owad632r87RwKjYOdPzynUCjE9An1T9I42vxw0rP0byhUT8NIb5hzjREf5smbzWYM\nmKuOoi6l/DCCBSCmGxlhSQLa/K5hdbZP0zi6P4EaTCsrWlDL+cr2hIpok4CE8p18tDzneZRJtpfA\noqenxztnthhYo6R6X5uOSBrni6Wt2OQHAJaiKDq/0UZZZWdRpob3tagDgJ9EAwMDGB4e9nl6olm7\nzzcVGj1EVsmql9fX1+c3yeGyFS1QU++fQsYQnhZ36cAm9TUkiPyrfKCHZWscKHwatgvdX/+qMbQU\nmlyhSazepZ6nk6G/vx9DQ0PYtm0bhoeHUSqVfPg8VPTC5VgcOypjVvHqBGJ79F5MjzD0FkrNdGpU\nyScq7N7eXq+IqAB1nNWrUG+XPDpy5Ahee+01vPPOO96w0FvS6vi0NiaNg/5uw7ShkDVBo82Hqtel\nckUZDMmEftexobLWY6G8vwKKTr2fpN9IzHHTI9OCOb2GcsooE4GS3ZtBwZlen9ZujWrwfzVGmg/W\nsdOxtR58p5Rm5PihV0owwtdVR1EU85gJDHWu0nmifFH+aXjbybHllRLbQ37Zpd3WY6dDRZnnmOlf\nqzPa8alTHaF8IZ8YiSCpY2l10UafuVHa1E1+hO5zzp0FMAXg7wB8IYoie06Qkia8InLdB1+LpYhe\nBwYGMDg46Cv5WfClL87RCUWDwUmtu9xxYtJjZ2UuDe/S0lJsxzaGe4jmtOK7E+Oaxg+9hsKvuWI1\ntnrdysoKLly4gHq9jpGREV+ZrRMo5B2E2mUNjip08hOIvwiJwKRSqWB4eNjvXsj11WqI+AxeD8Dz\nk8ad/LfABljzPnUJKEEYwYAFYEl91d/UQBAU6uY26hXaehDL1yhqvSiJQIZ9tS8mSssj61gkHddx\nCgERyjf7w3ysek7W+NtaEfKEip9Uq9V8rczw8PC6aIv1QjUilUR6fZJcklQJ6zJV3bfCyqwCEs0J\n8xjBAT92noXaoaBMz1GApf3XMVNedOoFhn5v9xuNNeWBqyD4TBuR0n6RL5RZ7Z8tvEyitOMqe6GI\ngUYwCdZY18Wizm7mO9vTbr61a7uCDx1f6rA00NHNOF8MSNjsTX4A4G/QeqvfWwBuQCs18Khz7u6o\ng5aqUOlvGlqip08DoDkzFpXo62wZcg1tC8r726IYFtepkmSFvW4co4peowFWeVwMWWEgb7Rt3OXO\nKmrnWm9Ee/zxxzE9PY2Pf/zj2L17d9Bb08nVqXdhvUxVsgMDA3DO+SWcjMhwC1ZeF0LaVPSFQsF7\nbawX0N3Q7LIbXbbGvzZC08m4WCWjSpyAAkBsCZoqSBsetvdaWVnxntTy8rKXXxZ+KjDi2NjIiAI+\nNZ4hfhKMat0F54bKkNa9UH40/cBnaw2BTU9EUYSjR4/iu9/9Lg4dOoT77rsvOM7KF9s3VcBWFvXZ\nSX3lNdQB9B51nCx/FXRyaShrVZie4JJh3V5VgXNatIV94XU8blOclhdM2TBClGTMNkoKyDTiqfPQ\nyoBeq3KiY2SjUHpNt2TnrI06kffVahX/+I//iCiKcP/993sQcynJ8q0dQLRyc6lo0zf5iaJIt/B9\nyTn3IoA3AdwH4PFuH0KmMDxPhQ+seWEMtXO5GCcmlZsuAUzKGfFZOmhEs2r8K5WK359aJwzbYrdH\nTSveuBhSxE0BbzabsZdkqEHQugCdkCFPZSNhKKu0qEC5QYhzzoMj8kWLfpJCbfTcyP9SqeRrPbQo\niTyhEdMiTDVmGxkPbZ+CEPKfY6GGRRG/GkU1/myXvphGtzu1YV81UrbtCubSDGKz2cT58+cxMzOD\n0dFRDA4OxnijEQvKT8jY0xOz4Us+Q41ZKIJh+8T/O6Ekw6/3U5mzxtYCX/t8poo4bxg55MohzjHb\nL+W/jbboOfp825ZQe5IMXbd8S3qGNfAhDzTNS1Y9aH9Pu7ZTsnxMOkZZI9him2w06VKCASsTlu+q\nN+383mra7E1+1lHUWvt/AcA+pBj/0CY/DzzwAO677751RVr0GjXUTgCgnh0Za9d/qtFIMjpU6JwQ\nzE0ODg76XbDsuVqdqp/NHkzlQ6lUwvDwsC+aYq0BC5r423333YdGo4Ht27f7PDsQ9rg2ClaUnyzu\n0z3BbYgzqeJXlSf7SWPO3cn0rXl6vTXCCoL03tZ4qBGybdG/9AydW9v4h+20uXHr+eiH7eQe4/yN\naaJQcZH+pVzze5KHwd/YzsXFRTz77LM4ffo0Pv7xj2PXrl3+XE1RhO5pjT35Ecrn7927F7/4i7+I\nSqXivWflhaaH+DfJU9axCRW7WUOq7bR9smNhSceR5xeLRb83ha7Bt6RgzXpyyiPlZwg06LMJQChX\nNsJzsbrFGvgkHWDBvSU7TlthwBRIqjzoMwcHB3HvvfciiiIMDQ1dcq+f7QjxjzJgU06UEwVeSfTU\nU0/hqaeeiv32rtjkJ+H8awCMAUgFCQ8//DAOHDiw7ncVOBphNf4s3iEQsCHBkIHm0i9rkELKCVjL\naap3ZoVO76GK06J0S90KJ5Ua+9/f3w/nnPf+dW0pJ3OhUMDOnTtj7Qm1KwmphzwBPV/PC/E75AGl\n8USViCpIBWNcLhlSNsr/kOcd6kuoDaF+AWvyEFr6GPLoQs9iH7iboxrDJP7bdun3pHOcczh9+jSO\nHz+Oa6+91q9+iaJo3W6Stv1JbaciCyl48op7N6iStgbCXmOVpm1DEiidm5vDiRMnkM/ncd1118V2\nG+R13Roj6hruAcKaIK0UTxondT5sv5IMQxrp2Ng5tlnUiR5S3dHt/Tarrar/rJ7nnNq5c6d/ZhJg\nSZtTm0nq4ISe084+WLrrrrtw1113+e9R9C7Z5Mc5VwbwRbRy/mfQ8vb/HYCjAL7dxXMSFS49+6TN\nZ0IV7vTG6b1zO1+9h63e1eUXanRoVK0XlOQldWpsOiGrSBmeZH+0ryHFo0pbFZTeP6TUSGnHbBtD\nCred0bfP0jZbT1jRs/LfVrHb6MJGnm8VhfIv1D9gfVQjBDy0H0lLl/Ray/8QuNG2k44ePYq//Mu/\nxEMPPYT7778fd999NxqNhgeOoTyj9az0HP6WBO5UFrVtqri1/aFlgHqehnBDAGBqagrf+c53UCwW\nMTo6ivHx8dh5dgltkrJX/rHPTOHZ81SZ67iQJ3bpKs+z81HHzfKY1yjI1ChRJ/MxiZKAVNL8CI2L\nvTbp980yrsp31dX60WNWpi4lhfiYFp27mLHcKG32Jj8NAL8I4H8HkAOwAOCbAP5lFEUrnT4k5EEC\ncQ+cStN6dRoyJBE0cKkZ0NqwhGFku+ZX20GDop48SXOi3aL5bsh6QMqbUAFQkuHSY6FlQ1appXmg\nnVAamEjqk20TKZSe4P9qWEIGNOkZnfbHnhviUZqRD/3l9QRjVonZZycp3xDp+c1mE+Pj47jtttt8\n9IfFfnq+/q+g0RosbRfbb3/TZ4+NjWHbtm04d+4cJicnY+eqZ6YKm3LNtmio285551pbVr/vfe/z\nKcB2fFL+hH63joO2NZSOsWNu51YSf5UPts1WJuwxe9/LQZ0+P4nf3ZKOjYItHRcdw8th9JMoBPr0\n2OWgbo3/z6Fl4F9HCwT8KoB/DeCZ1eO/jtbufr+A1ta+vwPgLgAz3TwkhJapDGj8teAoSXHqPViA\n5lxrf2fu7c/XSiYZULbHei12QqsSvFij2Y7sBEjz3FSBquLUTUtI9CpsXq0bssozKUebxEt+T/Mw\nOjGGISOcdD+9Z7s+63lpMtcJAAGwbvOlEFnFHwIjPGaLh5rNJvbv3499+/bFDKpVRnpf9bRDHqYa\n6pBXznZEUYTx8XHccsst+OEPf4ipqalYH4A1g85UXLPZjD2T99YiLl325VzrBTQPPvhgIh9D42pl\nLGl8LJ/TQDP7Y3O4IWAYAlchObKprdC5GzEenVyfNhfssSQwpf9vJgCIorXXaeu+LcpjGx24XKQy\nbNsZmoeXirpaVxBF0f8XRdG3oih6M4qiN6Io+gKAObQMPNAy/l+Jouivoyg6AuCzAK4C8Il2937m\nmWf4jHXHrMHQ6nUb5g202QsK9wAYGRnB+Pg4xsbGfEU6Ka0ALs2Y8HcLRnifzSZrYO2Hz1UlxGPf\n/e531ynw0P0shQxyyAAm9TdJYfJYmiLU2oxQFIaAJlQHEPKa2o2JKnrbvnaGX88/fPhw7FoNhdNI\n2Bzxtm3bcOjQIYyPjweNkd3/2yo8jUilrUAIeSNMG4VqZ1T+NaSq81IL0fL5PCYnJ/HKK69gYmJi\n3fmq7GwEQHlv5Tk0FrlcDk8//XSiV2zlJY1sG1lcGZoTKmu5XA7Hjh3DN77xDbz66qupMq6/hZ4T\nkuHQ9ZtBaTKs5/C8w4cPb+rzuyUde32hmZWPJOC0lby07QTW5ouC2bR5qGSL+zaTNryo0DmXc879\ncwAlAE865/YC2AngMZ4TRVEVwNMA7m53v2eeeaYtOrPGP7RcT8/T33WJ1vDwMMbGxjAyMhIz/iGj\nnWaw0s4JTfqtID7LGn8qxJCCf+KJJ2JKVhU2J00SmOqW0iaZRb9p/G53TpIxtspTf0sjvV+346dt\nePLJJxMVDsdI8+ZRFGF0dBQ33ngjRkZG1vWHBkINZ0jW+JvdiCaJj9zVjoVtClBCbbAypjLI5+Ry\nOUxMTOCll17CxMREjJc6rgq01KDbsQiNoT738OHD60CKpW6Vvhpl2/5Q0e+JEyfwne98B8eOHYs5\nAvp8e3/tA9+YyDfihcZsqwBAp/pNAW3o+naA52LaqPdVoxp6Vho4v1QUkm8FAFzhk7T3yFYa/41U\n+78fwGEARQCzAP5pFEWvOefuBhABOGsuOYsWKOj0/gDC+e2kc1WZJN3HHlMFx/PSlEbaMXtva9C2\nUgCTloeoElXE2Un7OzmvW0riqR3XdmBL76XXK+q356YpX0vdjpc9PyQnaVEUm6t0zuHcuXN47rnn\ncP78+XX3d26tBkZfv2oVnt4/ZEhtW9566y18//vfx0033YTbb78dwPoCJb3WKis9j/LD3Q9V4anR\nVCUYSquljaWV6zSAGaI0OSCo0etD85l/FUjv378fn/70p7F3795EQ5T0bIKlZ555Bv39/bjzzjtR\nLpeDPLjY+ZnGqxDvO6FO5/jFkAWBIdm2MnqpAYAFhMBaStVG7LZt24Y9e/ZgcnISx48fv6Tt3Mg6\n/1cBHAIwBOB/BvBnzrmPbGqrEC6m0d/Tzg/9bkm3JLXKuR1ST3p26HvSZN2oQOp1Gt5Nuq/1mpJA\njDWkIQ9sM2gj90vjXWiihQBdu+engcV27U4CDO3uFTLsADA9Pe3z46Fn2Rx42nglARPLt+npabz2\n2msYGxtb56UoJeWztX3q7fB6uxpD+5tEaXJrjXKoZqcTWesW6KXJSbPZxDXXXIPdu3fHrgmdnzT2\ni4uLePvtt1GpVHDrrbcGjb+9ZqOU1hdrtDsZq81uXxqFHD/VtRYQX25KAoHFYhHbt2/3QL7btl5M\nVKVr4x9FUR3AsdWvzzvn7kQr1/97AByAHYh7/zsAPN/uvsePH8dv/dZvxX574IEHcP/997dFzIE2\nxv6GrqMCCuXX9FoSB0aVTBLQ2Gphswg9zfAk9cl6LfbarepDSKEkARIr2LZP7TzapHM30ta05yQp\nPFVQ7dpgDaZGX+x1SUvpQs8KRXEUMPDcvaub8mzfvj3YPr0fjbjtt41m2GW4PC+0pM2eo/3SaxiC\nt7USdvdK5elGKGlOpemUNG/aRmLsvON5o6OjeOCBB/wGXkAc5CtPLoY6uU83hjzNAdpMomwkragI\nyeGlJm0TjbotUuVYTk5O4kc/+lHHG/Vc1k1+ApQD0Be1dvI7A+BjAH4EAM65QQAfAvCHKdcXAWDH\njh347Gc/638kc15//fV1Xmm7CZ3mkdjzrJdjBSukuNsh5k7asxFSZJvWp3Y0Pz+PN954Y93vl3rS\nhFC7HutUMYW+8x56rJvxst/TxjDt2bVaDcePH0/spyXdvz3JU097ftqSOXu95c/w8DCWl5c7Dj+2\nA+UhxWzbm0QqG1ah830E2rdms+l5bdv3biD2R9+xkATMuVzx9OnT/lo9Tw3IRqkTw550juVz6Hy9\nZivGQWWj3fy4mPtvlGhHKKuFQiG2EiQJQFuyvN65cyc+8Yl4/fypU6dw9OhRYNWWdtzGbjrpnPtd\ntF7ccwLAAIBfQmup38ejKPo759xvAPg3aC0BPA7gKwBuBnBzFEXLCff8XwB8vZtGZ5RRRhlllFFG\nMfqlKIr+vNOTu/X8twP4UwC70Fq7/yOsGn4AiKLo95xzJQB/jNbrfr8H4H9KMvyr9G20QMRxAItd\ntiejjDLKKKOMrmQqArgOXeyiC3Tp+WeUUUYZZZRRRu99unQvD84oo4wyyiijjN4VlBn/jDLKKKOM\nMrrCKDP+GWWUUUYZZXSFUWb8M8ooo4wyyugKo8z4Z5RRRhlllNEVRu8K4++c+7xz7i3n3IJz7inn\n3B2Xu03vZXLOfdE51zSfl805/4dz7pRzruac+x/OuX2Xq73vJXLO3euc+yvn3DurfP35wDmpvHXO\n9Tnn/tA5d8E5N+uc+3+cc+Gt9a5gasdr59yfBOT8UXNOxus25Jz7Tefc951zVefcWefcN51zBwLn\nZXJ9kdQJry+VXF924++c+zSA3wfwRQAfAPACgG8757Zd1oa99+kIWlsr71z9/BMecM79GwD/G4Bf\nA3AngHm0eN57Gdr5XqMygB8CeBjAunWyHfL2qwAeAvDPAHwErdde/7etbfZ7klJ5vUp/g7icf8Yc\nz3jdnu4F8B/R2o31QQA9AP7WOdfPEzK53jRqy+tV2nq51q1LL8cHwFMA/i/57gCcBPAbl7tt79UP\nWkDquZTjpwD8K/k+CGABwKcud9vfSx8ATQA/3w1vV78vofU2TJ5z4+q97rzcfXq3fhJ4/ScAvpFy\nTcbrjfF62yqP/on8lsn1peP1JZHry+r5O+d6ANwG4DH+FrV68h0Ad1+udv2E0P7VcOmbzrmvOed2\nA4Bzbi9aSFJ5XgXwNDKeXxR1yNvb0dpZU895Da0tszP+d0/3rYZPX3XOPeKcG5VjtyHj9UZoGK1I\nyySQyfUWU4zXQlsu15c77L8NQB7xtwBi9fvOS9+cnxh6Cq33K/wMgH8BYC+Av3fOldHia4SM51tB\nnfB2B4DlVeWZdE5GndHfAPgsgAcA/AaAjwJ41K29IWUnMl53Rau8+yqAf4iiiHVCmVxvASXwGrhE\ncr0Zb/XL6F1GURTpHs9HnHPfB/A2gE8BePXytCqjjDaXoij6L/L1JefciwDeBHAfgMcvS6Pe+/QI\ngJsA3HO5G3IFUJDXl0quL7fnfwFAAy3UqLQDwJlL35yfTIqiaAbAUQD70OKrQ8bzraBOeHsGQK9r\nve466ZyMNkBRFL2Flk5hFXrG6y7IOfcHAH4WwH1RFJ2WQ5lcbzKl8HodbZVcX1bjH0XRCoBnAXyM\nv62GNj4G4MnL1a6fNHLOVdASnFOrgnQGcZ4PolV9mvH8IqhD3j4LoG7OuRHAtQAOX7LG/gSSc+4a\nAGMAqEwzXndIq8boFwDcH0XRCT2WyfXmUhqvE87fGrl+F1Q7fgpADa0cx/vQeh3wBIDxy9229+oH\nwL9Ha/nHHgAfBvA/0MoHja0e/41VHv8cgJ8C8JcAXgfQe7nb/m7/oLX87BCAW9Gqrv2Xq993d8pb\ntMJ9b6EVxrsNwD8C+N7l7tu77ZPG69Vjv4eWAdqzqgh/AOAVAD0Zr7vi8yMAptBahrZDPkU5J5Pr\nS8DrSynXl50Zqx15GMBxtJaOHAZw++Vu03v5A+Av0FouuYBWBeifA9hrzvkSWst3ami9B3rf5W73\ne+GDVvFNE610lX7+7055C6APrbW+FwDMAvivALZf7r692z5pvEbrHebfQssjXQRwDMAfwTgNGa87\n4nOIxw0AnzXnZXK9xby+lHLtVm+UUUYZZZRRRhldIXS5C/4yyiijjDLKKKNLTJnxzyijjDLKKKMr\njDLjn1FGGWWUUUZXGGXGP6OMMsooo4yuMMqMf0YZZZRRRhldYZQZ/4wyyiijjDK6wigz/hlllFFG\nGWV0hVFm/DPKKKOMMsroCqPM+GeUUUYZZZTRFUaZ8c8oo4wyyiijK4wy459RRhlllFFGVxj9/0bS\nkR6T5pKlAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "src = cv2.imread('C:\\jianweidata\\ocrdataset2\\chn/00000009.jpg')\n", + "src = src[...,::-1] # BGR to RGB\n", + "H,W,Nc = src.shape\n", + "plt.imshow(src)\n", + "\n", + "pt = [[0,0],[0,255],[32,0],[32,255]]" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Output image dimension = 284\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAFkCAYAAAAJ0nGTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJztvW2QZFd55/l/8r2yXjLrvdXdEpJoJAIHsKhBWItlBHIY\nD/ZgHITRODaCteeDw4G9McuHtcMRjsGLP0wMEyYwNmzMB8azGzOeDQzjxbsBkhmNl+FNKFbCGFsI\nYdyiJVV3db1lZVW+v5z9kPk/Onn7ZlZVq5u6Vfx/ERlVee/Jm+fce87/POc5zzlpzjkIIYRILqnj\nzoAQQojJSKiFECLhSKiFECLhSKiFECLhSKiFECLhSKiFECLhSKiFECLhSKiFECLhSKiFECLhSKiF\nECLhHKtQm9lvmtklM2uY2RNm9pbjzI8QQiSRYxNqM3sEwB8C+DCANwH4NoDHzGzpuPIkhBBJxI5r\nUyYzewLAN51z/2L43gC8AOATzrmPHkumhBAigRyLRW1mWQAXATzOY27QY/wXAA8cR56EECKpZI7p\ne5cApAGsR46vA7g3mtjMFgG8C8DzAJq3OnNCCPEjoADgTgCPOee2JiU8LqE+Ku8C8B+POxNCCHEL\n+B8A/NmkBMc1mbgJoAdgNXJ8FcDVmPTP3+oMCSHEMfH8QQmORaidcx0ATwF4mMeGk4kPA/h6zEfk\n7hBCnFYO1LfjdH18DMC/N7OnADwJ4EMAigD+/THmSQghEsexCbVz7jPDmOmPYODy+BsA73LObRxX\nnoQQIokcWxz1UTCz+zBwlQghxGnjonPu6UkJtNeHEEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIk\nHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1\nEEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIk\nHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1\nEEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIkHAm1EEIk\nHAm1EEIknJsu1Gb2YTPrR17PRNJ8xMzWzKxuZl8ysws3Ox9CCHFauFUW9d8BWAVwZvj6KZ4ws98B\n8FsAfh3A/QBqAB4zs9wtyosQQpxoMrfoul3n3MaYc/8CwB845/4fADCzDwBYB/BeAJ+5RfkRQogT\ny62yqF9jZi+Z2Q/M7D+Y2e0AYGZ3YWBhP86EzrkqgG8CeOAW5UUIIU40t0KonwDwqwDeBeA3ANwF\n4L+Z2TQGIu0wsKBD1ofnhBBCRLjprg/n3GPB278zsycB/BDA+wE8e7O/TwghTju3PDzPObcL4DkA\nFwBcBWAYTDSGrA7PCSGEiHDLhdrMZjAQ6TXn3CUMBPnh4PwcgLcC+PqtzosQQpxEbrrrw8z+DYD/\nGwN3xzkA/yuADoD/c5jk4wB+z8z+AcDzAP4AwIsAPn+z8yKEEKeBWxGedx7AnwFYBLAB4KsAftI5\ntwUAzrmPmlkRwL8FUAbwFQD/xDnXvgV5EUKIE4855447DwdiZvcBeOq48yGEELeAi865pycl0F4f\nQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiR\ncCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTU\nQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiR\ncCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTU\nQgiRcCTUQgiRcCTUQgiRcCTUQgiRcCTUQgiRcI4s1Gb2oJn9pZm9ZGZ9M3tPTJqPmNmamdXN7Etm\ndiFyPm9mnzSzTTPbM7PPmtnKKymIEEKcVm7Eop4G8DcAPgjARU+a2e8A+C0Avw7gfgA1AI+ZWS5I\n9nEAPw/gfQB+GsBZAJ+7gbwIIcTpxzl3wy8AfQDviRxbA/Ch4P0cgAaA9wfvWwB+KUhz7/Ba94/5\nnvsw6BT00ksvvU7b676DtPam+qjN7C4AZwA8zmPOuSqAbwJ4YHjozQAykTTfA3A5SCOEEGLIzZ5M\nPINBD7EeOb4+PAcAqwDaQwEfl0YIIcQQRX0IIUTCudlCfRWAYWA1h6wOzzFNzszmJqQRQggx5KYK\ntXPuEgZi+zCPDQX5rQC+Pjz0FIBuJM29AO4A8I2bmR8hhDgNZI76ATObBnABA8sZAO42szcC2HbO\n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\nuhlSqRRKpZK38HO5HGZnZzE3N+dHWpNcP6HrIjQY+Lzo6mk2m/55hqF+FGZ+htcMO6zQIg3rRKlU\nwve//30Ui0UsLCx4NwPLuLq6ije84Q146qmn0Ov1sLOzAzPz/vpoBEjUwgbg28nOzg6uXbvmXRqs\na4z2qdVqfgERw2BnZmbGPq/oswvdHGyn4boJWtKFQgFLS0tYWVlBPp+/rk08//zz6Pf7cn3cSmhd\nkLhhPd+zktFi2dvb81Znq9VCu932FanRaGBzcxOFQgFzc3MoFArIZDLeH5vP55FOp0cEihQKBdxz\nzz3XWbAhoTUb5pH57/V6I6ujOp0Oms2mn1DjJFelUsHOzg7y+TyWl5dRLpdHhr7R4W8IrWWOAnZ2\ndrCxsYH9/X2kUinMz8/j/PnzvoLTX8xJpnQ6jampKS/m2WzWWzdxhKOX8Hm0Wi00m03vO2Tem80m\nfvCDH+Bv//Zv8d73vtf7PekLDX3rfBb7+/swM9TrdX+dqKUWfQ7sqCqVCrrd7kiZaHmyc0+n01ha\nWsLtt9+Oer2O/f19FAoFzM7OYnZ2dmQFZdQiZHlpudfrdS+6oV+53W6jUqmg0+lgZmZmxBIMjYTQ\nlUCx4kQrMBqHn06nMTMzg0ceeQQf/ehHUSgUsLy8jLm5OQDw5X/mmWfw3HPPoVwuo9Vq4e6778bs\n7CwWFha80EbrVJh/5xx2dna8q4rzSJ1OB4VCwXfIFFFem+0rDMOcZFFns1nMz8+jVCr5e8t6sb+/\nj62tLezt7SGdTvsOIFzYwrxms1n/fmdnZ2L9TQonUqjpUzvqTDErCxvN3t4eer2ej0s9e/YsXv3q\nV+PatWvY2tpCOp1GLpdDLpfzlanZbB7q+8I00ThOWlD0FbK3z+Vy2N3dRbFYRKfTQb1eR6PRgJlh\ndnYWy8vLmJ6e9sPTTqfjh3JTU1Pe8oz6fMP/ed9owZfLZZ8XitD+/r4XfwpgpVLxljeF1jmH1772\ntXjxxRe9lTQurjcMZ2u3237422w2kUql/D12zuFVr3qVF8VcLuetd44gOGvPvLI8mUwG58+f988o\nLnacft9ms4nNzU00m00Ui0XMzMwglUp5caZvk3MTnDilz5quKbpIxrk2QvdJvV7H7u4uOp2OLwuF\nqlarodFo+FHV0tLSyEiO/tZoWGDonw2FLhSmT37yk2i1WiiXyygUCr6zZuTF7u6u/45ms4l+v498\n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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "imgwarped,M = warpImage(src,3,-15, 15, 1, 50)\n", + "newpt = transform_pnts(pt,M)\n", + "plt.imshow(imgwarped)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "53.13010235415598" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "newpt = cv2.rectangle" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [conda root]", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..3ebf93e --- /dev/null +++ b/run.bat @@ -0,0 +1,3 @@ +python main.py --num_img 5078091 --corpus_dir ./data/corpus_han --fonts_dir ./data/fonts/chn --tag chn +python main.py --num_img 344832 --corpus_dir ./data/corpus_shu --fonts_dir ./data/fonts/shu --tag shu +python main.py --num_img 500000 --corpus_dir ./data/corpus_eng --fonts_dir ./data/fonts/eng --tag eng diff --git a/textrenderer/corpus/corpus_utils.py b/textrenderer/corpus/corpus_utils.py index 479445d..787ec7b 100644 --- a/textrenderer/corpus/corpus_utils.py +++ b/textrenderer/corpus/corpus_utils.py @@ -2,6 +2,7 @@ from textrenderer.corpus.eng_corpus import EngCorpus from textrenderer.corpus.list_corpus import ListCorpus from textrenderer.corpus.random_corpus import RandomCorpus +from textrenderer.corpus.npy_chn_corpus import npyChnCorpus def corpus_factory(corpus_mode: str, chars_file: str, corpus_dir: str, length: int): @@ -9,7 +10,8 @@ def corpus_factory(corpus_mode: str, chars_file: str, corpus_dir: str, length: i "random": RandomCorpus, "chn": ChnCorpus, "eng": EngCorpus, - "list": ListCorpus + "list": ListCorpus, + 'npychn':npyChnCorpus } if corpus_mode not in corpus_classes.keys(): diff --git a/textrenderer/corpus/npy_chn_corpus.py b/textrenderer/corpus/npy_chn_corpus.py new file mode 100644 index 0000000..52223c7 --- /dev/null +++ b/textrenderer/corpus/npy_chn_corpus.py @@ -0,0 +1,26 @@ +import random +import numpy as np +import h5py +import glob +import os + +from textrenderer.corpus.corpus import Corpus + + +class npyChnCorpus(Corpus): + """ + hdf5 file format + """ + def load(self): + npyfiles = glob.glob(self.corpus_dir+'/**.npy') + print('find corpus:',npyfiles) + for npyfile in npyfiles: + self.corpus += np.load(npyfile).tolist() + self.lines = len(self.corpus) + self.index = 0 + + def get_sample(self, img_index): + + index = np.random.randint(0, self.lines) + word = ''.join(self.corpus[index]) + return word diff --git a/textrenderer/renderer.py b/textrenderer/renderer.py index 578f08b..2e554ab 100644 --- a/textrenderer/renderer.py +++ b/textrenderer/renderer.py @@ -4,6 +4,8 @@ import cv2 from PIL import ImageFont, Image, ImageDraw from tenacity import retry +from scipy.ndimage import filters, measurements, interpolation + import libs.math_utils as math_utils from libs.utils import draw_box, draw_bbox, prob, apply @@ -47,10 +49,17 @@ def gen_img(self, img_index): # Background's height should much larger than raw word image's height, # to make sure we can crop full word image after apply perspective - bg = self.gen_bg(width=word_size[0] * 8, height=word_size[1] * 8) + bg = self.gen_bg(width = max(word_size[0] * 4,500), height=max(word_size[1] * 4,120)) + #print(bg.shape[0],'->',bg.shape[1]) + word_img, text_box_pnts, word_color = self.draw_text_on_bg(word, font, bg) self.dmsg("After draw_text_on_bg") + #随机宽度拉伸 + if(apply(self.cfg.stretch)): + word_img,text_box_pnts = self.stretch_img_w(word_img,text_box_pnts) + + if apply(self.cfg.crop): text_box_pnts = self.apply_crop(text_box_pnts, self.cfg.crop) @@ -100,6 +109,9 @@ def gen_img(self, img_index): if apply(self.cfg.prydown): word_img = self.apply_prydown(word_img) self.dmsg("After prydown") + + if apply(self.cfg.pryup): + word_img = self.apply_pryup(word_img) word_img = np.clip(word_img, 0., 255.) @@ -115,6 +127,9 @@ def gen_img(self, img_index): word_img = self.apply_sharp(word_img) self.dmsg("After sharp") + if apply(self.cfg.rdistort): + word_img = self.rdistort(word_img) + return word_img, word def dmsg(self, msg): @@ -165,7 +180,8 @@ def crop_img(self, img, text_box_pnts_transformed): # we should do something to prevent text too small # dst_height and dst_width is used to leave some padding around text bbox - dst_height = random.randint(self.out_height // 4 * 3, self.out_height) + dst_height = random.randint(self.out_height//4 * 3, self.out_height-2) + #dst_height = random.randint(20, self.out_height) if self.out_width == 0: scale = bbox_height / dst_height @@ -201,6 +217,38 @@ def crop_img(self, img, text_box_pnts_transformed): return dst, dst_bbox + def stretch_img_w(self,img,text_box_pnts): + ''' + 宽度方向进行拉伸 + ''' + min = self.cfg.stretch.min + max = self.cfg.stretch.max + scale = np.random.uniform(min,max) + + img = cv2.resize(img,None,fx = scale,fy = 1.0,interpolation = cv2.INTER_CUBIC) + text_box_pnts[0][0] = int( text_box_pnts[0][0] * scale) + text_box_pnts[1][0] = int( text_box_pnts[1][0] * scale) + text_box_pnts[2][0] = int( text_box_pnts[2][0] * scale) + text_box_pnts[3][0] = int( text_box_pnts[3][0] * scale) + return img,text_box_pnts + + def rdistort(self,image, distort=1.0, dsigma=5.0): + + h, w =image.shape + hs = np.random.randn(h, w) + ws = np.random.randn(h, w) + hs = filters.gaussian_filter(hs, dsigma) + ws = filters.gaussian_filter(ws, dsigma) + hs *= distort/np.amax(hs) + ws *= distort/np.amax(ws) + #cval = np.amax(image) + + def f(p): + return p[0]+hs[p[0], p[1]], p[1]+ws[p[0], p[1]] + + return interpolation.geometric_transform(image, f, output_shape=(h, w), order=1, mode='nearest') + + def int_around(self, val): return int(np.around(val)) @@ -216,10 +264,55 @@ def get_word_color(self, bg, text_x, text_y, word_height, word_width): word_roi_bg = bg[ymin: ymax, xmin: xmax] - bg_mean = int(np.mean(word_roi_bg) * (2 / 3)) - word_color = random.randint(0, bg_mean) + #去掉亮色区域 + word_roi_bg = word_roi_bg[word_roi_bg<225] + bg_mean = 0 + if(len(word_roi_bg)<=0): + bg_mean = 225 + else: + bg_mean = np.mean(word_roi_bg) + word_color = int(bg_mean * (2 / 3)) + word_color = random.randint(0, word_color) + #保证字体和背景最少有60个灰度差 + word_color = word_color if (bg_mean - word_color) > 60 else max(0,(bg_mean - 60)) + return word_color + + def draw_sum_on_bg(self,bg,sum,word,font): + bg_height = bg.shape[0] + bg_width = bg.shape[1] + + word_size = self.get_word_size(font, word) + word_height = word_size[1] + word_width = word_size[0] + + + x1 = int((bg_width - word_width) / 2) + y1 = int((bg_height - word_height) / 2) + x2 = x1 + word_width + y2 = y1 + word_height + + random_x = np.random.randint(x1,x2) + random_y = np.random.randint(y1,y2) + + center = (bg.shape[1] // 2, bg.shape[0] // 2) + + # opencv seamlessClone require bgr image + text_img_bgr = np.ones((text_img.shape[0], text_img.shape[1], 3), np.uint8) + bg_bgr = np.ones((bg.shape[0], bg.shape[1], 3), np.uint8) + cv2.cvtColor(text_img, cv2.COLOR_GRAY2BGR, text_img_bgr) + cv2.cvtColor(bg, cv2.COLOR_GRAY2BGR, bg_bgr) + + flag = cv2.MIXED_CLONE + + mixed_clone = cv2.seamlessClone(text_img_bgr, bg_bgr, text_mask, center, flag) + + np_img = cv2.cvtColor(mixed_clone, cv2.COLOR_BGR2GRAY) + + + + def draw_text_on_bg(self, word, font, bg): """ Draw word in the center of background @@ -300,11 +393,12 @@ def draw_text_seamless(self, font, bg, word, word_color, word_height, word_width cv2.cvtColor(text_img, cv2.COLOR_GRAY2BGR, text_img_bgr) cv2.cvtColor(bg, cv2.COLOR_GRAY2BGR, bg_bgr) - flag = np.random.choice([ - cv2.NORMAL_CLONE, - cv2.MIXED_CLONE, - cv2.MONOCHROME_TRANSFER - ]) + #flag = np.random.choice([ + # cv2.NORMAL_CLONE, + # cv2.MIXED_CLONE, + # cv2.MONOCHROME_TRANSFER + #]) + flag = cv2.MIXED_CLONE mixed_clone = cv2.seamlessClone(text_img_bgr, bg_bgr, text_mask, center, flag) @@ -422,21 +516,26 @@ def gen_bg_from_image(self, width, height): """ Resize background, let bg_width>=width, bg_height >=height, and random crop from resized background """ - assert width > height + assert width > height bg = random.choice(self.bgs) - scale = max(width / bg.shape[1], height / bg.shape[0]) + #scale = max(width / bg.shape[1], height / bg.shape[0]) + fx_scale = max(1.0,width/bg.shape[1]) + fy_scale = max(1.0,height/bg.shape[0]) - out = cv2.resize(bg, None, fx=scale, fy=scale) + #out = cv2.resize(bg, None, fx=scale, fy=scale) + out = cv2.resize(bg,None,fx = fx_scale,fy = fy_scale) x_offset, y_offset = self.random_xy_offset(height, width, out.shape[0], out.shape[1]) + #print(height, width, out.shape[0], out.shape[1],x_offset,y_offset) + out = out[y_offset:y_offset + height, x_offset:x_offset + width] - out = self.apply_gauss_blur(out, ks=[7, 11, 13, 15, 17]) + #out = self.apply_gauss_blur(out) - bg_mean = int(np.mean(out)) + #bg_mean = int(np.mean(out)) # TODO: find a better way to deal with background # alpha = 255 / bg_mean # 对比度 @@ -472,6 +571,8 @@ def pick_font(self, img_index): # Font size in point font_size = random.randint(self.cfg.font_size.min, self.cfg.font_size.max) + + font = ImageFont.truetype(font_path, font_size) return word, font, self.get_word_size(font, word) @@ -489,6 +590,7 @@ def get_word_size(self, font, word): size = (size[0] - offset[0], size[1] - offset[1]) return size + def apply_perspective_transform(self, img, text_box_pnts, max_x, max_y, max_z, gpu=False): """ Apply perspective transform on image @@ -502,36 +604,41 @@ def apply_perspective_transform(self, img, text_box_pnts, max_x, max_y, max_z, g dst_img_pnts: points of whole word image after apply perspective transform dst_text_pnts: points of text after apply perspective transform """ - - x = math_utils.cliped_rand_norm(0, max_x) - y = math_utils.cliped_rand_norm(0, max_y) - z = math_utils.cliped_rand_norm(0, max_z) - - # print("x: %f, y: %f, z: %f" % (x, y, z)) - - transformer = math_utils.PerspectiveTransform(x, y, z, scale=1.0, fovy=50) - - dst_img, M33, dst_img_pnts = transformer.transform_image(img, gpu) - dst_text_pnts = transformer.transform_pnts(text_box_pnts, M33) - - return dst_img, dst_img_pnts, dst_text_pnts + degree = 100 + while True: + x = math_utils.cliped_rand_norm(0, max_x) + y = math_utils.cliped_rand_norm(0, max_y) + z = math_utils.cliped_rand_norm(0, max_z) + + #print("x: %f, y: %f, z: %f" % (x, y, z)) + + transformer = math_utils.PerspectiveTransform(x, y, z, scale=1.0, fovy=50) + dst_img, M33, dst_img_pnts = transformer.transform_image(img, gpu) + dst_text_pnts = transformer.transform_pnts(text_box_pnts, M33) + + #不要旋转过多角度 + degree = np.arctan2( dst_text_pnts[0][1] - dst_text_pnts[1][1], + dst_text_pnts[0][0] - dst_text_pnts[1][0])*180 / np.pi + degree = np.abs(degree) + degree = degree if degree < 90 else 180 - degree + + if(degree <= 2): + return dst_img, dst_img_pnts, dst_text_pnts + #else: + # print('degree =',degree) def apply_blur_on_output(self, img): if prob(0.5): - return self.apply_gauss_blur(img, [3, 5]) + return self.apply_gauss_blur(img) else: return self.apply_norm_blur(img) - def apply_gauss_blur(self, img, ks=None): - if ks is None: - ks = [7, 9, 11, 13] - ksize = random.choice(ks) - - sigmas = [0, 1, 2, 3, 4, 5, 6, 7] - sigma = 0 - if ksize <= 3: - sigma = random.choice(sigmas) - img = cv2.GaussianBlur(img, (ksize, ksize), sigma) + def apply_gauss_blur(self, img, sigmas=None): + if sigmas is None: + sigmas = np.arange(0.1,0.6,0.1) + + sigma = random.choice(sigmas) + img = cv2.GaussianBlur(img, (0, 0), sigma) return img def apply_norm_blur(self, img, ks=None): @@ -550,8 +657,19 @@ def apply_prydown(self, img): height = img.shape[0] width = img.shape[1] - out = cv2.resize(img, (int(width / scale), int(height / scale)), interpolation=cv2.INTER_AREA) - return cv2.resize(out, (width, height), interpolation=cv2.INTER_AREA) + out = cv2.resize(img, (int(width / scale), int(height / scale)), interpolation=cv2.INTER_NEAREST) + return cv2.resize(out, (width, height), interpolation=cv2.INTER_NEAREST) + + def apply_pryup(self, img): + """ + 模拟失真 ,近邻插值 + """ + scale = np.random.choice([0.8,0.9,1.1,1.25,1.35]) + height = img.shape[0] + width = img.shape[1] + + out = cv2.resize(img,None,fx = scale,fy = scale, interpolation=cv2.INTER_LINEAR) + return cv2.resize(out, (width, height), interpolation=cv2.INTER_LINEAR) def reverse_img(self, word_img): offset = np.random.randint(-10, 10) diff --git a/textrenderer/tmp/charset.py b/textrenderer/tmp/charset.py new file mode 100644 index 0000000..4b099c9 --- /dev/null +++ b/textrenderer/tmp/charset.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +charset = '¥疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>::],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸摁淹豇虎榭吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' +biaodian = '<>::],,;./*)[、|¥》"%?〈〖〔〉〗’^}~】\“『。』‘$【〕°《」{「\'' diff --git a/textrenderer/tmp/config.py b/textrenderer/tmp/config.py new file mode 100644 index 0000000..3e8afe7 --- /dev/null +++ b/textrenderer/tmp/config.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +fonts = r"E:\deeplearn\OCR\Font-chi-筛检" +smuDir =r'E:\deeplearn\OCR2\ocr-data\zhiwen' +bgDir = r'E:\deeplearn\OCR2\ocr-data\bg' + +#smuDir ='NISTSpecialDatabase4GrayScaleImagesofFIGS' +#bgDir = 'bg' +#fonts = "fonts" + + +underline_percent = 30 +gauss_percent = 30 +gauss_range=[0,0.6] +distort_percent = 30 +geometry_percent = 30 +smudginess_percent = 30 +rand_pading_percent = 30 +add_biaodian_percent = 0 +skewing_percent = 10 +skewing_range = (-2, 3) +font_gray=[0,0] + + +distortParamList = [ + (3.0, 10.0), + (2.0, 10.0), + (1.0, 10.0) +] + +geometryParamlist = [ + (0.0001, 0.00003), + (0.002, 0.0003), + (0.0002, 0.00005), + (0.0003, 0.00002), + (0.0005, 0.00006) +] diff --git a/textrenderer/tmp/generator.py b/textrenderer/tmp/generator.py new file mode 100644 index 0000000..d57328e --- /dev/null +++ b/textrenderer/tmp/generator.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import random + +import cv2 +import utils +import config +import argparse +import charset + +from multiprocessing import Pool + + +def gen_image(fonts, text, bgs, smudginess): + bg = utils.load_bg(random.choice(bgs)) + + smu = None + if random.randint(0, 100) < config.smudginess_percent: + smu = random.choice(smudginess) + + + gauss = 0.0 + if random.randint(0, 100) < config.gauss_percent: + # gauss = random.randint(1, 3) + gauss = random.uniform(config.gauss_range[0],config.gauss_range[1]) + + underline = False + if random.randint(0, 100) < config.underline_percent: + underline = True + + distort_param = None + if random.randint(0, 100) < config.distort_percent: + distort_index = random.randint(0, len(config.distortParamList) - 1) + distort_param = config.distortParamList[distort_index] + + geometry_param = None + if random.randint(0, 100) < config.geometry_percent: + geometry_index = random.randint(0, len(config.geometryParamlist) - 1) + geometry_param = config.geometryParamlist[geometry_index] + + skewing = None + if random.randint(0, 100) < config.skewing_percent: + skewing = config.skewing_range + + font_gray = random.randint(config.font_gray[0],config.font_gray[1]) + return utils.gen_line(bg, fonts,font_gray, text, + underline=underline, + gauss=gauss, + distort_param=distort_param, + geometry_param=geometry_param, + smudginess=smu, + skewing=skewing) + + +def gen_text(idx, text, font_files, bgs, smudginess, out_dir): + print("gen_text -->idx: ", idx, "text: " + text) + font_file = random.choice(font_files) + print('font file -->',font_file) + fonts = utils.load_fonts_size(font_file, (32, 48)) + + if len(text) < 7: + if random.randint(0, 100) < config.add_biaodian_percent: + if random.randint(0, 1) == 0: + text += random.choice(charset.biaodian) + else: + text = random.choice(charset.biaodian) + text + + file_name = out_dir + "/%09d" % idx + im = gen_image(fonts, text, bgs, smudginess) + if im is not None: + cv2.imwrite(file_name + ".png", im) + print("write file to ", file_name+'.png') + with open(file_name + ".gt.txt", "w") as f: + f.write(text + "\n") + + return 216 + + +def random_add_char(lines, percent, chset): + + if percent > 0: + ret = [] + for line in lines: + if random.randint(0, 100) < percent: + pos = random.randint(0, len(line) - 2) + ret.append(line[:pos] + random.choice(chset) + line[pos:]) + return ret + else: + return lines + + +def gen_chinese(out_dir, count, worker_num): + + lines = [] + for i in range(0, count): + lines.extend(utils.get_dic_lines(charset.charset)) + lines = random_add_char(lines, config.add_biaodian_percent, charset.biaodian) + + gen_lines(lines, out_dir, worker_num) + + +def gen_lines(lines, out_dir, worker_num): + fonts = utils.load_fonts_path(config.fonts) + smudginess = utils.load_smudginess(config.smuDir) + bgs = utils.load_bgs(config.bgDir) + l = len(lines) + step = 10000 + count = int(l / step) + for i in range(0, count): + gen_line_range(out_dir, worker_num, lines, i * 10000, (i + 1) * 10000, fonts, bgs, smudginess) + gen_line_range(out_dir, worker_num, lines, count * 10000, l, fonts, bgs, smudginess) + print('job done!!!!') + + +def gen_line_range(out_dir, worker_num, lines, star, end, fonts, bgs, smudginess): + + for idx in range(star, end): + out_path = out_dir + '\\' + str(int(idx / 1000)) + '\\' + if not os.path.exists(out_path): + os.makedirs(out_path) + + pool = Pool(worker_num) + result = [] + for idx in range(star, end): + out_path = out_dir + '/' + str(int(idx / 1000)) + '/' + result.append(pool.apply_async(gen_text, (idx, lines[idx], fonts, bgs, smudginess, out_path))) + pool.close() + pool.join() + print("wait process to finish") + return [res.get() for res in result] + +if __name__=='__main__': + parser = argparse.ArgumentParser(description="Generate text line training data") + parser.add_argument('-o', '--base', default=r'E:\deeplearn\OCR\Sample\trainnew', help='output directory, default: %(default)s') + parser.add_argument('-c', '--count', default=1, type=int) + + parser.add_argument('-w', '--worknum', default=8, type=int) + + args = parser.parse_args() + + gen_chinese(args.base + "/chinese/", args.count, args.worknum) + + + + + + + diff --git a/textrenderer/tmp/utils.py b/textrenderer/tmp/utils.py new file mode 100644 index 0000000..9e32d36 --- /dev/null +++ b/textrenderer/tmp/utils.py @@ -0,0 +1,325 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import random + +import cv2 +import math +import numpy +import numpy as np +from PIL import ImageFont, Image, ImageDraw +from numpy import asarray, amax +from scipy.ndimage import filters, measurements, interpolation +from numpy.random import randn +import config + + +def str_shuffle(s): + return ''.join(random.sample(s, len(s))) + + +def get_dic_lines(alphabet): + lines = [] + s = str_shuffle(alphabet) + start = 0 + end = 0 + l = random.randint(3, 6) + end += l + length = len(s) + while end < length: + print(s[start:end]) + lines.append(s[start:end]) + start = end + end += random.randint(3, 6) + if end != length: + lines.append(s[start:] + "".join(random.sample(alphabet, end-length))) + return lines + + +def load_fonts(fonts_dir): + + font_files = [] + for root, dirs, files in os.walk(fonts_dir): + for name in files: + font_files.append(os.path.join(root, name)) + fonts = [] + for fontFile in font_files: + fonts.append(ImageFont.truetype(fontFile, 48)) + return fonts + + +def load_fonts_path(fonts_dir): + font_files = [] + for root, dirs, files in os.walk(fonts_dir): + for name in files: + font_files.append(os.path.join(root, name)) + + return font_files + + +def load_font(file): + return ImageFont.truetype(file, 48) + + +def load_fonts_size(file, size): + fonts = [] + start, end = size + for i in range(start, end): + fonts.append(ImageFont.truetype(file, i)) + return fonts + + +def load_bgs(bg_dir): + bg_files = [] + for root, dirs, files in os.walk(bg_dir): + for name in files: + bg_files.append(os.path.join(root, name)) + return bg_files + + +def load_smudginess(smu_dir): + f = [] + for root, dirs, files in os.walk(smu_dir): + for name in files: + if os.path.splitext(name)[1] == '.png': + f.append(os.path.join(root,name)) + return f + + +def load_bg(path): + bg = Image.open(path); + bg = bg.convert("RGB") + return bg.resize((1200, 300), Image.ANTIALIAS) + + +def load_textfiles(dir_path): + print("load text file start") + words = [] + for root, dirs, files in os.walk(dir_path): + for name in files: + w = load_words(os.path.join(root, name)) + if w: + words.extend(w) + return words + + +def load_words(file): + print("load text : ", file) + try: + with open(file) as fr: + return [line.strip() for line in fr] + except Exception as e: + print(e) + + +def rgeometry(image, eps=0.0001, delta=0.00003): + m = numpy.array([[1 + eps * randn(), 0.0], [eps * randn(), 1.0 + eps * randn()]]) + w, h = image.shape + c = numpy.array([w / 2.0, h / 2]) + d = c - numpy.dot(m, c) + numpy.array([randn() * delta, numpy.random.randn() * delta]) + return interpolation.affine_transform(image, m, offset=d, order=1, mode='constant', cval=image[0, 0]) + + +def rdistort(image, distort=3.0, dsigma=10.0, cval=0): + + h, w = image.shape + hs = randn(h, w) + ws = randn(h, w) + hs = filters.gaussian_filter(hs, dsigma) + ws = filters.gaussian_filter(ws, dsigma) + hs *= distort/amax(hs) + ws *= distort/amax(ws) + + def f(p): + return p[0]+hs[p[0], p[1]], p[1]+ws[p[0], p[1]] + + return interpolation.geometric_transform(image, f, output_shape=(h, w), order=1, mode='constant', cval=cval) + + +# 颜色减淡操作 +def dodge(gray, factor=1.0): + return np.minimum(gray+100*factor, 255) + + + +def reverse(gray): + return 255 - gray + + +def rotat(img): + img = reverse(img) + rows, cols = numpy.shape(img) + angle = random.randint(-30, 30) + m = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1) + img = cv2.warpAffine(img, m, (cols, rows)) + img = reverse(img) + return img + + +def get_smudginess(filename, size=(80, 120)): + + smu = cv2.imread(filename, 0) + smu = cv2.resize(smu, size) + smu = asarray(smu, 'f') + smu = dodge(smu, random.uniform(0.8, 1.1)) + smu = rotat(smu) + return smu + + +def add_smudginess(img, smu, pos): + return merge_pic(img, smu, pos) + + +def merge_pic(target, source, pos): + + w, h = source.shape + x, y = pos + cv2.bitwise_not(source, source) + image_roi = target[x:x + w, y:y + h] + print(image_roi.shape) + + cv2.bitwise_not(image_roi, image_roi) + rest = cv2.bitwise_or(source, image_roi) + + # 结果取反 + cv2.bitwise_not(rest, rest) + cv2.bitwise_not(source, source) + target[x:x + w, y:y + h] = rest + return target + +#size=top,bottom,left,right +def crop_with_size(image, size, pad=(1, 1, 1, 1)): + y1, y2, x1, x2 = pad + r0, r1, c0, c1 = size + image = image[r0 - y1:r1 + y2, c0 - x1:c1 + x2] + return image + + +def sharpen(img): + kernel = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]]) + return cv2.filter2D(img, -1, kernel) + + +#def add_gauss(img, level): +# return cv2.GaussianBlur(img, (level * 2 + 1, level * 2 + 1),1.5); +def add_gauss(img, gauss): + return cv2.GaussianBlur(img, (0, 0),gauss); + + + +def gen_line(bg, fonts, font_gray,text, underline=False, gauss=0, distort_param=None, geometry_param=None, smudginess=None, skewing=None, outpadding=(0, 0, 0, 0,)): + + text_img = Image.new('RGBA', (3000, 300)) + draw = ImageDraw.Draw(text_img) + + (x, y, w, h) = draw_line(draw, fonts,font_gray, text, underline) + + crop_size = (y, y + h, x, x + w) + y0, y1, x0, x1 = crop_size + text_img = text_img.crop((x0, y0, x1, y1+random.randint(0,2))) + + w, h = text_img.size + if skewing: + start, end = skewing + skewing_angle = random.randint(start, end) + if skewing_angle < 0: + skewing_angle += 360 + text_img = text_img.rotate(skewing_angle, expand=1) + w, h = text_img.size + + text_img = text_img.resize((getWidth(h, w), 32)) + w, h = text_img.size + max_width = 216 + + if w > max_width: + return None + left = random.randint(30, bg.size[0] - max_width - 80 - 1) + top = random.randint(10, bg.size[1] - h - 5) + + #32*max_width + + left_offset = random.randint(0, max_width - w) + top_offset = random.randint(0, 4) + + random_left = left + left_offset + random_top = top + top_offset + bg.paste(text_img, (random_left, random_top), mask=text_img) + image = bg.convert("L") + im = asarray(image, 'f') + + if distort_param: + distort, dsigma = distort_param + cval = amax(im) + im = rdistort(im, distort=distort, dsigma=dsigma, cval=cval) + + crop_size = (top, top + 32, left, left + max_width) + if smudginess: + smu = get_smudginess(smudginess) + + y0, _, x0, _ = crop_size + x, y = (random.randint(x0-25, x0 + w), random.randint(0, 60)) + im = add_smudginess(im, smu, (y, x)) + im = crop_with_size(im, crop_size, outpadding) + + if geometry_param: + eps, delta = geometry_param + im = rgeometry(im, eps=eps, delta=delta) + + if gauss > 0: + im = add_gauss(im, gauss) + elif gauss < 0: + im = sharpen(im) + else: + pass + return im + + +def draw_underlined_text(draw, pos, text, font, font_gray,linesize=3, gap=2, **options): + + bbox = draw_line_text(draw, pos, text, font,font_gray, **options) + _, _, width, height = bbox + lx, ly = pos[0], pos[1] + height + + draw.line((lx, ly + gap, lx + width, ly + gap), width=linesize, fill=(font_gray,font_gray,font_gray), **options) + return bbox[0], bbox[1], bbox[2], bbox[3] + gap + linesize + 1 + + +def draw_line_text(draw, pos, text, fonts,font_gray, **options): + x, y = pos + h_max = 0 + for c in text: + font = random.choice(fonts) + w, h = font.getsize(c) + if h < 42: + h_padding = random.randint(0, int((48-h)/2)) + else: + h_padding=0 + h_max = max(h_max, h + h_padding) + + draw.text((x, h_padding + y), c, font=font, fill=(font_gray,font_gray,font_gray), **options) + x += w + lx, ly = pos[0], pos[1] + return lx, ly, x - lx, h_max+2 + + +def draw_line(draw, fonts,font_gray, text, underline, **options): + start = (40, 40) + if underline: + gap = random.randint(-2, 3) + line_size = random.randint(1, 3) + bbox = draw_underlined_text(draw, start, text, fonts,font_gray, linesize=line_size, gap=gap, + **options) + return bbox + else: + return draw_line_text(draw, start, text, fonts,font_gray, **options) + + +def random_str(charset, size): + return ''.join(random.sample(charset, size)) + + +def getWidth(h, w): + high = 28 + rate = high / h + width = int(np.ceil(rate * w)) + return width + 4 - width % 4 \ No newline at end of file diff --git a/tools/check_font.py b/tools/check_font.py index 5f40732..3da8d5b 100644 --- a/tools/check_font.py +++ b/tools/check_font.py @@ -1,17 +1,25 @@ + + import argparse import glob import sys import os import time +import io +import logging + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') sys.path.insert(0, os.path.abspath(os.path.join(__file__, '../', '../'))) + from libs.utils import load_chars from libs.font_utils import check_font_chars, load_font if __name__ == '__main__': parser = argparse.ArgumentParser(description='Find chars not support by some fonts') parser.add_argument('--chars_file', type=str, default='./data/chars/chn.txt') - parser.add_argument('--font_dir', type=str, default='./data/fonts/eng') + parser.add_argument('--font_dir', type=str, default='./data/fonts/chn') + parser.add_argument('--log_dir',type=str,default='./data/fonts') parser.add_argument('--delete', action="store_true", default=False, help='whether or not to delete font which not full support the chars_file') @@ -26,10 +34,19 @@ fonts[p] = ttf useful_fonts = [] + + + logfile = os.path.abspath(os.path.join(args.log_dir,'check_font.log')) + filehander = logging.FileHandler(logfile,'w',encoding='utf-8') + log = logging.getLogger('check_font_error') + log.addHandler(filehander) + log.setLevel(logging.INFO) + for k, v in fonts.items(): unsupported_chars, _ = check_font_chars(v, charset) - print("font: %s ,chars unsupported: %d" % (k, len(unsupported_chars))) + #print("font: %s ,chars unsupported: %d %s" % (k, len(unsupported_chars),unsupported_chars)) + log.info("font: %s ,chars unsupported: %d %s" % (k, len(unsupported_chars),unsupported_chars)) if len(unsupported_chars) != 0: if args.delete: os.remove(k) diff --git a/tools/check_image.py b/tools/check_image.py new file mode 100644 index 0000000..6269485 --- /dev/null +++ b/tools/check_image.py @@ -0,0 +1,4 @@ + +""" +所有的字体随机生成100张图片 +"""