皆さん、おはこんばんにちは!
エンジニアのみやもとです。
現在、クレジットカードの番号認識を実現しようと色々試しています。
画像はRGBという「赤・緑・青」の3光源で構成されており、そのままでは認識が難しいため、画像を認識しやすいようにOpenCVを使用して画像処理を行っていきたいと思います。
今回は、画像処理の方法について記録していきます。
1.OpenCVについて
OpenCV(Open Source Computer Vision Library)は、オープンソースのコンピュータービジョンおよび機械学習ソフトウェアライブラリです。
OpenCV より引用(日本語訳)
OpenCVは、コンピュータービジョンアプリケーションに共通のインフラストラクチャを提供し、商用製品での機械知覚の使用を加速するために構築されました。OpenCVはBSDライセンスの製品であるため、企業はコードを簡単に利用および変更できます。ライブラリには2500以上の最適化されたアルゴリズムがあり、これには、古典的および最先端のコンピュータービジョンと機械学習アルゴリズムの両方の包括的なセットが含まれています。これらのアルゴリズムを使用して、顔の検出と認識、オブジェクトの識別、ビデオ内の人間の行動の分類、カメラの動きの追跡、移動するオブジェクトの追跡、オブジェクトの3Dモデルの抽出、ステレオカメラからの3D点群の生成、画像のステッチによる高解像度の生成を行うことができます。シーン全体の画像、画像データベースからの類似画像の検索、フラッシュを使用して撮影した画像からの赤い目を削除、目の動きの追跡、風景の認識、拡張現実でオーバーレイするためのマーカーの確立など。OpenCVには47,000人以上のユーザーがいます。コミュニティと推定ダウンロード数が1800万を超える 。このライブラリは、企業、研究グループ、および政府機関で広く使用されています。
2.画像処理
グレースケール
import cv2
image = cv2.imread('\\test_cre.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('card', gray)

グレースケール(低輝度化)
import sys
import cv2
import numpy
gamma22LUT = numpy.array([pow(x/255.0, 2.2) for x in range(256)], dtype='float32')
img_bgr= cv2.imread('\\test_cre.png')
img_bgrL = cv2.LUT(img_bgr, gamma22LUT)
img_grayL = cv2.cvtColor(img_bgrL, cv2.COLOR_BGR2GRAY)
img_gray = pow(img_grayL, 1.0/2.2) * 255
cv2.imshow('card', img_gray)
cv2.waitKey()

2値化
import cv2
image = cv2.imread('\\test_cre.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray,0,255,cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]
cv2.imshow('card', thresh)

白黒反転
import cv2
image = cv2.imread('\\test_cre.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]
image2 = cv2.bitwise_not(thresh)
cv2.imshow('card', image2)
cv2.waitKey()

3.まとめ
Kaggleでもスコアを上げるためにデータ補正を行いました。
画像処理もこれと同じで認識しやすい形があるようで、処理によっては認識される文字や範囲が異なることもあります。今後もクレジットカードの番号認識を実装するため、画像処理について学んでいこうと思います。
コメント