17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者でも1時間でできる!】撮った写真をAR化していつでもどこでもイッヌといっしょ🐶

Posted at

イッヌを会社に連れてって

私にはイッヌという友達がいます。
いぬいんざずぼん.jpg
イッヌと私は一心同体。一緒にお出かけしたり、チームを組んでハッカソンに出たりしています。

家でもいつも一緒:house:
在宅勤務の時は、いつもそばで励ましてくれます。
FxBmVXnakAchn01.jpg

そんな可愛いイッヌを会社にも連れていきたい

しかし、築き上げたデキる女のイメージ:lipstick:を守るためにも、イッヌを会社に連れていくわけにはいかない:scream:

そこで!

ARの技術を使い、どんなときでもイッヌといっしょにいられるWebアプリを作りました!

イッヌといっしょ!

つくりかた

この記事通りの手順で、あなたが撮った写真をARで表示することができるようになります!
所要時間:1時間
さあ、やってみましょう:information_desk_person_tone1:

◎つかうもの

まずは以下の3つのツールをアカウント登録orインストールしましょう!
すべて無料で使えます:ok_hand:

  • CodePen:HTMLの開発環境なので必須ではないが、開発中スマホでAR表示を確認するのに便利
  • ペイント 3D:写真を3Dモデルに変換できるアプリ

ペイント3DはWindows専用のアプリです。

  • Firebase:このサービスに3Dモデルをアップロードし、取得したURLをHTMLコードに埋め込んでAR表示する。無料版でOK。

◎手順

①写真を撮る

イッヌ赤椅子.jpg

背景を消して写っているものを切り出したい場合は、切り抜きACを使うと簡単にできます。1日当たりの使用回数に制限はありますが、登録なども特に必要なく利用できます。

②ペイント3Dで写真をglbファイルに変換する

ペイント3Dで、「メニュー」⇒「開く」から3Dモデル化したい写真を選択します。

こうして・・・
image.png
こうして・・・
image.png
こうじゃ!!!
image.png

画像は「名前を付けて保存」⇒「3Dモデル」から保存します。
ファイルの拡張子がglbになっていることを確認しましょう!
image.png
image.png

③Firebaseにglbファイルをアップロードする

  • 「プロジェクトを追加」からテキトーな名前のプロジェクトを作成する
  • 「構築」⇒「Storage」を選択する
image.png
  • 「ファイルをアップロード」で先ほど作成したglbファイルを選択し、アップロード
  • アップロードしたファイルを選択し、リンクになっている箇所の上で右クリック⇒「リンクのアドレスをコピー」:https[:]//firebasestorage.googleapis.com~といった長いURLがコピーされていればOK:ok_woman_tone1: URLは次の手順で使います:point_down:
image.png

④CodePenでコーディング!

といっても、私が既に作ったアプリをForkして、3Dモデルファイルへのリンクをあなたが作った3DモデルのURLに変えるだけです:ok_hand:

  • まずは以下のリンクを開いてください。
    イッヌといっしょ! -CodePen

  • 右下のForkを押すと、あなたのワークとしてコピーされます。Saveすることをお忘れなく~
    image.png

CodePenを使わない方はこのHTMLコードをコピーして使ってください
HTML
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>イッヌといっしょ!</title>
</head>
<body style="margin : 0px; overflow: hidden;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/aframe/1.2.0/aframe.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ar.js/2.2.2/aframe-ar.min.js"></script>
  <a-scene embedded arjs>
    <a-marker preset="hiro">
       <a-entity
          position="0 -2 -2"
          scale="10.5 10.5 10.5"
          rotation="0 0 180"
          height="-1"
          gltf-model="https://cors-anywhere.herokuapp.com/https://firebasestorage.googleapis.com/v0/b/[あなたの3DモデルのURL]">
      </a-entity>
    </a-marker>
      <a-entity camera></a-entity>
  </a-scene>
</body>
</html>
  • a-entityタグ内のgltf-modelのURLを先ほどコピーした3DモデルのURLに書き換えます。ちょっと変なURLに感じますが、「https[:]//cors-anywhere.herokuapp.com/」以降をまるっと書き換えてください。
HTML
<a-entity
          position="0 -2 -2"
          scale="10.5 10.5 10.5"
          rotation="0 0 180"
          height="-1"
          gltf-model="https://cors-anywhere.herokuapp.com/https://firebasestorage.googleapis.com/v0/b/[あなたの3DモデルのURL]">
</a-entity>

以上で手順は終了です!お疲れさまでした:beers:

つかってみよう!

CodePenのURLをLINEで送るなどして、スマホで開いてください:iphone:
私はiPhoneを使用し、Chromeで開いています。

今回は時間の都合上オリジナルのARマーカーではなく、ARの手始めに非常によく利用されるhiroマーカーを使います。スマホで開いたCodePen上のカメラで、以下のhiroマーカーを映してみてください!
image.png

以下のようにあなたが撮った写真が表示できたら成功です:clap:
S__38723588.jpg

(おまけ1)Netlifyにデプロイ

今回作成したWebアプリはNetlifyという静的サイトを無料でホスティングできるサービスにデプロイしています。
イッヌといっしょ! -Netlify

Netlifyにデプロイするときは、CodePen上のコードを少し改変する必要があります。
まずはCodePen右下の「Export」⇒「Export .zip」でコードをエクスポートしてください。
image.png

ダウンロードしたzipファイルを展開すると、distフォルダの中にindex.htmlがあります。同じ階層に、glbファイルを配置してください。
image.png

コードは、a-markerタグ内のgltf-modelのURLを以下のように書き換えます。

HTML
<a-marker preset="hiro">
       <a-entity
          position="0 -2 -2"
          scale="10.5 10.5 10.5"
          rotation="0 0 180"
          height="-1"
          gltf-model="./innu.glb">
      </a-entity>
</a-marker>

Netlifyの詳しい使い方は割愛しますが、上記の状態でdistフォルダを丸ごとアップロードするとうまくいきます:ok_woman_tone1:

(おまけ2)トラブルシューティング

◎画像が表示されない!

HTML上で、gltf-modelのURLが間違っていないか確認しましょう!
httpsが2回繰り返されるので違和感がありますが、問題ありません。
Firebaseからのコピーミスなどもないか確認しましょう:point_up:

gltf-model="https://cors-anywhere.herokuapp.com/https://firebasestorage.googleapis.com/v0/b/[あなたの3DモデルのURL]"

◎画像が反転している!

a-markerタグ内のrotationの値をいじってみてください!
3つの数字はx軸・y軸・z軸を表し、各軸をもとに何度回転させるかを指定します。

◎画像のサイズがおかしい!

a-markerタグ内のscaleの値をいじってみてください!

◎画像の位置がおかしい!

a-markerタグ内のpositionの値をいじってみてください!

その他うまくいかないことがあれば、コメント欄で教えてください:pray:
可能な限りいっしょに考えます!

あとがき

今回イッヌの2D画像をARで表示しよう!と決意してから参考情報をいろいろ探したのですが、なかなか見つかりませんでした:sweat:

Qiita質問を含めた各所で質問した結果、参考記事や代替案を提案してくださったり、コードが動かない原因を丁寧に教えてくださった方がたくさんいらっしゃいました。

また以下記事は、記事を書いたご本人から直接ご連絡をいただき、大変参考になりました。当記事は、以下記事の情報を2023年5月現在の最新版にアップデートした内容になっております。

助けてくださった皆様に、この場を借りて御礼申し上げます:pray:

17
15
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
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?