QRコードの読み取り距離を延ばすにはどうしたらいいのか

こんにちは、設備管理クラウドサービスMENTENA[^header_1]プロダクトマネージャーの岩片です。

[^header_1]: https://mentena.biz/

MENTENAは昨日（2025/4/7）アップデートを行い、iOSアプリ[^appstore]でのQRコード[^denso]の読み取り改善を行いました。この記事では関連して調べたあれこれとともにQRコードの読み取り距離に何が効いたかまとめます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035924/3c365283-cc87-48c2-a2e3-d952fbceefa9.png)

[^denso]: 「QRコード」はデンソーウェーブ社の登録商標です。
[^appstore]: https://apps.apple.com/jp/app/id1490994411

## そもそもQRコードを何に使っている？
MENTENAは工場などの現場向けサービスで、設備（工作機械や配電盤など）の識別用途などでQRコードを出力できます。
たとえば以下のような流れで使われます[^qr_scene]。

```mermaid
graph TD;
    印刷したQRを設備に貼り付けておく-->設備が故障;
    設備が故障-->スマホでQRを読み取り;
    スマホでQRを読み取り-->特定した対象設備に対しての修理依頼などを作成;
```

ポイントは**設備に貼り付ける**というところです。安全柵があったり貼れる場所が限定されていたりすると、スマホを近づけるのが難しい場合があり、読み取り距離が短すぎると不便になってしまいます。
当社も顧客から「もっと読み取り距離を伸ばしてほしい」とご要望を受けて本件対応を行いました。

[^qr_scene]: 他にもネジなどの部品の残数の棚卸や、日々の点検で使うチェックシートの読み出しなども行えます

## 読み取り距離を引き上げる3つの方法
大まかに以下3つの方法があります。
1. ソフト側処理による改善
1. ハード側（カメラ・スキャナ）の変更
1. そもそもQRコード自体を大きく印刷する

開発側として貢献できるのは主に(1)ですが、今回は他の観点も軽く試してみています。

### ソフト側はライブラリの乗り換えが効いた
ざっくりいうと5年ほど前から使い続けていたライブラリを別のものに乗り換えました。
旧：https://github.com/Redth/ZXing.Net.Maui
新：https://github.com/afriscic/BarcodeScanning.Native.Maui

また乗り換えたうえで、認識精度プロパティ（`CaptureQuality`）を最高（`Highest`）に設定しています。

2cm角のQRコードの認識距離を測ると以下のような感じになりました。
なお端末はいずれもiPhone SE（第3世代）です。
| 環境 | 計測距離（2cm角） |
|:-:|:-:|
| iOSアプリ（旧） | 約20cm |
| iOSアプリ（新） | 約60cm |
| （参考）iOSデフォルト<br>カメラアプリ | 約40cm |

<details><summary>補足</summary>
このアップデートでは、認識距離の件以外にQRコードの内部的な仕様変更を行っています。
内部的な文字数が増えたことでQRコードがちょっと細かくなりました。この点は多少マイナスになっているはずなので、単にライブラリ切り替えだけを行ったらもっと読み取り性能が良かったかもしれません。
</details>


### ハードウェアの違いは精度に効くのか？ → めっちゃ効く
ちょうど動作検証用にキーエンスさんのハンディターミナル（工場や倉庫で点検入力などを行うのに使うPDA端末）をお借りしていたので評価してみました[^keyence]。
こちらはAndroid内蔵なので、比較対象として家に余らせていたエントリーモデル（AQUOS Sence4 Basic[^aquos]）を使います。
[^aquos]: https://jp.sharp/products/aquos-sense4-basic-y/spec.html

【お借りしていた各種端末】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035924/43e8e5e0-755e-4009-9c6e-0fe09e111c02.png)

評価に使ったのはBT-A2000という端末（画像の一番左）です。

https://www.keyence.co.jp/products/mobile-computers/handheld-computers/bt-a2000_a1000/models/bt-a2000/

ボタン付きの持ち手がある以外は普通のAndroid端末という感じです。
（確かAndroid14が入っていました）

背面からスキャン用のレーザーが出て楽しい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035924/552446a0-a408-48b5-909b-11b40a59cd06.png)

[^keyence]: キーエンスの担当営業の方からブログ記載について快諾をいただいています

計測結果は以下の通りです。特化ツールだけあって圧倒的な差が出ました。
| 環境 | 計測距離（2cm角） |
|:-:|:-:|
| キーエンス BT-A2000 | 約160cm |
| AQUOS Sence4 Basic | 約20cm |

### 大きく印刷することも非常に有効
最後に拡大印刷の場合です。
15cm角にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035924/917ebe9f-48b9-48cf-ae84-df019adb44a3.png)

ハード・ソフトが混在しちゃっていますが、計測結果はこんな感じになりました。
意外とiOSアプリがハンディターミナルに食い下がっていますね。
（照度などの環境要因も関わるのであくまで参考程度ですが）
| 環境 | 計測距離（2cm角） | 計測距離（15cm角） |
|:-:|:-:|:-:|
| キーエンス BT-A2000 | 約160cm | 約750cm |
| AQUOS Sence4 Basic | 約20cm | 約350cm |
| iOSアプリ（旧） | 約20cm | 約200cm |
| iOSアプリ（新） | 約60cm | 約600cm |
| iOSデフォルト<br>カメラアプリ | 約40cm | 約300cm |

## まとめ
QRコードの認識精度はソフトウェアの見直しで改善が期待できます。長期間ライブラリを見直していない場合は試してみる価値がありそうです。
また、ハードウェアによっても大幅に認識距離が変わるようなので、そもそもサポート環境の設定から考慮の余地があるかもしれません。今回は試せませんでしたが、カメラ性能が高いiPhoneの上位モデルでどうなるかも興味がわきますね。。

## おまけ
MENTENAは明日から名古屋で開催される”ものづくりワールド[^nagoya_1]に出展します。
この記事の最終確認は名古屋へ向かう新幹線で行っています[^nagoya_2]。ご都合の合う方はぜひ遊びに来てください。
第1展示館 12-38で僕と握手！！

[^nagoya_1]: https://www.manufacturing-world.jp/nagoya/ja-jp/lp/rai/world.html
[^nagoya_2]: 大きいQRコードの画像を取り忘れていたので新幹線内で撮りました