成果物: sters/go-qr-detector
ZXingというバーコード検出したり読み取りしたり書き出したりのライブラリがあって、それのGoに移植されたものがある。これを使うとGo上でQRコードを扱うことができる。OpenCV不要なので気軽に使える。
makiuchi-d/gozxing: Port of ZXing core to pure Go.
「サンプルには読み取りのことしか書いてないが、読み取りできるということは検出しているはずなので、何かしらあるでしょう」とコードを眺めていたら、detectorというのがあった。複数認識することもできるっぽい。すごい。
import (
"github.com/makiuchi-d/gozxing/multi/qrcode/detector"
)
...
d := detector.NewMultiDetector(matrix)
results, err := d.DetectMulti(map[gozxing.DecodeHintType]any{
gozxing.DecodeHintType_TRY_HARDER: true,
})
...
最初はDecodeHintTypeを指定していなかったのだけど、回転したりちょっと傾けると検出しなくなってしまった。多分 DecodeHintType_TRY_HARDER
を設定するのがキモかもしれない。コード的にはQRコードのバージョンに言及しているのであんまり関係ないような気もするが、これを設定したら明らかに検出できる割合があがったように思う。