質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1008閲覧

DeepLabV3を使って写真の背景を抽出し白く塗り潰したい

yamaji1108

総合スコア19

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/12 14:55

前提・実現したいこと

取り込んだ写真の背景を白くしたいです。
下記が目標です。(photoroomというアプリを使用しました)
イメージ説明

イメージ説明

色々調べたところ、Core MLモデルのDeeplabV3を使用して背景透過処理をされている方の記事を発見しました。
https://tech.basicinc.jp/articles/206

この方はmacOSのアプリのために使っていたため、私の方ではNSImageの部分をUIImageに書き換えました。
また、UIImageをCVPixelBufferに変換する関数(Buffer)は
https://stackoverrun.com/ja/q/12215731
の記事を参考にしました。

自分なりにコードを書いてみましたが、コメントアウト部分の背景を白くする記述が分からない状況です。

該当のソースコード

swift

1//略 2 3private func backgroundToWhite(brightnessValue: Float, contrastValue: Float, saturationValue: Float, isUpdatedSegmentation: Bool = false) { 4 guard let img = sourceImageView.image?.cropping(to: selectedRect!) else { 5 assertionFailure() 6 return 7 } 8 //cropImageViewにimgを格納しておく(比較するため) 9 cropImageView.image = img 10 //写真サイズの表記をトリミングされたimgのサイズに変更 11 imageSizeLabel.text = "(Int(img.size.width)) x (Int(img.size.height))" 12 13 //ここから本処理です。 14 let image = buffer(from:img) 15 16 let model = DeepLabV3() 17 guard let output = try? model.prediction(image: image!) else { 18 fatalError("Error") 19 } 20 21 for y in 0..<Int(img.size.height) { 22 for x in 0..<Int(img.size.width) { 23 let getY = Int(img.size.width) - y - 1 24 let index: [NSNumber] = [NSNumber(value: getY), NSNumber(value: x)] 25 let flag = output.semanticPredictions[index] 26 if flag == 0 { 27 // 背景部分を白く変える処理を書きたいです。 28 29 } 30 } 31 } 32 //newImage.addRepresentation(rep) 33 34 } 35 36 private func buffer(from image: UIImage) -> CVPixelBuffer? { 37 let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary 38 var pixelBuffer : CVPixelBuffer? 39 let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(image.size.width), Int(image.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer) 40 guard (status == kCVReturnSuccess) else { 41 return nil 42 } 43 44 CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) 45 let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer!) 46 47 let rgbColorSpace = CGColorSpaceCreateDeviceRGB() 48 let context = CGContext(data: pixelData, width: Int(image.size.width), height: Int(image.size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue) 49 50 context?.translateBy(x: 0, y: image.size.height) 51 context?.scaleBy(x: 1.0, y: -1.0) 52 53 UIGraphicsPushContext(context!) 54 image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) 55 UIGraphicsPopContext() 56 CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) 57 58 return pixelBuffer 59 } 60//略

試したこと

DeepLabV3の使い方等を調べましたが、今回私がxcode上で実装したい機能についての記事が上記しか見つかりませんでした。。

理解度が足りていないのは重々承知しております。
関数のヒントやDeepLabV3の関連記事などご教授いただければ、嬉しいです。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.4.1
Swift Version 5.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問