この記事は、ひとつの「依頼」から始まりました。辺境部の連載「砂嵐に浮かぶもの」の第4回で、テレビの砂嵐——つまりランダムなノイズ——に顔検出器をかけて、そこに顔が現れるかを試した回があります。その出発点になったのが、火星の「人面石」でした。1976年、NASAのバイキング1号が火星のシドニア地域を撮影したとき、低い太陽角度がつくる影と低解像度が組み合わさって、岩肌がまるで人間の顔のように見えた、という有名な写真です。
その辺境部から、技術部にこんな相談が来ました。「砂嵐のようなでたらめなノイズではなく、実在する地球の地形で同じことをやりたい。火星の人面石を地球で探す装置を作れないか」。わたしはこの依頼を受けて、vdrone(地形に人面を探すドローン) という小さな仮想ドローンを実装しました。本記事は、その開発と検証の記録です。
本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。
地形を「顔が出やすい画像」に変換する
最初の問いは、「そもそも顔検出器に何を見せるか」でした。顔検出器は写真のような明暗のある画像を前提にしています。標高の数値をそのまま渡しても、顔は出てきません。火星の人面石が顔に見えたのは、あくまで影の角度がつくった陰影のおかげでした。だから vdrone でも、まず地形に影を付けるところが核になります。
パイプラインはこういう流れです。
- 標高タイルの取得 — 国土地理院(GSI)が公開している DEM(Digital Elevation Model=標高の数値データ)のタイルを、緯度経度の範囲(bbox)を指定して取得し、手元にキャッシュします。
- 陰影画像へのレンダリング — 標高から、複数方向の光源で計算した陰影起伏図(マルチ陰影 hillshade)に、傾斜(slope)と曲率(curvature)を合成します。これで「影のついた地形のグレースケール画像」ができます。これが顔検出器への入力です。
- 顔検出器で走査 — 3つの顔検出器(Haar / YuNet / MediaPipe)を同じインターフェースで動かし、各タイルを走査します。
地形には写真のような「上下」がありません。そこで各タイルを 0 / 90 / 180 / 270 度の4方向に回して走査し、向きによる取りこぼしを減らしています。前処理の組み立て——DEM から陰影・傾斜・曲率を作る部分——は、Zenn で公開されている tasuku 氏の「前方後円墳検出」の手法を踏襲しました。地形から古墳を探すその発想を、こちらは「顔」を探す方向へ向け直しています。

なお vdrone は すべて Mac 上で完結し、無料で、GPU も要りません。標高データは公的に公開されたタイル、検出器はいずれもオープンソースです。エッジコンピューティングを根底に置く技術部としては、手元の市販機だけで再現できることを最初の条件にしています。
3つの火山を飛ばす
検証に選んだのは、地形の性格がはっきり違う3つの火山です。桜島(起伏が激しい活火山)、阿蘇(広いカルデラ)、富士(なだらかな成層火山)。それぞれを飛ばした結果が次の表です。
| 地形 | 走査タイル | 総ヒット | MediaPipe | Haar | YuNet |
|---|---|---|---|---|---|
| 桜島(活火山・起伏が激しい) | 12 | 28 | 26 | 2 | 0 |
| 阿蘇(カルデラ) | 12 | 7 | 5 | 2 | 0 |
| 富士(なだらかな成層火山) | 9 | 5 | 4 | 1 | 0 |
各地形の発見マップ(飛行範囲の俯瞰に、検出地点を検出器別の色で重ねたもの)はこちらです。



表を眺めて、まず目につくのは 検出器の三者三様 です。YuNet はどの地形でも一貫して 0件。Haar は1〜2件と極端に少ない。そして MediaPipe が圧倒的多数を拾っています。同じ「顔検出器」というラベルなのに、振る舞いがまったく違うわけです。
ここで注意したいのは、Haar の「2」と MediaPipe の「26」を直接比べてはいけない、という点です。Haar のスコアは確率ではなく、近傍で重なった矩形の数を表していて、MediaPipe が返す 0〜1 の信頼度スコアとは別物差しです。数の大小ではなく、「何を顔とみなすか」の基準そのものが違うと考えるべきでしょう。
理由を実装者の視点で推測すると、こうなります。YuNet は実写の顔の分布で厳しく学習されたモデルで、「顔らしさ」の閾値が高い。だから地形がつくる擬似的な顔を、ほとんど通しません。逆に MediaPipe はランドマーク(顔の特徴点)を当てにいく緩い検出で、起伏の陰影をとりあえず顔として拾いやすい。「地形に顔は無い」と言い切る懐疑派(YuNet)と、「ここにもある」と言い続ける楽観派(MediaPipe)が、同じ画像を見ているわけです。
地形が荒いほど顔が湧く
もうひとつの発見は、地形の荒さとヒット密度がきれいに相関することでした。桜島は同じ12タイルで28件、1タイルあたり約 2.3件。これは突出した密度です。一方、のっぺりした成層火山である富士は、9タイルで5件と最少でした。起伏が激しく陰影が複雑な地形ほど、偽の顔が湧く——表はそう語っています。
実際に検出された「顔」のクロップを並べると、その差が見えます。桜島は陰影の入り組んだ部分にメッシュが張り付き、富士はそもそも引っかかりが少ない。


見えてくる顔の数は、入力の複雑さに比例するようです。砂嵐ではノイズの密度がヒット数を決めましたが、地形では起伏の複雑さが同じ役割を果たしている。辺境部が砂嵐シリーズで扱ってきた『偶然の一致』が、ランダムノイズから実在の地球の表面へ、そのまま地続きになった瞬間でした。
出力物としては、上位ヒットのクロップ画像、検出地点を重ねた発見マップ、緯度経度つきの CSV、そして ドローン視点のフライスルー動画を書き出します。動画では、顔クラスタを最近傍順に巡回し、各地点で bbox がフレームいっぱいになるまでズームインして覗き込みます。覗き込みのあいだは、顔の上に張りついた検出点を一度すっと透明にして、裏の地形そのものを見せ、また点を戻します——「何を顔と見たのか」を、その下の起伏で確かめてもらうためです。HUD にはリアルタイムの緯度経度、ズーム倍率、通過済みの FACES カウンタが表示されます。装置として「探して、寄って、覗き込む」までが一通り動く状態になりました。
まとめ — 次は東北の山へ
依頼された装置はできました。火星の人面石を探す目を、地球の火山に向けることができた。次に考えているのは、日本を地方単位で網羅的に走査していく企画です。GSI の標高タイルが使える範囲を、地方ごとに順番に潰していく。一度に全国を飛ぶのではなく、土地の性格ごとに「どこに顔が湧くか」を地図に落としていくイメージです。
その最初の一手は 東北地方にしたいと考えています。理由は、辺境部がいままさに連載している『遠野物語』——AI が古典を読む試み——に引っかけたいからです。山男や山の神が棲むとされた東北の山地に、わたしたちの検出器は顔を見るのでしょうか。技術部の装置(vdrone)と、辺境部の主題(遠野物語)が次に交差する地点として、東北の山並みを飛ばしてみます。次回は、その走査結果を持ち寄る予定です。