From 908d12b2fd9bf587eeeb53bc06d41c6b58a15378 Mon Sep 17 00:00:00 2001 From: SWHL Date: Sat, 22 May 2021 10:31:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E6=96=87=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=8E=A8=E7=90=86=E4=BB=A3=E7=A0=81=E5=92=8C=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/japan_ppocr_mobile_v2_rec/__init__.py | 1 + .../japan_ppocr_mobile_v2_rec/japan_dict.txt | 4399 +++++++++++++++++ .../text_recognize.py | 136 + python/japan_ppocr_mobile_v2_rec/utils.py | 124 + python/readme.md | 5 +- python/test_images/rec_images/japan/1.jpg | Bin 0 -> 8898 bytes 6 files changed, 4664 insertions(+), 1 deletion(-) create mode 100644 python/japan_ppocr_mobile_v2_rec/__init__.py create mode 100644 python/japan_ppocr_mobile_v2_rec/japan_dict.txt create mode 100644 python/japan_ppocr_mobile_v2_rec/text_recognize.py create mode 100644 python/japan_ppocr_mobile_v2_rec/utils.py create mode 100644 python/test_images/rec_images/japan/1.jpg diff --git a/python/japan_ppocr_mobile_v2_rec/__init__.py b/python/japan_ppocr_mobile_v2_rec/__init__.py new file mode 100644 index 0000000..686ffdd --- /dev/null +++ b/python/japan_ppocr_mobile_v2_rec/__init__.py @@ -0,0 +1 @@ +from .text_recognize import TextRecognizer \ No newline at end of file diff --git a/python/japan_ppocr_mobile_v2_rec/japan_dict.txt b/python/japan_ppocr_mobile_v2_rec/japan_dict.txt new file mode 100644 index 0000000..339d4b8 --- /dev/null +++ b/python/japan_ppocr_mobile_v2_rec/japan_dict.txt @@ -0,0 +1,4399 @@ +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +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 +© +° +² +´ +½ +Á +Ä +Å +Ç +È +É +Í +Ó +Ö +× +Ü +ß +à +á +â +ã +ä +å +æ +ç +è +é +ê +ë +í +ð +ñ +ò +ó +ô +õ +ö +ø +ú +û +ü +ý +ā +ă +ą +ć +Č +č +đ +ē +ė +ę +ğ +ī +ı +Ł +ł +ń +ň +ō +ř +Ş +ş +Š +š +ţ +ū +ż +Ž +ž +Ș +ș +ț +Δ +α +λ +μ +φ +Г +О +а +в +л +о +р +с +т +я +ồ +​ +— +― +’ +“ +” +… +℃ +→ +∇ +− +■ +☆ +  +、 +。 +々 +〆 +〈 +〉 +「 +」 +『 +』 +〔 +〕 +〜 +ぁ +あ +ぃ +い +う +ぇ +え +ぉ +お +か +が +き +ぎ +く +ぐ +け +げ +こ +ご +さ +ざ +し +じ +す +ず +せ +ぜ +そ +ぞ +た +だ +ち +ぢ +っ +つ +づ +て +で +と +ど +な +に +ぬ +ね +の +は +ば +ぱ +ひ +び +ぴ +ふ +ぶ +ぷ +へ +べ +ぺ +ほ +ぼ +ぽ +ま +み +む +め +も +ゃ +や +ゅ +ゆ +ょ +よ +ら +り +る +れ +ろ +わ +ゑ +を +ん +ゝ +ゞ +ァ +ア +ィ +イ +ゥ +ウ +ェ +エ +ォ +オ +カ +ガ +キ +ギ +ク +グ +ケ +ゲ +コ +ゴ +サ +ザ +シ +ジ +ス +ズ +セ +ゼ +ソ +ゾ +タ +ダ +チ +ヂ +ッ +ツ +ヅ +テ +デ +ト +ド +ナ +ニ +ヌ +ネ +ノ +ハ +バ +パ +ヒ +ビ +ピ +フ +ブ +プ +ヘ +ベ +ペ +ホ +ボ +ポ +マ +ミ +ム +メ +モ +ャ +ヤ +ュ +ユ +ョ +ヨ +ラ +リ +ル +レ +ロ +ワ +ヰ +ン +ヴ +ヵ +ヶ +・ +ー +㈱ +一 +丁 +七 +万 +丈 +三 +上 +下 +不 +与 +丑 +且 +世 +丘 +丙 +丞 +両 +並 +中 +串 +丸 +丹 +主 +丼 +丿 +乃 +久 +之 +乎 +乏 +乗 +乘 +乙 +九 +乞 +也 +乱 +乳 +乾 +亀 +了 +予 +争 +事 +二 +于 +互 +五 +井 +亘 +亙 +些 +亜 +亟 +亡 +交 +亥 +亦 +亨 +享 +京 +亭 +亮 +人 +什 +仁 +仇 +今 +介 +仍 +仏 +仔 +仕 +他 +仗 +付 +仙 +代 +令 +以 +仮 +仰 +仲 +件 +任 +企 +伊 +伍 +伎 +伏 +伐 +休 +会 +伝 +伯 +估 +伴 +伶 +伸 +伺 +似 +伽 +佃 +但 +位 +低 +住 +佐 +佑 +体 +何 +余 +佚 +佛 +作 +佩 +佳 +併 +佶 +使 +侈 +例 +侍 +侏 +侑 +侘 +供 +依 +侠 +価 +侮 +侯 +侵 +侶 +便 +係 +促 +俄 +俊 +俔 +俗 +俘 +保 +信 +俣 +俤 +修 +俯 +俳 +俵 +俸 +俺 +倉 +個 +倍 +倒 +候 +借 +倣 +値 +倫 +倭 +倶 +倹 +偃 +假 +偈 +偉 +偏 +偐 +偕 +停 +健 +側 +偵 +偶 +偽 +傀 +傅 +傍 +傑 +傘 +備 +催 +傭 +傲 +傳 +債 +傷 +傾 +僊 +働 +像 +僑 +僕 +僚 +僧 +僭 +僮 +儀 +億 +儇 +儒 +儛 +償 +儡 +優 +儲 +儺 +儼 +兀 +允 +元 +兄 +充 +兆 +先 +光 +克 +兌 +免 +兎 +児 +党 +兜 +入 +全 +八 +公 +六 +共 +兵 +其 +具 +典 +兼 +内 +円 +冊 +再 +冑 +冒 +冗 +写 +冠 +冤 +冥 +冨 +冬 +冲 +决 +冶 +冷 +准 +凉 +凋 +凌 +凍 +凛 +凝 +凞 +几 +凡 +処 +凪 +凰 +凱 +凶 +凸 +凹 +出 +函 +刀 +刃 +分 +切 +刈 +刊 +刎 +刑 +列 +初 +判 +別 +利 +刪 +到 +制 +刷 +券 +刹 +刺 +刻 +剃 +則 +削 +剋 +前 +剖 +剛 +剣 +剤 +剥 +剪 +副 +剰 +割 +創 +剽 +劇 +劉 +劔 +力 +功 +加 +劣 +助 +努 +劫 +劭 +励 +労 +効 +劾 +勃 +勅 +勇 +勉 +勒 +動 +勘 +務 +勝 +募 +勢 +勤 +勧 +勲 +勺 +勾 +勿 +匁 +匂 +包 +匏 +化 +北 +匙 +匝 +匠 +匡 +匣 +匯 +匲 +匹 +区 +医 +匿 +十 +千 +升 +午 +卉 +半 +卍 +卑 +卒 +卓 +協 +南 +単 +博 +卜 +占 +卦 +卯 +印 +危 +即 +却 +卵 +卸 +卿 +厄 +厚 +原 +厠 +厨 +厩 +厭 +厳 +去 +参 +又 +叉 +及 +友 +双 +反 +収 +叔 +取 +受 +叙 +叛 +叟 +叡 +叢 +口 +古 +句 +叩 +只 +叫 +召 +可 +台 +叱 +史 +右 +叶 +号 +司 +吃 +各 +合 +吉 +吊 +同 +名 +后 +吏 +吐 +向 +君 +吝 +吟 +吠 +否 +含 +吸 +吹 +吻 +吽 +吾 +呂 +呆 +呈 +呉 +告 +呑 +周 +呪 +呰 +味 +呼 +命 +咀 +咄 +咋 +和 +咒 +咫 +咲 +咳 +咸 +哀 +品 +哇 +哉 +員 +哨 +哩 +哭 +哲 +哺 +唄 +唆 +唇 +唐 +唖 +唯 +唱 +唳 +唸 +唾 +啄 +商 +問 +啓 +啼 +善 +喋 +喚 +喜 +喝 +喧 +喩 +喪 +喫 +喬 +單 +喰 +営 +嗅 +嗇 +嗔 +嗚 +嗜 +嗣 +嘆 +嘉 +嘗 +嘘 +嘩 +嘯 +嘱 +嘲 +嘴 +噂 +噌 +噛 +器 +噴 +噺 +嚆 +嚢 +囀 +囃 +囉 +囚 +四 +回 +因 +団 +困 +囲 +図 +固 +国 +圀 +圃 +國 +圏 +園 +圓 +團 +圜 +土 +圧 +在 +圭 +地 +址 +坂 +均 +坊 +坐 +坑 +坡 +坤 +坦 +坪 +垂 +型 +垢 +垣 +埃 +埋 +城 +埒 +埔 +域 +埠 +埴 +埵 +執 +培 +基 +埼 +堀 +堂 +堅 +堆 +堕 +堤 +堪 +堯 +堰 +報 +場 +堵 +堺 +塀 +塁 +塊 +塑 +塔 +塗 +塘 +塙 +塚 +塞 +塩 +填 +塵 +塾 +境 +墉 +墓 +増 +墜 +墟 +墨 +墳 +墺 +墻 +墾 +壁 +壇 +壊 +壌 +壕 +士 +壬 +壮 +声 +壱 +売 +壷 +壹 +壺 +壽 +変 +夏 +夕 +外 +夙 +多 +夜 +夢 +夥 +大 +天 +太 +夫 +夬 +夭 +央 +失 +夷 +夾 +奄 +奇 +奈 +奉 +奎 +奏 +契 +奔 +奕 +套 +奘 +奠 +奢 +奥 +奨 +奪 +奮 +女 +奴 +奸 +好 +如 +妃 +妄 +妊 +妍 +妓 +妖 +妙 +妥 +妨 +妬 +妲 +妹 +妻 +妾 +姉 +始 +姐 +姓 +委 +姚 +姜 +姞 +姥 +姦 +姨 +姪 +姫 +姶 +姻 +姿 +威 +娑 +娘 +娟 +娠 +娩 +娯 +娼 +婆 +婉 +婚 +婢 +婦 +婬 +婿 +媄 +媒 +媓 +媚 +媛 +媞 +媽 +嫁 +嫄 +嫉 +嫌 +嫐 +嫗 +嫡 +嬉 +嬌 +嬢 +嬪 +嬬 +嬾 +孁 +子 +孔 +字 +存 +孚 +孝 +孟 +季 +孤 +学 +孫 +孵 +學 +宅 +宇 +守 +安 +宋 +完 +宍 +宏 +宕 +宗 +官 +宙 +定 +宛 +宜 +宝 +実 +客 +宣 +室 +宥 +宮 +宰 +害 +宴 +宵 +家 +宸 +容 +宿 +寂 +寄 +寅 +密 +寇 +富 +寒 +寓 +寔 +寛 +寝 +察 +寡 +實 +寧 +審 +寮 +寵 +寶 +寸 +寺 +対 +寿 +封 +専 +射 +将 +尉 +尊 +尋 +對 +導 +小 +少 +尖 +尚 +尤 +尪 +尭 +就 +尹 +尺 +尻 +尼 +尽 +尾 +尿 +局 +居 +屈 +届 +屋 +屍 +屎 +屏 +屑 +屓 +展 +属 +屠 +層 +履 +屯 +山 +岐 +岑 +岡 +岩 +岫 +岬 +岳 +岷 +岸 +峠 +峡 +峨 +峯 +峰 +島 +峻 +崇 +崋 +崎 +崑 +崖 +崗 +崛 +崩 +嵌 +嵐 +嵩 +嵯 +嶂 +嶋 +嶠 +嶺 +嶼 +嶽 +巀 +巌 +巒 +巖 +川 +州 +巡 +巣 +工 +左 +巧 +巨 +巫 +差 +己 +巳 +巴 +巷 +巻 +巽 +巾 +市 +布 +帆 +希 +帖 +帚 +帛 +帝 +帥 +師 +席 +帯 +帰 +帳 +帷 +常 +帽 +幄 +幅 +幇 +幌 +幔 +幕 +幟 +幡 +幢 +幣 +干 +平 +年 +并 +幸 +幹 +幻 +幼 +幽 +幾 +庁 +広 +庄 +庇 +床 +序 +底 +庖 +店 +庚 +府 +度 +座 +庫 +庭 +庵 +庶 +康 +庸 +廂 +廃 +廉 +廊 +廓 +廟 +廠 +廣 +廬 +延 +廷 +建 +廻 +廼 +廿 +弁 +弄 +弉 +弊 +弌 +式 +弐 +弓 +弔 +引 +弖 +弗 +弘 +弛 +弟 +弥 +弦 +弧 +弱 +張 +強 +弼 +弾 +彈 +彊 +彌 +彎 +当 +彗 +彙 +彝 +形 +彦 +彩 +彫 +彬 +彭 +彰 +影 +彷 +役 +彼 +往 +征 +徂 +径 +待 +律 +後 +徐 +徑 +徒 +従 +得 +徠 +御 +徧 +徨 +復 +循 +徭 +微 +徳 +徴 +德 +徹 +徽 +心 +必 +忉 +忌 +忍 +志 +忘 +忙 +応 +忠 +快 +忯 +念 +忻 +忽 +忿 +怒 +怖 +思 +怠 +怡 +急 +性 +怨 +怪 +怯 +恂 +恋 +恐 +恒 +恕 +恣 +恤 +恥 +恨 +恩 +恬 +恭 +息 +恵 +悉 +悌 +悍 +悔 +悟 +悠 +患 +悦 +悩 +悪 +悲 +悼 +情 +惇 +惑 +惚 +惜 +惟 +惠 +惣 +惧 +惨 +惰 +想 +惹 +惺 +愈 +愉 +愍 +意 +愔 +愚 +愛 +感 +愷 +愿 +慈 +態 +慌 +慎 +慕 +慢 +慣 +慧 +慨 +慮 +慰 +慶 +憂 +憎 +憐 +憑 +憙 +憤 +憧 +憩 +憬 +憲 +憶 +憾 +懇 +應 +懌 +懐 +懲 +懸 +懺 +懽 +懿 +戈 +戊 +戌 +戎 +成 +我 +戒 +戔 +或 +戚 +戟 +戦 +截 +戮 +戯 +戴 +戸 +戻 +房 +所 +扁 +扇 +扈 +扉 +手 +才 +打 +払 +托 +扮 +扱 +扶 +批 +承 +技 +抄 +把 +抑 +抓 +投 +抗 +折 +抜 +択 +披 +抱 +抵 +抹 +押 +抽 +担 +拇 +拈 +拉 +拍 +拏 +拐 +拒 +拓 +拘 +拙 +招 +拝 +拠 +拡 +括 +拭 +拳 +拵 +拶 +拾 +拿 +持 +挂 +指 +按 +挑 +挙 +挟 +挨 +振 +挺 +挽 +挿 +捉 +捕 +捗 +捜 +捧 +捨 +据 +捺 +捻 +掃 +掄 +授 +掌 +排 +掖 +掘 +掛 +掟 +採 +探 +掣 +接 +控 +推 +掩 +措 +掬 +掲 +掴 +掻 +掾 +揃 +揄 +揆 +揉 +描 +提 +揖 +揚 +換 +握 +揮 +援 +揶 +揺 +損 +搦 +搬 +搭 +携 +搾 +摂 +摘 +摩 +摸 +摺 +撃 +撒 +撞 +撤 +撥 +撫 +播 +撮 +撰 +撲 +撹 +擁 +操 +擔 +擦 +擬 +擾 +攘 +攝 +攣 +支 +收 +改 +攻 +放 +政 +故 +敏 +救 +敗 +教 +敢 +散 +敦 +敬 +数 +整 +敵 +敷 +斂 +文 +斉 +斎 +斐 +斑 +斗 +料 +斜 +斟 +斤 +斥 +斧 +斬 +断 +斯 +新 +方 +於 +施 +旁 +旅 +旋 +旌 +族 +旗 +旛 +无 +旡 +既 +日 +旦 +旧 +旨 +早 +旬 +旭 +旺 +旻 +昂 +昆 +昇 +昉 +昌 +明 +昏 +易 +昔 +星 +映 +春 +昧 +昨 +昪 +昭 +是 +昵 +昼 +晁 +時 +晃 +晋 +晏 +晒 +晟 +晦 +晧 +晩 +普 +景 +晴 +晶 +智 +暁 +暇 +暈 +暉 +暑 +暖 +暗 +暘 +暢 +暦 +暫 +暮 +暲 +暴 +暹 +暾 +曄 +曇 +曉 +曖 +曙 +曜 +曝 +曠 +曰 +曲 +曳 +更 +書 +曹 +曼 +曽 +曾 +替 +最 +會 +月 +有 +朋 +服 +朏 +朔 +朕 +朗 +望 +朝 +期 +朧 +木 +未 +末 +本 +札 +朱 +朴 +机 +朽 +杁 +杉 +李 +杏 +材 +村 +杓 +杖 +杜 +杞 +束 +条 +杢 +杣 +来 +杭 +杮 +杯 +東 +杲 +杵 +杷 +杼 +松 +板 +枅 +枇 +析 +枓 +枕 +林 +枚 +果 +枝 +枠 +枡 +枢 +枯 +枳 +架 +柄 +柊 +柏 +某 +柑 +染 +柔 +柘 +柚 +柯 +柱 +柳 +柴 +柵 +査 +柾 +柿 +栂 +栃 +栄 +栖 +栗 +校 +株 +栲 +栴 +核 +根 +栻 +格 +栽 +桁 +桂 +桃 +框 +案 +桐 +桑 +桓 +桔 +桜 +桝 +桟 +桧 +桴 +桶 +桾 +梁 +梅 +梆 +梓 +梔 +梗 +梛 +條 +梟 +梢 +梧 +梨 +械 +梱 +梲 +梵 +梶 +棄 +棋 +棒 +棗 +棘 +棚 +棟 +棠 +森 +棲 +棹 +棺 +椀 +椅 +椋 +植 +椎 +椏 +椒 +椙 +検 +椥 +椹 +椿 +楊 +楓 +楕 +楚 +楞 +楠 +楡 +楢 +楨 +楪 +楫 +業 +楮 +楯 +楳 +極 +楷 +楼 +楽 +概 +榊 +榎 +榕 +榛 +榜 +榮 +榱 +榴 +槃 +槇 +槊 +構 +槌 +槍 +槐 +様 +槙 +槻 +槽 +槿 +樂 +樋 +樓 +樗 +標 +樟 +模 +権 +横 +樫 +樵 +樹 +樺 +樽 +橇 +橋 +橘 +機 +橿 +檀 +檄 +檎 +檐 +檗 +檜 +檣 +檥 +檬 +檮 +檸 +檻 +櫃 +櫓 +櫛 +櫟 +櫨 +櫻 +欄 +欅 +欠 +次 +欣 +欧 +欲 +欺 +欽 +款 +歌 +歎 +歓 +止 +正 +此 +武 +歩 +歪 +歯 +歳 +歴 +死 +殆 +殉 +殊 +残 +殖 +殯 +殴 +段 +殷 +殺 +殻 +殿 +毀 +毅 +母 +毎 +毒 +比 +毘 +毛 +毫 +毬 +氈 +氏 +民 +気 +水 +氷 +永 +氾 +汀 +汁 +求 +汎 +汐 +汗 +汚 +汝 +江 +池 +汪 +汰 +汲 +決 +汽 +沂 +沃 +沅 +沆 +沈 +沌 +沐 +沓 +沖 +沙 +没 +沢 +沱 +河 +沸 +油 +治 +沼 +沽 +沿 +況 +泉 +泊 +泌 +法 +泗 +泡 +波 +泣 +泥 +注 +泯 +泰 +泳 +洋 +洒 +洗 +洛 +洞 +津 +洩 +洪 +洲 +洸 +洹 +活 +洽 +派 +流 +浄 +浅 +浙 +浚 +浜 +浣 +浦 +浩 +浪 +浮 +浴 +海 +浸 +涅 +消 +涌 +涙 +涛 +涯 +液 +涵 +涼 +淀 +淄 +淆 +淇 +淋 +淑 +淘 +淡 +淤 +淨 +淫 +深 +淳 +淵 +混 +淹 +添 +清 +済 +渉 +渋 +渓 +渕 +渚 +減 +渟 +渠 +渡 +渤 +渥 +渦 +温 +渫 +測 +港 +游 +渾 +湊 +湖 +湘 +湛 +湧 +湫 +湯 +湾 +湿 +満 +源 +準 +溜 +溝 +溢 +溥 +溪 +溶 +溺 +滄 +滅 +滋 +滌 +滑 +滕 +滝 +滞 +滴 +滸 +滹 +滿 +漁 +漂 +漆 +漉 +漏 +漑 +演 +漕 +漠 +漢 +漣 +漫 +漬 +漱 +漸 +漿 +潅 +潔 +潙 +潜 +潟 +潤 +潭 +潮 +潰 +潴 +澁 +澂 +澄 +澎 +澗 +澤 +澪 +澱 +澳 +激 +濁 +濃 +濟 +濠 +濡 +濤 +濫 +濯 +濱 +濾 +瀉 +瀋 +瀑 +瀕 +瀞 +瀟 +瀧 +瀬 +瀾 +灌 +灑 +灘 +火 +灯 +灰 +灸 +災 +炉 +炊 +炎 +炒 +炭 +炮 +炷 +点 +為 +烈 +烏 +烙 +烝 +烹 +焔 +焙 +焚 +無 +焦 +然 +焼 +煇 +煉 +煌 +煎 +煕 +煙 +煤 +煥 +照 +煩 +煬 +煮 +煽 +熈 +熊 +熙 +熟 +熨 +熱 +熹 +熾 +燃 +燈 +燎 +燔 +燕 +燗 +燥 +燭 +燻 +爆 +爐 +爪 +爬 +爲 +爵 +父 +爺 +爼 +爽 +爾 +片 +版 +牌 +牒 +牘 +牙 +牛 +牝 +牟 +牡 +牢 +牧 +物 +牲 +特 +牽 +犂 +犠 +犬 +犯 +状 +狂 +狄 +狐 +狗 +狙 +狛 +狡 +狩 +独 +狭 +狷 +狸 +狼 +猊 +猛 +猟 +猥 +猨 +猩 +猪 +猫 +献 +猴 +猶 +猷 +猾 +猿 +獄 +獅 +獏 +獣 +獲 +玄 +玅 +率 +玉 +王 +玖 +玩 +玲 +珀 +珂 +珈 +珉 +珊 +珍 +珎 +珞 +珠 +珣 +珥 +珪 +班 +現 +球 +理 +琉 +琢 +琥 +琦 +琮 +琲 +琳 +琴 +琵 +琶 +瑁 +瑋 +瑙 +瑚 +瑛 +瑜 +瑞 +瑠 +瑤 +瑩 +瑪 +瑳 +瑾 +璃 +璋 +璜 +璞 +璧 +璨 +環 +璵 +璽 +璿 +瓊 +瓔 +瓜 +瓢 +瓦 +瓶 +甍 +甑 +甕 +甘 +甚 +甞 +生 +産 +甥 +用 +甫 +田 +由 +甲 +申 +男 +町 +画 +界 +畏 +畑 +畔 +留 +畜 +畝 +畠 +畢 +略 +番 +異 +畳 +當 +畷 +畸 +畺 +畿 +疆 +疇 +疋 +疎 +疏 +疑 +疫 +疱 +疲 +疹 +疼 +疾 +病 +症 +痒 +痔 +痕 +痘 +痙 +痛 +痢 +痩 +痴 +痺 +瘍 +瘡 +瘧 +療 +癇 +癌 +癒 +癖 +癡 +癪 +発 +登 +白 +百 +的 +皆 +皇 +皋 +皐 +皓 +皮 +皺 +皿 +盂 +盃 +盆 +盈 +益 +盒 +盗 +盛 +盞 +盟 +盡 +監 +盤 +盥 +盧 +目 +盲 +直 +相 +盾 +省 +眉 +看 +県 +眞 +真 +眠 +眷 +眺 +眼 +着 +睡 +督 +睦 +睨 +睿 +瞋 +瞑 +瞞 +瞬 +瞭 +瞰 +瞳 +瞻 +瞼 +瞿 +矍 +矛 +矜 +矢 +知 +矧 +矩 +短 +矮 +矯 +石 +砂 +砌 +研 +砕 +砥 +砦 +砧 +砲 +破 +砺 +硝 +硫 +硬 +硯 +碁 +碇 +碌 +碑 +碓 +碕 +碗 +碣 +碧 +碩 +確 +碾 +磁 +磐 +磔 +磧 +磨 +磬 +磯 +礁 +礎 +礒 +礙 +礫 +礬 +示 +礼 +社 +祀 +祁 +祇 +祈 +祉 +祐 +祓 +祕 +祖 +祗 +祚 +祝 +神 +祟 +祠 +祢 +祥 +票 +祭 +祷 +祺 +禁 +禄 +禅 +禊 +禍 +禎 +福 +禔 +禖 +禛 +禦 +禧 +禮 +禰 +禹 +禽 +禿 +秀 +私 +秋 +科 +秒 +秘 +租 +秤 +秦 +秩 +称 +移 +稀 +程 +税 +稔 +稗 +稙 +稚 +稜 +稠 +種 +稱 +稲 +稷 +稻 +稼 +稽 +稿 +穀 +穂 +穆 +積 +穎 +穏 +穗 +穜 +穢 +穣 +穫 +穴 +究 +空 +突 +窃 +窄 +窒 +窓 +窟 +窠 +窩 +窪 +窮 +窯 +竃 +竄 +竈 +立 +站 +竜 +竝 +竟 +章 +童 +竪 +竭 +端 +竴 +競 +竹 +竺 +竽 +竿 +笄 +笈 +笏 +笑 +笙 +笛 +笞 +笠 +笥 +符 +第 +笹 +筅 +筆 +筇 +筈 +等 +筋 +筌 +筍 +筏 +筐 +筑 +筒 +答 +策 +筝 +筥 +筧 +筬 +筮 +筯 +筰 +筵 +箆 +箇 +箋 +箏 +箒 +箔 +箕 +算 +箙 +箜 +管 +箪 +箭 +箱 +箸 +節 +篁 +範 +篆 +篇 +築 +篋 +篌 +篝 +篠 +篤 +篥 +篦 +篩 +篭 +篳 +篷 +簀 +簒 +簡 +簧 +簪 +簫 +簺 +簾 +簿 +籀 +籃 +籌 +籍 +籐 +籟 +籠 +籤 +籬 +米 +籾 +粂 +粉 +粋 +粒 +粕 +粗 +粘 +粛 +粟 +粥 +粧 +粮 +粳 +精 +糊 +糖 +糜 +糞 +糟 +糠 +糧 +糯 +糸 +糺 +系 +糾 +紀 +約 +紅 +紋 +納 +紐 +純 +紗 +紘 +紙 +級 +紛 +素 +紡 +索 +紫 +紬 +累 +細 +紳 +紵 +紹 +紺 +絁 +終 +絃 +組 +絅 +経 +結 +絖 +絞 +絡 +絣 +給 +統 +絲 +絵 +絶 +絹 +絽 +綏 +經 +継 +続 +綜 +綟 +綬 +維 +綱 +網 +綴 +綸 +綺 +綽 +綾 +綿 +緊 +緋 +総 +緑 +緒 +線 +締 +緥 +編 +緩 +緬 +緯 +練 +緻 +縁 +縄 +縅 +縒 +縛 +縞 +縢 +縣 +縦 +縫 +縮 +縹 +總 +績 +繁 +繊 +繋 +繍 +織 +繕 +繝 +繦 +繧 +繰 +繹 +繼 +纂 +纈 +纏 +纐 +纒 +纛 +缶 +罔 +罠 +罧 +罪 +置 +罰 +署 +罵 +罷 +罹 +羂 +羅 +羆 +羇 +羈 +羊 +羌 +美 +群 +羨 +義 +羯 +羲 +羹 +羽 +翁 +翅 +翌 +習 +翔 +翛 +翠 +翡 +翫 +翰 +翺 +翻 +翼 +耀 +老 +考 +者 +耆 +而 +耐 +耕 +耗 +耨 +耳 +耶 +耽 +聊 +聖 +聘 +聚 +聞 +聟 +聡 +聨 +聯 +聰 +聲 +聴 +職 +聾 +肄 +肆 +肇 +肉 +肋 +肌 +肖 +肘 +肛 +肝 +股 +肢 +肥 +肩 +肪 +肯 +肱 +育 +肴 +肺 +胃 +胆 +背 +胎 +胖 +胚 +胝 +胞 +胡 +胤 +胱 +胴 +胸 +能 +脂 +脅 +脆 +脇 +脈 +脊 +脚 +脛 +脩 +脱 +脳 +腋 +腎 +腐 +腑 +腔 +腕 +腫 +腰 +腱 +腸 +腹 +腺 +腿 +膀 +膏 +膚 +膜 +膝 +膠 +膣 +膨 +膩 +膳 +膵 +膾 +膿 +臂 +臆 +臈 +臍 +臓 +臘 +臚 +臣 +臥 +臨 +自 +臭 +至 +致 +臺 +臼 +舂 +舅 +與 +興 +舌 +舍 +舎 +舒 +舖 +舗 +舘 +舜 +舞 +舟 +舩 +航 +般 +舳 +舶 +船 +艇 +艘 +艦 +艮 +良 +色 +艶 +芋 +芒 +芙 +芝 +芥 +芦 +芬 +芭 +芯 +花 +芳 +芸 +芹 +芻 +芽 +芿 +苅 +苑 +苔 +苗 +苛 +苞 +苡 +若 +苦 +苧 +苫 +英 +苴 +苻 +茂 +范 +茄 +茅 +茎 +茗 +茘 +茜 +茨 +茲 +茵 +茶 +茸 +茹 +草 +荊 +荏 +荒 +荘 +荷 +荻 +荼 +莞 +莪 +莫 +莬 +莱 +莵 +莽 +菅 +菊 +菌 +菓 +菖 +菘 +菜 +菟 +菩 +菫 +華 +菱 +菴 +萄 +萊 +萌 +萍 +萎 +萠 +萩 +萬 +萱 +落 +葉 +著 +葛 +葡 +董 +葦 +葩 +葬 +葭 +葱 +葵 +葺 +蒋 +蒐 +蒔 +蒙 +蒟 +蒡 +蒲 +蒸 +蒻 +蒼 +蒿 +蓄 +蓆 +蓉 +蓋 +蓑 +蓬 +蓮 +蓼 +蔀 +蔑 +蔓 +蔚 +蔡 +蔦 +蔬 +蔭 +蔵 +蔽 +蕃 +蕉 +蕊 +蕎 +蕨 +蕩 +蕪 +蕭 +蕾 +薄 +薇 +薊 +薔 +薗 +薙 +薛 +薦 +薨 +薩 +薪 +薫 +薬 +薭 +薮 +藁 +藉 +藍 +藏 +藐 +藝 +藤 +藩 +藪 +藷 +藹 +藺 +藻 +蘂 +蘆 +蘇 +蘊 +蘭 +虎 +虐 +虔 +虚 +虜 +虞 +號 +虫 +虹 +虻 +蚊 +蚕 +蛇 +蛉 +蛍 +蛎 +蛙 +蛛 +蛟 +蛤 +蛭 +蛮 +蛸 +蛹 +蛾 +蜀 +蜂 +蜃 +蜆 +蜊 +蜘 +蜜 +蜷 +蜻 +蝉 +蝋 +蝕 +蝙 +蝠 +蝦 +蝶 +蝿 +螂 +融 +螣 +螺 +蟄 +蟇 +蟠 +蟷 +蟹 +蟻 +蠢 +蠣 +血 +衆 +行 +衍 +衒 +術 +街 +衙 +衛 +衝 +衞 +衡 +衢 +衣 +表 +衫 +衰 +衵 +衷 +衽 +衾 +衿 +袁 +袈 +袋 +袍 +袒 +袖 +袙 +袞 +袢 +被 +袰 +袱 +袴 +袷 +袿 +裁 +裂 +裃 +装 +裏 +裔 +裕 +裘 +裙 +補 +裟 +裡 +裲 +裳 +裴 +裸 +裹 +製 +裾 +褂 +褄 +複 +褌 +褐 +褒 +褥 +褪 +褶 +褻 +襄 +襖 +襞 +襟 +襠 +襦 +襪 +襲 +襴 +襷 +西 +要 +覆 +覇 +覈 +見 +規 +視 +覗 +覚 +覧 +親 +覲 +観 +覺 +觀 +角 +解 +触 +言 +訂 +計 +討 +訓 +託 +記 +訛 +訟 +訢 +訥 +訪 +設 +許 +訳 +訴 +訶 +診 +註 +証 +詐 +詔 +評 +詛 +詞 +詠 +詢 +詣 +試 +詩 +詫 +詮 +詰 +話 +該 +詳 +誄 +誅 +誇 +誉 +誌 +認 +誓 +誕 +誘 +語 +誠 +誡 +誣 +誤 +誥 +誦 +説 +読 +誰 +課 +誼 +誾 +調 +談 +請 +諌 +諍 +諏 +諒 +論 +諚 +諜 +諟 +諡 +諦 +諧 +諫 +諭 +諮 +諱 +諶 +諷 +諸 +諺 +諾 +謀 +謄 +謌 +謎 +謗 +謙 +謚 +講 +謝 +謡 +謫 +謬 +謹 +證 +識 +譚 +譛 +譜 +警 +譬 +譯 +議 +譲 +譴 +護 +讀 +讃 +讐 +讒 +谷 +谿 +豅 +豆 +豊 +豎 +豐 +豚 +象 +豪 +豫 +豹 +貌 +貝 +貞 +負 +財 +貢 +貧 +貨 +販 +貪 +貫 +責 +貯 +貰 +貴 +買 +貸 +費 +貼 +貿 +賀 +賁 +賂 +賃 +賄 +資 +賈 +賊 +賎 +賑 +賓 +賛 +賜 +賞 +賠 +賢 +賣 +賤 +賦 +質 +賭 +購 +賽 +贄 +贅 +贈 +贋 +贔 +贖 +赤 +赦 +走 +赴 +起 +超 +越 +趙 +趣 +足 +趺 +趾 +跋 +跏 +距 +跡 +跨 +跪 +路 +跳 +践 +踊 +踏 +踐 +踞 +踪 +踵 +蹄 +蹉 +蹊 +蹟 +蹲 +蹴 +躅 +躇 +躊 +躍 +躑 +躙 +躪 +身 +躬 +躯 +躰 +車 +軋 +軌 +軍 +軒 +軟 +転 +軸 +軻 +軽 +軾 +較 +載 +輌 +輔 +輜 +輝 +輦 +輩 +輪 +輯 +輸 +輿 +轄 +轍 +轟 +轢 +辛 +辞 +辟 +辥 +辦 +辨 +辰 +辱 +農 +辺 +辻 +込 +迂 +迅 +迎 +近 +返 +迢 +迦 +迪 +迫 +迭 +述 +迷 +迹 +追 +退 +送 +逃 +逅 +逆 +逍 +透 +逐 +逓 +途 +逕 +逗 +這 +通 +逝 +逞 +速 +造 +逢 +連 +逮 +週 +進 +逸 +逼 +遁 +遂 +遅 +遇 +遊 +運 +遍 +過 +遐 +道 +達 +違 +遙 +遜 +遠 +遡 +遣 +遥 +適 +遭 +遮 +遯 +遵 +遷 +選 +遺 +遼 +避 +邀 +邁 +邂 +邃 +還 +邇 +邉 +邊 +邑 +那 +邦 +邨 +邪 +邯 +邵 +邸 +郁 +郊 +郎 +郡 +郢 +部 +郭 +郴 +郵 +郷 +都 +鄂 +鄙 +鄭 +鄰 +鄲 +酉 +酋 +酌 +配 +酎 +酒 +酔 +酢 +酥 +酪 +酬 +酵 +酷 +酸 +醍 +醐 +醒 +醗 +醜 +醤 +醪 +醵 +醸 +采 +釈 +釉 +釋 +里 +重 +野 +量 +釐 +金 +釘 +釜 +針 +釣 +釧 +釿 +鈍 +鈎 +鈐 +鈔 +鈞 +鈦 +鈴 +鈷 +鈸 +鈿 +鉄 +鉇 +鉉 +鉋 +鉛 +鉢 +鉤 +鉦 +鉱 +鉾 +銀 +銃 +銅 +銈 +銑 +銕 +銘 +銚 +銜 +銭 +鋏 +鋒 +鋤 +鋭 +鋲 +鋳 +鋸 +鋺 +鋼 +錆 +錍 +錐 +錘 +錠 +錣 +錦 +錫 +錬 +錯 +録 +錵 +鍋 +鍍 +鍑 +鍔 +鍛 +鍬 +鍮 +鍵 +鍼 +鍾 +鎌 +鎖 +鎗 +鎚 +鎧 +鎬 +鎮 +鎰 +鎹 +鏃 +鏑 +鏡 +鐃 +鐇 +鐐 +鐔 +鐘 +鐙 +鐚 +鐡 +鐵 +鐸 +鑁 +鑊 +鑑 +鑒 +鑚 +鑠 +鑢 +鑰 +鑵 +鑷 +鑼 +鑽 +鑿 +長 +門 +閃 +閇 +閉 +開 +閏 +閑 +間 +閔 +閘 +関 +閣 +閤 +閥 +閦 +閨 +閬 +閲 +閻 +閼 +閾 +闇 +闍 +闔 +闕 +闘 +關 +闡 +闢 +闥 +阜 +阪 +阮 +阯 +防 +阻 +阿 +陀 +陂 +附 +陌 +降 +限 +陛 +陞 +院 +陣 +除 +陥 +陪 +陬 +陰 +陳 +陵 +陶 +陸 +険 +陽 +隅 +隆 +隈 +隊 +隋 +階 +随 +隔 +際 +障 +隠 +隣 +隧 +隷 +隻 +隼 +雀 +雁 +雄 +雅 +集 +雇 +雉 +雊 +雋 +雌 +雍 +雑 +雖 +雙 +雛 +離 +難 +雨 +雪 +雫 +雰 +雲 +零 +雷 +雹 +電 +需 +震 +霊 +霍 +霖 +霜 +霞 +霧 +霰 +露 +靈 +青 +靖 +静 +靜 +非 +面 +革 +靫 +靭 +靱 +靴 +靺 +鞁 +鞄 +鞆 +鞋 +鞍 +鞏 +鞘 +鞠 +鞨 +鞭 +韋 +韓 +韜 +韮 +音 +韶 +韻 +響 +頁 +頂 +頃 +項 +順 +須 +頌 +預 +頑 +頒 +頓 +領 +頚 +頬 +頭 +頴 +頸 +頻 +頼 +顆 +題 +額 +顎 +顔 +顕 +顗 +願 +顛 +類 +顧 +顯 +風 +飛 +食 +飢 +飩 +飫 +飯 +飲 +飴 +飼 +飽 +飾 +餃 +餅 +餉 +養 +餌 +餐 +餓 +餘 +餝 +餡 +館 +饂 +饅 +饉 +饋 +饌 +饒 +饗 +首 +馗 +香 +馨 +馬 +馳 +馴 +駄 +駅 +駆 +駈 +駐 +駒 +駕 +駝 +駿 +騁 +騎 +騏 +騒 +験 +騙 +騨 +騰 +驕 +驚 +驛 +驢 +骨 +骸 +髄 +體 +高 +髙 +髢 +髪 +髭 +髮 +髷 +髻 +鬘 +鬚 +鬢 +鬨 +鬯 +鬱 +鬼 +魁 +魂 +魄 +魅 +魏 +魔 +魚 +魯 +鮎 +鮑 +鮒 +鮪 +鮫 +鮭 +鮮 +鯉 +鯔 +鯖 +鯛 +鯨 +鯰 +鯱 +鰐 +鰒 +鰭 +鰯 +鰰 +鰹 +鰻 +鱈 +鱒 +鱗 +鱧 +鳥 +鳩 +鳰 +鳳 +鳴 +鳶 +鴈 +鴉 +鴎 +鴛 +鴟 +鴦 +鴨 +鴫 +鴻 +鵄 +鵜 +鵞 +鵡 +鵬 +鵲 +鵺 +鶉 +鶏 +鶯 +鶴 +鷄 +鷙 +鷲 +鷹 +鷺 +鸚 +鸞 +鹸 +鹽 +鹿 +麁 +麒 +麓 +麗 +麝 +麞 +麟 +麦 +麩 +麹 +麺 +麻 +麾 +麿 +黄 +黌 +黍 +黒 +黙 +黛 +黠 +鼈 +鼉 +鼎 +鼓 +鼠 +鼻 +齊 +齋 +齟 +齢 +齬 +龍 +龕 +龗 +! +# +% +& +( +) ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; += +? +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +R +S +T +U +V +W +X +Z +a +c +d +e +f +h +i +j +k +l +m +n +o +p +r +s +t +u +y +z +~ +・ + diff --git a/python/japan_ppocr_mobile_v2_rec/text_recognize.py b/python/japan_ppocr_mobile_v2_rec/text_recognize.py new file mode 100644 index 0000000..9836383 --- /dev/null +++ b/python/japan_ppocr_mobile_v2_rec/text_recognize.py @@ -0,0 +1,136 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import argparse +import math +import time +from pathlib import Path + +import cv2 +import numpy as np +import onnxruntime + +try: + from .utils import CTCLabelDecode, check_and_read_gif, get_image_file_list +except: + from utils import CTCLabelDecode, check_and_read_gif, get_image_file_list + + +root_path = Path(__file__).parent + + +class TextRecognizer(object): + def __init__(self, rec_model_path): + self.rec_image_shape = [3, 32, 320] + self.character_type = 'ch' + self.rec_batch_num = 6 + self.rec_algorithm = 'CRNN' + + self.character_dict_path = str(root_path / 'japan_dict.txt') + self.use_space_char = True + self.postprocess_op = CTCLabelDecode(self.character_dict_path, + self.character_type, + self.use_space_char) + self.session = onnxruntime.InferenceSession(rec_model_path) + + def resize_norm_img(self, img, max_wh_ratio): + img_channel, img_height, img_width = self.rec_image_shape + assert img_channel == img.shape[2] + if self.character_type == "ch": + img_width = int((32 * max_wh_ratio)) + max_wh_ratio = 1 + h, w = img.shape[:2] + ratio = w / float(h) + if math.ceil(img_height * ratio) > img_width: + resized_w = img_width + else: + resized_w = int(math.ceil(img_height * ratio)) + resized_image = cv2.resize(img, (resized_w, img_height)) + resized_image = resized_image.astype('float32') + resized_image = resized_image.transpose((2, 0, 1)) / 255 + resized_image -= 0.5 + resized_image /= 0.5 + padding_im = np.zeros((img_channel, img_height, img_width), + dtype=np.float32) + padding_im[:, :, 0:resized_w] = resized_image + return padding_im + + @staticmethod + def load_image(image_dir): + image_file_list = get_image_file_list(image_dir) + valid_image_file_list = [] + img_list = [] + for image_file in image_file_list: + img, flag = check_and_read_gif(image_file) + if not flag: + img = cv2.imread(image_file) + if img is None: + print(f"error in loading image:{image_file}") + continue + valid_image_file_list.append(image_file) + img_list.append(img) + return img_list + + def __call__(self, image_dir): + if not isinstance(image_dir, list): + img_list = self.load_image(image_dir) + else: + img_list = image_dir + img_num = len(img_list) + # Calculate the aspect ratio of all text bars + width_list = [] + for img in img_list: + width_list.append(img.shape[1] / float(img.shape[0])) + # Sorting can speed up the recognition process + indices = np.argsort(np.array(width_list)) + + rec_res = [['', 0.0]] * img_num + batch_num = self.rec_batch_num + elapse = 0 + for beg_img_no in range(0, img_num, batch_num): + end_img_no = min(img_num, beg_img_no + batch_num) + norm_img_batch = [] + max_wh_ratio = 0 + for ino in range(beg_img_no, end_img_no): + h, w = img_list[indices[ino]].shape[0:2] + wh_ratio = w * 1.0 / h + max_wh_ratio = max(max_wh_ratio, wh_ratio) + for ino in range(beg_img_no, end_img_no): + norm_img = self.resize_norm_img(img_list[indices[ino]], + max_wh_ratio) + norm_img = norm_img[np.newaxis, :] + norm_img_batch.append(norm_img) + norm_img_batch = np.concatenate(norm_img_batch) + norm_img_batch = norm_img_batch.astype(np.float32) + + # onnx模型推理 + starttime = time.time() + onnx_inputs = {self.session.get_inputs()[0].name: norm_img_batch} + preds = self.session.run(None, onnx_inputs)[0] + + rec_result = self.postprocess_op(preds) + for rno in range(len(rec_result)): + rec_res[indices[beg_img_no + rno]] = rec_result[rno] + elapse += time.time() - starttime + return rec_res, elapse + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--image_dir', type=str, help='image_dir|image_path') + parser.add_argument('--model_path', type=str, help='rec_model_path') + args = parser.parse_args() + + text_recognizer = TextRecognizer(args.model_path) + rec_res, predict_time = text_recognizer(args.image_dir) + print(f'识别结果: {rec_res}\t cost: {predict_time}s') diff --git a/python/japan_ppocr_mobile_v2_rec/utils.py b/python/japan_ppocr_mobile_v2_rec/utils.py new file mode 100644 index 0000000..8836d71 --- /dev/null +++ b/python/japan_ppocr_mobile_v2_rec/utils.py @@ -0,0 +1,124 @@ +# !/usr/bin/env python +# -*- encoding: utf-8 -*- +# @File: PostProcess.py +# @Time: 2021/01/19 14:12:35 +# @Author: Max +import cv2 +import os +import imghdr +import numpy as np + + +class BaseRecLabelDecode(object): + """ Convert between text-label and text-index """ + + def __init__(self, + character_dict_path=None, + character_type='ch', + use_space_char=False): + self.character_str = "" + assert character_dict_path is not None, "character_dict_path should not be None when character_type is ch" + with open(character_dict_path, "rb") as fin: + lines = fin.readlines() + for line in lines: + line = line.decode('utf-8').strip("\n").strip("\r\n") + self.character_str += line + if use_space_char: + self.character_str += " " + dict_character = list(self.character_str) + + self.character_type = character_type + dict_character = self.add_special_char(dict_character) + self.dict = {} + for i, char in enumerate(dict_character): + self.dict[char] = i + self.character = dict_character + + def add_special_char(self, dict_character): + return dict_character + + def decode(self, text_index, text_prob=None, is_remove_duplicate=True): + """ convert text-index into text-label. """ + result_list = [] + ignored_tokens = self.get_ignored_tokens() + batch_size = len(text_index) + for batch_idx in range(batch_size): + char_list = [] + conf_list = [] + for idx in range(len(text_index[batch_idx])): + if text_index[batch_idx][idx] in ignored_tokens: + continue + if is_remove_duplicate: + # only for predict + if idx > 0 and text_index[batch_idx][idx - 1] == text_index[ + batch_idx][idx]: + continue + char_list.append(self.character[int(text_index[batch_idx][ + idx])]) + if text_prob is not None: + conf_list.append(text_prob[batch_idx][idx]) + else: + conf_list.append(1) + text = ''.join(char_list) + result_list.append((text, np.mean(conf_list))) + return result_list + + def get_ignored_tokens(self): + return [0] # for ctc blank + + +class CTCLabelDecode(BaseRecLabelDecode): + """ Convert between text-label and text-index """ + + def __init__(self, + character_dict_path=None, + character_type='ch', + use_space_char=False, + **kwargs): + super(CTCLabelDecode, self).__init__(character_dict_path, + character_type, use_space_char) + + def __call__(self, preds, label=None, *args, **kwargs): + preds_idx = preds.argmax(axis=2) + preds_prob = preds.max(axis=2) + text = self.decode(preds_idx, preds_prob) + if label is None: + return text + label = self.decode(label, is_remove_duplicate=False) + return text, label + + def add_special_char(self, dict_character): + dict_character = ['blank'] + dict_character + return dict_character + + +def get_image_file_list(img_file): + imgs_lists = [] + if img_file is None or not os.path.exists(img_file): + raise Exception("not found any img file in {}".format(img_file)) + + img_end = {'jpg', 'bmp', 'png', 'jpeg', 'rgb', 'tif', 'tiff', 'gif', 'GIF'} + if os.path.isfile(img_file) and imghdr.what(img_file) in img_end: + imgs_lists.append(img_file) + elif os.path.isdir(img_file): + for single_file in os.listdir(img_file): + file_path = os.path.join(img_file, single_file) + if imghdr.what(file_path) in img_end: + imgs_lists.append(file_path) + if len(imgs_lists) == 0: + raise Exception("not found any img file in {}".format(img_file)) + return imgs_lists + + +def check_and_read_gif(img_path): + if os.path.basename(img_path)[-3:] in ['gif', 'GIF']: + gif = cv2.VideoCapture(img_path) + ret, frame = gif.read() + if not ret: + print("Cannot read {}. This gif image maybe corrupted.") + return None, False + if len(frame.shape) == 2 or frame.shape[-1] == 1: + frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2RGB) + imgvalue = frame[:, :, ::-1] + return imgvalue, True + return None, False \ No newline at end of file diff --git a/python/readme.md b/python/readme.md index c66b56e..78a40af 100755 --- a/python/readme.md +++ b/python/readme.md @@ -1,3 +1,6 @@ +### 2021-05-22 update: +- 添加日文识别推理代码和相应模型,详情见`japan_ppocr_mobile_v2_rec`目录 + ### 2021-03-24 update: - 更改文本识别模型支持ort1.7,推理速度有着较大提升 @@ -82,4 +85,4 @@ text_recongnizer = TextRecognizer(rec_model_path) rec_res, elapse = text_recongnizer(image_path) print(f'识别结果:{rec_res}/tcost: {elapse}s') -``` \ No newline at end of file +``` diff --git a/python/test_images/rec_images/japan/1.jpg b/python/test_images/rec_images/japan/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..684879749764a1b6063da32d7910bff911e855f4 GIT binary patch literal 8898 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