前提・実現したいこと
現在coreMLを使いCanvas内に手書きで書いた文字を認識し、予想結果を表示するアプリを作成しています。
文字を書くCanva部分をネットで作例を見ながらSwiftUIで作り、このCanvas部分のみを切り抜き、UIimageとして保存できる様にしました。
保存できる様にしたのは実際切り抜きが上手くいっているか確認する為で、実際には保存せず、MNIST用の画像に処理して学習modelに渡す様に変更するつもりです。
このUIimageをMNIST用に変更する方法が分かりません。
ネットで見つけたMNISTの作例はUIkitで作られており(下記コード)、UIView型のCanvasViewをmodel用に変更してから複製し、CGImage型に変更しているのは何となく分かるのですが、自分のUIimage型の画像を変更する様にどう置き換えて良いかが分かりません。
modelにはCGImage型か、CVPixelBuffer型が渡せる様です。
(最近Swiftを始めSwiftUIしか触った事がない為、UIkitなどがまだよく分かっていません)
該当のソースコード
class CanvasView: UIView { //Canvasの中身 func getViewContext() -> CGContext? { // our network takes in only grayscale images as input let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceGray() // we have 3 channels no alpha value put in the network let bitmapInfo = CGImageAlphaInfo.none.rawValue // this is where our view pixel data will go in once we make the render call let context = CGContext(data: nil, width: 28, height: 28, bitsPerComponent: 8, bytesPerRow: 28, space: colorSpace, bitmapInfo: bitmapInfo) // scale and translate so we have the full digit and in MNIST standard size 28x28 context!.translateBy(x: 0 , y: 28) context!.scaleBy(x: 28/self.frame.size.width, y: -28/self.frame.size.height) // put view pixel data in context self.layer.render(in: context!) return context } } //buttonを押したら下のコードが働きcgimageにした後、学習 guard let cgImage = drawView.getViewContext()?.makeImage() else {return}
試したこと
func getViewContext()の引数に(img:UIimage)を追加し
context!.scaleBy(x: 28/self.frame.size.width, y: -28/self.frame.size.height)
のself.frameの部分をimgにしてみましたが、その後の
self.layer.render(in: context!)
をどう変更して良いか分かりませんでした。
補足情報(FW/ツールのバージョンなど)
Xcode11.4.1
回答1件
あなたの回答
tips
プレビュー