0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QRコードの点の数を数える

Last updated at Posted at 2025-09-15

キンドリルジャパンのエンジニア(アーキテクト)の南波です。ギネス世界記録に挑戦したときのちょっとしたITネタを紹介します。

Kyndryl Japanでギネス世界記録に挑戦しました。

みんなで1,235個もの折り紙のキューブ(立方体)を作成して、下のディスプレイを作成しギネス認定を頂きました。
IMG_0455.jpeg

南波は、このディスプレイやギネス世界記録チャレンジの全体のアイディアを出し設計を担当しまして、それが故にこの記事を書いてます。
(ちなみに、このディスプレイのアイコンの意匠は、元々、キンドリルのカルチャーページに有るので、私の作品ではありません。)

ユニット折り紙解説

1,235個はあまり数が多くないように思いますが、このキューブはユニット折り紙というもので作っております。

6枚のユニットで1個のキューブになるので、記録の数字とは別の話で7,410枚も使ってます。

image.png

動画:ユニットの折り方 立方体の作成

QRコードの点の数が知りたい

「QRコードを付けたら技術ある会社っぽいじゃん!」ってことで、QRコードをつけることにしたんです。ちなみに、QRコードはキチンと動作します。飾り物ですが機能しますよ!

さて、このチャレンジをするにあたり困ったのが、デザインを勝手に決めるのは良いものの何枚の紙がいるのか分からないといけません。信頼度をレベルQ(25%復元能力)にして、33x33ピクセルなので全部埋めるには、1,089個になりますが半分くらいは不要なはずです。

他のアイコン部分も大雑把でも個数が必要です…見積もりできないデザインなど、ビジネスとして不適切です。数える必要があります。

数え方

この画像の黒ドットを数えます。

qr20250915092046301.png

まぁ、画像の専門ツールなどがあれば、それでよろしいのですがITシステムのエンジニアです。手持ちの道具はありません。 Linuxしかない縛りで得意の領域に持ち込み術式を発動するしかありません。

先ずは、以下のフォーマットにコンバートです。

Portable Bitmap Format (PBM 形式)

ありがたいことに、このフォーマットに変換すればテキストの世界に持ってこれます。

変換は、ImageMagickに入ってるconvert コマンドを使います。 apt-getでさっくり導入です。

変換コマンドは以下の要領です。元のフォーマットは自動認識、行き先のフォーマットは拡張子で勝手に判断してくれます。

$ convert -compress none qr20250915092046301.png qr_sample.pbm

出来上がりを見てみましょう。

$ cat qr_sample.pbm
P1
41 41
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0
0 0 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 0 0 0
0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0
0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0
0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0
0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0
0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 0 1 1 0 0 0 0
0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0
0 0 0 0 0 1 1 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0
0 0 0 0 1 0 0 1 1 1 0 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

うーん、わかり易くないので、ちゃんと出来ているのかわかりません。
雑ですが、trで変換しましょうか。

$ cat qr_sample.pbm  | tr "01" " X"
PX
4X 4X




        X X X X X X X         X X X     X   X X X X X X     X X X X X X X
        X           X   X X X   X                   X X X   X           X
        X   X X X   X   X X X       X X     X         X     X   X X X   X
        X   X X X   X     X     X X X       X   X   X X     X   X X X   X
        X   X X X   X         X   X     X     X   X X   X   X   X X X   X
        X           X       X X X X   X   X X X X   X   X   X           X
        X X X X X X X   X   X   X   X   X   X   X   X   X   X X X X X X X
                          X X X X   X   X X X       X X X
          X X X   X X     X   X X   X X X X X X   X   X             X X
              X X X   X X X X X         X X X X X X   X     X X   X X X X
        X X X X X   X X     X X X   X X     X   X X   X     X X X X   X X
            X   X         X   X   X X     X     X     X X     X   X   X X
        X X X     X X X X   X   X X   X       X       X X X   X X X     X
        X X   X X X   X X X     X         X   X   X           X   X   X
        X X       X X     X         X X       X X X         X X
        X   X X           X   X     X X X X X   X X       X X   X   X
        X X   X   X X X X X X X   X       X X   X X X X   X X   X X X
          X   X                   X X       X     X X X     X   X X   X X
          X   X   X X X     X     X     X   X       X         X X   X X
                X         X X     X     X   X       X   X       X     X
          X X     X X X   X X X   X     X X     X X     X         X X   X
            X     X   X     X X     X   X     X X X X X     X X   X     X
        X X       X X   X   X X   X   X         X   X X X X X X     X X X
        X     X X X   X   X X     X X X X X   X X   X   X   X   X X
          X X X X   X X X X X X X     X X X X X     X   X X X X X     X X
                        X X X X     X   X   X X     X   X       X X
        X X X X X X X     X   X X       X   X X X X   X X   X   X     X
        X           X   X X X   X X X X X X       X   X X       X X X X
        X   X X X   X       X X   X   X     X X X X X X X X X X X   X X
        X   X X X   X   X   X     X X X X       X   X X X     X     X X X
        X   X X X   X   X           X X X X X   X     X X X X X
        X           X   X     X       X   X     X       X X   X X       X
        X X X X X X X       X     X X X X X X X X X   X     X   X   X



それっぽい。数を数えましょう。スペースを全て改行に変えて、1で始まる行の数を数えればOKですね。
つまり、こういうこと。

$ cat qr_sample.pbm  | tr " " "\n"  | grep ^1 | wc -l
568

568個ということがわかりました。3,408枚のモジュールを作る必要があるとわかります。

別の方法

こういう事ができちゃうのですよね。でも、Copilotを信じて良いのか不安になります。
QR数byCopilot 2025-09-15 092948.png

今回は正解です。検算が出来ました。

まとめ

  • Copilotや画像専用の難しいツールなどが無くても、Linux上のOSSだけで数を数えることが出来ました
  • 古い時代のフォーマットのPortable Bitmap Formatは、画像をテキストで扱うことができるので、テキスト処理の世界に持ってこれます
  • とはいえ、Copilotなどの生成AIは即答してくれます。信憑性に乏しいですから確認は必要でしょう

おまけ

QRコード部分のアップですが、リード・ソロモン符号の力で、ちょっとくらいズレても補正が効くデンソー様の最強のありがたい特許QRコードですが、今回のディスプレイでは私の設計ミスがありました。

画像比較

立体で作ったんで影ができちゃって読み込めない事件が発生しました。冒頭の画像の方では影がわかりやすいかもしれません。対策のため正面に照明を追加して影を飛ばしてなんとか認識できる状態でした。類似チャレンジする方はお気をつけ下さい。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?