Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/linsamtw/taiwantrainverificationcode2text
台鐵驗證碼辨識/轉文字
https://github.com/linsamtw/taiwantrainverificationcode2text
api cnn cnn-classification cnn-keras verification-code
Last synced: 13 days ago
JSON representation
台鐵驗證碼辨識/轉文字
- Host: GitHub
- URL: https://github.com/linsamtw/taiwantrainverificationcode2text
- Owner: linsamtw
- License: apache-2.0
- Created: 2019-02-17T07:42:51.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-05-06T04:30:50.000Z (over 2 years ago)
- Last Synced: 2024-10-16T11:08:02.208Z (28 days ago)
- Topics: api, cnn, cnn-classification, cnn-keras, verification-code
- Language: Python
- Homepage:
- Size: 11.5 MB
- Stars: 90
- Watchers: 9
- Forks: 20
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Taiwan Train Verification Code 2 text ( 台鐵驗證碼轉文字 )
[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](https://github.com/linsamtw/TaiwanTrainVerificationCode2text/blob/master/LICENSE)
[![PyPI version](https://badge.fury.io/py/TaiwanTrainVerificationCode2text.svg)](https://badge.fury.io/py/TaiwanTrainVerificationCode2text)-------------------
## introduce
提供各位開發程式訂票,其中驗證碼破解部分的方法,可直接使用,不須再回傳 image 用人工方式辨識。
此 package 使用 keras & Tensorflow 建模&預測,需要安裝相依 package。model test data 準確率約為 88%,使用 10 萬張圖進行 training。
-------------------
pip3 install TaiwanTrainVerificationCode2text
cv2 比較難裝,以下提供安裝方法conda install -c menpo opencv
# 你還需要這個
pip3 install h5py---------------------------------
## demo
input
![image](https://raw.githubusercontent.com/linsamtw/TaiwanTrainVerificationCode2text/master/WNBA8S.jpg)output
WNBA8S--------------------
## exmaple
import os
import platform
from TaiwanTrainVerificationCode2text import verification_code2text
from TaiwanTrainVerificationCode2text import work_vcode
from TaiwanTrainVerificationCode2text import download
import TaiwanTrainVerificationCode2text
PATH = TaiwanTrainVerificationCode2text.__path__[0]
import cv2
import matplotlib.pyplot as plt
import random
from datetime import datetime
# 下載我 train 好的 weight,ttf 是驗證碼字形,用於以下生成模擬驗證碼
download.weight()
download.ttf()
# 生成模擬驗證碼
work_vcode.work_vcode_fun(10,'test_data',5)
work_vcode.work_vcode_fun(10,'test_data',6)if 'linux' in platform.platform():
file_path = '{}/{}/'.format(PATH,'test_data')
train_image_path = [file_path + i for i in os.listdir(file_path+'/')]
else:
file_path = '{}\\{}\\'.format(PATH,'test_data')
train_image_path = [file_path + i for i in os.listdir(file_path+'\\')]
# 隨機取一個當作 demo
image_name = train_image_path[random.sample( range(len(train_image_path)) ,1)[0]]# 讀取圖片
image = cv2.imread(image_name)
# 畫圖
plt.imshow(image)
# 辨識,驗證碼轉文字
text = verification_code2text.main(image)
# 印出最後結果
print(text)最後結果就會類似 demo ,
-------------------------------
如果想自己 train,可以使用
[build_verification_code_cnn_model.py](https://github.com/linsamtw/TaiwanTrainVerificationCode2text/blob/master/build_verification_code_cnn_model.py)
稍微介紹主要 code
def main():
import work_vcode
#import time
# 因為台鐵驗整碼是 5~6 隨機,因此必須生成 5 碼驗證碼& 6 碼驗證碼
# 500 是 data 數量,建議數字為30000,500 只是 demo
work_vcode.work_vcode_fun(500,'train_data',5)
work_vcode.work_vcode_fun(500,'train_data',6)
# 生成 test data,可根據自己喜好調整 data 數量
work_vcode.work_vcode_fun(100,'test_data',5)
work_vcode.work_vcode_fun(100,'test_data',6)
self = build_verification_code_cnn_model()
# 建模,最後 weight 會存放在 package_path/cnn_weight/verificatioin_code.h5
self.build_model_process()
train 好後,可再使用以上 example code,會讀取你 train 好的 weight。--------------------------
## 方法
由於驗證碼是26個英文字搭配10個數字,再加上隨機 5~6 碼,我將 class 分成 26 + 10 + null,37類,下去做分類。
null 代表沒有此文字, 我將 NN 結構中的 output 設計為 6 dimension,將5碼也看成6碼,只是最後一個是 null,藉此同時處理 5 or 6 碼問題。----------------
## future
面臨到最大的問題是,null 佔比例太大,以上面生成 data 的 code 為例work_vcode.work_vcode_fun(500,'train_data',5)
work_vcode.work_vcode_fun(500,'train_data',6)
先不管英文&數字數量,有一半的 class 是 null,因此在分類問題上,會造成嚴重的 imbalance 問題,即使 data 增加也不會改善問題,未來將搭配 object detection,改善準確率。-----------------------
如有問題,可寄信給我 or 留言在 issues。email : [email protected]