@shu223のマイページ[B!]新着記事・評価 - はてなブックマーク (original) (raw)

37 users
qiita.com/shu223
この記事は クソアプリアドベントカレンダー2 の2日目の記事です。今まで傍から見ているだけでしたがついに初参加できて嬉しいです。 課題: 動画よりもスライドでサクサク見たい WWDCセッションの内容をチェックしては発信する、ということを毎年やっている 1 のですが、なぜか昨年(2020)あたりからセッションのスライドPDFが公開されなくなりました。 セッションの動画は例年通り公開されているのですが、 動画よりもスライドのほうがシーク効率が圧倒的に良いので、やっぱりスライドが欲しい。2 で、つくったのが、 動画からスライドを抽出するiOS/macOSアプリ「Slidify」 ↑この動画をSlidifyに食わせて全自動で生成したスライドが、 ↑こちら。 いかがでしょう? 荒削りな部分(後述)はあるものの、私は自分用ツールとしては十分実用に耐えうると思いました。 しくみ スライド抽出のしくみはざ

7 users
qiita.com/shu223
「写真いっぱい撮ってるけど、一生振り返る暇ないな…」 という課題意識から、100枚/秒で写真を閲覧できる「Somato」というiOSアプリをつくった。 1,000枚の写真であれば10秒で閲覧できる。 まぁ正直100枚/秒はインパクト重視で謳っているところはあるが、意外と20枚/秒ぐらいで高速表示していても不思議と「懐かしいなぁ」と十分に思い出に浸れる。無料なので興味のある人はぜひダウンロードして試してみてほしい。 (M1 Macでも利用可能。MacのApp Storeで"Somato"で検索してください) 本記事ではこのアプリの実装について書く。 概論 実は、Somatoは技術的に尖った部分は特にない。 ざっくりいうと、Photos(PhotoKit)で画像を取得し、UICollectionViewで表示しているだけ。 最初のプロトは1時間もかからずできた。特に工夫もなく、素直な実装をやっ

