Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

OpenCVをの用いた画像処理系まとめてみた

今年も後わずかですね!!
年を取るにつれて1年が短く感じます。

5月から始めたこの技術ブログも結構続いていることに自分でも驚いております!!

さて今回は、
今までまとめてきたコードの整理と今後簡単に使えるようにするためにAPI化してみましたので、
その報告です。



■整理したコード格納先

こちらになります。
https://github.com/Elsammit/ImageAPI

■まとめたAPI報告

まずはどんな内容をAPIとして整理したか、です。
一覧にするとこんな感じ。
・ARMaker.py:ARマーカーの作成や読み込み
・BarcodeMaker.py:バーコードの作成と読み込み
・ConvertImgByte.py:画像データのバイト列変換やバイト列から画像データへの変換
・OnlyVideoStreaming.py:ビデオストリーミング
・Overlap.py:画像重畳やRGB分割用API
・PartDetection.py:顔や目などの体の一部検知用API
・VideoStreamAndDetection.py:ビデオストリーミング+体の一部検知用API

■ARマーカーの作成や読み込み

Classとして、
・MakeArMaker:ARマーカー作成
・ReadMaker:ARマーカー読み取り
を用意。
使用例はこんな感じです。

if __name__ == '__main__':
    MakeArMaker = MakeArMaker()
    MakeArMaker.ARGeneratorFile("aaa.jpg",0,150)
    MakeArMaker.MaltiARGenerator("bbb.jpg", 0, 6, 150)

    ReadMaker = ReadMaker()

    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        ReadMaker.ARReader(frame, None)
        cv2.imshow('drawDetectedMarkers', frame) #マーカが描画された画像を表示

        cv2.waitKey(1) #キーボード入力の受付
    cap.release() #ビデオキャプチャのメモリ解放
    cv2.destroyAllWindows() #すべてのウィンドウを閉じる

■バーコードの作成と読み込み

Classとして、
・BarCodeMaker:バーコード作成と読み取り
を用意。
使用例はこんな感じです。

if __name__ == '__main__':
    BarCodeMaker = BarCodeMaker()

    Num = '9323131312131'
    BarCodeMaker.MakeBarCode("test.jpg", Num)

■画像データのバイト列変換やバイト列から画像データへの変換

Classとして、
・ImgByteChange:画像データとバイト列変換とバイト列から画像データ変換
を用意。
使用例はこんな感じ。

imgByteChange = ImgByteChange()
bt = imgByteChange.ImageToByte("画像データ(例:test.jpg)")
mt = imgByteChange.ByteToImage(bt)

■ビデオストリーミング用API

こちらはただカメラキャプチャ動画をストリーミングするだけのファイルになります。
APIではないので、試しに使ってみる系ですね。

■画像重畳やRGB分割用API

Classとして、
・Overlap:画像重畳
・ImageSeparateComposition:RGB分割、合成
・ImageHistgrams:ヒストグラム作成用
を用意。
ちょっと色々と詰め込みすぎ間が否めないな。。。
後で分けておこうかな??

■顔や目などの体の一部検知用API

Classとして、
・Detections:体の一部を検知するためのAPI
を用意。

目を検知するだけのコードですが、
使用例はこんな感じです。

img1 = cv2.imread('lena.jpg')
m_Detections = Detections()
eye_left, eye_right = m_Detections.EyeDetection("haarcascade_eye.xml", img1)
img1 = m_Detections.DetectionOnRectangle("haarcascade_frontalface_default.xml", img1, 2, (255,0,0))
cv2.imshow("test", img1)

■ビデオストリーミング+体の一部検知用API

Classとして、
・VideoStreamClass:ビデオストリーミングを行ったり、体の一部を検知するためのAPI
を用意。
ストリーミングのみを行ったり、ストリーミング結果を録画したり、、、
体の一部を四角で囲んだりすることができるAPIです。
こちらも色々詰め込みすぎてる気がするけど、、、
基本的にストリーミング系を1つにまとめた感じになっているから、、、
まぁよしとするか!!

使用例はこんな感じになります。

if __name__ == '__main__':
    video = VideoStreamClass()
    #video.VideoStream(None)
    video.VideoWriterInit(30, 640, 480, "test.mp4")
    video.VideoStream(None)

■最後に

ソースコードを整理するのに合わせて初めてAPI化してみました!!
今後、自分でもこちらのAPIを使用してアプリの作成を行っていこうと思います!!

後、まだまだ作成したコードがあるので整理しておこう。
だけど、、、量が多いのよね。今年中に終わるかしら??