LoginSignup
2
0

More than 5 years have passed since last update.

coremltoolを使った画像認識でsvm形式のモデルを利用する3

Posted at

前回まで
coremltoolを使った画像認識でsvm形式のモデルを利用する1

coremltoolを使った画像認識でsvm形式のモデルを利用する2

開発環境

  • macOS 10.13
  • Swift4
  • XCode9
  • Python2.7

最後に前回で作ったmlmodelを評価する簡易なペイントアプリのプロジェクトを用意してmlmodelをドラッグする

スクリーンショット 2017-12-02 15.20.23.png

inputには784のDouble型の要素を持つ1次元配列。outputはInt64の数値が返ってくることになっているので、imageを784の配列に変換する必要がある。配列の中身は28x28のイメージを1pixelの色の濃淡を0〜1の間に表したものになる。
UIImageからCGImageを呼び出し、そこから各pixelのアドレスを呼び出し、色情報を取得する。

    func getPixelBuffer() -> [Double]
    {
        guard let cgImage = self.cgImage else {
            return []
        }
        let bytesPerRow = cgImage.bytesPerRow
        let width = cgImage.width
        let height = cgImage.height
        let bytesPerPixel = 4
        let pixelData = cgImage.dataProvider!.data! as Data
        var buf : [Double] = []

        for j in 0..<height {
            for i in 0..<width {
                let pixelInfo = bytesPerRow * j + i * bytesPerPixel
                let r = CGFloat(pixelData[pixelInfo])
                let g = CGFloat(pixelData[pixelInfo+1])
                let b = CGFloat(pixelData[pixelInfo+2])
//                let a = CGFloat(pixelData[pixelInfo+3]) / CGFloat(255.0)

                let v = floor(Double(r + g + b)/3.0)/255.0
                buf.append(v)
            }
        }

        return buf
    }

後は算出した配列をMLMultiArrayにセットしたものを、mlmodelの引数にセットすれば結果がかえってきます。

        // 画像を配列で返す
        let imageData = reIma.getPixelBuffer()
        let count = imageData.count

        let ncount = count as NSNumber
        let mlarray = try! MLMultiArray(shape: [ncount], dataType: MLMultiArrayDataType.double )
        for i in 0 ..< count {
            mlarray[i] = imageData[i] as NSNumber
        }

        let model = my_model()
        guard let output = try? model.prediction(input: mlarray) else {
            fatalError("error")
        }
        print("label = \(output.target)")

        let target = Int64(output.target)

・・・まあ体感的にはあまり精度良く無いのですが、手書きだとそんなものかなあという感じです。

参考

参考というかそのまま使わせてもらってます。

Swift3でUIImageの色情報を抜き出す

『iOS11』新搭載の「Core ML」を駆使してMNISTの手書き数字認識を試してみた

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0