7 users
qiita.com/shu223
func session(_ session: ARSession, didUpdate frame: ARFrame) { guard let depthData = frame.sceneDepth else { return } // Use depth data } 利用可能なコンフィギュレーション ARConfigurationプロトコルに定義されているframeSemanticsプロパティにsceneDepthを設定するので、API的には利用可能ではあるが、APIリファレンスのsceneDepthの項にある記述を読む限り、ワールドトラッキング以外のコンフィギュレーションでは利用できないっぽい。 If you enable this option on a world-tracking configuration's frameSemantics, ARKit includes

8 users
qiita.com/shu223
// ファイル用のアナライザを初期化 let audioFileAnalyzer = try! SNAudioFileAnalyzer(url: url) // MLModelオブジェクトを渡してリクエストを作成 let request = try! SNClassifySoundRequest(mlModel: HogeSoundClassifier().model) // リクエストをアナライザに追加 try! audioFileAnalyzer.add(request, withObserver: self) // 解析開始 audioFileAnalyzer.analyze() 分類結果 SNClassificationResult timeRange: CMTimeRange 処理区間の開始時間・終了時間 classifications: [SNClassification] 各

15 users
qiita.com/shu223
本日からはじまったWWDC 2019、SwiftUIをはじめ実にワクワクする新機能が盛りだくさんでした。iOS 13のドキュメントが公開されたので、明日からのセッションでどのへんを勉強するかの予習をかねて、気になった新APIをピックアップしておきます。 Vision 人間検出 VNDetectHumanRectanglesRequest 人間を矩形で検出。 ↓はOpenCVを使った結果ですが、こういうのです。 ARKitのpeople segmentationがインパクトありすぎて「矩形で検出」というのは印象薄いですが、「こういうのもあったな」と頭の片隅に置いておくといつか用途があるかもしれません。 文字認識 VNRecognizeTextRequest 文字認識。従来から備えていた文字領域検出ではなく、文字認識、いわゆるOCR的なやつです。 今まで無料で使えるやつだとtesseractと

4 users
qiita.com/shu223
iOSのCore MLモデルは、Appleが公式で色々と配布していますが、6種類のうちなんと5種類が物体認識(imagenetの1000クラス分類)。しかし、GitHub等をみると、多種多様なモデルが公開されてきています。 今回は姿勢推定(Pose Estimation)のCore MLモデルで公開されているものをいくつかピックアップし、それらがどれぐらい使えるのか、試してみました。 PoseNet-CoreML まずはこちら。 サンプルをそのまま試す こちらはサンプルが同梱されていて、すぐにビルドして試せました。 結果はこんな感じです。 (実際にiPhone XS上で実行してスクリーンショットを撮った結果を正方形にクロップして載せています) 後ろの観客の姿勢推定はできているようですが、肝心の前方のプレイヤーの姿勢が取れていません。。 他にも画像が同梱されていたので、変えてみました。 あれ

46 users
qiita.com/shu223
TensorFlow LiteがAndroidやiOSデバイスのGPUをサポートしたようです1。 TensorFlow Lite Now Faster with Mobile GPUs (Developer Preview) バックエンドはAndroidではOpenGL ES 3.1、iOSではMetal。 This new backend leverages: OpenGL ES 3.1 Compute Shaders on Android devices Metal Compute Shaders on iOS devices iPhone 7では最大6倍の高速化が見られたようです。 By leveraging the new GPU backend in the future, inference can be sped up from ~4x on Pixel 3 and Sams

5 users
qiita.com/shu223
原始のiPhoneからカメラは搭載されていましたが、デプス(深度)が取れるデュアルカメラやTrueDepthカメラが搭載されたのは比較的最近のことです。従来のカメラやGPSが、デジタルの世界と我々が生きる現実世界を繋ぐ重要な役割を担い、アプリ開発者に多くの創造性を与えてくれたのと同様に、「奥行き」がわかるようになったというのはアプリ開発の次元がひとつ増えたようなもの。そのわりに、深度関連APIにどのようなものがあるか、何ができるか、どう実装するのか、という情報は日本語はもちろん、英語でもあまり多くはありません。 そこで、iOSにおけるデプス(深度)関連APIの実装方法を示すサンプル集「iOS-Depth-Sampler」をオープンソースで公開しました。 https://github.com/shu223/iOS-Depth-Sampler ソースコードは GitHub に置いてあるので、ご

3 users
qiita.com/shu223
ARKit 2.0では、「画像トラッキング」という新機能が加わりました。既知の2次元画像を検出・トラッキングできるので、ポスター等の現実世界に存在する2D画像を基盤にしてAR体験を開始することができるようになる、というものです。これを聞いて「あれ、その機能、既になかったっけ」と思った方もいたのではないでしょうか。 その既視感はある意味では正しく、ARKit 1.5で既に「画像検出」という機能が追加されています。 では、これらはどう違うのでしょうか?ARKit 1.5の画像検出機能を強化したものが2.0の画像トラッキングで、リプレースされたのでしょうか。それとも別々の機能として共存しているのでしょうか。 結論としては後者で、それぞれ強みを持つ別々の機能として共存しています。 コンフィギュレーションの違い まず実装面でみると、ARKit 1.5で搭載された画像検出は、検出対象とするリファレンス

4 users
qiita.com/shu223
Metalは入門するのがなかなか大変です1。UIKitやCore Graphicsを使ってグラフィックスを描画するのとはまったく違う手順が多く登場します。なので、その背景にある概念を理解していないままコードに臨むと、「なぜこんなことをやる必要があるのか」と理解しがたく感じることがあるかもしれません(私がそうでした)。 本記事では、そんなMetalへ入門する「以前」の、Metalの基礎知識について解説します。 Metalの概要 Metalとは Metalは、Appleによって提供されているローレベルなグラフィックスAPIです。別の言い方をすると、GPUへのアクセスを提供するAPIです。GPUというハードウェア層を直接たたくAPI(=ローレベル)であり、GPUは"Graphics Processing Unit"の略であるとおり、そもそもは描画処理を担う演算装置なので、そのインターフェースであ

3 users
qiita.com/shu223
長らく使い方が謎だった機能 このメソッドはiOS 10で追加されたものなのですが、2016年当時、あれやこれやのAttributeを指定してみて読み上げ音声が変わるかどうかを試したのですが、何も音声に変化がなく、それから約2年間、ずっと使い方が謎なままでした。 iOS 10からAVSpeechUtteranceにNSAttributedStringを渡せるようになってて、これはきっと発声の抑揚とかを制御する用だ!って思ってboldにしたりしてみたけど何も変わらない。。何用なんだろう? https://t.co/FnSkiCYwyR — Shuichi Tsutsumi (@shu223) 2016年9月11日 AVSpeechSynthesisIPANotationAttribute WWDC18の「AVSpeechSynthesizer: Making iOS Talk」ではこのようなコ

3 users
qiita.com/shu223
iOS 11.3(いわゆるARKit 1.5)より、任意の2次元形状のジオメトリで平面を検出できるようになりました。たとえば次のgifのように、丸テーブルの平面を円形(に近い)ジオメトリとして検出できます。 なお、これから解説するAPIを見るとわかりますが、水平面だけでなく、ARKit 1.5で検出可能になった垂直平面にも本機能は有効です。 ARSCNPlaneGeometry 本機能において鍵となるのはARSCNPlaneGeometryというiOS 11.3(ARKit 1.5)の新クラスです。 https://developer.apple.com/documentation/arkit/arscnplanegeometry SCNGeometryを継承しており、ARKitが検出した平面の2次元形状を表すためのクラスです。 このクラスのイニシャライザはひとつしかなく、 このように、M

7 users
qiita.com/shu223
tfcoreml(リポジトリ名は "tf-coreml")という、TensorFlowで学習したモデルを、Core MLモデル(.mlmodel)に変換するツールがあります。 TensorFlow LiteもCore MLモデルへの変換をサポートしているみたいな記事もありましたが、まだLiteがどういうものなのかよくわかってないのと、ググッてtfcoremlが一番上に出てきたし、メンテもアクティブにされてるようなのでこちらを試してみた次第です。 tfcoremlのインストール でいけます。 が、僕はしばらくTensorFlowを触ってなかったので、次のエラーに遭遇しました。 Could not find a version that satisfies the requirement tensorflow>=1.1.0 (from tfcoreml) (from versions: ) N

7 users
qiita.com/shu223
Metalのデバッグに関連する機能やツールの使い方を本記事にまとめていこうと思います。 GPUフレームキャプチャ XcodeにビルトインされているMetalのデバッグ機能。 Metal利用アプリを実行中、カメラ型のアイコン("Capture GPU Frame")を押すと、その瞬間のGPUフレームがキャプチャされ、次のような画面になる。 非常に高機能なので、詳細はそれぞれの項にて。 ラベル Metalのクラスやプロトコルは文字列型のlabelというプロパティを備えているものが多くある。 例: MTLCommandQueue MTLResource MTLBuffer, MTLTexture MTLFunction MTLRenderPipelineDescriptor MTLCommandBuffer MTLCommandEncoder たとえば次のようにラベルをつけておいて、 comma

5 users
qiita.com/shu223
Metalでグラフィック処理を行うにしろ並列演算を行うにしろ、GPUに処理をさせるためのシェーダーを書かないといけないわけですが、これがまだ情報が少なくて、「こういうシェーダを書きたいんだけど、誰かもう書いてないかな・・・」というときに参考になる近いものとかはそうそう都合よく出てこないわけです。 ただ、WebGL/GLSLの情報はググると山ほどあって、GLSL Sandbox という、Web上で編集できてプレビューできてシェアできるサイトもあり、何がどうなってそうなるのか理解できない難しそうなものから、ただの円といったシンプルなものまで、既に偉大な先人たちのサンプルがたくさんアップされています Metalのシェーダというのは正しくは Metal Shading Language といいまして、C++をベースとする独自言語なのですが、やはり同じGPUに実行させるプログラムだけあって、概ねGL

121 users
qiita.com/shu223
『ブロックチェーンがどのように動いているのか学ぶ最速の方法は作ってみることだ』 『ブロックチェーンとは』みたいな記事を読んで概念はわかったつもりでも、「わかったような気がする」止まりで腹落ち感までは得られず、いつか自分で実装してみたいと思っていました。1 でも難しそうだし、本業とは関係ない(→時間が割けない)ので永遠にやらなそうだなぁ。。と思ってたら、こんな記事を発見。 ブロックチェーンを作ることで学ぶ 〜ブロックチェーンがどのように動いているのか学ぶ最速の方法は作ってみることだ〜 - Qiita なんとグッとくる副題でしょう2。記事の冒頭だけざっと読んだところ、なんか、サッとできそうだぞ・・・!と。実装量でいえば1日もかからなそうです。 Pythonはわからないので、Swiftで書いてみました。 以下、元記事のステップに沿ってSwift実装を載せていきます。引用記法の部分は元記事より引用

3 users
qiita.com/shu223
iOS/macOSのGPUインターフェース、Metalについて書かれた書籍は、英語だと下記2冊がありますが、 Metal By Example 1 Metal Programming Guide 2018年9月現在、まだこれらの日本語版は出ていません。Appleのドキュメントも、Metalに関するものは、まだ日本語化されたものはありません。 個人出版ではありますが、日本語では次に紹介する「Metal入門」があります。日本語初のMetal解説書であるとともに、自著なので手間味噌にはなりますが、評判も上々です。 「Metal入門」の紹介 OpenGLやDirectXといった他の低レベルグラフィックスAPIを扱った経験がない開発者にとって、Metalは一歩目のハードルが一番高いのではないかと思いますが、筆者もそんなGPUプログラミング初心者のひとりで、四苦八苦しながら最初の一歩目を乗り越えました

7 users
qiita.com/shu223
「その1」では、超解像とは、waifu2xとはなんぞや、という話から、そのMetal実装であるwaifu2x-metalでその威力について試してみました。 簡単におさらいすると、超解像とは、画像の解像度を高める技術のことで、100x100ピクセルの画像から200x200ピクセルの画像を生成する、というようなものです。 そしてwaifu2xは深層畳み込みニューラルネットワークを用いた超解像システムで、従来の補間処理によるリサイズとはまったく別次元の効果を発揮します。前回記事ではそのMetal実装であるwaifu2x-metalを手元の画像で試し、実際に効果があることを確認しました。 (左)従来法による拡大、(右)waifu2xによる拡大 (写真はitSnap様より特別に許可をいただき使用させていただきました1) waifu2x-metalはmacOSで動くように実装されていますが、Metal

4 users
qiita.com
WWDC17でARKitが発表されてすぐの頃から公開されていた「PlacingObjects」というサンプルがありました。 現実空間に仮想の家具を設置する、完成度の高いサンプルです。ビルドしてみた方や、これをベースにアプリを実装してみた方は多いのではないでしょうか。 私もARKitのとっかかりとしてこのサンプルのコードを読むところから始めたのですが、このサンプルはシンプルではなく(自分比)、ARKitを学ぶ最初の一歩目としては難しいと感じるポイントがいくつかありました。 しかし、最初の一歩目に読むには不向きかと個人的には思うものの1、ARKitの基本をある程度理解してから見ると、ARKitのAPIをただたたくだけではない、「その次」の実装方法を示してくれている好サンプルです。 本記事では、そのサンプル内の実装から、SceneKitやARKitにあらかじめ用意されているヒットテストのメソッド

27 users
qiita.com/shu223
「超解像」(Super-resolution)とは、画像の解像度を高める技術のことです。100x100ピクセルの画像から200x200ピクセルの画像を生成する、というような話。 従来のリサイズ処理とはどう違うのか、はあとで見ていただくとして、これがiOSアプリ内で、しかもオンデバイス1でリアルタイムに処理できるとなると、それによって享受できるメリットは計り知れません。なんといっても 通信量を削減できる! という点は多くのアプリにとって嬉しいのではないかと思います。幅・高さ半分でファイルサイズが約4分の1、品質(解像度)は同等だとすると、熱くないですか?2 ネイティブアプリにおいて、サクサク感はUXの肝。モバイルデバイスの性能が著しく向上した現在、ボトルネックは通信、というケースは多いかと思います。また通信インフラが十分に整っていない国にもサービス展開するにあたって、通信周りをカリカリに最適

3 users
qiita.com/shu223
iOS 11 / macOS 10.13から、Metalデバイスで利用中のメモリサイズを返すプロパティがMTLDeviceに追加されました。 単位はバイトです。 APIリファレンスの原文: The current size, in bytes, of all resources allocated by this device. 正しく表現するなら、「当該デバイスで確保されている全リソースのサイズ」となります。MetalデバイスはGPUをあらわすので、GPUで確保しているリソースの合計サイズ、という解釈でいいのかなと。 実装例: func draw(in view: MTKView) { print("allocated size0: \(device.currentAllocatedSize)") guard let drawable = view.currentDrawable els

8 users
qiita.com/shu223
ARKitのサンプル集「ARKit-Sampler」をオープンソースで公開しました。 ARKit Sampler ソースコードは GitHub に置いてあるので、ご自由にご活用ください。 使用言語はSwiftです。 ARKitのサンプルは公式のを含めいろいろ出てますが、ARKit-Samplerでは「余計な実装を混ぜずに、できるだけシンプルな実装で伝える」というところに気をつけています。もともとは書籍執筆のために用意したものなので、とくに序盤のサンプルはシンプルで意図が汲みやすいと思います。 ビルド方法 ここから Inceptionv3.mlmodel をダウンロードして mlmodels フォルダ配下に置く Xcode 9 でビルドしてiOS 11端末にインストール 基本的にビルドするだけですが、Core MLのモデルファイルをダウンロードしてくる必要があります。 サンプル一覧 今のとこ

4 users
qiita.com/shu223
やりたいこと: 各種モデリングソフトからエクスポートされた3Dモデルを、SceneKit (on iOS)で使いたい モデルに紐づくアニメーションとかボーン(Rigged Models)とかもそのまま使いたい ちなみになぜUnityじゃないかというと、非ゲームな、基本的には2Dのアプリで、一部で「3D的表現」を行いたい、という要件からです。 扱えるフォーマット 結論からいうと、.dae(Digital Asset Exchange / COLLADA)の一択。(※追記: プロジェクトにリソースとして追加してあるdaeファイルは実際に使えますし、以下のコードで動作するのですが、「SceneKitが扱えるフォーマット」という点ではこの記述は語弊があります。詳しくはコメント欄をご参照ください) こんな感じで使います。 let url = Bundle.main.url(forResource:

24 users
qiita.com/shu223
随時追加していきます。 MTLBufferの内容を更新する makeBufferでバッファを新規作成するのではなく、既にあるバッファの中身を変更したい場合、UnsafeMutableRawPointerのcopyMemoryメソッドを使用する buffer.contents().copyMemory(from: &value, byteCount: MemoryLayout.stride)

3 users
qiita.com/shu223
iOSの機械学習フレームワークの比較 - Core ML / Metal Performance Shaders (MPSCNN) / BNNSiOSMetal機械学習SwiftcoreML iOS 11 で追加された Core ML と、iOS 10 の頃からある Metal Performance Shaders の CNN、Accelerate の BNNS について、2017年7月に勉強会で話した際のスライドです。 Core ML vs MPSCNN vs BNNS #fincwwdc // Speaker Deck 発表の概要 iOS 11で追加されたCore MLが非常に注目を集めていますが、「既存の機械学習ツールを使って学習させたモデル(のパラメータ)をiOS側に持ってきて推論を実行する」ということ自体はiOS 10からありました。 そして、そこに不便さがあったので広まらず、

16 users
qiita.com/shu223
iOS 11 より追加される Core ML を使うと、Keras や Caffe や scikit-learn で学習させたモデルをコマンドラインツールで変換でき、それをXcodeにドラッグ&ドロップすれば必要なコードが自動生成される、とのこと。 開発者ドキュメントから見る iOS 11 の新機能 #WWDC17 - Qiita "Vision Framework: Building on Core ML" というWWDC17のセッションに付随する公式サンプルで、Core MLでつくったカスタムモデル+Visionフレームワークで画像の識別(MNISTの手書き数字認識)をやる実装があるのですが、その実装を参考にCore ML+Visionでリアルタイム物体認識を実装してみました。 このキャプチャはiOS 11のものではなく、iOS-10-Samplerのものです。NDAに配慮してこちらを

8 users
qiita.com/shu223
(WWDC17初日にブログに書いた記事を再編したものになります) ついにiOSも10年目。だいぶ成熟してきて、今年は特に何も期待しないまま参加したのですが、開発者的には非常にワクワクする発表がたくさんありました。 基調講演の内容からではなく、ベータ公開されたiOS Dev CenterのAPIリファレンスを見て、個人的に/開発者目線から気になった新APIを挙げていきます。 Core ML iOS 10からMetal Performance Shaders(以下MPS)に追加されたCNN関連機能、足りないものが色々とあり、ここらへんは拡充されたら嬉しいなとは思っていましたが、新フレームワークとして登場しました。 おいおい、さらに増えたら MPSCNN / BNNS / Core ML とどう使い分けるんだ、と思いましたが、ドキュメントの図で棲み分けがわかりました。 Keras や Caffe

109 users
qiita.com/shu223
Super Quest DCGAN Deep Convolutional Generative Adversarial Networks ディープラーニングで画像(等)を自動生成する技術 データセットを学習して、データセットにありそうな画像を生成する 例 アイドルの顔画像生成 TensorFlowによるDCGANでアイドルの顔画像生成 - すぎゃーんメモ アイドルの顔画像を大量に集めて学習 → アイドルっぽい顔を自動生成 顔イラストの生成 Chainerで顔イラストの自動生成 - Qiita 顔イラストを集めてきて学習 → 顔イラストを自動生成 DCGAN-tensorflow TensorFlowを用いた実装 READMEに書いてある通りに実行すれば簡単に試せる 試してみた DCGAN-tensorflowで自動画像生成をお手軽に試す - Qiita 付属のサンプルを実行 セレブ顔のデー

8 users
qiita.com/shu223
DCGAN は Deep Convolutional Generative Adversarial Networks の略で、超ざっくり言うと畳み込みニューラルネットワークを使って画像生成するアルゴリズムです。元論文以外に、日本語で噛み砕いて説明してくれている記事もたくさんあります。 はじめてのGAN できるだけ丁寧にGANとDCGANを理解する - 午睡二時四十分 これを使ってアイドルの顔画像を生成したり、イラストを生成したり、そういうことができるアレです。ググるとおもしろい事例がたくさん出てきます。 そんな「なんだかすごい」DCGAN、勝手に「使うのも難しそう」なイメージを持ってたのですが、TensorFlowを用いた実装が公開されてまして、 https://github.com/carpedm20/DCGAN-tensorflow 実はデモを試すだけであれば手順通りにコマンド実行する

次のページ